Name: series-workflowwbgd5 Phase: Succeeded StartedAt: 2026-07-25 13:39:10 +0000 UTC FinishedAt: 2026-07-25 16:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[0] Phase: Succeeded StartedAt: 2026-07-25 13:39:10 +0000 UTC FinishedAt: 2026-07-25 14:17:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 13:39:10 +0000 UTC FinishedAt: 2026-07-25 14:17:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "90883c513ca01e77c56b8d94be7de11420c1dacf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN", "WLAN_VENDOR_BROADCOM", "CFG80211", "BRCMFMAC", "BRCMFMAC_PCIE", "PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "90883c513ca01e77c56b8d94be7de11420c1dacf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN", "WLAN_VENDOR_BROADCOM", "CFG80211", "BRCMFMAC", "BRCMFMAC_PCIE", "PCI" ], "series_id": "5390a184-9eb6-48b9-a7bf-be75f9cd47f5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "brcmf_proto_msgbuf_attach" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU4mIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfQlJPQURDT00mIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7QlJDTUZNQUMmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfUENJRSYjMzQ7LAogICAgJiMzNDtQQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticmNtZl9wcm90b19tc2didWZfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYnkgc2V0dGluZyB0aGUgJiMzOTtkaXJlY3Rpb24mIzM5OyBmaWVsZCBpbiB0aGUgJiMzOTticmNtZl9tc2didWZfcGt0aWRzJiMzOTsgc3RydWN0IGR1cmluZyBpbml0aWFsaXphdGlvbi4gVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKSBhbmQgaXMgc3BlY2lmaWNhbGx5IHJlYWNoYWJsZSB2aWEgdGhlIFBDSWUgYnVzIGludGVyZmFjZSAoQlJDTUZfUFJPVE9fTVNHQlVGKS4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgdmlhIGl0cyBQQ0kgZGV2aWNlIGluamVjdGlvbi9tb2NraW5nIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUxNmMzMjA0OTIxZWEyMzY1YTg1NDdiZGJlZDQ2Zjk0YWExMDIyYzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNDoxNTozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcbmluZGV4IGJhMWNlMTU1MmUwZjQzLi5jMWZlYjE2NGQ4NDVhNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXG5AQCAtMzEwLDYgJiM0MzszMTAsNyBAQCBicmNtZl9tc2didWZfaW5pdF9wa3RpZHModTMyIG5yX2FycmF5X2VudHJpZXMsXG4gXHR9XG4gXHRwa3RpZHMtXHUwMDNlYXJyYXkgPSBhcnJheTtcbiBcdHBrdGlkcy1cdTAwM2VhcnJheV9zaXplID0gbnJfYXJyYXlfZW50cmllcztcbiYjNDM7XHRwa3RpZHMtXHUwMDNlZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuIFxuIFx0cmV0dXJuIHBrdGlkcztcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU4mIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfQlJPQURDT00mIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7QlJDTUZNQUMmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfUENJRSYjMzQ7LAogICAgJiMzNDtQQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticmNtZl9wcm90b19tc2didWZfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYnkgc2V0dGluZyB0aGUgJiMzOTtkaXJlY3Rpb24mIzM5OyBmaWVsZCBpbiB0aGUgJiMzOTticmNtZl9tc2didWZfcGt0aWRzJiMzOTsgc3RydWN0IGR1cmluZyBpbml0aWFsaXphdGlvbi4gVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKSBhbmQgaXMgc3BlY2lmaWNhbGx5IHJlYWNoYWJsZSB2aWEgdGhlIFBDSWUgYnVzIGludGVyZmFjZSAoQlJDTUZfUFJPVE9fTVNHQlVGKS4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgdmlhIGl0cyBQQ0kgZGV2aWNlIGluamVjdGlvbi9tb2NraW5nIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUxNmMzMjA0OTIxZWEyMzY1YTg1NDdiZGJlZDQ2Zjk0YWExMDIyYzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAxNDoxNTozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYwppbmRleCBiYTFjZTE1NTJlMGY0My4uYzFmZWIxNjRkODQ1YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMKQEAgLTMxMCw2ICYjNDM7MzEwLDcgQEAgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKHUzMiBucl9hcnJheV9lbnRyaWVzLAogCX0KIAlwa3RpZHMtJmd0O2FycmF5ID0gYXJyYXk7CiAJcGt0aWRzLSZndDthcnJheV9zaXplID0gbnJfYXJyYXlfZW50cmllczsKJiM0MzsJcGt0aWRzLSZndDtkaXJlY3Rpb24gPSBkaXJlY3Rpb247CiAKIAlyZXR1cm4gcGt0aWRzOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgwCgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIGBicmNtZm1hYy9tc2didWYuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNgLiBJdCYjMzk7cyBhIHNpbXBsZSBvbmUsIHJlYWxseTsgaXQganVzdCBhZGRzIGBwa3RpZHMtJmd0O2RpcmVjdGlvbiA9IGRpcmVjdGlvbjtgIHRvIHRoZSBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYCBmdW5jdGlvbi4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVmb3JlIGFwcHJvdmluZyBzb21ldGhpbmcuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgIGZ1bmN0aW9uIHdpdGhpbiBgbXNnYnVmLmNgIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBtZXNzYWdlIGJ1ZmZlciBhcmNoaXRlY3R1cmUgb2YgdGhlIGJyY21mbWFjIGRyaXZlci4gV2hhdCBkb2VzIGBwa3RpZHNgIGFjdHVhbGx5IHJlcHJlc2VudD8gV2hhdCBpcyB0aGUgYGRpcmVjdGlvbmAgcGFyYW1ldGVyLCBhbmQgd2h5IGlzIHRoaXMgYXNzaWdubWVudCBiZWluZyBhZGRlZCBub3c/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgd2lsbCBiZSBrZXkgaGVyZS4gSXMgdGhpcyBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24sIGFkZGluZyBhIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24sIG9yIGVuYWJsaW5nIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHk/IFRpbWUgdG8gZ28gbGluZS1ieS1saW5lIGFuZCBmaWd1cmUgdGhpcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0yOTU9c3RhdGljIHN0cnVjdCBicmNtZl9tc2didWZfcGt0aWRzICpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoyOTY6YnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKHUzMiBucl9hcnJheV9lbnRyaWVzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTI5Ny1cdFx0XHQgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xNTI4PWludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2MDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTYwMzpcdG1zZ2J1Zi1cdTAwM2V0eF9wa3RpZHMgPSBicmNtZl9tc2didWZfaW5pdF9wa3RpZHMoTlJfVFhfUEtUSURTLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2MDQtXHRcdFx0XHRcdFx0ICAgICBETUFfVE9fREVWSUNFKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTYwNi1cdFx0Z290byBmYWlsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE2MDc6XHRtc2didWYtXHUwMDNlcnhfcGt0aWRzID0gYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKE5SX1JYX1BLVElEUyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNjA4LVx0XHRcdFx0XHRcdCAgICAgRE1BX0ZST01fREVWSUNFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcxCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGJyY21mbWFjIERyaXZlciB2aWEgVVNCKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBicmNtZm1hY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhhdCBsaW5lLCBgcGt0aWRzLSZndDtkaXJlY3Rpb24gPSBkaXJlY3Rpb247YCB3aXRoaW4gYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AuIFRoaXMgaXMgaW4gdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlIOKAkyBhbHdheXMgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXRpZXMgdGhlcmUuIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgZnV6eiB0aGlzPyBUaGlzIGRyaXZlciBoYW5kbGVzIFNESU8sIFVTQiwgYW5kIFBDSWUgaW50ZXJmYWNlcywgYW5kIHRoYXTigJlzIHdoZXJlIHRoaW5ncyBnZXQgaW50cmlndWluZy4KClVTQiBsb29rcyBsaWtlIHRoZSBtb3N0IHByb21pc2luZyByb3V0ZSBmb3IgZnV6emluZy4gSSBjYW4gZW11bGF0ZSBhIFVTQiBIb3N0IENvbnRyb2xsZXIgd2l0aCBzb21ldGhpbmcgbGlrZSBkdW1teS1oY2QsIHdoaWNoIGdpdmVzIG1lIGEgcmVsYXRpdmVseSBzaW1wbGUgdGFyZ2V0LiBUaGUga2V5IGlzIGdvaW5nIHRvIGJlIGZpZ3VyaW5nIG91dCBpZiBgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaGAgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFVTQiBwYXRoLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgYW5kIHNlZSBpZiBJIGNhbiB0cmlnZ2VyIHRoaXMgaW5pdGlhbGl6YXRpb24gZnJvbSBhIFVTQiBjb25uZWN0aW9uLiBJZiBJIGNhbiwgdGhlbiBJ4oCZdmUgZ290IGEgZ29vZCBwb3RlbnRpYWwgZnV6eiB0YXJnZXQgdG8gc3RhcnQgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9wcm90b19tc2didWZfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTUyMz1zdGF0aWMgdm9pZCBicmNtZl9tc2didWZfZGVidWdmc19jcmVhdGUoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTUyNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxNTI4OmludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTUyOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5oPTMyPXZvaWQgYnJjbWZfbXNnYnVmX2RlbGV0ZV9mbG93cmluZyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCB1MTYgZmxvd2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuaDozMzppbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuaC0zNC12b2lkIGJyY21mX3Byb3RvX21zZ2J1Zl9kZXRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmgtMzUtI2Vsc2VcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuaDozNjpzdGF0aWMgaW5saW5lIGludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmgtMzcte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jPTIwPWludCBicmNtZl9wcm90b19hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zNS1cdH0gZWxzZSBpZiAoZHJ2ci1cdTAwM2VidXNfaWYtXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19NU0dCVUYpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jOjM2Olx0XHRpZiAoYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChkcnZyKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTM3LVx0XHRcdGdvdG8gZmFpbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDIwCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQW5hbHl6aW5nIGBicmNtZl9wcm90b19hdHRhY2hgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGJyY21mX3Byb3RvX2F0dGFjaGAuIEkmIzM5O3ZlIHNlZW4gdGhpcyBmdW5jdGlvbiBiZWZvcmU7IGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlciwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkgcmVtZW1iZXIgdGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSBpbnZvbHZlZCBpbiBhdHRhY2hpbmcgYSBzcGVjaWZpYyBwcm90b2NvbCBpbnN0YW5jZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGVudGFpbHMgaW4gdGhlIGJyb2FkZXIgZHJpdmVyIGNvbnRleHQuIElzIHRoaXMgY2FsbCBzaXRlIGZyb20gdGhlIGhvc3Qgc2lkZSwgdGhlIGZpcm13YXJlIHNpZGUsIG9yIGJvdGg/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBJIHNob3VsZCBpbW1lZGlhdGVseSBiZSBsb29raW5nIGZvciwgbGlrZSB1bmNoZWNrZWQgYnVmZmVyIHNpemVzIG9yIGltcHJvcGVyIGhhbmRsaW5nIG9mIHVzZXItc3VwcGxpZWQgZGF0YT8gVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV2ZWFsIG11Y2ggYWJvdXQgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBhbmQgdGhlbiB6b29tIGluIHRvIGFuYWx5emUgZWFjaCBkZXRhaWwuIEkmIzM5O20gbG9va2luZyBmb3IgYSBzb2xpZCB1bmRlcnN0YW5kaW5nLCBhbmQgYW55IGltbWVkaWF0ZWx5IGdsYXJpbmcgaXNzdWVzIG9yIGluZWZmaWNpZW5jaWVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgd2Fsa2luZyB0aHJvdWdoIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX3Byb3RvX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMzMwPWludCBicmNtZl9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTM1My1cdC8qIEF0dGFjaCBhbmQgbGluayBpbiB0aGUgcHJvdG9jb2wgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTM1NDpcdHJldCA9IGJyY21mX3Byb3RvX2F0dGFjaChkcnZyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTM1NS1cdGlmIChyZXQgIT0gMCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTE5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MjA6aW50IGJyY21mX3Byb3RvX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMjEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5oPTE4PXN0cnVjdCBicmNtZl9wcm90byB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmgtNDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uaDo0NTppbnQgYnJjbWZfcHJvdG9fYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmgtNDYtdm9pZCBicmNtZl9wcm90b19kZXRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1OQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYGJyY21mX2F0dGFjaGAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIExldCYjMzk7cyBzZWUuLi4gdGhlIGluaXRpYWwgdGhvdWdodCBoZXJlIGlzIHRvIHplcm8gaW4gb24gYGJyY21mX2F0dGFjaGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gb3IgYXR0YWNobWVudCBwcm9jZXNzLCBsaWtlbHkgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIGhhcmR3YXJlIGlzIGJyb3VnaHQgb25saW5lIGFuZCB0aGUgZHJpdmVyIHN0YXJ0cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBCcm9hZGNvbSBXaUZpIGNoaXAuIFdlJiMzOTtsbCBjaGVjayBpdCBvdXQgYW5kIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaD0yOTk9aW50IGJyY21mX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJyY21mX21wX2RldmljZSAqc2V0dGluZ3MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMwMC0vKiBJbmRpY2F0aW9uIGZyb20gYnVzIG1vZHVsZSByZWdhcmRpbmcgcHJlc2VuY2UvaW5zZXJ0aW9uIG9mIGRvbmdsZS4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaDozMDE6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMwMi0vKiBJbmRpY2F0aW9uIGZyb20gYnVzIG1vZHVsZSByZWdhcmRpbmcgcmVtb3ZhbC9hYnNlbmNlIG9mIGRvbmdsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaC0xOC0gKiAobW9kdWxlKSBpbml0aWxpYXphdGlvbiB0YWtlcyBwbGFjZS4gVGhlIGRldmljZSBzcGVjaWZpYyBzZXR0aW5ncyBpcyBwYXJ0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmg6MTk6ICogb2YgdGhlIGRydnIgc3RydWN0IGFuZCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgb24gZXZlcnkgYnJjbWZfYXR0YWNoLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTIwLSAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTMwMT1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzMjktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEzMzA6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzMzEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjEzNT1zdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIyMTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjIyMTY6XHRyZXQgPSBicmNtZl9hdHRhY2goXHUwMDI2ZGV2aW5mby1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIyMTctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM9NDIwOT1zdGF0aWMgdm9pZCBicmNtZl9zZGlvX2Zpcm13YXJlX2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGVycixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQzOTktXHQvKiBBdHRhY2ggdG8gdGhlIGNvbW1vbiBsYXllciwgcmVzZXJ2ZSBoZHIgc3BhY2UgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQwMDpcdGVyciA9IGJyY21mX2F0dGFjaChzZGlvZC1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDAxLVx0aWYgKGVyciAhPSAwKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jOjQ0MDI6XHRcdGJyY21mX2VycihcJiMzNDticmNtZl9hdHRhY2ggZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQwMy1cdFx0Z290byBmcmVlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTc2PXN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjEwLVx0LyogQXR0YWNoIHRvIHRoZSBjb21tb24gZHJpdmVyIGludGVyZmFjZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyMTE6XHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyMTItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMjQ0PXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Byb2JlX2NiKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI5MC1cdFx0XHRnb3RvIGZhaWw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTI5MTpcdFx0cmV0ID0gYnJjbWZfYXR0YWNoKGRldmluZm8tXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjkyLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjYwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipVU0IgQlJDTUYgSW5pdGlhbGl6YXRpb24gRmxvdyAtIEEgUXVpY2sgTG9vayoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIHRyYWNpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciB0aGlzIEJSQ01GIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBVU0IuIE9rYXksIHNvIGBicmNtZl9hdHRhY2hgIGlzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24sIGFuZCB0aGUgbm90ZXMgc2F5IGl0JiMzOTtzIGNhbGxlZCBmcm9tIHR3byBwbGFjZXMg4oCTIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCBhbmQgYGJyY21mX3VzYl9wcm9iZV9jYmAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGF0dGFjaG1lbnQgaGFwcGVucyBhbmQgdGhlIGNvbnRleHQgb2YgdGhvc2UgY2FsbHMuCgpIbW0sIGJ1dCB3YWl0Li4uIHRoZXJlJiMzOTtzIGEgY3J1Y2lhbCBjaGVjayB3aXRoaW4gYGJyY21mX3Byb3RvX2F0dGFjaGAuIFRoZSBjb2RlIGlzIHZlcmlmeWluZyBpZiBgZHJ2ci0mZ3Q7YnVzX2lmLSZndDtwcm90b190eXBlID09IEJSQ01GX1BST1RPX01TR0JVRmAuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgcHJvdG9jb2wgdHlwZSBpcyBhIGNyaXRpY2FsIGZhY3RvciBpbiBob3cgdGhlIGRldmljZSBnZXRzIHNldCB1cC4gU28sIG15IGltbWVkaWF0ZSBxdWVzdGlvbiBiZWNvbWVzOiB3aGF0IGlzIHRoZSBzcGVjaWZpYyBgcHJvdG9fdHlwZWAgdmFsdWUgYmVpbmcgYXNzaWduZWQgZm9yIGEgVVNCIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjaGVjayBpcyBkb2luZy4gVGhhdCBgcHJvdG9fdHlwZWAgdmFsdWUgaXMgYSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGRyaXZlciBkZWNpZGVzIGhvdyB0byBjb21tdW5pY2F0ZSBvdmVyIHRoZSBVU0IgaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm90b190eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9MTA0MD1zdGF0aWMgaW50IGJyY21mX29wc19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTEwODUtXHRidXNfaWYtXHUwMDNlYnVzX3ByaXYuc2RpbyA9IHNkaW9kZXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6MTA4NjpcdGJ1c19pZi1cdTAwM2Vwcm90b190eXBlID0gQlJDTUZfUFJPVE9fQkNEQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy0xMDg3LVx0YnVzX2lmLVx1MDAzZWZ3dmlkID0gaWQtXHUwMDNlZHJpdmVyX2RhdGE7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oPTE0MT1zdHJ1Y3QgYnJjbWZfYnVzX3N0YXRzIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMTQ5LSAqIEBidXNfcHJpdjogcG9pbnRlciB0byBwcml2YXRlIGJ1cyBkZXZpY2UuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6MTUwOiAqIEBwcm90b190eXBlOiBwcm90b2NvbCB0eXBlLCBiY2RjIG9yIG1zZ2J1ZlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE1MS0gKiBAZGV2OiBkZXZpY2UgcG9pbnRlciBvZiBidXMgZGV2aWNlLlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaD0xNjU9c3RydWN0IGJyY21mX2J1cyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE3MC1cdH0gYnVzX3ByaXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6MTcxOlx0ZW51bSBicmNtZl9idXNfcHJvdG9jb2xfdHlwZSBwcm90b190eXBlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE3Mi1cdHN0cnVjdCBkZXZpY2UgKmRldjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI0Mzk9YnJjbWZfcGNpZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjUxNC1cdGJ1cy1cdTAwM2VvcHMgPSBcdTAwMjZicmNtZl9wY2llX2J1c19vcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI1MTU6XHRidXMtXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX01TR0JVRjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjUxNi1cdGJ1cy1cdTAwM2VjaGlwID0gZGV2aW5mby1cdTAwM2Vjb3JlaWQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM9MjA9aW50IGJyY21mX3Byb3RvX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTMxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MzI6XHRpZiAoZHJ2ci1cdTAwM2VidXNfaWYtXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19CQ0RDKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zMy1cdFx0aWYgKGJyY21mX3Byb3RvX2JjZGNfYXR0YWNoKGRydnIpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzQtXHRcdFx0Z290byBmYWlsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MzU6XHR9IGVsc2UgaWYgKGRydnItXHUwMDNlYnVzX2lmLVx1MDAzZXByb3RvX3R5cGUgPT0gQlJDTUZfUFJPVE9fTVNHQlVGKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zNi1cdFx0aWYgKGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goZHJ2cikpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzktXHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O1Vuc3VwcG9ydGVkIHByb3RvIHR5cGUgJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYzo0MDpcdFx0XHQgZHJ2ci1cdTAwM2VidXNfaWYtXHUwMDNlcHJvdG9fdHlwZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy00MS1cdFx0Z290byBmYWlsO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jPTU5PXZvaWQgYnJjbWZfcHJvdG9fZGV0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtNjMtXHRpZiAoZHJ2ci1cdTAwM2Vwcm90bykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6NjQ6XHRcdGlmIChkcnZyLVx1MDAzZWJ1c19pZi1cdTAwM2Vwcm90b190eXBlID09IEJSQ01GX1BST1RPX0JDREMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy02NS1cdFx0XHRicmNtZl9wcm90b19iY2RjX2RldGFjaChkcnZyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jOjY2Olx0XHRlbHNlIGlmIChkcnZyLVx1MDAzZWJ1c19pZi1cdTAwM2Vwcm90b190eXBlID09IEJSQ01GX1BST1RPX01TR0JVRilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTY3LVx0XHRcdGJyY21mX3Byb3RvX21zZ2J1Zl9kZXRhY2goZHJ2cik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjY4LVx0YnVzLVx1MDAzZW9wcyA9IFx1MDAyNmJyY21mX3VzYl9idXNfb3BzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNjk6XHRidXMtXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX0JDREM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI3MC1cdGJ1cy1cdTAwM2Vmd3ZpZCA9IGZ3dmlkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzU3CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBDSWUgRHJpdmVyIEZ1enppbmcgRmVhc2liaWxpdHkgLSBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBhc3NpZ25tZW50IG9mIGBidXMtJmd0O3Byb3RvX3R5cGUgPSBCUkNNRl9QUk9UT19NU0dCVUY7YCBqdW1wcyBvdXQgYXQgbWUuIEl0JiMzOTtzIG9ubHkgc2V0IGluIGBicmNtZl9wY2llX3Byb2JlYCwgbm90IHRoZSBVU0Igb3IgU0RJTyBlcXVpdmFsZW50cy4gVGhpcyBtZWFucyB0aGF0IGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCBpcyBPTkxZIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBQQ0llIHBhdGguIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBmdXp6aW5nLiBDYW4gd2UgZnV6eiB0aGUgUENJZSBkcml2ZXI/CgpUaGUgaW5zdHJ1Y3Rpb25zIG9uIGRldGVybWluaW5nICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgYXJlIGNsZWFyOiB3ZSBjYW4mIzM5O3QgaWYgdGhlIHBhdGNoIGlzIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGNhcmRzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIHRoZSBrZXkuIE5vdywgYGJyY21mbWFjYC4uLiBpcyB0aGF0IGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlcj8gWWVzLCBpdCYjMzk7cyBCcm9hZGNvbSYjMzk7cyA4MDIuMTEgd2lyZWxlc3MgTEFOLiBEb2VzIFFFTVUsIGluIGl0cyBzdGFuZGFyZCBjb25maWd1cmF0aW9uLCBlbXVsYXRlIEJyb2FkY29tIFBDSWUgV2ktRmkgY2FyZHM/IE5vcGUuIFNvIHRoYXQmIzM5O3MgdGhlIGh1cmRsZS4KCkNhbiBzeXprYWxsZXIgaGVscCBoZXJlPyBJdCAqZG9lcyogaGF2ZSBzb21lIFBDSSBmdXp6aW5nIHN1cHBvcnQgd2l0aCBjYWxscyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgIG9yIHNpbWlsYXIuIEJ1dCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgaXQmIzM5O3Mgb2Z0ZW4gbGltaXRlZCwgdHlwaWNhbGx5IGZ1enppbmcgb25seSB0aGUgcHJvYmUgZnVuY3Rpb24gb3Igd2hhdCYjMzk7cyBzdXBwb3J0ZWQuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGNhbGwgb3V0IHRoaXMgdmVyeSBzY2VuYXJpbzogdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlLgoKTGV0JiMzOTtzIHRyYWNlIHRoZSBjYWxsIHN0YWNrIHRvIGJlIHN1cmU6IFRoaXMgcGF0Y2ggaXMgaW4gYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AuIFRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYnJjbWZfcHJvdG9fYXR0YWNoYCwgd2hpY2ggY29tZXMgZnJvbSBgYnJjbWZfYXR0YWNoYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGJyY21mX3BjaWVfc2V0dXBgLCB3aGljaCwgZmluYWxseSwgaXMgY2FsbGVkIGZyb20gYGJyY21mX3BjaWVfcHJvYmVgLiBTbywgcmVhY2hpbmcgYGJyY21mX3BjaWVfcHJvYmVgIGlzIGNyaXRpY2FsLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHdlIGNhbiBldmVuIHJlYWNoIGl0LiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgYnJjbWZfcGNpZV9wcm9iZWAgZnVuY3Rpb24gbm93IHRvIGRldGVybWluZSBob3cgcmVhY2hhYmxlIGl0IGlzLCBhbmQgd2hldGhlciBzeXprYWxsZXImIzM5O3Mgc3VwcG9ydCBjYW4gY292ZXIgaXQgZ2l2ZW4gdGhlIGNvbnN0cmFpbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9wY2llX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI0Mzg9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNDM5OmJyY21mX3BjaWVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjQ0MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNjU2PXN0YXRpYyBpbnQgYnJjbWZfcGNpZV9wbV9sZWF2ZV9EMyhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNjg5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNjkwOlx0ZXJyID0gYnJjbWZfcGNpZV9wcm9iZShwZGV2LCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY5MS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNzYyPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBicmNtZl9wY2llZHJ2ciA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NjQtXHQuaWRfdGFibGUgPSBicmNtZl9wY2llX2RldmlkX3RhYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNzY1Olx0LnByb2JlID0gYnJjbWZfcGNpZV9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjc2Ni1cdC5yZW1vdmUgPSBicmNtZl9wY2llX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkyOQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBQQ0kgUHJvYmUgRnVuY3Rpb25zIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlIGFuZCBpbW1lZGlhdGVseSB0aGUgcXVlc3Rpb24gcG9wcyBpbnRvIG15IGhlYWQ6IGNhbiB0aGlzIGFjdHVhbGx5IGJlIHRyaWdnZXJlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gU3l6a2FsbGVyJiMzOTtzIGdvdCB0aGlzIGBzeXpfcGNpX2RldmljZV9hZGRgIHBzZXVkby1zeXNjYWxsLCBjbGV2ZXIgdHJpY2ssIGl0IGluamVjdHMgYSB2aXJ0dWFsIFBDSSBkZXZpY2Ugd2l0aCBjZXJ0YWluIHZlbmRvciBhbmQgZGV2aWNlIElEcywgYWltaW5nIHRvIGZpcmUgdXAgdGhvc2UgUENJIHByb2JlIGZ1bmN0aW9ucy4gSG1tLCBpdCBtaWdodCBhY3R1YWxseSB3b3JrLCBpZiBpdCYjMzk7cyBqdXN0IHRoZSBwcm9iZSBmdW5jdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBpbnN0cnVjdGlvbnMgYWdhaW46ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpOb3csIGlzIGBicmNtZm1hY2AgdGhhdCBraW5kIG9mIGRyaXZlcj8gWWVhaCwgaXQmIzM5O3MgYSBCcm9hZGNvbSBXaS1GaSBkcml2ZXIsIHNvIGl0JiMzOTtzIHZlbmRvci1zcGVjaWZpYyBmb3Igc3VyZS4gQnV0LCBkb2VzIGl0IHN0cmljdGx5ICpyZXF1aXJlKiBwaHlzaWNhbCBoYXJkd2FyZT8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBHb3R0YSBsb29rIGF0IHRoZSBgYnJjbWZfcGNpZV9wcm9iZWAgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfcGNpZV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNDM4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjQzOTpicmNtZl9wY2llX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI0NDAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjY1Nj1zdGF0aWMgaW50IGJyY21mX3BjaWVfcG1fbGVhdmVfRDMoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY4OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjY5MDpcdGVyciA9IGJyY21mX3BjaWVfcHJvYmUocGRldiwgTlVMTCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI2OTEtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9Mjc2Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYnJjbWZfcGNpZWRydnIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNzY0LVx0LmlkX3RhYmxlID0gYnJjbWZfcGNpZV9kZXZpZF90YWJsZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6Mjc2NTpcdC5wcm9iZSA9IGJyY21mX3BjaWVfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NjYtXHQucmVtb3ZlID0gYnJjbWZfcGNpZV9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTIxCgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYnJjbWZfcGNpZV9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHdoYXQgdGhpcyBgYnJjbWZfcGNpZV9wcm9iZWAgZnVuY3Rpb24gaXMgZG9pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIGluaXRpYWxpemluZyB0aGUgQnJvYWRjb20gUENJZSBXaS1GaSBkcml2ZXIsIHNvIEkmIzM5O2xsIHF1aWNrbHkgZGlzc2VjdCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgbGlrZWx5IHRvIHRyYWNlIGl0cyBwcmltYXJ5IHRhc2tzOiByZXNvdXJjZSBhbGxvY2F0aW9uLCBkZXZpY2UgaWRlbnRpZmljYXRpb24sIHBvdGVudGlhbGx5IERNQSBzZXR1cCwgaW50ZXJydXB0IHJlZ2lzdHJhdGlvbiwgYW5kIGZpbmFsbHksIHRoZSBvdmVyYWxsIGRyaXZlciBhdHRhY2htZW50IGFuZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgd2hldGhlciBpdCYjMzk7cyBjb3JyZWN0bHkgbWFuYWdpbmcgcmVzb3VyY2VzIGR1cmluZyB0aGUgcHJvYmUgcGhhc2UuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZGlmZmVyZW50IEJyb2FkY29tIGhhcmR3YXJlIHJldmlzaW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBQQ0llIGJ1cyBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBpdCBtaWdodCBlbmNvdW50ZXIuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDM4Olx0c3RhdGljIGludFxuMjQzOTpcdGJyY21mX3BjaWVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbjI0NDA6XHR7XG4yNDQxOlx0XHRpbnQgcmV0O1xuMjQ0MjpcdFx0c3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxO1xuMjQ0MzpcdFx0c3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbztcbjI0NDQ6XHRcdHN0cnVjdCBicmNtZl9wY2llZGV2ICpwY2llX2J1c19kZXY7XG4yNDQ1Olx0XHRzdHJ1Y3QgYnJjbWZfY29yZSAqY29yZTtcbjI0NDY6XHRcdHN0cnVjdCBicmNtZl9idXMgKmJ1cztcbjI0NDc6XHRcbjI0NDg6XHRcdGlmICghaWQpIHtcbjI0NDk6XHRcdFx0aWQgPSBwY2lfbWF0Y2hfaWQoYnJjbWZfcGNpZV9kZXZpZF90YWJsZSwgcGRldik7XG4yNDUwOlx0XHRcdGlmICghaWQpIHtcbjI0NTE6XHRcdFx0XHRwY2lfZXJyKHBkZXYsIFwmIzM0O0Vycm9yIGNvdWxkIG5vdCBmaW5kIHBjaV9kZXZpY2VfaWQgZm9yICV4OiV4XFxuXCYjMzQ7LCBwZGV2LVx1MDAzZXZlbmRvciwgcGRldi1cdTAwM2VkZXZpY2UpO1xuMjQ1MjpcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuMjQ1MzpcdFx0XHR9XG4yNDU0Olx0XHR9XG4yNDU1Olx0XG4yNDU2Olx0XHRicmNtZl9kYmcoUENJRSwgXCYjMzQ7RW50ZXIgJXg6JXhcXG5cJiMzNDssIHBkZXYtXHUwMDNldmVuZG9yLCBwZGV2LVx1MDAzZWRldmljZSk7XG4yNDU3Olx0XG4yNDU4Olx0XHRyZXQgPSAtRU5PTUVNO1xuMjQ1OTpcdFx0ZGV2aW5mbyA9IGt6YWxsb2Nfb2JqKCpkZXZpbmZvKTtcbjI0NjA6XHRcdGlmIChkZXZpbmZvID09IE5VTEwpXG4yNDYxOlx0XHRcdHJldHVybiByZXQ7XG4yNDYyOlx0XG4yNDYzOlx0XHRkZXZpbmZvLVx1MDAzZXBkZXYgPSBwZGV2O1xuMjQ2NDpcdFx0cGNpZV9idXNfZGV2ID0gTlVMTDtcbjI0NjU6XHRcdGRldmluZm8tXHUwMDNlY2kgPSBicmNtZl9jaGlwX2F0dGFjaChkZXZpbmZvLCBwZGV2LVx1MDAzZWRldmljZSxcbjI0NjY6XHRcdFx0XHRcdFx0XHUwMDI2YnJjbWZfcGNpZV9idXNjb3JlX29wcyk7XG4yNDY3Olx0XHRpZiAoSVNfRVJSKGRldmluZm8tXHUwMDNlY2kpKSB7XG4yNDY4Olx0XHRcdHJldCA9IFBUUl9FUlIoZGV2aW5mby1cdTAwM2VjaSk7XG4yNDY5Olx0XHRcdGRldmluZm8tXHUwMDNlY2kgPSBOVUxMO1xuMjQ3MDpcdFx0XHRnb3RvIGZhaWw7XG4yNDcxOlx0XHR9XG4yNDcyOlx0XG4yNDczOlx0XHRjb3JlID0gYnJjbWZfY2hpcF9nZXRfY29yZShkZXZpbmZvLVx1MDAzZWNpLCBCQ01BX0NPUkVfUENJRTIpO1xuMjQ3NDpcdFx0aWYgKGNvcmUtXHUwMDNlcmV2IFx1MDAzZT0gNjQpXG4yNDc1Olx0XHRcdGRldmluZm8tXHUwMDNlcmVnaW5mbyA9IFx1MDAyNmJyY21mX3JlZ2luZm9fNjQ7XG4yNDc2Olx0XHRlbHNlXG4yNDc3Olx0XHRcdGRldmluZm8tXHUwMDNlcmVnaW5mbyA9IFx1MDAyNmJyY21mX3JlZ2luZm9fZGVmYXVsdDtcbjI0Nzg6XHRcbjI0Nzk6XHRcdHBjaWVfYnVzX2RldiA9IGt6YWxsb2Nfb2JqKCpwY2llX2J1c19kZXYpO1xuMjQ4MDpcdFx0aWYgKHBjaWVfYnVzX2RldiA9PSBOVUxMKSB7XG4yNDgxOlx0XHRcdHJldCA9IC1FTk9NRU07XG4yNDgyOlx0XHRcdGdvdG8gZmFpbDtcbjI0ODM6XHRcdH1cbjI0ODQ6XHRcbjI0ODU6XHRcdGRldmluZm8tXHUwMDNlc2V0dGluZ3MgPSBicmNtZl9nZXRfbW9kdWxlX3BhcmFtKFx1MDAyNmRldmluZm8tXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4yNDg2Olx0XHRcdFx0XHRcdFx0ICAgQlJDTUZfQlVTVFlQRV9QQ0lFLFxuMjQ4NzpcdFx0XHRcdFx0XHRcdCAgIGRldmluZm8tXHUwMDNlY2ktXHUwMDNlY2hpcCxcbjI0ODg6XHRcdFx0XHRcdFx0XHQgICBkZXZpbmZvLVx1MDAzZWNpLVx1MDAzZWNoaXByZXYpO1xuMjQ4OTpcdFx0aWYgKCFkZXZpbmZvLVx1MDAzZXNldHRpbmdzKSB7XG4yNDkwOlx0XHRcdHJldCA9IC1FTk9NRU07XG4yNDkxOlx0XHRcdGdvdG8gZmFpbDtcbjI0OTI6XHRcdH1cbjI0OTM6XHRcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhkZXZpbmZvLVx1MDAzZXNldHRpbmdzKTtcbjI0OTQ6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yNDk1Olx0XHRcdGdvdG8gZmFpbDtcbjI0OTY6XHRcbjI0OTc6XHRcdGJ1cyA9IGt6YWxsb2Nfb2JqKCpidXMpO1xuMjQ5ODpcdFx0aWYgKCFidXMpIHtcbjI0OTk6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjI1MDA6XHRcdFx0Z290byBmYWlsO1xuMjUwMTpcdFx0fVxuMjUwMjpcdFx0YnVzLVx1MDAzZW1zZ2J1ZiA9IGt6YWxsb2Nfb2JqKCpidXMtXHUwMDNlbXNnYnVmKTtcbjI1MDM6XHRcdGlmICghYnVzLVx1MDAzZW1zZ2J1Zikge1xuMjUwNDpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMjUwNTpcdFx0XHRrZnJlZShidXMpO1xuMjUwNjpcdFx0XHRnb3RvIGZhaWw7XG4yNTA3Olx0XHR9XG4yNTA4Olx0XG4yNTA5Olx0XHQvKiBob29rIGl0IGFsbCB0b2dldGhlci4gKi9cbjI1MTA6XHRcdHBjaWVfYnVzX2Rldi1cdTAwM2VkZXZpbmZvID0gZGV2aW5mbztcbjI1MTE6XHRcdHBjaWVfYnVzX2Rldi1cdTAwM2VidXMgPSBidXM7XG4yNTEyOlx0XHRidXMtXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4yNTEzOlx0XHRidXMtXHUwMDNlYnVzX3ByaXYucGNpZSA9IHBjaWVfYnVzX2RldjtcbjI1MTQ6XHRcdGJ1cy1cdTAwM2VvcHMgPSBcdTAwMjZicmNtZl9wY2llX2J1c19vcHM7XG4yNTE1Olx0XHRidXMtXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX01TR0JVRjtcbjI1MTY6XHRcdGJ1cy1cdTAwM2VjaGlwID0gZGV2aW5mby1cdTAwM2Vjb3JlaWQ7XG4yNTE3Olx0XHRidXMtXHUwMDNld293bF9zdXBwb3J0ZWQgPSBwY2lfcG1lX2NhcGFibGUocGRldiwgUENJX0QzaG90KTtcbjI1MTg6XHRcdGJ1cy1cdTAwM2Vmd3ZpZCA9IGRydmRhdGFbaWQtXHUwMDNlZHJpdmVyX2RhdGFdLnZlbmRvcjtcbjI1MTk6XHRcdGRldmluZm8tXHUwMDNlZndzZWVkID0gZHJ2ZGF0YVtpZC1cdTAwM2Vkcml2ZXJfZGF0YV0uZndfc2VlZDtcbjI1MjA6XHRcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldiwgYnVzKTtcbjI1MjE6XHRcbjI1MjI6XHRcdHJldCA9IGJyY21mX2FsbG9jKFx1MDAyNmRldmluZm8tXHUwMDNlcGRldi1cdTAwM2VkZXYsIGRldmluZm8tXHUwMDNlc2V0dGluZ3MpO1xuMjUyMzpcdFx0aWYgKHJldClcbjI1MjQ6XHRcdFx0Z290byBmYWlsX2J1cztcbjI1MjU6XHRcbjI1MjY6XHRcdC8qIG90cCByZWFkIG9wZXJhdGlvbiAqL1xuMjUyNzpcdFx0c3dpdGNoIChidXMtXHUwMDNlZnd2aWQpIHtcbjI1Mjg6XHRcdGNhc2UgQlJDTUZfRldWRU5ET1JfV0NDOlxuMjUyOTpcdFx0Y2FzZSBCUkNNRl9GV1ZFTkRPUl9CQ0E6XG4yNTMwOlx0XHRcdHJldCA9IGJyY21mX3BjaWVfcmVhZF9vdHAoZGV2aW5mbyk7XG4yNTMxOlx0XHRcdGlmIChyZXQpIHtcbjI1MzI6XHRcdFx0XHRicmNtZl9lcnIoYnVzLCBcJiMzNDtmYWlsZWQgdG8gcGFyc2UgT1RQXFxuXCYjMzQ7KTtcbjI1MzM6XHRcdFx0XHRnb3RvIGZhaWxfYnJjbWY7XG4yNTM0Olx0XHRcdH1cbjI1MzU6XHRcdFx0YnJlYWs7XG4yNTM2Olx0XHRjYXNlIEJSQ01GX0ZXVkVORE9SX0NZVzpcbjI1Mzc6XHRcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzgzCgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoZSB0ZWNobmljYWwgZGV0YWlsczoKCioqRGlnZ2luZyBEZWVwZXIgaW50byBgYnJjbWZfcGNpZV9wcm9iZWAuLi4qKgoKQWxyaWdodCwgc28gdGhlIGludmVzdGlnYXRpb24gaGFzbiYjMzk7dCBoaXQgYSBkZWFkIGVuZCB5ZXQuIEkgc2VlIHRoYXQgYGJyY21mX3BjaWVfcHJvYmVgIGlzIGNvbnRpbnVpbmcgdG8gZXhlY3V0ZS4gVGhpcyBpcyBnb29kOyBpdCBtZWFucyB0aGVyZSYjMzk7cyBzdGlsbCBtb3JlIGdvaW5nIG9uIHdpdGggdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gd2hhdCBpdCYjMzk7cyBkb2luZywgdGhlIGNhbGxzIGl0JiMzOTtzIG1ha2luZywgYW5kIHRoZSB2YWx1ZXMgb2YgdGhlIHZhcmlhYmxlcyBpdCYjMzk7cyBtYW5pcHVsYXRpbmcuIEVzc2VudGlhbGx5LCB0aGUgcHJvYmUgZnVuY3Rpb24gc3RpbGwgaGFzIHNvbWUgZmlnaHQgaW4gaXQsIGFuZCBsaWtlbHkgdGhlIHNvbHV0aW9uIGlzIHdpdGhpbiB0aGUgZnVydGhlciBzdGVwcyBpdCBpcyBydW5uaW5nLiBNeSBnb2FsIG5vdyBpcyB0byB1bmRlcnN0YW5kIHdoYXQgaXMgdHJpZ2dlcmluZyB0aG9zZSBuZXh0IHN0ZXBzIGFuZCB3aGV0aGVyIHRoZXkgYXJlIGJlaW5nIHN1Y2Nlc3NmdWwgb3Igbm90LiBNYXliZSBzb21lIGNvbmRpdGlvbiBpcyBub3QgbWV0LCBhIHJlc291cmNlIGlzIHVuYXZhaWxhYmxlLCBvciBhIGNvbmZpZ3VyYXRpb24gaXMgaW5jb3JyZWN0LiBUaGlzIGlzIGEgcG9pbnQgdG8gYmVnaW4gbmFycm93aW5nIGRvd24gdGhlIHNwZWNpZmljIHBvaW50IG9mIGZhaWx1cmUgaW4gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTM4Olx0XHRcdGJyZWFrO1xuMjUzOTpcdFx0fVxuMjU0MDpcdFxuMjU0MTpcdCNpZmRlZiBERUJVR1xuMjU0MjpcdFx0LyogU2V0IHVwIHRoZSBmd2NvbiB0aW1lciAqL1xuMjU0MzpcdFx0dGltZXJfc2V0dXAoXHUwMDI2ZGV2aW5mby1cdTAwM2V0aW1lciwgYnJjbWZfcGNpZV9md2NvbiwgMCk7XG4yNTQ0Olx0I2VuZGlmXG4yNTQ1Olx0XG4yNTQ2Olx0XHRmd3JlcSA9IGJyY21mX3BjaWVfcHJlcGFyZV9md19yZXF1ZXN0KGRldmluZm8pO1xuMjU0NzpcdFx0aWYgKCFmd3JlcSkge1xuMjU0ODpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMjU0OTpcdFx0XHRnb3RvIGZhaWxfYnJjbWY7XG4yNTUwOlx0XHR9XG4yNTUxOlx0XG4yNTUyOlx0XHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGJ1cy1cdTAwM2VkZXYsIGZ3cmVxLCBicmNtZl9wY2llX3NldHVwKTtcbjI1NTM6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjI1NTQ6XHRcdFx0a2ZyZWUoZndyZXEpO1xuMjU1NTpcdFx0XHRnb3RvIGZhaWxfYnJjbWY7XG4yNTU2Olx0XHR9XG4yNTU3Olx0XHRyZXR1cm4gMDtcbjI1NTg6XHRcbjI1NTk6XHRmYWlsX2JyY21mOlxuMjU2MDpcdFx0YnJjbWZfZnJlZShcdTAwMjZkZXZpbmZvLVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbjI1NjE6XHRmYWlsX2J1czpcbjI1NjI6XHRcdGtmcmVlKGJ1cy1cdTAwM2Vtc2didWYpO1xuMjU2MzpcdFx0a2ZyZWUoYnVzKTtcbjI1NjQ6XHRmYWlsOlxuMjU2NTpcdFx0YnJjbWZfZXJyKE5VTEwsIFwmIzM0O2ZhaWxlZCAleDoleFxcblwmIzM0OywgcGRldi1cdTAwM2V2ZW5kb3IsIHBkZXYtXHUwMDNlZGV2aWNlKTtcbjI1NjY6XHRcdGJyY21mX3BjaWVfcmVsZWFzZV9yZXNvdXJjZShkZXZpbmZvKTtcbjI1Njc6XHRcdGlmIChkZXZpbmZvLVx1MDAzZWNpKVxuMjU2ODpcdFx0XHRicmNtZl9jaGlwX2RldGFjaChkZXZpbmZvLVx1MDAzZWNpKTtcbjI1Njk6XHRcdGlmIChkZXZpbmZvLVx1MDAzZXNldHRpbmdzKVxuMjU3MDpcdFx0XHRicmNtZl9yZWxlYXNlX21vZHVsZV9wYXJhbShkZXZpbmZvLVx1MDAzZXNldHRpbmdzKTtcbjI1NzE6XHRcdGtmcmVlKHBjaWVfYnVzX2Rldik7XG4yNTcyOlx0XHRrZnJlZShkZXZpbmZvKTtcbjI1NzM6XHRcdHJldHVybiByZXQ7XG4yNTc0Olx0fVxuMjU3NTpcdFxuMjU3NjpcdFxuMjU3NzpcdHN0YXRpYyB2b2lkXG4yNTc4Olx0YnJjbWZfcGNpZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4yNTc5Olx0e1xuMjU4MDpcdFx0c3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbztcbjI1ODE6XHRcdHN0cnVjdCBicmNtZl9idXMgKmJ1cztcbjI1ODI6XHRcbjI1ODM6XHRcdGJyY21mX2RiZyhQQ0lFLCBcJiMzNDtFbnRlclxcblwmIzM0Oyk7XG4yNTg0Olx0XG4yNTg1Olx0XHRidXMgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMjU4NjpcdFx0aWYgKGJ1cyA9PSBOVUxMKVxuMjU4NzpcdFx0XHRyZXR1cm47XG4yNTg4Olx0XG4yNTg5Olx0XHRkZXZpbmZvID0gYnVzLVx1MDAzZWJ1c19wcml2LnBjaWUtXHUwMDNlZGV2aW5mbztcbjI1OTA6XHRcdGJyY21mX3BjaWVfYnVzX2NvbnNvbGVfcmVhZChkZXZpbmZvLCBmYWxzZSk7XG4yNTkxOlx0XHRicmNtZl9wY2llX2Z3Y29uX3RpbWVyKGRldmluZm8sIGZhbHNlKTtcbjI1OTI6XHRcbjI1OTM6XHRcdGRldmluZm8tXHUwMDNlc3RhdGUgPSBCUkNNRk1BQ19QQ0lFX1NUQVRFX0RPV047XG4yNTk0Olx0XHRpZiAoZGV2aW5mby1cdTAwM2VjaSlcbjI1OTU6XHRcdFx0YnJjbWZfcGNpZV9pbnRyX2Rpc2FibGUoZGV2aW5mbyk7XG4yNTk2Olx0XG4yNTk3Olx0XHRicmNtZl9kZXRhY2goXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMjU5ODpcdFx0YnJjbWZfZnJlZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4yNTk5Olx0XG4yNjAwOlx0XHRrZnJlZShidXMtXHUwMDNlYnVzX3ByaXYucGNpZSk7XG4yNjAxOlx0XHRrZnJlZShidXMtXHUwMDNlbXNnYnVmLVx1MDAzZWZsb3dyaW5ncyk7XG4yNjAyOlx0XHRrZnJlZShidXMtXHUwMDNlbXNnYnVmKTtcbjI2MDM6XHRcdGtmcmVlKGJ1cyk7XG4yNjA0Olx0XG4yNjA1Olx0XHRicmNtZl9wY2llX3JlbGVhc2VfaXJxKGRldmluZm8pO1xuMjYwNjpcdFx0YnJjbWZfcGNpZV9yZWxlYXNlX3NjcmF0Y2hidWZmZXJzKGRldmluZm8pO1xuMjYwNzpcdFx0YnJjbWZfcGNpZV9yZWxlYXNlX3JpbmdidWZmZXJzKGRldmluZm8pO1xuMjYwODpcdFx0YnJjbWZfcGNpZV9yZXNldF9kZXZpY2UoZGV2aW5mbyk7XG4yNjA5Olx0XHRicmNtZl9wY2llX3JlbGVhc2VfcmVzb3VyY2UoZGV2aW5mbyk7XG4yNjEwOlx0XHRyZWxlYXNlX2Zpcm13YXJlKGRldmluZm8tXHUwMDNlY2xtX2Z3KTtcbjI2MTE6XHRcdHJlbGVhc2VfZmlybXdhcmUoZGV2aW5mby1cdTAwM2V0eGNhcF9mdyk7XG4yNjEyOlx0XG4yNjEzOlx0XHRpZiAoZGV2aW5mby1cdTAwM2VjaSlcbjI2MTQ6XHRcdFx0YnJjbWZfY2hpcF9kZXRhY2goZGV2aW5mby1cdTAwM2VjaSk7XG4yNjE1Olx0XHRpZiAoZGV2aW5mby1cdTAwM2VzZXR0aW5ncylcbjI2MTY6XHRcdFx0YnJjbWZfcmVsZWFzZV9tb2R1bGVfcGFyYW0oZGV2aW5mby1cdTAwM2VzZXR0aW5ncyk7XG4yNjE3Olx0XG4yNjE4Olx0XHRrZnJlZShkZXZpbmZvKTtcbjI2MTk6XHRcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldiwgTlVMTCk7XG4yNjIwOlx0fVxuMjYyMTpcdFxuMjYyMjpcdFxuMjYyMzpcdCNpZmRlZiBDT05GSUdfUE1cbjI2MjQ6XHRcbjI2MjU6XHRcbjI2MjY6XHRzdGF0aWMgaW50IGJyY21mX3BjaWVfcG1fZW50ZXJfRDMoc3RydWN0IGRldmljZSAqZGV2KVxuMjYyNzpcdHtcbjI2Mjg6XHRcdHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm87XG4yNjI5Olx0XHRzdHJ1Y3QgYnJjbWZfYnVzICpidXM7XG4yNjMwOlx0XG4yNjMxOlx0XHRicmNtZl9kYmcoUENJRSwgXCYjMzQ7RW50ZXJcXG5cJiMzNDspO1xuMjYzMjpcdFxuMjYzMzpcdFx0YnVzID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4yNjM0Olx0XHRkZXZpbmZvID0gYnVzLVx1MDAzZWJ1c19wcml2LnBjaWUtXHUwMDNlZGV2aW5mbztcbjI2MzU6XHRcbjI2MzY6XHRcdGJyY21mX3BjaWVfZndjb25fdGltZXIoZGV2aW5mbywgZmFsc2UpO1xuMjYzNzpcdFx0YnJjbWZfYnVzX2NoYW5nZV9zdGF0ZShidXMsIEJSQ01GX0JVU19ET1dOKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NjkKCQkJCQkJCW91dHB1dDogNTYKCQkJCQkJCXRob3VnaHRzOiAxMzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYnJjbWZtYWMgUENJZSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGJyY21mX3BjaWVfcHJvYmVgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBjYWxsIGBicmNtZl9md19nZXRfZmlybXdhcmVzYCwgd2hpY2ggdGhlbiB0cmlnZ2VycyBgYnJjbWZfcGNpZV9zZXR1cGAgYXMgYSBjYWxsYmFjayAqYWZ0ZXIqIHRoZSBmaXJtd2FyZSBsb2Fkcy4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIFN5emthbGxlciBjYW4sIGluIHRoZW9yeSwgbW9jayBmaXJtd2FyZSBsb2FkaW5nLiBJZiBjb25maWd1cmVkLCBvciBpZiB0aGUgZmlybXdhcmUgaXMgYmFrZWQgaW50byB0aGUgaW1hZ2UsIFN5emthbGxlciBjYW4gZWZmZWN0aXZlbHkgJiMzNDtsb2FkJiMzNDsgdGhlIGZpcm13YXJlIHVzaW5nIGl0cyBgcmVxdWVzdF9maXJtd2FyZWAgbW9ja2luZyBjYXBhYmlsaXRpZXMuCgpOb3csIGluc2lkZSBgYnJjbWZfcGNpZV9zZXR1cGAsIGl0IGdvZXMgb24gdG8gY2FsbCBgYnJjbWZfYXR0YWNoYCwgd2hpY2ggdGhlbiBjYWxscyBgYnJjbWZfcHJvdG9fYXR0YWNoYCwgYW5kIGZpbmFsbHkgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIGNvZGUgcGF0aCBJJiMzOTttIGludGVyZXN0ZWQgaW4gKmlzKiByZWFjaGFibGUgaWYgdGhlIGZpcm13YXJlIGxvYWRzIHN1Y2Nlc3NmdWxseSBhbmQgdGhlIFBDSWUgZGV2aWNlIGlzIGNvcnJlY3RseSBwcm9iZWQuCgpCdXQgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXM6IERvZXMgU3l6a2FsbGVyICpmdXp6KiB0aGlzIHBhdGg/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgaW5zdHJ1Y3Rpb25zIGFib3V0IHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgY2VydGFpbiB0eXBlcyBvZiBkcml2ZXJzLiBTcGVjaWZpY2FsbHksIHRoZSBpbnN0cnVjdGlvbnMgc3RhdGUgJiMzNDtDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0Oy4KCklzIGBicmNtZm1hY2Agb25lIG9mIHRob3NlPyBXZWxsLCBpdCYjMzk7cyBhIEJyb2FkY29tIFdpLUZpIGRyaXZlciwgc28gdGVjaG5pY2FsbHksIHllcywgaXQmIzM5O3MgdmVuZG9yLXNwZWNpZmljLCBidXQgSSBhbSBub3QgY2VydGFpbiBpZiBpdCYjMzk7cyBjb25zaWRlcmVkIHRvIGJlIGxpa2UgYSBTbWFydE5JQyBvciBHUFUsIHJlcXVpcmluZyBhY3R1YWwgaGFyZHdhcmUuCgpIb3dldmVyLCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYHN5el9wY2lfZGV2aWNlX2FkZGAuIFRoaXMgc3lzY2FsbCwgd2hpY2ggdGhlIGluc3RydWN0aW9ucyBhcmUgcmVmZXJyaW5nIHRvLCBjYW4gaW5qZWN0IFBDSSBkZXZpY2VzIHVzaW5nIGB2ZmlvYCBvciBzaW1pbGFyIG1lY2hhbmlzbXMsIGFuZCBldmVuIGNyZWF0ZSB2aXJ0dWFsIFBDSSBkZXZpY2VzIHdpdGhpbiBRRU1VLiBUaGF0JiMzOTtzIGhvdyBTeXprYWxsZXIgbW9ja3MgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgYW5kIE1NSU8uIFNvLCBpdCAqY2FuKiBmdXp6IFBDSSBkcml2ZXJzLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHN5el9wY2lfZGV2aWNlX2FkZGAgZG9lcyAqbm90KiBuZWVkIFFFTVUgdG8gc3BlY2lmaWNhbGx5IGVtdWxhdGUgdGhlIEJyb2FkY29tIFdpLUZpIGNhcmQuIEl0IHJlbGllcyBvbiBhIGdlbmVyaWMgUENJIGRldmljZSBpbmplY3RvciwgbGlrZSBhIGN1c3RvbSBRRU1VIGRldmljZSBjb250cm9sbGVkIGJ5IFN5emthbGxlci4KCkxldCBtZSBxdWlja2x5IGludmVzdGlnYXRlIGlmIHRoaXMgYGJyY21mbWFjYCBpcyBhbHJlYWR5IGZ1enplZC4gVW5mb3J0dW5hdGVseSwgSSBkbyBub3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBTeXprYWxsZXIgZGVzY3JpcHRpb25zIGF0IHRoZSBtb21lbnQuIEJ1dCBJIGNvdWxkIHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VhcmNoIHRoZSBrZXJuZWwgZm9yIHJlbGV2YW50IGtleXdvcmRzLgoKSG93ZXZlciwgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zOiBUaGV5IHNwZWNpZnkgJiMzNDtDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0Oy4gU28sIGlzIGBicmNtZm1hY2AgYSAmIzM0O1NtYXJ0TklDLCYjMzQ7ICYjMzQ7R1BVLCYjMzQ7IG9yICYjMzQ7UENJZSBzd2l0Y2gmIzM0Oz8gTm8sIGl0JiMzOTtzIGEgV2ktRmkgZHJpdmVyLiBBbmQgV2ktRmkgZHJpdmVycyBhcmUgb2Z0ZW4gZnV6emVkIHVzaW5nIGBtYWM4MDIxMV9od3NpbWAgb3IgZXZlbiBVU0IgKGUuZy4sIGBhdGg5a19odGNgLCBgcnRsd2lmaWApLgoKSG93ZXZlciwgd2hhdCBhYm91dCB0aGUgUENJZSBhc3BlY3Qgb2YgYGJyY21mbWFjYD8gTGV0IG1lIGNvbmZpcm06IGRvZXMgYGJyY21mbWFjYCBoYXZlIFVTQiBzdXBwb3J0PyBZZXMsIGl0IGRvZXMuIERvZXMgdGhlIFVTQiBpbXBsZW1lbnRhdGlvbiB1c2UgYG1zZ2J1ZmA/IExvb2tpbmcgYmFjayBhdCB0aGUgY29kZSwgVVNCIHVzZXMgYEJSQ01GX1BST1RPX0JDRENgLCB3aGljaCBpcyAqbm90KiBgQlJDTUZfUFJPVE9fTVNHQlVGYC4gU0RJTyBhbHNvIHVzZXMgYEJSQ01GX1BST1RPX0JDRENgLiBPbmx5IFBDSWUgdXNlcyBgQlJDTUZfUFJPVE9fTVNHQlVGYC4gU28sIHRoZSBjaGFuZ2VzIEkgc2F3IChgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYCBpbiBgbXNnYnVmLmNgKSBhcmUgb25seSByZWFjaGFibGUgdmlhIHRoZSBQQ0llIHBhdGguCgpTbywgc2luY2UgaXQmIzM5O3MgKm9ubHkqIHJlYWNoYWJsZSB2aWEgUENJZSwgYW5kIGl0JiMzOTtzIGEgQnJvYWRjb20gV2ktRmkgUENJZSBjYXJkLi4uIGNhbiBTeXprYWxsZXIgZnV6eiBpdD8gU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgKmNhbiogZnV6eiAqYW55KiBQQ0kgZHJpdmVyLCBieSBwcm92aWRpbmcgbWF0Y2hpbmcgUENJIHZlbmRvci9kZXZpY2UgSURzIGFuZCBtb2NraW5nIE1NSU8vRE1BLCBpZiBpdHMgY2FwYWJsZS4KCkJ1dCB0aGUgaW5zdHJ1Y3Rpb24gbWVudGlvbnM6ICYjMzQ7Q29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IE9rYXksIHNvIGlzIHRoaXMgV2ktRmkgY2FyZCBsaWtlIGEgJiMzNDtTbWFydE5JQyYjMzQ7IG9yIGEgR1BVIG9yIFBDSWUgc3dpdGNoPyBOb3QgZGlyZWN0bHkuIEJ1dCBkb2VzIGl0IHJlcXVpcmUgaGFyZHdhcmU/IE5vLiBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciB3b3JrcyBieSBlbXVsYXRpbmcgdGhlIFBDSSBkZXZpY2UgYXQgdGhlIGNvbmZpZyBzcGFjZSBhbmQgTU1JTyBsZXZlbAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMzU6XHRzdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbjIxMzY6XHRcdFx0XHQgICAgIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcSlcbjIxMzc6XHR7XG4yMTM4Olx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuMjEzOTpcdFx0dm9pZCAqbnZyYW07XG4yMTQwOlx0XHRzdHJ1Y3QgYnJjbWZfYnVzICpidXM7XG4yMTQxOlx0XHRzdHJ1Y3QgYnJjbWZfcGNpZWRldiAqcGNpZV9idXNfZGV2O1xuMjE0MjpcdFx0c3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbztcbjIxNDM6XHRcdHN0cnVjdCBicmNtZl9jb21tb25yaW5nICoqZmxvd3JpbmdzO1xuMjE0NDpcdFx0dTMyIGksIG52cmFtX2xlbjtcbjIxNDU6XHRcbjIxNDY6XHRcdGJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuMjE0NzpcdFx0cGNpZV9idXNfZGV2ID0gYnVzLVx1MDAzZWJ1c19wcml2LnBjaWU7XG4yMTQ4Olx0XHRkZXZpbmZvID0gcGNpZV9idXNfZGV2LVx1MDAzZWRldmluZm87XG4yMTQ5Olx0XG4yMTUwOlx0XHQvKiBjaGVjayBmaXJtd2FyZSBsb2FkaW5nIHJlc3VsdCAqL1xuMjE1MTpcdFx0aWYgKHJldClcbjIxNTI6XHRcdFx0Z290byBmYWlsO1xuMjE1MzpcdFxuMjE1NDpcdFx0YnJjbWZfcGNpZV9hdHRhY2goZGV2aW5mbyk7XG4yMTU1Olx0XG4yMTU2Olx0XHRmdyA9IGZ3cmVxLVx1MDAzZWl0ZW1zW0JSQ01GX1BDSUVfRldfQ09ERV0uYmluYXJ5O1xuMjE1NzpcdFx0bnZyYW0gPSBmd3JlcS1cdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX05WUkFNXS5udl9kYXRhLmRhdGE7XG4yMTU4Olx0XHRudnJhbV9sZW4gPSBmd3JlcS1cdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX05WUkFNXS5udl9kYXRhLmxlbjtcbjIxNTk6XHRcdGRldmluZm8tXHUwMDNlY2xtX2Z3ID0gZndyZXEtXHUwMDNlaXRlbXNbQlJDTUZfUENJRV9GV19DTE1dLmJpbmFyeTtcbjIxNjA6XHRcdGRldmluZm8tXHUwMDNldHhjYXBfZncgPSBmd3JlcS1cdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX1RYQ0FQXS5iaW5hcnk7XG4yMTYxOlx0XHRrZnJlZShmd3JlcSk7XG4yMTYyOlx0XG4yMTYzOlx0XHRyZXQgPSBicmNtZl9jaGlwX2dldF9yYW1pbmZvKGRldmluZm8tXHUwMDNlY2kpO1xuMjE2NDpcdFx0aWYgKHJldCkge1xuMjE2NTpcdFx0XHRicmNtZl9lcnIoYnVzLCBcJiMzNDtGYWlsZWQgdG8gZ2V0IFJBTSBpbmZvXFxuXCYjMzQ7KTtcbjIxNjY6XHRcdFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4yMTY3Olx0XHRcdGJyY21mX2Z3X252cmFtX2ZyZWUobnZyYW0pO1xuMjE2ODpcdFx0XHRnb3RvIGZhaWw7XG4yMTY5Olx0XHR9XG4yMTcwOlx0XG4yMTcxOlx0XHQvKiBTb21lIG9mIHRoZSBmaXJtd2FyZXMgaGF2ZSB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IG9mIHRoZSBkZXZpY2VcbjIxNzI6XHRcdCAqIGRlZmluZWQgaW5zaWRlIHRoZSBmaXJtd2FyZS4gVGhpcyBpcyBiZWNhdXNlIHBhcnQgb2YgdGhlIG1lbW9yeSBpblxuMjE3MzpcdFx0ICogdGhlIGRldmljZSBpcyBzaGFyZWQgYW5kIHRoZSBkZXZpc2lvbiBpcyBkZXRlcm1pbmVkIGJ5IEZXLiBQYXJzZVxuMjE3NDpcdFx0ICogdGhlIGZpcm13YXJlIGFuZCBhZGp1c3QgdGhlIGNoaXAgbWVtb3J5IHNpemUgbm93LlxuMjE3NTpcdFx0ICovXG4yMTc2Olx0XHRicmNtZl9wY2llX2FkanVzdF9yYW1zaXplKGRldmluZm8sICh1OCAqKWZ3LVx1MDAzZWRhdGEsIGZ3LVx1MDAzZXNpemUpO1xuMjE3NzpcdFxuMjE3ODpcdFx0cmV0ID0gYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbShkZXZpbmZvLCBmdywgbnZyYW0sIG52cmFtX2xlbik7XG4yMTc5Olx0XHRpZiAocmV0KVxuMjE4MDpcdFx0XHRnb3RvIGZhaWw7XG4yMTgxOlx0XG4yMTgyOlx0XHRkZXZpbmZvLVx1MDAzZXN0YXRlID0gQlJDTUZNQUNfUENJRV9TVEFURV9VUDtcbjIxODM6XHRcbjIxODQ6XHRcdHJldCA9IGJyY21mX3BjaWVfaW5pdF9yaW5nYnVmZmVycyhkZXZpbmZvKTtcbjIxODU6XHRcdGlmIChyZXQpXG4yMTg2Olx0XHRcdGdvdG8gZmFpbDtcbjIxODc6XHRcbjIxODg6XHRcdHJldCA9IGJyY21mX3BjaWVfaW5pdF9zY3JhdGNoYnVmZmVycyhkZXZpbmZvKTtcbjIxODk6XHRcdGlmIChyZXQpXG4yMTkwOlx0XHRcdGdvdG8gZmFpbDtcbjIxOTE6XHRcbjIxOTI6XHRcdGJyY21mX3BjaWVfc2VsZWN0X2NvcmUoZGV2aW5mbywgQkNNQV9DT1JFX1BDSUUyKTtcbjIxOTM6XHRcdHJldCA9IGJyY21mX3BjaWVfcmVxdWVzdF9pcnEoZGV2aW5mbyk7XG4yMTk0Olx0XHRpZiAocmV0KVxuMjE5NTpcdFx0XHRnb3RvIGZhaWw7XG4yMTk2Olx0XG4yMTk3Olx0XHQvKiBob29rIHRoZSBjb21tb25yaW5ncyBpbiB0aGUgYnVzIHN0cnVjdHVyZS4gKi9cbjIxOTg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJSQ01GX05ST0ZfQ09NTU9OX01TR1JJTkdTOyBpJiM0MzsmIzQzOylcbjIxOTk6XHRcdFx0YnVzLVx1MDAzZW1zZ2J1Zi1cdTAwM2Vjb21tb25yaW5nc1tpXSA9XG4yMjAwOlx0XHRcdFx0XHRcdTAwMjZkZXZpbmZvLVx1MDAzZXNoYXJlZC5jb21tb25yaW5nc1tpXS1cdTAwM2Vjb21tb25yaW5nO1xuMjIwMTpcdFxuMjIwMjpcdFx0Zmxvd3JpbmdzID0ga3phbGxvY19vYmpzKCpmbG93cmluZ3MsIGRldmluZm8tXHUwMDNlc2hhcmVkLm1heF9mbG93cmluZ3MpO1xuMjIwMzpcdFx0aWYgKCFmbG93cmluZ3MpXG4yMjA0Olx0XHRcdGdvdG8gZmFpbDtcbjIyMDU6XHRcbjIyMDY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldmluZm8tXHUwMDNlc2hhcmVkLm1heF9mbG93cmluZ3M7IGkmIzQzOyYjNDM7KVxuMjIwNzpcdFx0XHRmbG93cmluZ3NbaV0gPSBcdTAwMjZkZXZpbmZvLVx1MDAzZXNoYXJlZC5mbG93cmluZ3NbaV0uY29tbW9ucmluZztcbjIyMDg6XHRcdGJ1cy1cdTAwM2Vtc2didWYtXHUwMDNlZmxvd3JpbmdzID0gZmxvd3JpbmdzO1xuMjIwOTpcdFxuMjIxMDpcdFx0YnVzLVx1MDAzZW1zZ2J1Zi1cdTAwM2VyeF9kYXRhb2Zmc2V0ID0gZGV2aW5mby1cdTAwM2VzaGFyZWQucnhfZGF0YW9mZnNldDtcbjIyMTE6XHRcdGJ1cy1cdTAwM2Vtc2didWYtXHUwMDNlbWF4X3J4YnVmcG9zdCA9IGRldmluZm8tXHUwMDNlc2hhcmVkLm1heF9yeGJ1ZnBvc3Q7XG4yMjEyOlx0XHRidXMtXHUwMDNlbXNnYnVmLVx1MDAzZW1heF9mbG93cmluZ3MgPSBkZXZpbmZvLVx1MDAzZXNoYXJlZC5tYXhfZmxvd3JpbmdzO1xuMjIxMzpcdFxuMjIxNDpcdFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZkZXZpbmZvLVx1MDAzZW1iZGF0YV9yZXNwX3dhaXQpO1xuMjIxNTpcdFxuMjIxNjpcdFx0cmV0ID0gYnJjbWZfYXR0YWNoKFx1MDAyNmRldmluZm8tXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuMjIxNzpcdFx0aWYgKHJldClcbjIyMTg6XHRcdFx0Z290byBmYWlsO1xuMjIxOTpcdFxuMjIyMDpcdFx0YnJjbWZfcGNpZV9idXNfY29uc29sZV9yZWFkKGRldmluZm8sIGZhbHNlKTtcbjIyMjE6XHRcbjIyMjI6XHRcdGJyY21mX3BjaWVfZndjb25fdGltZXIoZGV2aW5mbywgdHJ1ZSk7XG4yMjIzOlx0XG4yMjI0Olx0XHRyZXR1cm47XG4yMjI1Olx0XG4yMjI2Olx0ZmFpbDpcbjIyMjc6XHRcdGJyY21mX2VycihidXMsIFwmIzM0O0RvbmdsZSBzZXR1cCBmYWlsZWRcXG5cJiMzNDspO1xuMjIyODpcdFx0YnJjbWZfcGNpZV9idXNfY29uc29sZV9yZWFkKGRldmluZm8sIHRydWUpO1xuMjIyOTpcdFx0YnJjbWZfZndfY3Jhc2hlZChkZXYpO1xuMjIzMDpcdFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7XG4yMjMxOlx0fVxuMjIzMjpcdFxuMjIzMzpcdHN0YXRpYyBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqXG4yMjM0Olx0YnJjbWZfcGNpZV9wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NjQKCQkJCQkJCW91dHB1dDogNTcKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGaXJtd2FyZSBMb2FkaW5nIElzc3VlcyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBkZWFsLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaWYgdGhlIHJldHVybiBjb2RlLCBgcmV0YCwgaW5kaWNhdGVzIGEgZmlybXdhcmUgbG9hZCBmYWlsdXJlLCB0aGUgY29kZSBicmFuY2hlcyB0byBgZmFpbGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYGRldmljZV9yZWxlYXNlX2RyaXZlcihkZXYpYCBpcyBjYWxsZWQsIGFuZCBgYnJjbWZfYXR0YWNoYCBpcyBjb21wbGV0ZWx5IGJ5cGFzc2VkLiBUaGlzIG1lYW5zIGBicmNtZl9hdHRhY2hgIGlzIG9ubHkgZW50ZXJlZCBpZiB0aGUgZmlybXdhcmUgbG9hZHMgc3VjY2Vzc2Z1bGx5LiBCdXQsIHRoZSBxdWVzdGlvbiBJJiMzOTttIHRyeWluZyB0byBhbnN3ZXIgaXMgd2hhdCBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIG1vY2tpbmcuCgpJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBTeXprYWxsZXIgY2FuLCBhbmQgbGlrZWx5ICpkb2VzKiBtb2NrIGZpcm13YXJlIGxvYWRpbmcuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBTeXprYWxsZXIgZWl0aGVyIHVzZXMgYENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVJgIG9yIHByb3ZpZGVzIHNvbWUgcGxhY2Vob2xkZXIgZmlybXdhcmUgZmlsZXMgZGlyZWN0bHkgd2l0aGluIHRoZSBpbWFnZS4gQnV0IHRoYXQgYnJpbmdzIG1lIHRvIGEgcG90ZW50aWFsbHkgY3JpdGljYWwgaXNzdWUgd2l0aCBgYnJjbWZtYWNgLgoKTm93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGJyY21mX3BjaWVfc2V0dXBgLiBTcGVjaWZpY2FsbHksIHRoZSBmaXJtd2FyZSBwYXJzaW5nIGRvbmUgdGhlcmU6IGBicmNtZl9wY2llX2FkanVzdF9yYW1zaXplKGRldmluZm8sICh1OCAqKWZ3LSZndDtkYXRhLCBmdy0mZ3Q7c2l6ZSk7YCBhbmQgYHJldCA9IGJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW0oZGV2aW5mbywgZncsIG52cmFtLCBudnJhbV9sZW4pO2AuIElmIFN5emthbGxlciYjMzk7cyBmaXJtd2FyZSBpcyBlc3NlbnRpYWxseSBqdXN0IGR1bW15IGJ5dGVzLCB3aWxsIHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgaXQgZ3JhY2VmdWxseT8gSSBuZWVkIHRvIGxvb2sgaW50byBgYnJjbWZfcGNpZV9hZGp1c3RfcmFtc2l6ZWAgbW9yZSBjbG9zZWx5LiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgbWlnaHQgYmUgd2hlcmUgdGhlIHByb2JsZW1zIGFyaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9wY2llX2FkanVzdF9yYW1zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTE1OTU9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MTU5NjpicmNtZl9wY2llX2FkanVzdF9yYW1zaXplKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHU4ICpkYXRhLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0xNTk3LVx0XHRcdCAgdTMyIGRhdGFfbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjEzNT1zdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIxNzUtXHQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjE3NjpcdGJyY21mX3BjaWVfYWRqdXN0X3JhbXNpemUoZGV2aW5mbywgKHU4ICopZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIxNzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjEzCgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhbmFseXplIHRob3NlIGZ1bmN0aW9ucywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgZ2VhcmVkIHRvd2FyZHMgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgRmlybXdhcmUgTG9hZGluZyBhbmQgUkFNIFNpemluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIEJyb2FkY29tIFBDSWUgZHJpdmVyIGhhbmRsZXMgZmlybXdhcmUgbG9hZGluZyBhbmQsIGNydWNpYWxseSwgaG93IGl0IG1hbmFnZXMgUkFNIHNpemUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYGJyY21mX3BjaWVfYWRqdXN0X3JhbXNpemVgIGFuZCBgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUsIGZyb20gdGhlIG5hbWVzIGFsb25lLCBwcm9iYWJseSB0aGUgY29yZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgdGhlIGRldmljZS4gSSBhbnRpY2lwYXRlIGBicmNtZl9wY2llX2FkanVzdF9yYW1zaXplYCBkZWFsaW5nIHdpdGggdGhlIGhhcmR3YXJlJiMzOTtzIG1lbW9yeSBjb25maWd1cmF0aW9uLCBwcm9iYWJseSByZWFkaW5nIHNvbWUgcmVnaXN0ZXJzIG9yIGV2ZW4gcHJvYmluZyB0byBmaWd1cmUgb3V0IHRoZSBhdmFpbGFibGUgUkFNIGFuZCBtYXliZSBldmVuIGRvaW5nIHNvbWUgZWFybHkgbWVtb3J5IGFsbG9jYXRpb24sIHdoZXJlYXMgYGJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW1gIGhhcyB0byBiZSBhbGwgYWJvdXQgZ2V0dGluZyB0aGF0IGZpcm13YXJlIGltYWdlIG9udG8gdGhlIGRldmljZS4gSSYjMzk7bSBndWVzc2luZyB0aGlzIG1pZ2h0IGludm9sdmUgRE1BIHRyYW5zZmVycywgYW5kIGxpa2VseSBzb21lIHNvcnQgb2YgaGFuZHNoYWtpbmcgb3Igc2lnbmFsaW5nIHRvIHRoZSBCcm9hZGNvbSBjaGlwIGl0c2VsZiB0byBpbml0aWF0ZSB0aGUgdHJhbnNmZXIgYW5kIGdldCBpdCByZWFkeSBmb3IgZXhlY3V0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMg4oCTIGhvdyB0aGV5IGRlYWwgd2l0aCBmYWlsZWQgdHJhbnNmZXJzLCBpbnZhbGlkIGZpcm13YXJlLCBvciB1bmV4cGVjdGVkIGhhcmR3YXJlIHJlc3BvbnNlcy4gRGVidWdnaW5nIHRoYXQgbGF0ZXIgb24gd2lsbCBiZSB0aGUgbWFpbiBnb2FsIGhlcmUuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gRG9lcyBgYWRqdXN0X3JhbXNpemVgIGhhcHBlbiBmaXJzdD8gRG9lcyBpdCBwcm92aWRlIGFueSBjb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBmaXJtd2FyZSBkb3dubG9hZD8gQXJlIHRoZXJlIGFueSBzaGFyZWQgcmVzb3VyY2VzIG9yIGRhdGEgc3RydWN0dXJlcyB0aGVzZSBmdW5jdGlvbnMgcmVseSBvbj8gSXQgaXMgYWxzbyBsaWtlbHkgdGhhdCBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgTlZSQU0gaXMgYmVpbmcgcmVmZXJlbmNlZC4gSXQgc2VlbXMgaW1wb3J0YW50IHRvIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgdGhlIGRyaXZlciB1bHRpbWF0ZWx5IGZ1bmN0aW9ucyBhbmQgaXMgbGlrZWx5IGEgcG90ZW50aWFsIHZlY3RvciBvZiBhIGJ1Zy4gSSYjMzk7bGwgd2FudCB0byB0cmFjZSBhbnkgcG90ZW50aWFsIHBhdGhzIHRvIHRoZXNlIGFyZWFzLiBJIHN1c3BlY3QsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCB0aGVyZSBtaWdodCBiZSBzb21lIHNwZWNpZmljIHRpbWluZyBjb25zaWRlcmF0aW9ucyBvciBzZXF1ZW5jaW5nIHJlcXVpcmVtZW50cyBoZXJlLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGF0IGFzIHdlbGwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGVzZSBmdW5jdGlvbnMgcmV2ZWFsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTk1Olx0c3RhdGljIHZvaWRcbjE1OTY6XHRicmNtZl9wY2llX2FkanVzdF9yYW1zaXplKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHU4ICpkYXRhLFxuMTU5NzpcdFx0XHRcdCAgdTMyIGRhdGFfbGVuKVxuMTU5ODpcdHtcbjE1OTk6XHRcdF9fbGUzMiAqZmllbGQ7XG4xNjAwOlx0XHR1MzIgbmV3c2l6ZTtcbjE2MDE6XHRcbjE2MDI6XHRcdGlmIChkYXRhX2xlbiBcdTAwM2MgQlJDTUZfUkFNU0laRV9PRkZTRVQgJiM0MzsgOClcbjE2MDM6XHRcdFx0cmV0dXJuO1xuMTYwNDpcdFxuMTYwNTpcdFx0ZmllbGQgPSAoX19sZTMyICopXHUwMDI2ZGF0YVtCUkNNRl9SQU1TSVpFX09GRlNFVF07XG4xNjA2Olx0XHRpZiAobGUzMl90b19jcHVwKGZpZWxkKSAhPSBCUkNNRl9SQU1TSVpFX01BR0lDKVxuMTYwNzpcdFx0XHRyZXR1cm47XG4xNjA4Olx0XHRmaWVsZCYjNDM7JiM0Mzs7XG4xNjA5Olx0XHRuZXdzaXplID0gbGUzMl90b19jcHVwKGZpZWxkKTtcbjE2MTA6XHRcbjE2MTE6XHRcdGJyY21mX2RiZyhQQ0lFLCBcJiMzNDtGb3VuZCByYW1zaXplIGluZm8gaW4gRlcsIGFkanVzdGluZyB0byAweCV4XFxuXCYjMzQ7LFxuMTYxMjpcdFx0XHQgIG5ld3NpemUpO1xuMTYxMzpcdFx0ZGV2aW5mby1cdTAwM2VjaS1cdTAwM2VyYW1zaXplID0gbmV3c2l6ZTtcbjE2MTQ6XHR9XG4xNjE1Olx0XG4xNjE2Olx0XG4xNjE3Olx0c3RhdGljIGludFxuMTYxODpcdGJyY21mX3BjaWVfaW5pdF9zaGFyZV9yYW1faW5mbyhzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLFxuMTYxOTpcdFx0XHRcdCAgICAgICB1MzIgc2hhcmVkcmFtX2FkZHIpXG4xNjIwOlx0e1xuMTYyMTpcdFx0c3RydWN0IGJyY21mX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNmRldmluZm8tXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuMTYyMjpcdFx0c3RydWN0IGJyY21mX3BjaWVfc2hhcmVkX2luZm8gKnNoYXJlZDtcbjE2MjM6XHRcdHUzMiBhZGRyO1xuMTYyNDpcdFxuMTYyNTpcdFx0c2hhcmVkID0gXHUwMDI2ZGV2aW5mby1cdTAwM2VzaGFyZWQ7XG4xNjI2Olx0XHRzaGFyZWQtXHUwMDNldGNtX2Jhc2VfYWRkcmVzcyA9IHNoYXJlZHJhbV9hZGRyO1xuMTYyNzpcdFxuMTYyODpcdFx0c2hhcmVkLVx1MDAzZWZsYWdzID0gYnJjbWZfcGNpZV9yZWFkX3RjbTMyKGRldmluZm8sIHNoYXJlZHJhbV9hZGRyKTtcbjE2Mjk6XHRcdHNoYXJlZC1cdTAwM2V2ZXJzaW9uID0gKHU4KShzaGFyZWQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJSQ01GX1BDSUVfU0hBUkVEX1ZFUlNJT05fTUFTSyk7XG4xNjMwOlx0XHRicmNtZl9kYmcoUENJRSwgXCYjMzQ7UENJZSBwcm90b2NvbCB2ZXJzaW9uICVkXFxuXCYjMzQ7LCBzaGFyZWQtXHUwMDNldmVyc2lvbik7XG4xNjMxOlx0XHRpZiAoKHNoYXJlZC1cdTAwM2V2ZXJzaW9uIFx1MDAzZSBCUkNNRl9QQ0lFX01BWF9TSEFSRURfVkVSU0lPTikgfHxcbjE2MzI6XHRcdCAgICAoc2hhcmVkLVx1MDAzZXZlcnNpb24gXHUwMDNjIEJSQ01GX1BDSUVfTUlOX1NIQVJFRF9WRVJTSU9OKSkge1xuMTYzMzpcdFx0XHRicmNtZl9lcnIoYnVzLCBcJiMzNDtVbnN1cHBvcnRlZCBQQ0lFIHZlcnNpb24gJWRcXG5cJiMzNDssXG4xNjM0Olx0XHRcdFx0ICBzaGFyZWQtXHUwMDNldmVyc2lvbik7XG4xNjM1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYzNjpcdFx0fVxuMTYzNzpcdFxuMTYzODpcdFx0LyogY2hlY2sgZmlybXdhcmUgc3VwcG9ydCBkbWEgaW5kaWNpZXMgKi9cbjE2Mzk6XHRcdGlmIChzaGFyZWQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJSQ01GX1BDSUVfU0hBUkVEX0RNQV9JTkRFWCkge1xuMTY0MDpcdFx0XHRpZiAoc2hhcmVkLVx1MDAzZWZsYWdzIFx1MDAyNiBCUkNNRl9QQ0lFX1NIQVJFRF9ETUFfMkJfSURYKVxuMTY0MTpcdFx0XHRcdGRldmluZm8tXHUwMDNlZG1hX2lkeF9zeiA9IHNpemVvZih1MTYpO1xuMTY0MjpcdFx0XHRlbHNlXG4xNjQzOlx0XHRcdFx0ZGV2aW5mby1cdTAwM2VkbWFfaWR4X3N6ID0gc2l6ZW9mKHUzMik7XG4xNjQ0Olx0XHR9XG4xNjQ1Olx0XG4xNjQ2Olx0XHRhZGRyID0gc2hhcmVkcmFtX2FkZHIgJiM0MzsgQlJDTUZfU0hBUkVEX01BWF9SWEJVRlBPU1RfT0ZGU0VUO1xuMTY0NzpcdFx0c2hhcmVkLVx1MDAzZW1heF9yeGJ1ZnBvc3QgPSBicmNtZl9wY2llX3JlYWRfdGNtMTYoZGV2aW5mbywgYWRkcik7XG4xNjQ4Olx0XHRpZiAoc2hhcmVkLVx1MDAzZW1heF9yeGJ1ZnBvc3QgPT0gMClcbjE2NDk6XHRcdFx0c2hhcmVkLVx1MDAzZW1heF9yeGJ1ZnBvc3QgPSBCUkNNRl9ERUZfTUFYX1JYQlVGUE9TVDtcbjE2NTA6XHRcbjE2NTE6XHRcdGFkZHIgPSBzaGFyZWRyYW1fYWRkciAmIzQzOyBCUkNNRl9TSEFSRURfUlhfREFUQU9GRlNFVF9PRkZTRVQ7XG4xNjUyOlx0XHRzaGFyZWQtXHUwMDNlcnhfZGF0YW9mZnNldCA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTtcbjE2NTM6XHRcbjE2NTQ6XHRcdGFkZHIgPSBzaGFyZWRyYW1fYWRkciAmIzQzOyBCUkNNRl9TSEFSRURfSFRPRF9NQl9EQVRBX0FERFJfT0ZGU0VUO1xuMTY1NTpcdFx0c2hhcmVkLVx1MDAzZWh0b2RfbWJfZGF0YV9hZGRyID0gYnJjbWZfcGNpZV9yZWFkX3RjbTMyKGRldmluZm8sIGFkZHIpO1xuMTY1NjpcdFxuMTY1NzpcdFx0YWRkciA9IHNoYXJlZHJhbV9hZGRyICYjNDM7IEJSQ01GX1NIQVJFRF9EVE9IX01CX0RBVEFfQUREUl9PRkZTRVQ7XG4xNjU4Olx0XHRzaGFyZWQtXHUwMDNlZHRvaF9tYl9kYXRhX2FkZHIgPSBicmNtZl9wY2llX3JlYWRfdGNtMzIoZGV2aW5mbywgYWRkcik7XG4xNjU5Olx0XG4xNjYwOlx0XHRhZGRyID0gc2hhcmVkcmFtX2FkZHIgJiM0MzsgQlJDTUZfU0hBUkVEX1JJTkdfSU5GT19BRERSX09GRlNFVDtcbjE2NjE6XHRcdHNoYXJlZC1cdTAwM2VyaW5nX2luZm9fYWRkciA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTtcbjE2NjI6XHRcbjE2NjM6XHRcdGJyY21mX2RiZyhQQ0lFLCBcJiMzNDttYXggcnggYnVmIHBvc3QgJWQsIHJ4IGRhdGFvZmZzZXQgJWRcXG5cJiMzNDssXG4xNjY0Olx0XHRcdCAgc2hhcmVkLVx1MDAzZW1heF9yeGJ1ZnBvc3QsIHNoYXJlZC1cdTAwM2VyeF9kYXRhb2Zmc2V0KTtcbjE2NjU6XHRcbjE2NjY6XHRcdGJyY21mX3BjaWVfYnVzX2NvbnNvbGVfaW5pdChkZXZpbmZvKTtcbjE2Njc6XHRcdGJyY21mX3BjaWVfYnVzX2NvbnNvbGVfcmVhZChkZXZpbmZvLCBmYWxzZSk7XG4xNjY4Olx0XG4xNjY5Olx0XHRyZXR1cm4gMDtcbjE2NzA6XHR9XG4xNjcxOlx0XG4xNjcyOlx0c3RydWN0IGJyY21mX3JhbmRvbV9zZWVkX2Zvb3RlciB7XG4xNjczOlx0XHRfX2xlMzIgbGVuZ3RoO1xuMTY3NDpcdFx0X19sZTMyIG1hZ2ljO1xuMTY3NTpcdH07XG4xNjc2Olx0XG4xNjc3Olx0I2RlZmluZSBCUkNNRl9SQU5ET01fU0VFRF9NQUdJQ1x0XHQweGZlZWRjMGRlXG4xNjc4Olx0I2RlZmluZSBCUkNNRl9SQU5ET01fU0VFRF9MRU5HVEhcdDB4MTAwXG4xNjc5Olx0XG4xNjgwOlx0c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkXG4xNjgxOlx0YnJjbWZfcGNpZV9wcm92aWRlX3JhbmRvbV9ieXRlcyhzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1MzIgYWRkcmVzcylcbjE2ODI6XHR7XG4xNjgzOlx0XHR1OCByYW5kYnVmW0JSQ01GX1JBTkRPTV9TRUVEX0xFTkdUSF07XG4xNjg0Olx0XG4xNjg1Olx0XHRnZXRfcmFuZG9tX2J5dGVzKHJhbmRidWYsIEJSQ01GX1JBTkRPTV9TRUVEX0xFTkdUSCk7XG4xNjg2Olx0XHRtZW1jcHlfdG9pbyhkZXZpbmZvLVx1MDAzZXRjbSAmIzQzOyBhZGRyZXNzLCByYW5kYnVmLCBCUkNNRl9SQU5ET01fU0VFRF9MRU5HVEgpO1xuMTY4NzpcdH1cbjE2ODg6XHRcbjE2ODk6XHRzdGF0aWMgaW50IGJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW0oc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbyxcbjE2OTA6XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqbnZyYW0sXG4xNjkxOlx0XHRcdFx0XHRcdHUzMiBudnJhbV9sZW4pXG4xNjkyOlx0e1xuMTY5MzpcdFx0c3RydWN0IGJyY21mX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNmRldmluZm8tXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuMTY5NDpcdFx0dTMyIHNoYXJlZHJhbV9hZGRyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTk3MwoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGJyY21mX3BjaWUgRmlybXdhcmUgRG93bmxvYWQgYW5kIFNoYXJlZCBSQU0gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgd3JpdGVzIHRoZSBmaXJtd2FyZSB0byB0aGUgZGV2aWNlJiMzOTtzIFRhcmdldCBDb2RlIE1lbW9yeSAoVENNKS4gSW50ZXJlc3RpbmcuIFRoZW4sIGl0JiMzOTtzIGdyYWJiaW5nIHRoZSBgc2hhcmVkcmFtX2FkZHJgIGZyb20gdGhlIGRldmljZSBtZW1vcnkuIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEZvbGxvd2luZyB0aGF0LCBgYnJjbWZfcGNpZV9pbml0X3NoYXJlX3JhbV9pbmZvYCBpcyBjYWxsZWQsIHdoaWNoIHRoZW4gcHJvY2VlZHMgdG8gcHVsbCBhIGJ1bmNoIG9mIG9mZnNldCB2YWx1ZXMgZnJvbSB0aGUgZGV2aWNlIG1lbW9yeS4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJZiBzeXprYWxsZXIgaXMgbW9ja2luZyB0aGUgZGV2aWNlIG1lbW9yeSwgcGVyaGFwcyB0aHJvdWdoIE1NSU8gbW9ja2luZyBpbiBgc3l6X3BjaV9kZXZpY2VfYWRkYCwgdGhlbiBgYnJjbWZfcGNpZV9yZWFkX3RjbTMyYCBpcyBnb2luZyB0byByZXR1cm4gZGF0YSBjb250cm9sbGVkIGJ5IHRoZSBmdXp6ZXIuIEhvbGQgb24sIGBicmNtZl9wY2llX3JlYWRfdGNtMzJgIHJlYWRzIGZyb20gYGRldmluZm8tJmd0O3RjbWAuIFJpZ2h0LCBzbyBgZGV2aW5mby0mZ3Q7dGNtYCBpcyB0aGUgYWRkcmVzcyB0aGF0IGFjdHVhbGx5IGdldHMgcmVhZCBmcm9tLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBgZGV2aW5mby0mZ3Q7dGNtYCBpcyBtYXBwZWQgdG8sIHNvIEkgY2FuIHNlZSB3aGF0IGtpbmQgb2YgaW1wYWN0IGEgZnV6emVyLWNvbnRyb2xsZWQgdmFsdWUgY291bGQgaGF2ZSBpbiB0aGF0IG1lbW9yeSBsb2NhdGlvbi4gVGltZSB0byB0cmFjZSB0aGF0IHBvaW50ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmluZm8tXHUwMDNldGNtID0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MTc4Mz1zdGF0aWMgaW50IGJyY21mX3BjaWVfZ2V0X3Jlc291cmNlKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0xODExLVx0ZGV2aW5mby1cdTAwM2VyZWdzID0gaW9yZW1hcChiYXIwX2FkZHIsIEJSQ01GX1BDSUVfUkVHX01BUF9TSVpFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MTgxMjpcdGRldmluZm8tXHUwMDNldGNtID0gaW9yZW1hcChiYXIxX2FkZHIsIGJhcjFfc2l6ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTE4MTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzE2CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYCBGdW5jdGlvbiB2aWEgU3l6a2FsbGVyKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgYGRldmluZm8tJmd0O3RjbWAgaXMgbWFwcGVkIGZyb20gQkFSMSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEFuZCByaWdodCwgU3l6a2FsbGVy4oCZcyBQQ0kgZnV6emVyIG1vY2tzIHRob3NlIEJBUnMhIFRoaXMgbWVhbnMgYGJyY21mX3BjaWVfcmVhZF90Y20zMmAgd2lsbCBiZSByZWFkaW5nIGZyb20gdGhhdCBtb2NrZWQgQkFSMSwgd2hpY2ggaXMgY29tcGxldGVseSB1bmRlciB0aGUgZnV6emVyJiMzOTtzIGNvbnRyb2wuIFRoYXQmIzM5O3MgZ29vZDsgaXQgbWVhbnMgdGhlIGZ1enplciAqY2FuKiBwcm92aWRlIGEgdmFsaWQgYHNoYXJlZC0mZ3Q7dmVyc2lvbmAg4oCTIGJldHdlZW4gdGhvc2UgbWluL21heCB2YWx1ZXMg4oCTIGFuZCBwb3RlbnRpYWxseSB2YWxpZCBvZmZzZXRzIHRvby4KClRoaXMgbG9va3MgcHJvbWlzaW5nLiBJIHNlZSBgYnJjbWZfcGNpZV9zZXR1cGAgY2FsbGVkLCB0aGVuIGl0IGNhbGxzIGBicmNtZl9hdHRhY2hgLCB3aGljaCBjYWxscyBgYnJjbWZfcHJvdG9fYXR0YWNoYCwgd2hpY2ggY2FsbHMgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgLCBhbmQgZmluYWxseSwgdGhhdCBjYWxscyBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYC4gWWVwLCBpdOKAmXMgY2xlYXI6IHRoaXMgKmlzKiByZWFjaGFibGUgdmlhIHRoZSBTeXprYWxsZXIgUENJIGZ1enplciEKCkJ1dCB3YWl0LCBob2xkIG9uLi4uIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IG1lbnRpb24gc29tZSBzY2VuYXJpb3Mgd2hlcmUgaXTigJlzICpub3QqIHdvcnRoIGZ1enppbmcuIEl0IHNheXM6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsKCklzIGBicmNtZm1hY2AgY29uc2lkZXJlZCBvbmUgb2YgdGhlc2U/IFRoZSBleGFtcGxlcyBhcmUgYWxsIGNvbXBsZXggZGV2aWNlcywgbGlrZSBgbWx4c3dgIChNZWxsYW5veCBzd2l0Y2gpLCBgcGRzX2NvcmVgIChQZW5zYW5kbyBTbWFydE5JQyksIGBxZWRgIChRTG9naWMgRmFzdExpblEpLCBgaW9uaWNgIChQZW5zYW5kbyBJb25pYyksIGBhbWRncHVgIChBTUQgR1BVKS4gVGhvc2UgZGVmaW5pdGVseSBuZWVkIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZW11bGF0aW9uLiBCdXQgYGJyY21mbWFjYCBpcyBqdXN0IGEgV2ktRmkgZHJpdmVyLiBBbmQgU3l6a2FsbGVyIGZ1enplcyBXaS1GaSBkcml2ZXJzIGV4dGVuc2l2ZWx5LCBzbyBJIHdvdWxkbuKAmXQgZXhwZWN0IHRoZXJlIHRvIGJlIGEgcHJvYmxlbS4KCkhhbmcgb24uLi4gZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKmZ1enoqIGBicmNtZm1hY2A/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQuIExldCYjMzk7cyBzZWUgaWYgYEJSQ01GTUFDYCBpcyBldmVuIGVuYWJsZWQgaW4gU3l6a2FsbGVyIGNvbmZpZ3MsIG9yIGlmIHRoZXJlIGFyZSBhbnkgU3l6a2FsbGVyIHBzZXVkby1zeXNjYWxscyBkZWZpbmVkIGZvciBpdC4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGUgZHJpdmVyIGlzIHR5cGljYWxseSBjb21waWxlZCBpbiBTeXprYWxsZXLigJlzIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBgS2NvbmZpZ2AgZm9yIGBicmNtZm1hY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUkNNRk1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTpjb25maWcgQlJDTUZNQUNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxMTpjb25maWcgQlJDTUZNQUNfUFJPVE9fQkNEQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXHRib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE1LVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNzpjb25maWcgQlJDTUZNQUNfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTgtXHRib29sIFwmIzM0O1NESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6Mjk6Y29uZmlnIEJSQ01GTUFDX1VTQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXHRib29sIFwmIzM0O1VTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctNDEtXHRib29sIFwmIzM0O1BDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM3NgoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEZXBlbmRlbmN5IENoZWNrIGZvciBCUkNNRk1BQ19QQ0lFKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgQlJDTUZNQUNfUENJRWAgbW9kdWxlLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB3aGF0IGl0IHJlbGllcyBvbiDigJMgYm90aCBkaXJlY3RseSBhbmQgdHJhbnNpdGl2ZWx5LiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgYW55IGZ1dHVyZSBtb2RpZmljYXRpb25zLCBkZWJ1Z2dpbmcsIG9yIGV2ZW4ganVzdCBhc3Nlc3NpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgY2hhbmdlcyBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgKmV4YWN0bHkqIHdoYXQgdGhpcyBtb2R1bGUmIzM5O3MgZnVuY3Rpb25hbGl0eSBoaW5nZXMgdXBvbi4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgY2xlYXIgbWFwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzOTpcdFxuICA0MDpcdGNvbmZpZyBCUkNNRk1BQ19QQ0lFXG4gIDQxOlx0XHRib29sIFwmIzM0O1BDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuICA0MjpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNDQ6XHRcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19NU0dCVUZcbiAgNDU6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgNDY6XHRcdGhlbHBcbiAgNDc6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgUENJRSBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXG4gIDQ4Olx0XHQgIElFRUU4MDIuMTFhYyBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xuICA0OTpcdFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYW4gUENJRSB3aXJlbGVzcyBjYXJkLlxuICA1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc3MAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGxhaWQgb3V0IGxvZ2ljYWxseToKCioqRGVwZW5kZW5jeSBDaGFpbiBCcmVha2Rvd24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBCUkNNRk1BQ19QQ0lFYCBoZXJlLiBJdCBzZWVtcyBwcmV0dHkgb2J2aW91cyB0aGF0IGl0JiMzOTtzIGJ1aWx0IG9uIHRvcCBvZiBgQlJDTUZNQUNgLCBhbmQgYWxzbyByZXF1aXJlcyB0aGUgYFBDSWAgbGF5ZXIgZm9yLCB3ZWxsLCBQQ0llIGZ1bmN0aW9uYWxpdHkuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYSBiaXQgZnVydGhlci4gYEJSQ01GTUFDYCBpdHNlbGYuLi4gSSYjMzk7bSBzdHJvbmdseSBzdXNwZWN0aW5nIGl0IGhpbmdlcyBvbiBib3RoIGBDRkc4MDIxMWAgYW5kIGBNQUM4MDIxMWAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgV2ktRmkgc3RhY2sgcmVsYXRpb25zaGlwLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJSQ01GTUFDYCBpdHNlbGYuIEp1c3QgdG8gdmVyaWZ5LiBUaGlzIHdheSwgSSBjYW4gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgbWFrZSBzdXJlIHRoZSB3aG9sZSBwaWN0dXJlIGlzIGNyeXN0YWwgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgQlJDTUZNQUNcbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDQ6XHRcdHNlbGVjdCBCUkNNVVRJTFxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXG4gICA3Olx0XHQgIEZ1bGxNQUMgY2hpcHNldHMuIEl0IGhhcyB0byB3b3JrIHdpdGggYXQgbGVhc3Qgb25lIG9mIHRoZSBidXNcbiAgIDg6XHRcdCAgaW50ZXJmYWNlIHN1cHBvcnQuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWRcbiAgIDk6XHRcdCAgYnJjbWZtYWMua28uXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG4gIDE1Olx0XHRib29sXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIEJSQ01GTUFDX1NESU9cbiAgMTg6XHRcdGJvb2wgXCYjMzQ7U0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIChNTUMgPSB5IHx8IE1NQyA9IEJSQ01GTUFDKVxuICAyMDpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTMzNwoJCQkJCQkJb3V0cHV0OiA1NgoJCQkJCQkJdGhvdWdodHM6IDMyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBCUkNNRk1BQyBXaS1GaSBEcml2ZXIqKgoKT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgLCB3aGljaCBJIGtub3cgaXMgcGFydCBvZiB0aGUgYEJSQ01GTUFDYCBkcml2ZXIsIGFuZCBgQlJDTUZNQUNgIGRlcGVuZHMgb24gYENGRzgwMjExYC4gVGhlIGNoYW5nZSBpdHNlbGYgc2VlbXMgZnVuY3Rpb25hbDsgaXQmIzM5O3MgYWRkaW5nIGBwa3RpZHMtJmd0O2RpcmVjdGlvbiA9IGRpcmVjdGlvbjtgLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmc/IENvbnNpZGVyaW5nIGl0JiMzOTtzIGEgV2ktRmkgZHJpdmVyIGFuZCB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwsIEkgdGhpbmsgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBhIHNob3QsIGVzcGVjaWFsbHkgc2luY2UgV2ktRmkgZHJpdmVycyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgUENJIGZ1enplci4KCldhaXQsIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2suLi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgYnJjbWZtYWNgIGlzbiYjMzk7dCBvbmUgb2YgdGhvc2UgZHJpdmVycyB0aGF0IHNwZWNpZmljYWxseSBuZWVkcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLiBUaGUgcHJvbXB0IGxpc3RzIGV4Y2VwdGlvbnMgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4gV2ktRmkgaXNuJiMzOTt0IG9uIHRoYXQgbGlzdDsgZHJpdmVycyBsaWtlIGBpd2x3aWZpYCwgYGF0aDEwa2AsIGBydHc4OGAsIGBtdDc2YCBhbGwgZ2V0IGZ1enplZCB2aWEgUENJLiBTbywgd2UmIzM5O3JlIGdvb2QgdG8gZ28uCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBhcmUgdGhhdCB3ZSYjMzk7bGwgZm9jdXMgb24uIGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXRzIHZpc2liaWxpdHkgaXMgbGltaXRlZC4gQnV0IGl0IGlzIGNhbGxlZCBieSBgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaGAsIGFuZCB0aGF0IGlzbiYjMzk7dCBzdGF0aWMuIEFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaGAgYW5kIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9wcm90b19tc2didWZfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xNTIzPXN0YXRpYyB2b2lkIGJyY21mX21zZ2J1Zl9kZWJ1Z2ZzX2NyZWF0ZShzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNTI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE1Mjg6aW50IGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNTI5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyNDYKCQkJCQkJCW91dHB1dDogNTcKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGZ1bmN0aW9uOyB0aGF0IHNlZW1zIGxpa2UgYSBrZXkgYXJlYSBmb3IgdGhpcyBwYXRjaC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBiZWluZyBhZmZlY3RlZC4gQnV0IGJlZm9yZSBJIGdvIHRvbyBkZWVwLCBsZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kOyBhcmUgdGhlcmUgYW55ICpvdGhlciogZnVuY3Rpb25zIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGF0IEkgc2hvdWxkIGNvbnNpZGVyPyBMZXQgbWUgc2VlLi4uIEFoYSwgdGhlIHBhdGNoIGlzIGFsc28gbW9kaWZ5aW5nIGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgLiBJbnRlcmVzdGluZy4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGRvZXMgYW55dGhpbmcgKmVsc2UqIGNhbGwgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2A/IEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGZhciB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIHJpcHBsZXMgdGhyb3VnaG91dCB0aGUgZHJpdmVyLiBHb3R0YSBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0yOTU9c3RhdGljIHN0cnVjdCBicmNtZl9tc2didWZfcGt0aWRzICpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoyOTY6YnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKHUzMiBucl9hcnJheV9lbnRyaWVzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTI5Ny1cdFx0XHQgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xNTI4PWludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2MDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTYwMzpcdG1zZ2J1Zi1cdTAwM2V0eF9wa3RpZHMgPSBicmNtZl9tc2didWZfaW5pdF9wa3RpZHMoTlJfVFhfUEtUSURTLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2MDQtXHRcdFx0XHRcdFx0ICAgICBETUFfVE9fREVWSUNFKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTYwNi1cdFx0Z290byBmYWlsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE2MDc6XHRtc2didWYtXHUwMDNlcnhfcGt0aWRzID0gYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKE5SX1JYX1BLVElEUyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNjA4LVx0XHRcdFx0XHRcdCAgICAgRE1BX0ZST01fREVWSUNFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwMjYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gaG9taW5nIGluIG9uIHRoaXMgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGF0JiMzOTtzIHdoZXJlIHRoaXMgd2hvbGUgdGhpbmcga2lja3Mgb2ZmLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhpcyBjb2RlIG1vZGlmaWNhdGlvbi4gV2hpbGUgYGJyY21mX3BjaWVfcHJvYmVgICpjb3VsZCogYmUgYSByZWxhdGVkIHN5bWJvbCwgaXQmIzM5O3MgcHJldHR5IGdlbmVyaWMgYXMgYSBwcm9iZSBmdW5jdGlvbiwgcmlnaHQ/IGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCBmZWVscyBtdWNoIG1vcmUgdGFyZ2V0ZWQgdG8gdGhlIHNwZWNpZmljIGNoYW5nZXMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB3aGF0JiMzOTtzIG5lZWRlZCBmb3IgdGhpcyB0byBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCBgQlJDTUZNQUNgLCBvYnZpb3VzbHksIGFuZCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSBzdXNwZWN0IGBCUkNNRk1BQ19QQ0lFYCBhcyB3ZWxsLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZXJlJiMzOTtzIHRoZSBzdGFuZGFyZCBgQ0ZHODAyMTFgIGFuZCBgUENJYC4gSSYjMzk7bSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNvbXBvbmVudHMuCgpCdXQsIGFyZSB0aGVyZSBhbnkgKm90aGVyKiByZWxldmFudCBjb25maWdzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBMZXQgbWUgcHVsbCB1cCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnYCBmaWxlIGFuZCBjaGVjay4gSSBqdXN0IHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBzcGVjaWZpYyBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgQlJDTVVUSUxcbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIEJSQ01TTUFDXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBJRUVFODAyLjExbiBQQ0llIFNvZnRNQUMgV0xBTiBkcml2ZXJcJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDg6XHRcdGRlcGVuZHMgb24gQkNNQV9QT1NTSUJMRVxuICAgOTpcdFx0c2VsZWN0IEJDTUFcbiAgMTA6XHRcdHNlbGVjdCBCUkNNVVRJTFxuICAxMTpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAxMjpcdFx0c2VsZWN0IENPUkRJQ1xuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFBDSWUgd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gQnJvYWRjb21cbiAgMTU6XHRcdCAgSUVFRTgwMi4xMW4gU29mdE1BQyBjaGlwc2V0cy4gSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgdGhlXG4gIDE2Olx0XHQgIGRyaXZlciB3aWxsIGJlIGNhbGxlZCBicmNtc21hYy5rby5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgQlJDTVNNQUNfTEVEU1xuICAxOTpcdFx0ZGVmX2Jvb2wgQlJDTVNNQUMgXHUwMDI2XHUwMDI2IEJDTUFfRFJJVkVSX0dQSU8gXHUwMDI2XHUwMDI2IE1BQzgwMjExX0xFRFNcbiAgMjA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3NzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBCcm9hZGNvbSBXaXJlbGVzcyBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBCUkNNRk1BQ2Agc3ltYm9sIGlzIGRlZmluZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBicm9hZGNvbSB3aXJlbGVzcyBkcml2ZXIgZGlyZWN0b3J5LiBBaCwgeWVzLCBoZXJlIGl0IGlzIC0gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnYC4gR29vZC4gTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyB0YWtlIGEgbG9vayBhdCB0aGUgcGFyZW50IGBLY29uZmlnYCBmaWxlIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9LY29uZmlnYC4gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlci4gVGhhdCBtaWdodCBnaXZlIG1lIHNvbWUgY29udGV4dCBJIGNhbiB1c2UgbGF0ZXIgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXTEFOX1ZFTkRPUl9CUk9BRENPTVxuICAgMzpcdFx0Ym9vbCBcJiMzNDtCcm9hZGNvbSBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IHlcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgSWYgeW91IGhhdmUgYSB3aXJlbGVzcyBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gICA5Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDEwOlx0XHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcbiAgMTE6XHRcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxMjpcdFxuICAxMzpcdGlmIFdMQU5fVkVORE9SX0JST0FEQ09NXG4gIDE0Olx0XG4gIDE1Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0My9LY29uZmlnXCYjMzQ7XG4gIDE2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0M2xlZ2FjeS9LY29uZmlnXCYjMzQ7XG4gIDE3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnXCYjMzQ7XG4gIDE4Olx0XG4gIDE5Olx0ZW5kaWYgIyBXTEFOX1ZFTkRPUl9CUk9BRENPTVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODMxOQoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFdMQU4gc2V0dXAsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgSSYjMzk7bSBnb2luZyB0byBuZWVkIGBXTEFOX1ZFTkRPUl9CUk9BRENPTWAuIEkgbWVhbiwgdGhhdCYjMzk7cyBhIGdpdmVuLiBBbmQgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBgV0xBTmAgY29uZmlndXJhdGlvbiBpcyBlc3NlbnRpYWwgYXMgd2VsbC4gU28sIGxldCYjMzk7cyBqdXN0IG1ha2UgYSBxdWljayBsaXN0IHRvIGhhdmUgaXQgYWxsIGluIG9uZSBwbGFjZTogYFdMQU5gLCBgV0xBTl9WRU5ET1JfQlJPQURDT01gLCBgQ0ZHODAyMTFgLCBgQlJDTUZNQUNgLCBgQlJDTUZNQUNfUENJRWAsIGFuZCBgUENJYC4gTWFrZXMgc2Vuc2Ugc28gZmFyLiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHRvIGF2b2lkIGFueSBkb3duc3RyZWFtIGlzc3VlcywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgQlJDTUZNQUNfUENJRWAgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBsaW5lZCB1cCByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzk6XHRcbiAgNDA6XHRjb25maWcgQlJDTUZNQUNfUENJRVxuICA0MTpcdFx0Ym9vbCBcJiMzNDtQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbiAgNDI6XHRcdGRlcGVuZHMgb24gQlJDTUZNQUNcbiAgNDM6XHRcdGRlcGVuZHMgb24gUENJXG4gIDQ0Olx0XHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG4gIDQ1Olx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDQ2Olx0XHRoZWxwXG4gIDQ3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxuICA0ODpcdFx0ICBJRUVFODAyLjExYWMgZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cbiAgNDk6XHRcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGFuIFBDSUUgd2lyZWxlc3MgY2FyZC5cbiAgNTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4MjIKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogMzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCcm9hZGNvbSBGaXJtd2FyZSBNZXNzYWdlIEJ1ZmZlciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkZXBlbmRlbmN5IGNoYWluIHRoYXQgdWx0aW1hdGVseSBpbnZvbHZlcyB0aGUgYEJSQ01GTUFDYCBhbmQgYFBDSWAgc3Vic3lzdGVtcy4gU3BlY2lmaWNhbGx5LCBgQlJDTUZNQUNgIGRlcGVuZHMgb24gYENGRzgwMjExYCwgYW5kIHNvIG9uLiBUaGUga2V5IG1vZHVsZXMgaGVyZSBhcmUgYFdMQU5gLCBgV0xBTl9WRU5ET1JfQlJPQURDT01gLCBgQ0ZHODAyMTFgLCBgQlJDTUZNQUNgLCBgQlJDTUZNQUNfUENJRWAsIGFuZCBgUENJYC4gVGhpcyBnaXZlcyB1cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKTXkgbWFpbiBmb2N1cyBpcyB0byB2ZXJpZnkgaWYgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AgaXMgcmVhY2hhYmxlLiBBZnRlciByZXZpZXdpbmcgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgaXQgaXMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCwgd2hpY2ggZ2V0cyBjYWxsZWQgd2hlbiBgZHJ2ci0mZ3Q7YnVzX2lmLSZndDtwcm90b190eXBlYCBpcyBgQlJDTUZfUFJPVE9fTVNHQlVGYC4gVGhpcywgaW4gdHVybiwgaXMgc2V0IGluIGBicmNtZl9wY2llX3Byb2JlYCwgaW1wbHlpbmcgdGhhdCB3ZSBjYW4gdHJpZ2dlciB0aGlzIHBhdGggdGhyb3VnaCBQQ0kgaW50ZXJhY3Rpb25zLiBQZXJmZWN0LgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHRoZSBwYXRjaC4gSSBzZWUgYSBjb2RlIGNoYW5nZSB0aGF0IGFkZHMgYHBrdGlkcy0mZ3Q7ZGlyZWN0aW9uID0gZGlyZWN0aW9uO2AgdG8gdGhlIGZ1bmN0aW9uIGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKi4gSXQmIzM5O3MgYSBmaWVsZCBiZWluZyBhZGRlZCB0byBhIHN0cnVjdHVyZS4gVGhpcyBtZWFucyBpdCBoYXMgYSBwb3RlbnRpYWwgaW1wYWN0IG9uIGhvdyBkYXRhIGlzIGhhbmRsZWQgb3IgaW50ZXJwcmV0ZWQuIFRodXMsIHdlIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgdGhpcyBpbiBvdXIgZnV6emluZyBzdHJhdGVneS4gV2UgbmVlZCB0byBleHBsb3JlIGFueSBhcmVhcyB0aGF0IHVzZSBgcGt0aWRzYCB0byBlbnN1cmUgdGhlIG5ldyBmaWVsZCBpcyBwcm9wZXJseSBoYW5kbGVkLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy4KClNvLCBsZXQmIzM5O3MgZm9ybWFsaXplIHRoZSBmdXp6aW5nIHN0cmF0ZWd5IGJhc2VkIG9uIHRoZSBhYm92ZSBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU4mIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfQlJPQURDT00mIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7QlJDTUZNQUMmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfUENJRSYjMzQ7LAogICAgJiMzNDtQQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticmNtZl9wcm90b19tc2didWZfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYnkgc2V0dGluZyB0aGUgJiMzOTtkaXJlY3Rpb24mIzM5OyBmaWVsZCBpbiB0aGUgJiMzOTticmNtZl9tc2didWZfcGt0aWRzJiMzOTsgc3RydWN0IGR1cmluZyBpbml0aWFsaXphdGlvbi4gVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKSBhbmQgaXMgc3BlY2lmaWNhbGx5IHJlYWNoYWJsZSB2aWEgdGhlIFBDSWUgYnVzIGludGVyZmFjZSAoQlJDTUZfUFJPVE9fTVNHQlVGKS4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgdmlhIGl0cyBQQ0kgZGV2aWNlIGluamVjdGlvbi9tb2NraW5nIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTiYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9CUk9BRENPTSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQyYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19QQ0lFJiMzNDssCiAgICAmIzM0O1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBieSBzZXR0aW5nIHRoZSAmIzM5O2RpcmVjdGlvbiYjMzk7IGZpZWxkIGluIHRoZSAmIzM5O2JyY21mX21zZ2J1Zl9wa3RpZHMmIzM5OyBzdHJ1Y3QgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYnJjbWZtYWMpIGFuZCBpcyBzcGVjaWZpY2FsbHkgcmVhY2hhYmxlIHZpYSB0aGUgUENJZSBidXMgaW50ZXJmYWNlIChCUkNNRl9QUk9UT19NU0dCVUYpLiBTeXprYWxsZXIgY2FuIGZ1enogdGhpcyB2aWEgaXRzIFBDSSBkZXZpY2UgaW5qZWN0aW9uL21vY2tpbmcgY2FwYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTU6MzMuMTU2NTU1NTMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NDk1Nzg4NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5cIixcbiAgICBcIldMQU5fVkVORE9SX0JST0FEQ09NXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1BDSUVcIixcbiAgICBcIlBDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJ5IHNldHRpbmcgdGhlICdkaXJlY3Rpb24nIGZpZWxkIGluIHRoZSAnYnJjbWZfbXNnYnVmX3BrdGlkcycgc3RydWN0IGR1cmluZyBpbml0aWFsaXphdGlvbi4gVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKSBhbmQgaXMgc3BlY2lmaWNhbGx5IHJlYWNoYWJsZSB2aWEgdGhlIFBDSWUgYnVzIGludGVyZmFjZSAoQlJDTUZfUFJPVE9fTVNHQlVGKS4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgdmlhIGl0cyBQQ0kgZGV2aWNlIGluamVjdGlvbi9tb2NraW5nIGNhcGFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTU6MzMuMTU2NTYzNDEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk3MjI4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MTZjMzIwNDkyMWVhMjM2NWE4NTQ3YmRiZWQ0NmY5NGFhMTAyMmM4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDE0OjE1OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xcbmluZGV4IGJhMWNlMTU1MmUwZjQzLi5jMWZlYjE2NGQ4NDVhNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcXG5AQCAtMzEwLDYgKzMxMCw3IEBAIGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkcyh1MzIgbnJfYXJyYXlfZW50cmllcyxcXG4gXFx0fVxcbiBcXHRwa3RpZHMtXFx1MDAzZWFycmF5ID0gYXJyYXk7XFxuIFxcdHBrdGlkcy1cXHUwMDNlYXJyYXlfc2l6ZSA9IG5yX2FycmF5X2VudHJpZXM7XFxuK1xcdHBrdGlkcy1cXHUwMDNlZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xcbiBcXG4gXFx0cmV0dXJuIHBrdGlkcztcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNTozMy44NzcxNjc5NzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTg3NzUxNjYwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTlwiLFxuICAgIFwiV0xBTl9WRU5ET1JfQlJPQURDT01cIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJCUkNNRk1BQ1wiLFxuICAgIFwiQlJDTUZNQUNfUENJRVwiLFxuICAgIFwiUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYnkgc2V0dGluZyB0aGUgJ2RpcmVjdGlvbicgZmllbGQgaW4gdGhlICdicmNtZl9tc2didWZfcGt0aWRzJyBzdHJ1Y3QgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYnJjbWZtYWMpIGFuZCBpcyBzcGVjaWZpY2FsbHkgcmVhY2hhYmxlIHZpYSB0aGUgUENJZSBidXMgaW50ZXJmYWNlIChCUkNNRl9QUk9UT19NU0dCVUYpLiBTeXprYWxsZXIgY2FuIGZ1enogdGhpcyB2aWEgaXRzIFBDSSBkZXZpY2UgaW5qZWN0aW9uL21vY2tpbmcgY2FwYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MTZjMzIwNDkyMWVhMjM2NWE4NTQ3YmRiZWQ0NmY5NGFhMTAyMmM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTQ6MTU6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcbmluZGV4IGJhMWNlMTU1MmUwZjQzLi5jMWZlYjE2NGQ4NDVhNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXG5AQCAtMzEwLDYgKzMxMCw3IEBAIGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkcyh1MzIgbnJfYXJyYXlfZW50cmllcyxcbiBcdH1cbiBcdHBrdGlkcy1cdTAwM2VhcnJheSA9IGFycmF5O1xuIFx0cGt0aWRzLVx1MDAzZWFycmF5X3NpemUgPSBucl9hcnJheV9lbnRyaWVzO1xuK1x0cGt0aWRzLVx1MDAzZWRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiBcbiBcdHJldHVybiBwa3RpZHM7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTU6MzMuODc3MTY5OTIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NjgyODYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byBgYnJjbWZtYWMvbXNnYnVmLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY2AuIEl0J3MgYSBzaW1wbGUgb25lLCByZWFsbHk7IGl0IGp1c3QgYWRkcyBgcGt0aWRzLVx1MDAzZWRpcmVjdGlvbiA9IGRpcmVjdGlvbjtgIHRvIHRoZSBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYCBmdW5jdGlvbi4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVmb3JlIGFwcHJvdmluZyBzb21ldGhpbmcuIExldCdzIGRpZyBpbnRvIHRoYXQgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AgZnVuY3Rpb24gd2l0aGluIGBtc2didWYuY2AgaXRzZWxmLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG1lc3NhZ2UgYnVmZmVyIGFyY2hpdGVjdHVyZSBvZiB0aGUgYnJjbWZtYWMgZHJpdmVyLiBXaGF0IGRvZXMgYHBrdGlkc2AgYWN0dWFsbHkgcmVwcmVzZW50PyBXaGF0IGlzIHRoZSBgZGlyZWN0aW9uYCBwYXJhbWV0ZXIsIGFuZCB3aHkgaXMgdGhpcyBhc3NpZ25tZW50IGJlaW5nIGFkZGVkIG5vdz8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGJlIGtleSBoZXJlLiBJcyB0aGlzIGZpeGluZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiwgYWRkaW5nIGEgbWlzc2luZyBpbml0aWFsaXphdGlvbiwgb3IgZW5hYmxpbmcgc29tZSBuZXcgZnVuY3Rpb25hbGl0eT8gVGltZSB0byBnbyBsaW5lLWJ5LWxpbmUgYW5kIGZpZ3VyZSB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MCwiT3V0cHV0VG9rZW5zIjo1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE1OjM4LjA0NDAwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODYzNzIyOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9Mjk1PXN0YXRpYyBzdHJ1Y3QgYnJjbWZfbXNnYnVmX3BrdGlkcyAqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjI5NjpicmNtZl9tc2didWZfaW5pdF9wa3RpZHModTMyIG5yX2FycmF5X2VudHJpZXMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTI5Ny1cXHRcXHRcXHQgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTE1Mjg9aW50IGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNjAyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxNjAzOlxcdG1zZ2J1Zi1cXHUwMDNldHhfcGt0aWRzID0gYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKE5SX1RYX1BLVElEUyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTYwNC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIERNQV9UT19ERVZJQ0UpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2MDYtXFx0XFx0Z290byBmYWlsO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxNjA3OlxcdG1zZ2J1Zi1cXHUwMDNlcnhfcGt0aWRzID0gYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKE5SX1JYX1BLVElEUyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTYwOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIERNQV9GUk9NX0RFVklDRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE1OjM4LjMzMDM3OTUyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjE3MTkxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgYnJjbWZtYWMgRHJpdmVyIHZpYSBVU0IqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBicmNtZm1hY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhhdCBsaW5lLCBgcGt0aWRzLVx1MDAzZWRpcmVjdGlvbiA9IGRpcmVjdGlvbjtgIHdpdGhpbiBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYC4gVGhpcyBpcyBpbiB0aGUgQnJvYWRjb20gd2lyZWxlc3MgZHJpdmVyLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUg4oCTIGFsd2F5cyBwb3RlbnRpYWwgZm9yIHZ1bG5lcmFiaWxpdGllcyB0aGVyZS4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSBmdXp6IHRoaXM/IFRoaXMgZHJpdmVyIGhhbmRsZXMgU0RJTywgVVNCLCBhbmQgUENJZSBpbnRlcmZhY2VzLCBhbmQgdGhhdOKAmXMgd2hlcmUgdGhpbmdzIGdldCBpbnRyaWd1aW5nLlxuXG5VU0IgbG9va3MgbGlrZSB0aGUgbW9zdCBwcm9taXNpbmcgcm91dGUgZm9yIGZ1enppbmcuIEkgY2FuIGVtdWxhdGUgYSBVU0IgSG9zdCBDb250cm9sbGVyIHdpdGggc29tZXRoaW5nIGxpa2UgZHVtbXktaGNkLCB3aGljaCBnaXZlcyBtZSBhIHJlbGF0aXZlbHkgc2ltcGxlIHRhcmdldC4gVGhlIGtleSBpcyBnb2luZyB0byBiZSBmaWd1cmluZyBvdXQgaWYgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBVU0IgcGF0aC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgaWYgSSBjYW4gdHJpZ2dlciB0aGlzIGluaXRpYWxpemF0aW9uIGZyb20gYSBVU0IgY29ubmVjdGlvbi4gSWYgSSBjYW4sIHRoZW4gSeKAmXZlIGdvdCBhIGdvb2QgcG90ZW50aWFsIGZ1enogdGFyZ2V0IHRvIHN0YXJ0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzEsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTU6NDIuMzkyMTAwNjMyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMDE0OTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTUyMz1zdGF0aWMgdm9pZCBicmNtZl9tc2didWZfZGVidWdmc19jcmVhdGUoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNTI3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxNTI4OmludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE1Mjkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5oPTMyPXZvaWQgYnJjbWZfbXNnYnVmX2RlbGV0ZV9mbG93cmluZyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCB1MTYgZmxvd2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmg6MzM6aW50IGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5oLTM0LXZvaWQgYnJjbWZfcHJvdG9fbXNnYnVmX2RldGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmgtMzUtI2Vsc2VcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmg6MzY6c3RhdGljIGlubGluZSBpbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuaC0zNy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYz0yMD1pbnQgYnJjbWZfcHJvdG9fYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zNS1cXHR9IGVsc2UgaWYgKGRydnItXFx1MDAzZWJ1c19pZi1cXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19NU0dCVUYpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYzozNjpcXHRcXHRpZiAoYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChkcnZyKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zNy1cXHRcXHRcXHRnb3RvIGZhaWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE1OjQyLjQ2NDEyMTI5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzU4MjcwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqQW5hbHl6aW5nIGBicmNtZl9wcm90b19hdHRhY2hgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgYnJjbWZfcHJvdG9fYXR0YWNoYC4gSSd2ZSBzZWVuIHRoaXMgZnVuY3Rpb24gYmVmb3JlOyBpdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlciwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy4gSSByZW1lbWJlciB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IGludm9sdmVkIGluIGF0dGFjaGluZyBhIHNwZWNpZmljIHByb3RvY29sIGluc3RhbmNlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZW50YWlscyBpbiB0aGUgYnJvYWRlciBkcml2ZXIgY29udGV4dC4gSXMgdGhpcyBjYWxsIHNpdGUgZnJvbSB0aGUgaG9zdCBzaWRlLCB0aGUgZmlybXdhcmUgc2lkZSwgb3IgYm90aD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGJlIGxvb2tpbmcgZm9yLCBsaWtlIHVuY2hlY2tlZCBidWZmZXIgc2l6ZXMgb3IgaW1wcm9wZXIgaGFuZGxpbmcgb2YgdXNlci1zdXBwbGllZCBkYXRhPyBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCByZXZlYWwgbXVjaCBhYm91dCB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IGFuZCB0aGVuIHpvb20gaW4gdG8gYW5hbHl6ZSBlYWNoIGRldGFpbC4gSSdtIGxvb2tpbmcgZm9yIGEgc29saWQgdW5kZXJzdGFuZGluZywgYW5kIGFueSBpbW1lZGlhdGVseSBnbGFyaW5nIGlzc3VlcyBvciBpbmVmZmljaWVuY2llcy4gTGV0J3Mgc3RhcnQgYnkgd2Fsa2luZyB0aHJvdWdoIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDIwLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTU6NDYuMjM5OTUxMDE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTU2Nzc1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9wcm90b19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEzMzA9aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNTMtXFx0LyogQXR0YWNoIGFuZCBsaW5rIGluIHRoZSBwcm90b2NvbCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTM1NDpcXHRyZXQgPSBicmNtZl9wcm90b19hdHRhY2goZHJ2cik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzU1LVxcdGlmIChyZXQgIT0gMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MjA6aW50IGJyY21mX3Byb3RvX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTIxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5oPTE4PXN0cnVjdCBicmNtZl9wcm90byB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uaC00NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uaDo0NTppbnQgYnJjbWZfcHJvdG9fYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5oLTQ2LXZvaWQgYnJjbWZfcHJvdG9fZGV0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNTo0Ni40ODU1MjQ0MDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQyNTg1NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYGJyY21mX2F0dGFjaGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTGV0J3Mgc2VlLi4uIHRoZSBpbml0aWFsIHRob3VnaHQgaGVyZSBpcyB0byB6ZXJvIGluIG9uIGBicmNtZl9hdHRhY2hgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBvciBhdHRhY2htZW50IHByb2Nlc3MsIGxpa2VseSBhIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUgaGFyZHdhcmUgaXMgYnJvdWdodCBvbmxpbmUgYW5kIHRoZSBkcml2ZXIgc3RhcnRzIGludGVyYWN0aW5nIHdpdGggdGhlIEJyb2FkY29tIFdpRmkgY2hpcC4gV2UnbGwgY2hlY2sgaXQgb3V0IGFuZCBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE1OjQ5LjIyODExMjE3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUyNTQ2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oPTI5OT1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMwMC0vKiBJbmRpY2F0aW9uIGZyb20gYnVzIG1vZHVsZSByZWdhcmRpbmcgcHJlc2VuY2UvaW5zZXJ0aW9uIG9mIGRvbmdsZS4gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6MzAxOmludCBicmNtZl9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMzAyLS8qIEluZGljYXRpb24gZnJvbSBidXMgbW9kdWxlIHJlZ2FyZGluZyByZW1vdmFsL2Fic2VuY2Ugb2YgZG9uZ2xlICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmgtMTgtICogKG1vZHVsZSkgaW5pdGlsaWF6YXRpb24gdGFrZXMgcGxhY2UuIFRoZSBkZXZpY2Ugc3BlY2lmaWMgc2V0dGluZ3MgaXMgcGFydFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaDoxOTogKiBvZiB0aGUgZHJ2ciBzdHJ1Y3QgYW5kIHNob3VsZCBiZSBpbml0aWFsaXplZCBvbiBldmVyeSBicmNtZl9hdHRhY2guXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTIwLSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMzAxPWludCBicmNtZl9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKnNldHRpbmdzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzI5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTMzMDppbnQgYnJjbWZfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzMzEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yMTM1PXN0YXRpYyB2b2lkIGJyY21mX3BjaWVfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yMjE1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjIxNjpcXHRyZXQgPSBicmNtZl9hdHRhY2goXFx1MDAyNmRldmluZm8tXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yMjE3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jPTQyMDk9c3RhdGljIHZvaWQgYnJjbWZfc2Rpb19maXJtd2FyZV9jYWxsYmFjayhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBlcnIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQzOTktXFx0LyogQXR0YWNoIHRvIHRoZSBjb21tb24gbGF5ZXIsIHJlc2VydmUgaGRyIHNwYWNlICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYzo0NDAwOlxcdGVyciA9IGJyY21mX2F0dGFjaChzZGlvZC1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQ0MDEtXFx0aWYgKGVyciAhPSAwKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYzo0NDAyOlxcdFxcdGJyY21mX2VycihcXFwiYnJjbWZfYXR0YWNoIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDAzLVxcdFxcdGdvdG8gZnJlZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTc2PXN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyMTAtXFx0LyogQXR0YWNoIHRvIHRoZSBjb21tb24gZHJpdmVyIGludGVyZmFjZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMjExOlxcdHJldCA9IGJyY21mX2F0dGFjaChkZXZpbmZvLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjEyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTI0ND1zdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI5MC1cXHRcXHRcXHRnb3RvIGZhaWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyOTE6XFx0XFx0cmV0ID0gYnJjbWZfYXR0YWNoKGRldmluZm8tXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyOTItXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTU6NDkuMjkzMzc0NTM5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDI4Mjc4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgc25pcHBldCwgZGVsaXZlcmVkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipVU0IgQlJDTUYgSW5pdGlhbGl6YXRpb24gRmxvdyAtIEEgUXVpY2sgTG9vayoqXG5cblJpZ2h0LCBsZXQgbWUgc2VlLi4uIEknbSB0cmFjaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgdGhpcyBCUkNNRiBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgVVNCLiBPa2F5LCBzbyBgYnJjbWZfYXR0YWNoYCBpcyBjbGVhcmx5IGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhlIG5vdGVzIHNheSBpdCdzIGNhbGxlZCBmcm9tIHR3byBwbGFjZXMg4oCTIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCBhbmQgYGJyY21mX3VzYl9wcm9iZV9jYmAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXR0YWNobWVudCBoYXBwZW5zIGFuZCB0aGUgY29udGV4dCBvZiB0aG9zZSBjYWxscy5cblxuSG1tLCBidXQgd2FpdC4uLiB0aGVyZSdzIGEgY3J1Y2lhbCBjaGVjayB3aXRoaW4gYGJyY21mX3Byb3RvX2F0dGFjaGAuIFRoZSBjb2RlIGlzIHZlcmlmeWluZyBpZiBgZHJ2ci1cdTAwM2VidXNfaWYtXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19NU0dCVUZgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIHByb3RvY29sIHR5cGUgaXMgYSBjcml0aWNhbCBmYWN0b3IgaW4gaG93IHRoZSBkZXZpY2UgZ2V0cyBzZXQgdXAuIFNvLCBteSBpbW1lZGlhdGUgcXVlc3Rpb24gYmVjb21lczogd2hhdCBpcyB0aGUgc3BlY2lmaWMgYHByb3RvX3R5cGVgIHZhbHVlIGJlaW5nIGFzc2lnbmVkIGZvciBhIFVTQiBjb25maWd1cmF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY2hlY2sgaXMgZG9pbmcuIFRoYXQgYHByb3RvX3R5cGVgIHZhbHVlIGlzIGEga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgZGVjaWRlcyBob3cgdG8gY29tbXVuaWNhdGUgb3ZlciB0aGUgVVNCIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI2MCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE1OjUzLjIzNjIwNTExNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkyNjg4Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb3RvX3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9MTA0MD1zdGF0aWMgaW50IGJyY21mX29wc19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTA4NS1cXHRidXNfaWYtXFx1MDAzZWJ1c19wcml2LnNkaW8gPSBzZGlvZGV2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzoxMDg2OlxcdGJ1c19pZi1cXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX0JDREM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTEwODctXFx0YnVzX2lmLVxcdTAwM2Vmd3ZpZCA9IGlkLVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaD0xNDE9c3RydWN0IGJyY21mX2J1c19zdGF0cyB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMTQ5LSAqIEBidXNfcHJpdjogcG9pbnRlciB0byBwcml2YXRlIGJ1cyBkZXZpY2UuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oOjE1MDogKiBAcHJvdG9fdHlwZTogcHJvdG9jb2wgdHlwZSwgYmNkYyBvciBtc2didWZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMTUxLSAqIEBkZXY6IGRldmljZSBwb2ludGVyIG9mIGJ1cyBkZXZpY2UuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg9MTY1PXN0cnVjdCBicmNtZl9idXMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE3MC1cXHR9IGJ1c19wcml2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaDoxNzE6XFx0ZW51bSBicmNtZl9idXNfcHJvdG9jb2xfdHlwZSBwcm90b190eXBlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaC0xNzItXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNDM5PWJyY21mX3BjaWVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjUxNC1cXHRidXMtXFx1MDAzZW9wcyA9IFxcdTAwMjZicmNtZl9wY2llX2J1c19vcHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNTE1OlxcdGJ1cy1cXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX01TR0JVRjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI1MTYtXFx0YnVzLVxcdTAwM2VjaGlwID0gZGV2aW5mby1cXHUwMDNlY29yZWlkO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM9MjA9aW50IGJyY21mX3Byb3RvX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MzI6XFx0aWYgKGRydnItXFx1MDAzZWJ1c19pZi1cXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19CQ0RDKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzMtXFx0XFx0aWYgKGJyY21mX3Byb3RvX2JjZGNfYXR0YWNoKGRydnIpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTM0LVxcdFxcdFxcdGdvdG8gZmFpbDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYzozNTpcXHR9IGVsc2UgaWYgKGRydnItXFx1MDAzZWJ1c19pZi1cXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19NU0dCVUYpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zNi1cXHRcXHRpZiAoYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChkcnZyKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTM5LVxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJVbnN1cHBvcnRlZCBwcm90byB0eXBlICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jOjQwOlxcdFxcdFxcdCBkcnZyLVxcdTAwM2VidXNfaWYtXFx1MDAzZXByb3RvX3R5cGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTQxLVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jPTU5PXZvaWQgYnJjbWZfcHJvdG9fZGV0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy02My1cXHRpZiAoZHJ2ci1cXHUwMDNlcHJvdG8pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYzo2NDpcXHRcXHRpZiAoZHJ2ci1cXHUwMDNlYnVzX2lmLVxcdTAwM2Vwcm90b190eXBlID09IEJSQ01GX1BST1RPX0JDREMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtNjUtXFx0XFx0XFx0YnJjbWZfcHJvdG9fYmNkY19kZXRhY2goZHJ2cik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6NjY6XFx0XFx0ZWxzZSBpZiAoZHJ2ci1cXHUwMDNlYnVzX2lmLVxcdTAwM2Vwcm90b190eXBlID09IEJSQ01GX1BST1RPX01TR0JVRilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy02Ny1cXHRcXHRcXHRicmNtZl9wcm90b19tc2didWZfZGV0YWNoKGRydnIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNjgtXFx0YnVzLVxcdTAwM2VvcHMgPSBcXHUwMDI2YnJjbWZfdXNiX2J1c19vcHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNjk6XFx0YnVzLVxcdTAwM2Vwcm90b190eXBlID0gQlJDTUZfUFJPVE9fQkNEQztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI3MC1cXHRidXMtXFx1MDAzZWZ3dmlkID0gZnd2aWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE1OjUzLjUyODg5OTI5MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mzc4NzU2NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSWUgRHJpdmVyIEZ1enppbmcgRmVhc2liaWxpdHkgLSBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgYXNzaWdubWVudCBvZiBgYnVzLVx1MDAzZXByb3RvX3R5cGUgPSBCUkNNRl9QUk9UT19NU0dCVUY7YCBqdW1wcyBvdXQgYXQgbWUuIEl0J3Mgb25seSBzZXQgaW4gYGJyY21mX3BjaWVfcHJvYmVgLCBub3QgdGhlIFVTQiBvciBTRElPIGVxdWl2YWxlbnRzLiBUaGlzIG1lYW5zIHRoYXQgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGlzIE9OTFkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFBDSWUgcGF0aC4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGZ1enppbmcuIENhbiB3ZSBmdXp6IHRoZSBQQ0llIGRyaXZlcj9cblxuVGhlIGluc3RydWN0aW9ucyBvbiBkZXRlcm1pbmluZyBcIldvcnRoRnV6emluZ1wiIGFyZSBjbGVhcjogd2UgY2FuJ3QgaWYgdGhlIHBhdGNoIGlzIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGNhcmRzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0J3MgdGhlIGtleS4gTm93LCBgYnJjbWZtYWNgLi4uIGlzIHRoYXQgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyPyBZZXMsIGl0J3MgQnJvYWRjb20ncyA4MDIuMTEgd2lyZWxlc3MgTEFOLiBEb2VzIFFFTVUsIGluIGl0cyBzdGFuZGFyZCBjb25maWd1cmF0aW9uLCBlbXVsYXRlIEJyb2FkY29tIFBDSWUgV2ktRmkgY2FyZHM/IE5vcGUuIFNvIHRoYXQncyB0aGUgaHVyZGxlLlxuXG5DYW4gc3l6a2FsbGVyIGhlbHAgaGVyZT8gSXQgKmRvZXMqIGhhdmUgc29tZSBQQ0kgZnV6emluZyBzdXBwb3J0IHdpdGggY2FsbHMgbGlrZSBgc3l6X3BjaV9kZXZpY2VfYWRkYCBvciBzaW1pbGFyLiBCdXQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGl0J3Mgb2Z0ZW4gbGltaXRlZCwgdHlwaWNhbGx5IGZ1enppbmcgb25seSB0aGUgcHJvYmUgZnVuY3Rpb24gb3Igd2hhdCdzIHN1cHBvcnRlZC4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgY2FsbCBvdXQgdGhpcyB2ZXJ5IHNjZW5hcmlvOiB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCBRRU1VIGRvZXNuJ3QgZW11bGF0ZS5cblxuTGV0J3MgdHJhY2UgdGhlIGNhbGwgc3RhY2sgdG8gYmUgc3VyZTogVGhpcyBwYXRjaCBpcyBpbiBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYC4gVGhhdCdzIGNhbGxlZCBmcm9tIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGJyY21mX3Byb3RvX2F0dGFjaGAsIHdoaWNoIGNvbWVzIGZyb20gYGJyY21mX2F0dGFjaGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBicmNtZl9wY2llX3NldHVwYCwgd2hpY2gsIGZpbmFsbHksIGlzIGNhbGxlZCBmcm9tIGBicmNtZl9wY2llX3Byb2JlYC4gU28sIHJlYWNoaW5nIGBicmNtZl9wY2llX3Byb2JlYCBpcyBjcml0aWNhbC4gV2UgbmVlZCB0byBjaGVjayBpZiB3ZSBjYW4gZXZlbiByZWFjaCBpdC4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgYnJjbWZfcGNpZV9wcm9iZWAgZnVuY3Rpb24gbm93IHRvIGRldGVybWluZSBob3cgcmVhY2hhYmxlIGl0IGlzLCBhbmQgd2hldGhlciBzeXprYWxsZXIncyBzdXBwb3J0IGNhbiBjb3ZlciBpdCBnaXZlbiB0aGUgY29uc3RyYWludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNTcsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6MDEuOTA3NjU4MjgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUxOTgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9wY2llX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNDM4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI0Mzk6YnJjbWZfcGNpZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjQ0MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI2NTY9c3RhdGljIGludCBicmNtZl9wY2llX3BtX2xlYXZlX0QzKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY4OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI2OTA6XFx0ZXJyID0gYnJjbWZfcGNpZV9wcm9iZShwZGV2LCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI2OTEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9Mjc2Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYnJjbWZfcGNpZWRydnIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NjQtXFx0LmlkX3RhYmxlID0gYnJjbWZfcGNpZV9kZXZpZF90YWJsZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI3NjU6XFx0LnByb2JlID0gYnJjbWZfcGNpZV9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NjYtXFx0LnJlbW92ZSA9IGJyY21mX3BjaWVfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjowMS45NjkxODM2NzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxOTI4MDM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBQQ0kgUHJvYmUgRnVuY3Rpb25zIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSBhbmQgaW1tZWRpYXRlbHkgdGhlIHF1ZXN0aW9uIHBvcHMgaW50byBteSBoZWFkOiBjYW4gdGhpcyBhY3R1YWxseSBiZSB0cmlnZ2VyZWQgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFN5emthbGxlcidzIGdvdCB0aGlzIGBzeXpfcGNpX2RldmljZV9hZGRgIHBzZXVkby1zeXNjYWxsLCBjbGV2ZXIgdHJpY2ssIGl0IGluamVjdHMgYSB2aXJ0dWFsIFBDSSBkZXZpY2Ugd2l0aCBjZXJ0YWluIHZlbmRvciBhbmQgZGV2aWNlIElEcywgYWltaW5nIHRvIGZpcmUgdXAgdGhvc2UgUENJIHByb2JlIGZ1bmN0aW9ucy4gSG1tLCBpdCBtaWdodCBhY3R1YWxseSB3b3JrLCBpZiBpdCdzIGp1c3QgdGhlIHByb2JlIGZ1bmN0aW9uLiBMZXQgbWUgY2hlY2sgdGhlIGluc3RydWN0aW9ucyBhZ2FpbjogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuTm93LCBpcyBgYnJjbWZtYWNgIHRoYXQga2luZCBvZiBkcml2ZXI/IFllYWgsIGl0J3MgYSBCcm9hZGNvbSBXaS1GaSBkcml2ZXIsIHNvIGl0J3MgdmVuZG9yLXNwZWNpZmljIGZvciBzdXJlLiBCdXQsIGRvZXMgaXQgc3RyaWN0bHkgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gR290dGEgbG9vayBhdCB0aGUgYGJyY21mX3BjaWVfcHJvYmVgIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MjksIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6MDYuNDg4NDY3OTM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzc2MzM4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9wY2llX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNDM4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI0Mzk6YnJjbWZfcGNpZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjQ0MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI2NTY9c3RhdGljIGludCBicmNtZl9wY2llX3BtX2xlYXZlX0QzKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY4OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI2OTA6XFx0ZXJyID0gYnJjbWZfcGNpZV9wcm9iZShwZGV2LCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI2OTEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9Mjc2Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYnJjbWZfcGNpZWRydnIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NjQtXFx0LmlkX3RhYmxlID0gYnJjbWZfcGNpZV9kZXZpZF90YWJsZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI3NjU6XFx0LnByb2JlID0gYnJjbWZfcGNpZV9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NjYtXFx0LnJlbW92ZSA9IGJyY21mX3BjaWVfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjowNi41NjIyNDA1N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIyODYxNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBicmNtZl9wY2llX3Byb2JlYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHdoYXQgdGhpcyBgYnJjbWZfcGNpZV9wcm9iZWAgZnVuY3Rpb24gaXMgZG9pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIGluaXRpYWxpemluZyB0aGUgQnJvYWRjb20gUENJZSBXaS1GaSBkcml2ZXIsIHNvIEknbGwgcXVpY2tseSBkaXNzZWN0IGl0LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBsaWtlbHkgdG8gdHJhY2UgaXRzIHByaW1hcnkgdGFza3M6IHJlc291cmNlIGFsbG9jYXRpb24sIGRldmljZSBpZGVudGlmaWNhdGlvbiwgcG90ZW50aWFsbHkgRE1BIHNldHVwLCBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uLCBhbmQgZmluYWxseSwgdGhlIG92ZXJhbGwgZHJpdmVyIGF0dGFjaG1lbnQgYW5kIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHdoZXRoZXIgaXQncyBjb3JyZWN0bHkgbWFuYWdpbmcgcmVzb3VyY2VzIGR1cmluZyB0aGUgcHJvYmUgcGhhc2UuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZGlmZmVyZW50IEJyb2FkY29tIGhhcmR3YXJlIHJldmlzaW9ucy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFBDSWUgYnVzIGFuZCBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgcXVpcmtzIGl0IG1pZ2h0IGVuY291bnRlci4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTIxLCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6MDkuOTg1MTA0NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDM4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQzODpcXHRzdGF0aWMgaW50XFxuMjQzOTpcXHRicmNtZl9wY2llX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuMjQ0MDpcXHR7XFxuMjQ0MTpcXHRcXHRpbnQgcmV0O1xcbjI0NDI6XFx0XFx0c3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxO1xcbjI0NDM6XFx0XFx0c3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbztcXG4yNDQ0OlxcdFxcdHN0cnVjdCBicmNtZl9wY2llZGV2ICpwY2llX2J1c19kZXY7XFxuMjQ0NTpcXHRcXHRzdHJ1Y3QgYnJjbWZfY29yZSAqY29yZTtcXG4yNDQ2OlxcdFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1cztcXG4yNDQ3OlxcdFxcbjI0NDg6XFx0XFx0aWYgKCFpZCkge1xcbjI0NDk6XFx0XFx0XFx0aWQgPSBwY2lfbWF0Y2hfaWQoYnJjbWZfcGNpZV9kZXZpZF90YWJsZSwgcGRldik7XFxuMjQ1MDpcXHRcXHRcXHRpZiAoIWlkKSB7XFxuMjQ1MTpcXHRcXHRcXHRcXHRwY2lfZXJyKHBkZXYsIFxcXCJFcnJvciBjb3VsZCBub3QgZmluZCBwY2lfZGV2aWNlX2lkIGZvciAleDoleFxcXFxuXFxcIiwgcGRldi1cXHUwMDNldmVuZG9yLCBwZGV2LVxcdTAwM2VkZXZpY2UpO1xcbjI0NTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMjQ1MzpcXHRcXHRcXHR9XFxuMjQ1NDpcXHRcXHR9XFxuMjQ1NTpcXHRcXG4yNDU2OlxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiRW50ZXIgJXg6JXhcXFxcblxcXCIsIHBkZXYtXFx1MDAzZXZlbmRvciwgcGRldi1cXHUwMDNlZGV2aWNlKTtcXG4yNDU3OlxcdFxcbjI0NTg6XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4yNDU5OlxcdFxcdGRldmluZm8gPSBremFsbG9jX29iaigqZGV2aW5mbyk7XFxuMjQ2MDpcXHRcXHRpZiAoZGV2aW5mbyA9PSBOVUxMKVxcbjI0NjE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yNDYyOlxcdFxcbjI0NjM6XFx0XFx0ZGV2aW5mby1cXHUwMDNlcGRldiA9IHBkZXY7XFxuMjQ2NDpcXHRcXHRwY2llX2J1c19kZXYgPSBOVUxMO1xcbjI0NjU6XFx0XFx0ZGV2aW5mby1cXHUwMDNlY2kgPSBicmNtZl9jaGlwX2F0dGFjaChkZXZpbmZvLCBwZGV2LVxcdTAwM2VkZXZpY2UsXFxuMjQ2NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2YnJjbWZfcGNpZV9idXNjb3JlX29wcyk7XFxuMjQ2NzpcXHRcXHRpZiAoSVNfRVJSKGRldmluZm8tXFx1MDAzZWNpKSkge1xcbjI0Njg6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihkZXZpbmZvLVxcdTAwM2VjaSk7XFxuMjQ2OTpcXHRcXHRcXHRkZXZpbmZvLVxcdTAwM2VjaSA9IE5VTEw7XFxuMjQ3MDpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjQ3MTpcXHRcXHR9XFxuMjQ3MjpcXHRcXG4yNDczOlxcdFxcdGNvcmUgPSBicmNtZl9jaGlwX2dldF9jb3JlKGRldmluZm8tXFx1MDAzZWNpLCBCQ01BX0NPUkVfUENJRTIpO1xcbjI0NzQ6XFx0XFx0aWYgKGNvcmUtXFx1MDAzZXJldiBcXHUwMDNlPSA2NClcXG4yNDc1OlxcdFxcdFxcdGRldmluZm8tXFx1MDAzZXJlZ2luZm8gPSBcXHUwMDI2YnJjbWZfcmVnaW5mb182NDtcXG4yNDc2OlxcdFxcdGVsc2VcXG4yNDc3OlxcdFxcdFxcdGRldmluZm8tXFx1MDAzZXJlZ2luZm8gPSBcXHUwMDI2YnJjbWZfcmVnaW5mb19kZWZhdWx0O1xcbjI0Nzg6XFx0XFxuMjQ3OTpcXHRcXHRwY2llX2J1c19kZXYgPSBremFsbG9jX29iaigqcGNpZV9idXNfZGV2KTtcXG4yNDgwOlxcdFxcdGlmIChwY2llX2J1c19kZXYgPT0gTlVMTCkge1xcbjI0ODE6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4yNDgyOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yNDgzOlxcdFxcdH1cXG4yNDg0OlxcdFxcbjI0ODU6XFx0XFx0ZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MgPSBicmNtZl9nZXRfbW9kdWxlX3BhcmFtKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuMjQ4NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBCUkNNRl9CVVNUWVBFX1BDSUUsXFxuMjQ4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXZpbmZvLVxcdTAwM2VjaS1cXHUwMDNlY2hpcCxcXG4yNDg4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGRldmluZm8tXFx1MDAzZWNpLVxcdTAwM2VjaGlwcmV2KTtcXG4yNDg5OlxcdFxcdGlmICghZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpIHtcXG4yNDkwOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMjQ5MTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjQ5MjpcXHRcXHR9XFxuMjQ5MzpcXHRcXHRyZXQgPSBQVFJfRVJSX09SX1pFUk8oZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpO1xcbjI0OTQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjQ5NTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjQ5NjpcXHRcXG4yNDk3OlxcdFxcdGJ1cyA9IGt6YWxsb2Nfb2JqKCpidXMpO1xcbjI0OTg6XFx0XFx0aWYgKCFidXMpIHtcXG4yNDk5OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMjUwMDpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjUwMTpcXHRcXHR9XFxuMjUwMjpcXHRcXHRidXMtXFx1MDAzZW1zZ2J1ZiA9IGt6YWxsb2Nfb2JqKCpidXMtXFx1MDAzZW1zZ2J1Zik7XFxuMjUwMzpcXHRcXHRpZiAoIWJ1cy1cXHUwMDNlbXNnYnVmKSB7XFxuMjUwNDpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjI1MDU6XFx0XFx0XFx0a2ZyZWUoYnVzKTtcXG4yNTA2OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yNTA3OlxcdFxcdH1cXG4yNTA4OlxcdFxcbjI1MDk6XFx0XFx0LyogaG9vayBpdCBhbGwgdG9nZXRoZXIuICovXFxuMjUxMDpcXHRcXHRwY2llX2J1c19kZXYtXFx1MDAzZWRldmluZm8gPSBkZXZpbmZvO1xcbjI1MTE6XFx0XFx0cGNpZV9idXNfZGV2LVxcdTAwM2VidXMgPSBidXM7XFxuMjUxMjpcXHRcXHRidXMtXFx1MDAzZWRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuMjUxMzpcXHRcXHRidXMtXFx1MDAzZWJ1c19wcml2LnBjaWUgPSBwY2llX2J1c19kZXY7XFxuMjUxNDpcXHRcXHRidXMtXFx1MDAzZW9wcyA9IFxcdTAwMjZicmNtZl9wY2llX2J1c19vcHM7XFxuMjUxNTpcXHRcXHRidXMtXFx1MDAzZXByb3RvX3R5cGUgPSBCUkNNRl9QUk9UT19NU0dCVUY7XFxuMjUxNjpcXHRcXHRidXMtXFx1MDAzZWNoaXAgPSBkZXZpbmZvLVxcdTAwM2Vjb3JlaWQ7XFxuMjUxNzpcXHRcXHRidXMtXFx1MDAzZXdvd2xfc3VwcG9ydGVkID0gcGNpX3BtZV9jYXBhYmxlKHBkZXYsIFBDSV9EM2hvdCk7XFxuMjUxODpcXHRcXHRidXMtXFx1MDAzZWZ3dmlkID0gZHJ2ZGF0YVtpZC1cXHUwMDNlZHJpdmVyX2RhdGFdLnZlbmRvcjtcXG4yNTE5OlxcdFxcdGRldmluZm8tXFx1MDAzZWZ3c2VlZCA9IGRydmRhdGFbaWQtXFx1MDAzZWRyaXZlcl9kYXRhXS5md19zZWVkO1xcbjI1MjA6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGJ1cyk7XFxuMjUyMTpcXHRcXG4yNTIyOlxcdFxcdHJldCA9IGJyY21mX2FsbG9jKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIGRldmluZm8tXFx1MDAzZXNldHRpbmdzKTtcXG4yNTIzOlxcdFxcdGlmIChyZXQpXFxuMjUyNDpcXHRcXHRcXHRnb3RvIGZhaWxfYnVzO1xcbjI1MjU6XFx0XFxuMjUyNjpcXHRcXHQvKiBvdHAgcmVhZCBvcGVyYXRpb24gKi9cXG4yNTI3OlxcdFxcdHN3aXRjaCAoYnVzLVxcdTAwM2Vmd3ZpZCkge1xcbjI1Mjg6XFx0XFx0Y2FzZSBCUkNNRl9GV1ZFTkRPUl9XQ0M6XFxuMjUyOTpcXHRcXHRjYXNlIEJSQ01GX0ZXVkVORE9SX0JDQTpcXG4yNTMwOlxcdFxcdFxcdHJldCA9IGJyY21mX3BjaWVfcmVhZF9vdHAoZGV2aW5mbyk7XFxuMjUzMTpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMjUzMjpcXHRcXHRcXHRcXHRicmNtZl9lcnIoYnVzLCBcXFwiZmFpbGVkIHRvIHBhcnNlIE9UUFxcXFxuXFxcIik7XFxuMjUzMzpcXHRcXHRcXHRcXHRnb3RvIGZhaWxfYnJjbWY7XFxuMjUzNDpcXHRcXHRcXHR9XFxuMjUzNTpcXHRcXHRcXHRicmVhaztcXG4yNTM2OlxcdFxcdGNhc2UgQlJDTUZfRldWRU5ET1JfQ1lXOlxcbjI1Mzc6XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6MDkuOTg1MjU2MzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NzE3MTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gZGVhbGluZyB3aXRoIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoZSB0ZWNobmljYWwgZGV0YWlsczpcblxuKipEaWdnaW5nIERlZXBlciBpbnRvIGBicmNtZl9wY2llX3Byb2JlYC4uLioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbnZlc3RpZ2F0aW9uIGhhc24ndCBoaXQgYSBkZWFkIGVuZCB5ZXQuIEkgc2VlIHRoYXQgYGJyY21mX3BjaWVfcHJvYmVgIGlzIGNvbnRpbnVpbmcgdG8gZXhlY3V0ZS4gVGhpcyBpcyBnb29kOyBpdCBtZWFucyB0aGVyZSdzIHN0aWxsIG1vcmUgZ29pbmcgb24gd2l0aCB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8ga2VlcCBhIGNsb3NlIGV5ZSBvbiB3aGF0IGl0J3MgZG9pbmcsIHRoZSBjYWxscyBpdCdzIG1ha2luZywgYW5kIHRoZSB2YWx1ZXMgb2YgdGhlIHZhcmlhYmxlcyBpdCdzIG1hbmlwdWxhdGluZy4gRXNzZW50aWFsbHksIHRoZSBwcm9iZSBmdW5jdGlvbiBzdGlsbCBoYXMgc29tZSBmaWdodCBpbiBpdCwgYW5kIGxpa2VseSB0aGUgc29sdXRpb24gaXMgd2l0aGluIHRoZSBmdXJ0aGVyIHN0ZXBzIGl0IGlzIHJ1bm5pbmcuIE15IGdvYWwgbm93IGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyB0cmlnZ2VyaW5nIHRob3NlIG5leHQgc3RlcHMgYW5kIHdoZXRoZXIgdGhleSBhcmUgYmVpbmcgc3VjY2Vzc2Z1bCBvciBub3QuIE1heWJlIHNvbWUgY29uZGl0aW9uIGlzIG5vdCBtZXQsIGEgcmVzb3VyY2UgaXMgdW5hdmFpbGFibGUsIG9yIGEgY29uZmlndXJhdGlvbiBpcyBpbmNvcnJlY3QuIFRoaXMgaXMgYSBwb2ludCB0byBiZWdpbiBuYXJyb3dpbmcgZG93biB0aGUgc3BlY2lmaWMgcG9pbnQgb2YgZmFpbHVyZSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzgzLCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjoxMy42NTI0MzA1OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTM4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjUzODpcXHRcXHRcXHRicmVhaztcXG4yNTM5OlxcdFxcdH1cXG4yNTQwOlxcdFxcbjI1NDE6XFx0I2lmZGVmIERFQlVHXFxuMjU0MjpcXHRcXHQvKiBTZXQgdXAgdGhlIGZ3Y29uIHRpbWVyICovXFxuMjU0MzpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2ZGV2aW5mby1cXHUwMDNldGltZXIsIGJyY21mX3BjaWVfZndjb24sIDApO1xcbjI1NDQ6XFx0I2VuZGlmXFxuMjU0NTpcXHRcXG4yNTQ2OlxcdFxcdGZ3cmVxID0gYnJjbWZfcGNpZV9wcmVwYXJlX2Z3X3JlcXVlc3QoZGV2aW5mbyk7XFxuMjU0NzpcXHRcXHRpZiAoIWZ3cmVxKSB7XFxuMjU0ODpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjI1NDk6XFx0XFx0XFx0Z290byBmYWlsX2JyY21mO1xcbjI1NTA6XFx0XFx0fVxcbjI1NTE6XFx0XFxuMjU1MjpcXHRcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGJ1cy1cXHUwMDNlZGV2LCBmd3JlcSwgYnJjbWZfcGNpZV9zZXR1cCk7XFxuMjU1MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjI1NTQ6XFx0XFx0XFx0a2ZyZWUoZndyZXEpO1xcbjI1NTU6XFx0XFx0XFx0Z290byBmYWlsX2JyY21mO1xcbjI1NTY6XFx0XFx0fVxcbjI1NTc6XFx0XFx0cmV0dXJuIDA7XFxuMjU1ODpcXHRcXG4yNTU5OlxcdGZhaWxfYnJjbWY6XFxuMjU2MDpcXHRcXHRicmNtZl9mcmVlKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbjI1NjE6XFx0ZmFpbF9idXM6XFxuMjU2MjpcXHRcXHRrZnJlZShidXMtXFx1MDAzZW1zZ2J1Zik7XFxuMjU2MzpcXHRcXHRrZnJlZShidXMpO1xcbjI1NjQ6XFx0ZmFpbDpcXG4yNTY1OlxcdFxcdGJyY21mX2VycihOVUxMLCBcXFwiZmFpbGVkICV4OiV4XFxcXG5cXFwiLCBwZGV2LVxcdTAwM2V2ZW5kb3IsIHBkZXYtXFx1MDAzZWRldmljZSk7XFxuMjU2NjpcXHRcXHRicmNtZl9wY2llX3JlbGVhc2VfcmVzb3VyY2UoZGV2aW5mbyk7XFxuMjU2NzpcXHRcXHRpZiAoZGV2aW5mby1cXHUwMDNlY2kpXFxuMjU2ODpcXHRcXHRcXHRicmNtZl9jaGlwX2RldGFjaChkZXZpbmZvLVxcdTAwM2VjaSk7XFxuMjU2OTpcXHRcXHRpZiAoZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpXFxuMjU3MDpcXHRcXHRcXHRicmNtZl9yZWxlYXNlX21vZHVsZV9wYXJhbShkZXZpbmZvLVxcdTAwM2VzZXR0aW5ncyk7XFxuMjU3MTpcXHRcXHRrZnJlZShwY2llX2J1c19kZXYpO1xcbjI1NzI6XFx0XFx0a2ZyZWUoZGV2aW5mbyk7XFxuMjU3MzpcXHRcXHRyZXR1cm4gcmV0O1xcbjI1NzQ6XFx0fVxcbjI1NzU6XFx0XFxuMjU3NjpcXHRcXG4yNTc3OlxcdHN0YXRpYyB2b2lkXFxuMjU3ODpcXHRicmNtZl9wY2llX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4yNTc5OlxcdHtcXG4yNTgwOlxcdFxcdHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm87XFxuMjU4MTpcXHRcXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXM7XFxuMjU4MjpcXHRcXG4yNTgzOlxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiRW50ZXJcXFxcblxcXCIpO1xcbjI1ODQ6XFx0XFxuMjU4NTpcXHRcXHRidXMgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuMjU4NjpcXHRcXHRpZiAoYnVzID09IE5VTEwpXFxuMjU4NzpcXHRcXHRcXHRyZXR1cm47XFxuMjU4ODpcXHRcXG4yNTg5OlxcdFxcdGRldmluZm8gPSBidXMtXFx1MDAzZWJ1c19wcml2LnBjaWUtXFx1MDAzZWRldmluZm87XFxuMjU5MDpcXHRcXHRicmNtZl9wY2llX2J1c19jb25zb2xlX3JlYWQoZGV2aW5mbywgZmFsc2UpO1xcbjI1OTE6XFx0XFx0YnJjbWZfcGNpZV9md2Nvbl90aW1lcihkZXZpbmZvLCBmYWxzZSk7XFxuMjU5MjpcXHRcXG4yNTkzOlxcdFxcdGRldmluZm8tXFx1MDAzZXN0YXRlID0gQlJDTUZNQUNfUENJRV9TVEFURV9ET1dOO1xcbjI1OTQ6XFx0XFx0aWYgKGRldmluZm8tXFx1MDAzZWNpKVxcbjI1OTU6XFx0XFx0XFx0YnJjbWZfcGNpZV9pbnRyX2Rpc2FibGUoZGV2aW5mbyk7XFxuMjU5NjpcXHRcXG4yNTk3OlxcdFxcdGJyY21mX2RldGFjaChcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4yNTk4OlxcdFxcdGJyY21mX2ZyZWUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuMjU5OTpcXHRcXG4yNjAwOlxcdFxcdGtmcmVlKGJ1cy1cXHUwMDNlYnVzX3ByaXYucGNpZSk7XFxuMjYwMTpcXHRcXHRrZnJlZShidXMtXFx1MDAzZW1zZ2J1Zi1cXHUwMDNlZmxvd3JpbmdzKTtcXG4yNjAyOlxcdFxcdGtmcmVlKGJ1cy1cXHUwMDNlbXNnYnVmKTtcXG4yNjAzOlxcdFxcdGtmcmVlKGJ1cyk7XFxuMjYwNDpcXHRcXG4yNjA1OlxcdFxcdGJyY21mX3BjaWVfcmVsZWFzZV9pcnEoZGV2aW5mbyk7XFxuMjYwNjpcXHRcXHRicmNtZl9wY2llX3JlbGVhc2Vfc2NyYXRjaGJ1ZmZlcnMoZGV2aW5mbyk7XFxuMjYwNzpcXHRcXHRicmNtZl9wY2llX3JlbGVhc2VfcmluZ2J1ZmZlcnMoZGV2aW5mbyk7XFxuMjYwODpcXHRcXHRicmNtZl9wY2llX3Jlc2V0X2RldmljZShkZXZpbmZvKTtcXG4yNjA5OlxcdFxcdGJyY21mX3BjaWVfcmVsZWFzZV9yZXNvdXJjZShkZXZpbmZvKTtcXG4yNjEwOlxcdFxcdHJlbGVhc2VfZmlybXdhcmUoZGV2aW5mby1cXHUwMDNlY2xtX2Z3KTtcXG4yNjExOlxcdFxcdHJlbGVhc2VfZmlybXdhcmUoZGV2aW5mby1cXHUwMDNldHhjYXBfZncpO1xcbjI2MTI6XFx0XFxuMjYxMzpcXHRcXHRpZiAoZGV2aW5mby1cXHUwMDNlY2kpXFxuMjYxNDpcXHRcXHRcXHRicmNtZl9jaGlwX2RldGFjaChkZXZpbmZvLVxcdTAwM2VjaSk7XFxuMjYxNTpcXHRcXHRpZiAoZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpXFxuMjYxNjpcXHRcXHRcXHRicmNtZl9yZWxlYXNlX21vZHVsZV9wYXJhbShkZXZpbmZvLVxcdTAwM2VzZXR0aW5ncyk7XFxuMjYxNzpcXHRcXG4yNjE4OlxcdFxcdGtmcmVlKGRldmluZm8pO1xcbjI2MTk6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbjI2MjA6XFx0fVxcbjI2MjE6XFx0XFxuMjYyMjpcXHRcXG4yNjIzOlxcdCNpZmRlZiBDT05GSUdfUE1cXG4yNjI0OlxcdFxcbjI2MjU6XFx0XFxuMjYyNjpcXHRzdGF0aWMgaW50IGJyY21mX3BjaWVfcG1fZW50ZXJfRDMoc3RydWN0IGRldmljZSAqZGV2KVxcbjI2Mjc6XFx0e1xcbjI2Mjg6XFx0XFx0c3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbztcXG4yNjI5OlxcdFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1cztcXG4yNjMwOlxcdFxcbjI2MzE6XFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuMjYzMjpcXHRcXG4yNjMzOlxcdFxcdGJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjI2MzQ6XFx0XFx0ZGV2aW5mbyA9IGJ1cy1cXHUwMDNlYnVzX3ByaXYucGNpZS1cXHUwMDNlZGV2aW5mbztcXG4yNjM1OlxcdFxcbjI2MzY6XFx0XFx0YnJjbWZfcGNpZV9md2Nvbl90aW1lcihkZXZpbmZvLCBmYWxzZSk7XFxuMjYzNzpcXHRcXHRicmNtZl9idXNfY2hhbmdlX3N0YXRlKGJ1cywgQlJDTUZfQlVTX0RPV04pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjoxMy42NTI1ODY4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjg2NzA5OTA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGJyY21mbWFjIFBDSWUgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYnJjbWZfcGNpZV9wcm9iZWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGNhbGwgYGJyY21mX2Z3X2dldF9maXJtd2FyZXNgLCB3aGljaCB0aGVuIHRyaWdnZXJzIGBicmNtZl9wY2llX3NldHVwYCBhcyBhIGNhbGxiYWNrICphZnRlciogdGhlIGZpcm13YXJlIGxvYWRzLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgU3l6a2FsbGVyIGNhbiwgaW4gdGhlb3J5LCBtb2NrIGZpcm13YXJlIGxvYWRpbmcuIElmIGNvbmZpZ3VyZWQsIG9yIGlmIHRoZSBmaXJtd2FyZSBpcyBiYWtlZCBpbnRvIHRoZSBpbWFnZSwgU3l6a2FsbGVyIGNhbiBlZmZlY3RpdmVseSBcImxvYWRcIiB0aGUgZmlybXdhcmUgdXNpbmcgaXRzIGByZXF1ZXN0X2Zpcm13YXJlYCBtb2NraW5nIGNhcGFiaWxpdGllcy5cblxuTm93LCBpbnNpZGUgYGJyY21mX3BjaWVfc2V0dXBgLCBpdCBnb2VzIG9uIHRvIGNhbGwgYGJyY21mX2F0dGFjaGAsIHdoaWNoIHRoZW4gY2FsbHMgYGJyY21mX3Byb3RvX2F0dGFjaGAsIGFuZCBmaW5hbGx5IGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYC4gVGhpcyBjb25maXJtcyB0aGF0IHRoZSBjb2RlIHBhdGggSSdtIGludGVyZXN0ZWQgaW4gKmlzKiByZWFjaGFibGUgaWYgdGhlIGZpcm13YXJlIGxvYWRzIHN1Y2Nlc3NmdWxseSBhbmQgdGhlIFBDSWUgZGV2aWNlIGlzIGNvcnJlY3RseSBwcm9iZWQuXG5cbkJ1dCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogRG9lcyBTeXprYWxsZXIgKmZ1enoqIHRoaXMgcGF0aD8gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBpbnN0cnVjdGlvbnMgYWJvdXQgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBjZXJ0YWluIHR5cGVzIG9mIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgdGhlIGluc3RydWN0aW9ucyBzdGF0ZSBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiLlxuXG5JcyBgYnJjbWZtYWNgIG9uZSBvZiB0aG9zZT8gV2VsbCwgaXQncyBhIEJyb2FkY29tIFdpLUZpIGRyaXZlciwgc28gdGVjaG5pY2FsbHksIHllcywgaXQncyB2ZW5kb3Itc3BlY2lmaWMsIGJ1dCBJIGFtIG5vdCBjZXJ0YWluIGlmIGl0J3MgY29uc2lkZXJlZCB0byBiZSBsaWtlIGEgU21hcnROSUMgb3IgR1BVLCByZXF1aXJpbmcgYWN0dWFsIGhhcmR3YXJlLlxuXG5Ib3dldmVyLCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYHN5el9wY2lfZGV2aWNlX2FkZGAuIFRoaXMgc3lzY2FsbCwgd2hpY2ggdGhlIGluc3RydWN0aW9ucyBhcmUgcmVmZXJyaW5nIHRvLCBjYW4gaW5qZWN0IFBDSSBkZXZpY2VzIHVzaW5nIGB2ZmlvYCBvciBzaW1pbGFyIG1lY2hhbmlzbXMsIGFuZCBldmVuIGNyZWF0ZSB2aXJ0dWFsIFBDSSBkZXZpY2VzIHdpdGhpbiBRRU1VLiBUaGF0J3MgaG93IFN5emthbGxlciBtb2NrcyBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBhbmQgTU1JTy4gU28sIGl0ICpjYW4qIGZ1enogUENJIGRyaXZlcnMuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgc3l6X3BjaV9kZXZpY2VfYWRkYCBkb2VzICpub3QqIG5lZWQgUUVNVSB0byBzcGVjaWZpY2FsbHkgZW11bGF0ZSB0aGUgQnJvYWRjb20gV2ktRmkgY2FyZC4gSXQgcmVsaWVzIG9uIGEgZ2VuZXJpYyBQQ0kgZGV2aWNlIGluamVjdG9yLCBsaWtlIGEgY3VzdG9tIFFFTVUgZGV2aWNlIGNvbnRyb2xsZWQgYnkgU3l6a2FsbGVyLlxuXG5MZXQgbWUgcXVpY2tseSBpbnZlc3RpZ2F0ZSBpZiB0aGlzIGBicmNtZm1hY2AgaXMgYWxyZWFkeSBmdXp6ZWQuIFVuZm9ydHVuYXRlbHksIEkgZG8gbm90IGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBhdCB0aGUgbW9tZW50LiBCdXQgSSBjb3VsZCB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlYXJjaCB0aGUga2VybmVsIGZvciByZWxldmFudCBrZXl3b3Jkcy5cblxuSG93ZXZlciwgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zOiBUaGV5IHNwZWNpZnkgXCJDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi4gU28sIGlzIGBicmNtZm1hY2AgYSBcIlNtYXJ0TklDLFwiIFwiR1BVLFwiIG9yIFwiUENJZSBzd2l0Y2hcIj8gTm8sIGl0J3MgYSBXaS1GaSBkcml2ZXIuIEFuZCBXaS1GaSBkcml2ZXJzIGFyZSBvZnRlbiBmdXp6ZWQgdXNpbmcgYG1hYzgwMjExX2h3c2ltYCBvciBldmVuIFVTQiAoZS5nLiwgYGF0aDlrX2h0Y2AsIGBydGx3aWZpYCkuXG5cbkhvd2V2ZXIsIHdoYXQgYWJvdXQgdGhlIFBDSWUgYXNwZWN0IG9mIGBicmNtZm1hY2A/IExldCBtZSBjb25maXJtOiBkb2VzIGBicmNtZm1hY2AgaGF2ZSBVU0Igc3VwcG9ydD8gWWVzLCBpdCBkb2VzLiBEb2VzIHRoZSBVU0IgaW1wbGVtZW50YXRpb24gdXNlIGBtc2didWZgPyBMb29raW5nIGJhY2sgYXQgdGhlIGNvZGUsIFVTQiB1c2VzIGBCUkNNRl9QUk9UT19CQ0RDYCwgd2hpY2ggaXMgKm5vdCogYEJSQ01GX1BST1RPX01TR0JVRmAuIFNESU8gYWxzbyB1c2VzIGBCUkNNRl9QUk9UT19CQ0RDYC4gT25seSBQQ0llIHVzZXMgYEJSQ01GX1BST1RPX01TR0JVRmAuIFNvLCB0aGUgY2hhbmdlcyBJIHNhdyAoYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AgaW4gYG1zZ2J1Zi5jYCkgYXJlIG9ubHkgcmVhY2hhYmxlIHZpYSB0aGUgUENJZSBwYXRoLlxuXG5Tbywgc2luY2UgaXQncyAqb25seSogcmVhY2hhYmxlIHZpYSBQQ0llLCBhbmQgaXQncyBhIEJyb2FkY29tIFdpLUZpIFBDSWUgY2FyZC4uLiBjYW4gU3l6a2FsbGVyIGZ1enogaXQ/IFN5emthbGxlcidzIFBDSSBmdXp6ZXIgKmNhbiogZnV6eiAqYW55KiBQQ0kgZHJpdmVyLCBieSBwcm92aWRpbmcgbWF0Y2hpbmcgUENJIHZlbmRvci9kZXZpY2UgSURzIGFuZCBtb2NraW5nIE1NSU8vRE1BLCBpZiBpdHMgY2FwYWJsZS5cblxuQnV0IHRoZSBpbnN0cnVjdGlvbiBtZW50aW9uczogXCJDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgT2theSwgc28gaXMgdGhpcyBXaS1GaSBjYXJkIGxpa2UgYSBcIlNtYXJ0TklDXCIgb3IgYSBHUFUgb3IgUENJZSBzd2l0Y2g/IE5vdCBkaXJlY3RseS4gQnV0IGRvZXMgaXQgcmVxdWlyZSBoYXJkd2FyZT8gTm8uIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgd29ya3MgYnkgZW11bGF0aW5nIHRoZSBQQ0kgZGV2aWNlIGF0IHRoZSBjb25maWcgc3BhY2UgYW5kIE1NSU8gbGV2ZWxcblxuIiwiSW5wdXRUb2tlbnMiOjE0NTY5LCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE2OjMwLjUxOTY4ODk1NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTM1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEzNTpcXHRzdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4yMTM2OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxcbjIxMzc6XFx0e1xcbjIxMzg6XFx0XFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcXG4yMTM5OlxcdFxcdHZvaWQgKm52cmFtO1xcbjIxNDA6XFx0XFx0c3RydWN0IGJyY21mX2J1cyAqYnVzO1xcbjIxNDE6XFx0XFx0c3RydWN0IGJyY21mX3BjaWVkZXYgKnBjaWVfYnVzX2RldjtcXG4yMTQyOlxcdFxcdHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm87XFxuMjE0MzpcXHRcXHRzdHJ1Y3QgYnJjbWZfY29tbW9ucmluZyAqKmZsb3dyaW5ncztcXG4yMTQ0OlxcdFxcdHUzMiBpLCBudnJhbV9sZW47XFxuMjE0NTpcXHRcXG4yMTQ2OlxcdFxcdGJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjIxNDc6XFx0XFx0cGNpZV9idXNfZGV2ID0gYnVzLVxcdTAwM2VidXNfcHJpdi5wY2llO1xcbjIxNDg6XFx0XFx0ZGV2aW5mbyA9IHBjaWVfYnVzX2Rldi1cXHUwMDNlZGV2aW5mbztcXG4yMTQ5OlxcdFxcbjIxNTA6XFx0XFx0LyogY2hlY2sgZmlybXdhcmUgbG9hZGluZyByZXN1bHQgKi9cXG4yMTUxOlxcdFxcdGlmIChyZXQpXFxuMjE1MjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjE1MzpcXHRcXG4yMTU0OlxcdFxcdGJyY21mX3BjaWVfYXR0YWNoKGRldmluZm8pO1xcbjIxNTU6XFx0XFxuMjE1NjpcXHRcXHRmdyA9IGZ3cmVxLVxcdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX0NPREVdLmJpbmFyeTtcXG4yMTU3OlxcdFxcdG52cmFtID0gZndyZXEtXFx1MDAzZWl0ZW1zW0JSQ01GX1BDSUVfRldfTlZSQU1dLm52X2RhdGEuZGF0YTtcXG4yMTU4OlxcdFxcdG52cmFtX2xlbiA9IGZ3cmVxLVxcdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX05WUkFNXS5udl9kYXRhLmxlbjtcXG4yMTU5OlxcdFxcdGRldmluZm8tXFx1MDAzZWNsbV9mdyA9IGZ3cmVxLVxcdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX0NMTV0uYmluYXJ5O1xcbjIxNjA6XFx0XFx0ZGV2aW5mby1cXHUwMDNldHhjYXBfZncgPSBmd3JlcS1cXHUwMDNlaXRlbXNbQlJDTUZfUENJRV9GV19UWENBUF0uYmluYXJ5O1xcbjIxNjE6XFx0XFx0a2ZyZWUoZndyZXEpO1xcbjIxNjI6XFx0XFxuMjE2MzpcXHRcXHRyZXQgPSBicmNtZl9jaGlwX2dldF9yYW1pbmZvKGRldmluZm8tXFx1MDAzZWNpKTtcXG4yMTY0OlxcdFxcdGlmIChyZXQpIHtcXG4yMTY1OlxcdFxcdFxcdGJyY21mX2VycihidXMsIFxcXCJGYWlsZWQgdG8gZ2V0IFJBTSBpbmZvXFxcXG5cXFwiKTtcXG4yMTY2OlxcdFxcdFxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcbjIxNjc6XFx0XFx0XFx0YnJjbWZfZndfbnZyYW1fZnJlZShudnJhbSk7XFxuMjE2ODpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjE2OTpcXHRcXHR9XFxuMjE3MDpcXHRcXG4yMTcxOlxcdFxcdC8qIFNvbWUgb2YgdGhlIGZpcm13YXJlcyBoYXZlIHRoZSBzaXplIG9mIHRoZSBtZW1vcnkgb2YgdGhlIGRldmljZVxcbjIxNzI6XFx0XFx0ICogZGVmaW5lZCBpbnNpZGUgdGhlIGZpcm13YXJlLiBUaGlzIGlzIGJlY2F1c2UgcGFydCBvZiB0aGUgbWVtb3J5IGluXFxuMjE3MzpcXHRcXHQgKiB0aGUgZGV2aWNlIGlzIHNoYXJlZCBhbmQgdGhlIGRldmlzaW9uIGlzIGRldGVybWluZWQgYnkgRlcuIFBhcnNlXFxuMjE3NDpcXHRcXHQgKiB0aGUgZmlybXdhcmUgYW5kIGFkanVzdCB0aGUgY2hpcCBtZW1vcnkgc2l6ZSBub3cuXFxuMjE3NTpcXHRcXHQgKi9cXG4yMTc2OlxcdFxcdGJyY21mX3BjaWVfYWRqdXN0X3JhbXNpemUoZGV2aW5mbywgKHU4ICopZnctXFx1MDAzZWRhdGEsIGZ3LVxcdTAwM2VzaXplKTtcXG4yMTc3OlxcdFxcbjIxNzg6XFx0XFx0cmV0ID0gYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbShkZXZpbmZvLCBmdywgbnZyYW0sIG52cmFtX2xlbik7XFxuMjE3OTpcXHRcXHRpZiAocmV0KVxcbjIxODA6XFx0XFx0XFx0Z290byBmYWlsO1xcbjIxODE6XFx0XFxuMjE4MjpcXHRcXHRkZXZpbmZvLVxcdTAwM2VzdGF0ZSA9IEJSQ01GTUFDX1BDSUVfU1RBVEVfVVA7XFxuMjE4MzpcXHRcXG4yMTg0OlxcdFxcdHJldCA9IGJyY21mX3BjaWVfaW5pdF9yaW5nYnVmZmVycyhkZXZpbmZvKTtcXG4yMTg1OlxcdFxcdGlmIChyZXQpXFxuMjE4NjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjE4NzpcXHRcXG4yMTg4OlxcdFxcdHJldCA9IGJyY21mX3BjaWVfaW5pdF9zY3JhdGNoYnVmZmVycyhkZXZpbmZvKTtcXG4yMTg5OlxcdFxcdGlmIChyZXQpXFxuMjE5MDpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjE5MTpcXHRcXG4yMTkyOlxcdFxcdGJyY21mX3BjaWVfc2VsZWN0X2NvcmUoZGV2aW5mbywgQkNNQV9DT1JFX1BDSUUyKTtcXG4yMTkzOlxcdFxcdHJldCA9IGJyY21mX3BjaWVfcmVxdWVzdF9pcnEoZGV2aW5mbyk7XFxuMjE5NDpcXHRcXHRpZiAocmV0KVxcbjIxOTU6XFx0XFx0XFx0Z290byBmYWlsO1xcbjIxOTY6XFx0XFxuMjE5NzpcXHRcXHQvKiBob29rIHRoZSBjb21tb25yaW5ncyBpbiB0aGUgYnVzIHN0cnVjdHVyZS4gKi9cXG4yMTk4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCUkNNRl9OUk9GX0NPTU1PTl9NU0dSSU5HUzsgaSsrKVxcbjIxOTk6XFx0XFx0XFx0YnVzLVxcdTAwM2Vtc2didWYtXFx1MDAzZWNvbW1vbnJpbmdzW2ldID1cXG4yMjAwOlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VzaGFyZWQuY29tbW9ucmluZ3NbaV0tXFx1MDAzZWNvbW1vbnJpbmc7XFxuMjIwMTpcXHRcXG4yMjAyOlxcdFxcdGZsb3dyaW5ncyA9IGt6YWxsb2Nfb2JqcygqZmxvd3JpbmdzLCBkZXZpbmZvLVxcdTAwM2VzaGFyZWQubWF4X2Zsb3dyaW5ncyk7XFxuMjIwMzpcXHRcXHRpZiAoIWZsb3dyaW5ncylcXG4yMjA0OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yMjA1OlxcdFxcbjIyMDY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldmluZm8tXFx1MDAzZXNoYXJlZC5tYXhfZmxvd3JpbmdzOyBpKyspXFxuMjIwNzpcXHRcXHRcXHRmbG93cmluZ3NbaV0gPSBcXHUwMDI2ZGV2aW5mby1cXHUwMDNlc2hhcmVkLmZsb3dyaW5nc1tpXS5jb21tb25yaW5nO1xcbjIyMDg6XFx0XFx0YnVzLVxcdTAwM2Vtc2didWYtXFx1MDAzZWZsb3dyaW5ncyA9IGZsb3dyaW5ncztcXG4yMjA5OlxcdFxcbjIyMTA6XFx0XFx0YnVzLVxcdTAwM2Vtc2didWYtXFx1MDAzZXJ4X2RhdGFvZmZzZXQgPSBkZXZpbmZvLVxcdTAwM2VzaGFyZWQucnhfZGF0YW9mZnNldDtcXG4yMjExOlxcdFxcdGJ1cy1cXHUwMDNlbXNnYnVmLVxcdTAwM2VtYXhfcnhidWZwb3N0ID0gZGV2aW5mby1cXHUwMDNlc2hhcmVkLm1heF9yeGJ1ZnBvc3Q7XFxuMjIxMjpcXHRcXHRidXMtXFx1MDAzZW1zZ2J1Zi1cXHUwMDNlbWF4X2Zsb3dyaW5ncyA9IGRldmluZm8tXFx1MDAzZXNoYXJlZC5tYXhfZmxvd3JpbmdzO1xcbjIyMTM6XFx0XFxuMjIxNDpcXHRcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VtYmRhdGFfcmVzcF93YWl0KTtcXG4yMjE1OlxcdFxcbjIyMTY6XFx0XFx0cmV0ID0gYnJjbWZfYXR0YWNoKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbjIyMTc6XFx0XFx0aWYgKHJldClcXG4yMjE4OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yMjE5OlxcdFxcbjIyMjA6XFx0XFx0YnJjbWZfcGNpZV9idXNfY29uc29sZV9yZWFkKGRldmluZm8sIGZhbHNlKTtcXG4yMjIxOlxcdFxcbjIyMjI6XFx0XFx0YnJjbWZfcGNpZV9md2Nvbl90aW1lcihkZXZpbmZvLCB0cnVlKTtcXG4yMjIzOlxcdFxcbjIyMjQ6XFx0XFx0cmV0dXJuO1xcbjIyMjU6XFx0XFxuMjIyNjpcXHRmYWlsOlxcbjIyMjc6XFx0XFx0YnJjbWZfZXJyKGJ1cywgXFxcIkRvbmdsZSBzZXR1cCBmYWlsZWRcXFxcblxcXCIpO1xcbjIyMjg6XFx0XFx0YnJjbWZfcGNpZV9idXNfY29uc29sZV9yZWFkKGRldmluZm8sIHRydWUpO1xcbjIyMjk6XFx0XFx0YnJjbWZfZndfY3Jhc2hlZChkZXYpO1xcbjIyMzA6XFx0XFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7XFxuMjIzMTpcXHR9XFxuMjIzMjpcXHRcXG4yMjMzOlxcdHN0YXRpYyBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqXFxuMjIzNDpcXHRicmNtZl9wY2llX3ByZXBhcmVfZndfcmVxdWVzdChzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjozMC41MTk5NzA4MDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc1MzA3NDM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZpcm13YXJlIExvYWRpbmcgSXNzdWVzKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaWYgdGhlIHJldHVybiBjb2RlLCBgcmV0YCwgaW5kaWNhdGVzIGEgZmlybXdhcmUgbG9hZCBmYWlsdXJlLCB0aGUgY29kZSBicmFuY2hlcyB0byBgZmFpbGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYGRldmljZV9yZWxlYXNlX2RyaXZlcihkZXYpYCBpcyBjYWxsZWQsIGFuZCBgYnJjbWZfYXR0YWNoYCBpcyBjb21wbGV0ZWx5IGJ5cGFzc2VkLiBUaGlzIG1lYW5zIGBicmNtZl9hdHRhY2hgIGlzIG9ubHkgZW50ZXJlZCBpZiB0aGUgZmlybXdhcmUgbG9hZHMgc3VjY2Vzc2Z1bGx5LiBCdXQsIHRoZSBxdWVzdGlvbiBJJ20gdHJ5aW5nIHRvIGFuc3dlciBpcyB3aGF0IGhhcHBlbnMgaW4gdGhlIGNhc2Ugb2YgbW9ja2luZy5cblxuSSdtIHByZXR0eSBjb25maWRlbnQgdGhhdCBTeXprYWxsZXIgY2FuLCBhbmQgbGlrZWx5ICpkb2VzKiBtb2NrIGZpcm13YXJlIGxvYWRpbmcuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBTeXprYWxsZXIgZWl0aGVyIHVzZXMgYENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVJgIG9yIHByb3ZpZGVzIHNvbWUgcGxhY2Vob2xkZXIgZmlybXdhcmUgZmlsZXMgZGlyZWN0bHkgd2l0aGluIHRoZSBpbWFnZS4gQnV0IHRoYXQgYnJpbmdzIG1lIHRvIGEgcG90ZW50aWFsbHkgY3JpdGljYWwgaXNzdWUgd2l0aCBgYnJjbWZtYWNgLlxuXG5Ob3cgSSdtIHRoaW5raW5nIGFib3V0IGBicmNtZl9wY2llX3NldHVwYC4gU3BlY2lmaWNhbGx5LCB0aGUgZmlybXdhcmUgcGFyc2luZyBkb25lIHRoZXJlOiBgYnJjbWZfcGNpZV9hZGp1c3RfcmFtc2l6ZShkZXZpbmZvLCAodTggKilmdy1cdTAwM2VkYXRhLCBmdy1cdTAwM2VzaXplKTtgIGFuZCBgcmV0ID0gYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbShkZXZpbmZvLCBmdywgbnZyYW0sIG52cmFtX2xlbik7YC4gSWYgU3l6a2FsbGVyJ3MgZmlybXdhcmUgaXMgZXNzZW50aWFsbHkganVzdCBkdW1teSBieXRlcywgd2lsbCB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIGl0IGdyYWNlZnVsbHk/IEkgbmVlZCB0byBsb29rIGludG8gYGJyY21mX3BjaWVfYWRqdXN0X3JhbXNpemVgIG1vcmUgY2xvc2VseS4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IG1pZ2h0IGJlIHdoZXJlIHRoZSBwcm9ibGVtcyBhcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NjQsIk91dHB1dFRva2VucyI6NTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjozNi4yNzMwNDc3MzhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDUwODE3NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfcGNpZV9hZGp1c3RfcmFtc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MTU5NT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MTU5NjpicmNtZl9wY2llX2FkanVzdF9yYW1zaXplKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHU4ICpkYXRhLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMTU5Ny1cXHRcXHRcXHQgIHUzMiBkYXRhX2xlbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjEzNT1zdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjE3NS1cXHQgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjIxNzY6XFx0YnJjbWZfcGNpZV9hZGp1c3RfcmFtc2l6ZShkZXZpbmZvLCAodTggKilmdy1cXHUwMDNlZGF0YSwgZnctXFx1MDAzZXNpemUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjE3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6MzguMTE4MTM2OTMyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzE1NDQ4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYW5hbHl6ZSB0aG9zZSBmdW5jdGlvbnMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGdlYXJlZCB0b3dhcmRzIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgRmlybXdhcmUgTG9hZGluZyBhbmQgUkFNIFNpemluZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBCcm9hZGNvbSBQQ0llIGRyaXZlciBoYW5kbGVzIGZpcm13YXJlIGxvYWRpbmcgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBtYW5hZ2VzIFJBTSBzaXplLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYGJyY21mX3BjaWVfYWRqdXN0X3JhbXNpemVgIGFuZCBgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUsIGZyb20gdGhlIG5hbWVzIGFsb25lLCBwcm9iYWJseSB0aGUgY29yZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgdGhlIGRldmljZS4gSSBhbnRpY2lwYXRlIGBicmNtZl9wY2llX2FkanVzdF9yYW1zaXplYCBkZWFsaW5nIHdpdGggdGhlIGhhcmR3YXJlJ3MgbWVtb3J5IGNvbmZpZ3VyYXRpb24sIHByb2JhYmx5IHJlYWRpbmcgc29tZSByZWdpc3RlcnMgb3IgZXZlbiBwcm9iaW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGF2YWlsYWJsZSBSQU0gYW5kIG1heWJlIGV2ZW4gZG9pbmcgc29tZSBlYXJseSBtZW1vcnkgYWxsb2NhdGlvbiwgd2hlcmVhcyBgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbWAgaGFzIHRvIGJlIGFsbCBhYm91dCBnZXR0aW5nIHRoYXQgZmlybXdhcmUgaW1hZ2Ugb250byB0aGUgZGV2aWNlLiBJJ20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBpbnZvbHZlIERNQSB0cmFuc2ZlcnMsIGFuZCBsaWtlbHkgc29tZSBzb3J0IG9mIGhhbmRzaGFraW5nIG9yIHNpZ25hbGluZyB0byB0aGUgQnJvYWRjb20gY2hpcCBpdHNlbGYgdG8gaW5pdGlhdGUgdGhlIHRyYW5zZmVyIGFuZCBnZXQgaXQgcmVhZHkgZm9yIGV4ZWN1dGlvbi4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMg4oCTIGhvdyB0aGV5IGRlYWwgd2l0aCBmYWlsZWQgdHJhbnNmZXJzLCBpbnZhbGlkIGZpcm13YXJlLCBvciB1bmV4cGVjdGVkIGhhcmR3YXJlIHJlc3BvbnNlcy4gRGVidWdnaW5nIHRoYXQgbGF0ZXIgb24gd2lsbCBiZSB0aGUgbWFpbiBnb2FsIGhlcmUuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gRG9lcyBgYWRqdXN0X3JhbXNpemVgIGhhcHBlbiBmaXJzdD8gRG9lcyBpdCBwcm92aWRlIGFueSBjb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBmaXJtd2FyZSBkb3dubG9hZD8gQXJlIHRoZXJlIGFueSBzaGFyZWQgcmVzb3VyY2VzIG9yIGRhdGEgc3RydWN0dXJlcyB0aGVzZSBmdW5jdGlvbnMgcmVseSBvbj8gSXQgaXMgYWxzbyBsaWtlbHkgdGhhdCBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgTlZSQU0gaXMgYmVpbmcgcmVmZXJlbmNlZC4gSXQgc2VlbXMgaW1wb3J0YW50IHRvIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgdGhlIGRyaXZlciB1bHRpbWF0ZWx5IGZ1bmN0aW9ucyBhbmQgaXMgbGlrZWx5IGEgcG90ZW50aWFsIHZlY3RvciBvZiBhIGJ1Zy4gSSdsbCB3YW50IHRvIHRyYWNlIGFueSBwb3RlbnRpYWwgcGF0aHMgdG8gdGhlc2UgYXJlYXMuIEkgc3VzcGVjdCwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIHRoZXJlIG1pZ2h0IGJlIHNvbWUgc3BlY2lmaWMgdGltaW5nIGNvbnNpZGVyYXRpb25zIG9yIHNlcXVlbmNpbmcgcmVxdWlyZW1lbnRzIGhlcmUsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgdGhhdCBhcyB3ZWxsLiBMZXQncyBzZWUgd2hhdCB0aGVzZSBmdW5jdGlvbnMgcmV2ZWFsIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTYxMywiT3V0cHV0VG9rZW5zIjo1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE2OjQyLjg0OTY4NDIyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTk1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU5NTpcXHRzdGF0aWMgdm9pZFxcbjE1OTY6XFx0YnJjbWZfcGNpZV9hZGp1c3RfcmFtc2l6ZShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1OCAqZGF0YSxcXG4xNTk3OlxcdFxcdFxcdFxcdCAgdTMyIGRhdGFfbGVuKVxcbjE1OTg6XFx0e1xcbjE1OTk6XFx0XFx0X19sZTMyICpmaWVsZDtcXG4xNjAwOlxcdFxcdHUzMiBuZXdzaXplO1xcbjE2MDE6XFx0XFxuMTYwMjpcXHRcXHRpZiAoZGF0YV9sZW4gXFx1MDAzYyBCUkNNRl9SQU1TSVpFX09GRlNFVCArIDgpXFxuMTYwMzpcXHRcXHRcXHRyZXR1cm47XFxuMTYwNDpcXHRcXG4xNjA1OlxcdFxcdGZpZWxkID0gKF9fbGUzMiAqKVxcdTAwMjZkYXRhW0JSQ01GX1JBTVNJWkVfT0ZGU0VUXTtcXG4xNjA2OlxcdFxcdGlmIChsZTMyX3RvX2NwdXAoZmllbGQpICE9IEJSQ01GX1JBTVNJWkVfTUFHSUMpXFxuMTYwNzpcXHRcXHRcXHRyZXR1cm47XFxuMTYwODpcXHRcXHRmaWVsZCsrO1xcbjE2MDk6XFx0XFx0bmV3c2l6ZSA9IGxlMzJfdG9fY3B1cChmaWVsZCk7XFxuMTYxMDpcXHRcXG4xNjExOlxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiRm91bmQgcmFtc2l6ZSBpbmZvIGluIEZXLCBhZGp1c3RpbmcgdG8gMHgleFxcXFxuXFxcIixcXG4xNjEyOlxcdFxcdFxcdCAgbmV3c2l6ZSk7XFxuMTYxMzpcXHRcXHRkZXZpbmZvLVxcdTAwM2VjaS1cXHUwMDNlcmFtc2l6ZSA9IG5ld3NpemU7XFxuMTYxNDpcXHR9XFxuMTYxNTpcXHRcXG4xNjE2OlxcdFxcbjE2MTc6XFx0c3RhdGljIGludFxcbjE2MTg6XFx0YnJjbWZfcGNpZV9pbml0X3NoYXJlX3JhbV9pbmZvKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sXFxuMTYxOTpcXHRcXHRcXHRcXHQgICAgICAgdTMyIHNoYXJlZHJhbV9hZGRyKVxcbjE2MjA6XFx0e1xcbjE2MjE6XFx0XFx0c3RydWN0IGJyY21mX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbjE2MjI6XFx0XFx0c3RydWN0IGJyY21mX3BjaWVfc2hhcmVkX2luZm8gKnNoYXJlZDtcXG4xNjIzOlxcdFxcdHUzMiBhZGRyO1xcbjE2MjQ6XFx0XFxuMTYyNTpcXHRcXHRzaGFyZWQgPSBcXHUwMDI2ZGV2aW5mby1cXHUwMDNlc2hhcmVkO1xcbjE2MjY6XFx0XFx0c2hhcmVkLVxcdTAwM2V0Y21fYmFzZV9hZGRyZXNzID0gc2hhcmVkcmFtX2FkZHI7XFxuMTYyNzpcXHRcXG4xNjI4OlxcdFxcdHNoYXJlZC1cXHUwMDNlZmxhZ3MgPSBicmNtZl9wY2llX3JlYWRfdGNtMzIoZGV2aW5mbywgc2hhcmVkcmFtX2FkZHIpO1xcbjE2Mjk6XFx0XFx0c2hhcmVkLVxcdTAwM2V2ZXJzaW9uID0gKHU4KShzaGFyZWQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJDTUZfUENJRV9TSEFSRURfVkVSU0lPTl9NQVNLKTtcXG4xNjMwOlxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiUENJZSBwcm90b2NvbCB2ZXJzaW9uICVkXFxcXG5cXFwiLCBzaGFyZWQtXFx1MDAzZXZlcnNpb24pO1xcbjE2MzE6XFx0XFx0aWYgKChzaGFyZWQtXFx1MDAzZXZlcnNpb24gXFx1MDAzZSBCUkNNRl9QQ0lFX01BWF9TSEFSRURfVkVSU0lPTikgfHxcXG4xNjMyOlxcdFxcdCAgICAoc2hhcmVkLVxcdTAwM2V2ZXJzaW9uIFxcdTAwM2MgQlJDTUZfUENJRV9NSU5fU0hBUkVEX1ZFUlNJT04pKSB7XFxuMTYzMzpcXHRcXHRcXHRicmNtZl9lcnIoYnVzLCBcXFwiVW5zdXBwb3J0ZWQgUENJRSB2ZXJzaW9uICVkXFxcXG5cXFwiLFxcbjE2MzQ6XFx0XFx0XFx0XFx0ICBzaGFyZWQtXFx1MDAzZXZlcnNpb24pO1xcbjE2MzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTYzNjpcXHRcXHR9XFxuMTYzNzpcXHRcXG4xNjM4OlxcdFxcdC8qIGNoZWNrIGZpcm13YXJlIHN1cHBvcnQgZG1hIGluZGljaWVzICovXFxuMTYzOTpcXHRcXHRpZiAoc2hhcmVkLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSQ01GX1BDSUVfU0hBUkVEX0RNQV9JTkRFWCkge1xcbjE2NDA6XFx0XFx0XFx0aWYgKHNoYXJlZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUkNNRl9QQ0lFX1NIQVJFRF9ETUFfMkJfSURYKVxcbjE2NDE6XFx0XFx0XFx0XFx0ZGV2aW5mby1cXHUwMDNlZG1hX2lkeF9zeiA9IHNpemVvZih1MTYpO1xcbjE2NDI6XFx0XFx0XFx0ZWxzZVxcbjE2NDM6XFx0XFx0XFx0XFx0ZGV2aW5mby1cXHUwMDNlZG1hX2lkeF9zeiA9IHNpemVvZih1MzIpO1xcbjE2NDQ6XFx0XFx0fVxcbjE2NDU6XFx0XFxuMTY0NjpcXHRcXHRhZGRyID0gc2hhcmVkcmFtX2FkZHIgKyBCUkNNRl9TSEFSRURfTUFYX1JYQlVGUE9TVF9PRkZTRVQ7XFxuMTY0NzpcXHRcXHRzaGFyZWQtXFx1MDAzZW1heF9yeGJ1ZnBvc3QgPSBicmNtZl9wY2llX3JlYWRfdGNtMTYoZGV2aW5mbywgYWRkcik7XFxuMTY0ODpcXHRcXHRpZiAoc2hhcmVkLVxcdTAwM2VtYXhfcnhidWZwb3N0ID09IDApXFxuMTY0OTpcXHRcXHRcXHRzaGFyZWQtXFx1MDAzZW1heF9yeGJ1ZnBvc3QgPSBCUkNNRl9ERUZfTUFYX1JYQlVGUE9TVDtcXG4xNjUwOlxcdFxcbjE2NTE6XFx0XFx0YWRkciA9IHNoYXJlZHJhbV9hZGRyICsgQlJDTUZfU0hBUkVEX1JYX0RBVEFPRkZTRVRfT0ZGU0VUO1xcbjE2NTI6XFx0XFx0c2hhcmVkLVxcdTAwM2VyeF9kYXRhb2Zmc2V0ID0gYnJjbWZfcGNpZV9yZWFkX3RjbTMyKGRldmluZm8sIGFkZHIpO1xcbjE2NTM6XFx0XFxuMTY1NDpcXHRcXHRhZGRyID0gc2hhcmVkcmFtX2FkZHIgKyBCUkNNRl9TSEFSRURfSFRPRF9NQl9EQVRBX0FERFJfT0ZGU0VUO1xcbjE2NTU6XFx0XFx0c2hhcmVkLVxcdTAwM2VodG9kX21iX2RhdGFfYWRkciA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTtcXG4xNjU2OlxcdFxcbjE2NTc6XFx0XFx0YWRkciA9IHNoYXJlZHJhbV9hZGRyICsgQlJDTUZfU0hBUkVEX0RUT0hfTUJfREFUQV9BRERSX09GRlNFVDtcXG4xNjU4OlxcdFxcdHNoYXJlZC1cXHUwMDNlZHRvaF9tYl9kYXRhX2FkZHIgPSBicmNtZl9wY2llX3JlYWRfdGNtMzIoZGV2aW5mbywgYWRkcik7XFxuMTY1OTpcXHRcXG4xNjYwOlxcdFxcdGFkZHIgPSBzaGFyZWRyYW1fYWRkciArIEJSQ01GX1NIQVJFRF9SSU5HX0lORk9fQUREUl9PRkZTRVQ7XFxuMTY2MTpcXHRcXHRzaGFyZWQtXFx1MDAzZXJpbmdfaW5mb19hZGRyID0gYnJjbWZfcGNpZV9yZWFkX3RjbTMyKGRldmluZm8sIGFkZHIpO1xcbjE2NjI6XFx0XFxuMTY2MzpcXHRcXHRicmNtZl9kYmcoUENJRSwgXFxcIm1heCByeCBidWYgcG9zdCAlZCwgcnggZGF0YW9mZnNldCAlZFxcXFxuXFxcIixcXG4xNjY0OlxcdFxcdFxcdCAgc2hhcmVkLVxcdTAwM2VtYXhfcnhidWZwb3N0LCBzaGFyZWQtXFx1MDAzZXJ4X2RhdGFvZmZzZXQpO1xcbjE2NjU6XFx0XFxuMTY2NjpcXHRcXHRicmNtZl9wY2llX2J1c19jb25zb2xlX2luaXQoZGV2aW5mbyk7XFxuMTY2NzpcXHRcXHRicmNtZl9wY2llX2J1c19jb25zb2xlX3JlYWQoZGV2aW5mbywgZmFsc2UpO1xcbjE2Njg6XFx0XFxuMTY2OTpcXHRcXHRyZXR1cm4gMDtcXG4xNjcwOlxcdH1cXG4xNjcxOlxcdFxcbjE2NzI6XFx0c3RydWN0IGJyY21mX3JhbmRvbV9zZWVkX2Zvb3RlciB7XFxuMTY3MzpcXHRcXHRfX2xlMzIgbGVuZ3RoO1xcbjE2NzQ6XFx0XFx0X19sZTMyIG1hZ2ljO1xcbjE2NzU6XFx0fTtcXG4xNjc2OlxcdFxcbjE2Nzc6XFx0I2RlZmluZSBCUkNNRl9SQU5ET01fU0VFRF9NQUdJQ1xcdFxcdDB4ZmVlZGMwZGVcXG4xNjc4OlxcdCNkZWZpbmUgQlJDTUZfUkFORE9NX1NFRURfTEVOR1RIXFx0MHgxMDBcXG4xNjc5OlxcdFxcbjE2ODA6XFx0c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkXFxuMTY4MTpcXHRicmNtZl9wY2llX3Byb3ZpZGVfcmFuZG9tX2J5dGVzKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHUzMiBhZGRyZXNzKVxcbjE2ODI6XFx0e1xcbjE2ODM6XFx0XFx0dTggcmFuZGJ1ZltCUkNNRl9SQU5ET01fU0VFRF9MRU5HVEhdO1xcbjE2ODQ6XFx0XFxuMTY4NTpcXHRcXHRnZXRfcmFuZG9tX2J5dGVzKHJhbmRidWYsIEJSQ01GX1JBTkRPTV9TRUVEX0xFTkdUSCk7XFxuMTY4NjpcXHRcXHRtZW1jcHlfdG9pbyhkZXZpbmZvLVxcdTAwM2V0Y20gKyBhZGRyZXNzLCByYW5kYnVmLCBCUkNNRl9SQU5ET01fU0VFRF9MRU5HVEgpO1xcbjE2ODc6XFx0fVxcbjE2ODg6XFx0XFxuMTY4OTpcXHRzdGF0aWMgaW50IGJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW0oc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbyxcXG4xNjkwOlxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKm52cmFtLFxcbjE2OTE6XFx0XFx0XFx0XFx0XFx0XFx0dTMyIG52cmFtX2xlbilcXG4xNjkyOlxcdHtcXG4xNjkzOlxcdFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2ZGV2aW5mby1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KTtcXG4xNjk0OlxcdFxcdHUzMiBzaGFyZWRyYW1fYWRkcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6NDIuODQ5ODM4OTAyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxODg5MDQ2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBicmNtZl9wY2llIEZpcm13YXJlIERvd25sb2FkIGFuZCBTaGFyZWQgUkFNIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgd3JpdGVzIHRoZSBmaXJtd2FyZSB0byB0aGUgZGV2aWNlJ3MgVGFyZ2V0IENvZGUgTWVtb3J5IChUQ00pLiBJbnRlcmVzdGluZy4gVGhlbiwgaXQncyBncmFiYmluZyB0aGUgYHNoYXJlZHJhbV9hZGRyYCBmcm9tIHRoZSBkZXZpY2UgbWVtb3J5LiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEZvbGxvd2luZyB0aGF0LCBgYnJjbWZfcGNpZV9pbml0X3NoYXJlX3JhbV9pbmZvYCBpcyBjYWxsZWQsIHdoaWNoIHRoZW4gcHJvY2VlZHMgdG8gcHVsbCBhIGJ1bmNoIG9mIG9mZnNldCB2YWx1ZXMgZnJvbSB0aGUgZGV2aWNlIG1lbW9yeS5cblxuTm93LCBoZXJlJ3Mgd2hlcmUgdGhpbmdzIGdldCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSWYgc3l6a2FsbGVyIGlzIG1vY2tpbmcgdGhlIGRldmljZSBtZW1vcnksIHBlcmhhcHMgdGhyb3VnaCBNTUlPIG1vY2tpbmcgaW4gYHN5el9wY2lfZGV2aWNlX2FkZGAsIHRoZW4gYGJyY21mX3BjaWVfcmVhZF90Y20zMmAgaXMgZ29pbmcgdG8gcmV0dXJuIGRhdGEgY29udHJvbGxlZCBieSB0aGUgZnV6emVyLiBIb2xkIG9uLCBgYnJjbWZfcGNpZV9yZWFkX3RjbTMyYCByZWFkcyBmcm9tIGBkZXZpbmZvLVx1MDAzZXRjbWAuIFJpZ2h0LCBzbyBgZGV2aW5mby1cdTAwM2V0Y21gIGlzIHRoZSBhZGRyZXNzIHRoYXQgYWN0dWFsbHkgZ2V0cyByZWFkIGZyb20uIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGBkZXZpbmZvLVx1MDAzZXRjbWAgaXMgbWFwcGVkIHRvLCBzbyBJIGNhbiBzZWUgd2hhdCBraW5kIG9mIGltcGFjdCBhIGZ1enplci1jb250cm9sbGVkIHZhbHVlIGNvdWxkIGhhdmUgaW4gdGhhdCBtZW1vcnkgbG9jYXRpb24uIFRpbWUgdG8gdHJhY2UgdGhhdCBwb2ludGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk3MywiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE2OjUwLjAzODc0NzMxNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxOTY2NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmluZm8tXFx1MDAzZXRjbSA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0xNzgzPXN0YXRpYyBpbnQgYnJjbWZfcGNpZV9nZXRfcmVzb3VyY2Uoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMTgxMS1cXHRkZXZpbmZvLVxcdTAwM2VyZWdzID0gaW9yZW1hcChiYXIwX2FkZHIsIEJSQ01GX1BDSUVfUkVHX01BUF9TSVpFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjE4MTI6XFx0ZGV2aW5mby1cXHUwMDNldGNtID0gaW9yZW1hcChiYXIxX2FkZHIsIGJhcjFfc2l6ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0xODEzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjo1MC41MDA3MTk2OTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5NDMxNjAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AgRnVuY3Rpb24gdmlhIFN5emthbGxlcioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgYGRldmluZm8tXHUwMDNldGNtYCBpcyBtYXBwZWQgZnJvbSBCQVIxLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQW5kIHJpZ2h0LCBTeXprYWxsZXLigJlzIFBDSSBmdXp6ZXIgbW9ja3MgdGhvc2UgQkFScyEgVGhpcyBtZWFucyBgYnJjbWZfcGNpZV9yZWFkX3RjbTMyYCB3aWxsIGJlIHJlYWRpbmcgZnJvbSB0aGF0IG1vY2tlZCBCQVIxLCB3aGljaCBpcyBjb21wbGV0ZWx5IHVuZGVyIHRoZSBmdXp6ZXIncyBjb250cm9sLiBUaGF0J3MgZ29vZDsgaXQgbWVhbnMgdGhlIGZ1enplciAqY2FuKiBwcm92aWRlIGEgdmFsaWQgYHNoYXJlZC1cdTAwM2V2ZXJzaW9uYCDigJMgYmV0d2VlbiB0aG9zZSBtaW4vbWF4IHZhbHVlcyDigJMgYW5kIHBvdGVudGlhbGx5IHZhbGlkIG9mZnNldHMgdG9vLlxuXG5UaGlzIGxvb2tzIHByb21pc2luZy4gSSBzZWUgYGJyY21mX3BjaWVfc2V0dXBgIGNhbGxlZCwgdGhlbiBpdCBjYWxscyBgYnJjbWZfYXR0YWNoYCwgd2hpY2ggY2FsbHMgYGJyY21mX3Byb3RvX2F0dGFjaGAsIHdoaWNoIGNhbGxzIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCwgYW5kIGZpbmFsbHksIHRoYXQgY2FsbHMgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AuIFllcCwgaXTigJlzIGNsZWFyOiB0aGlzICppcyogcmVhY2hhYmxlIHZpYSB0aGUgU3l6a2FsbGVyIFBDSSBmdXp6ZXIhXG5cbkJ1dCB3YWl0LCBob2xkIG9uLi4uIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IG1lbnRpb24gc29tZSBzY2VuYXJpb3Mgd2hlcmUgaXTigJlzICpub3QqIHdvcnRoIGZ1enppbmcuIEl0IHNheXM6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuSXMgYGJyY21mbWFjYCBjb25zaWRlcmVkIG9uZSBvZiB0aGVzZT8gVGhlIGV4YW1wbGVzIGFyZSBhbGwgY29tcGxleCBkZXZpY2VzLCBsaWtlIGBtbHhzd2AgKE1lbGxhbm94IHN3aXRjaCksIGBwZHNfY29yZWAgKFBlbnNhbmRvIFNtYXJ0TklDKSwgYHFlZGAgKFFMb2dpYyBGYXN0TGluUSksIGBpb25pY2AgKFBlbnNhbmRvIElvbmljKSwgYGFtZGdwdWAgKEFNRCBHUFUpLiBUaG9zZSBkZWZpbml0ZWx5IG5lZWQgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBvciBlbXVsYXRpb24uIEJ1dCBgYnJjbWZtYWNgIGlzIGp1c3QgYSBXaS1GaSBkcml2ZXIuIEFuZCBTeXprYWxsZXIgZnV6emVzIFdpLUZpIGRyaXZlcnMgZXh0ZW5zaXZlbHksIHNvIEkgd291bGRu4oCZdCBleHBlY3QgdGhlcmUgdG8gYmUgYSBwcm9ibGVtLlxuXG5IYW5nIG9uLi4uIGRvZXMgc3l6a2FsbGVyIGFjdHVhbGx5ICpmdXp6KiBgYnJjbWZtYWNgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0LiBMZXQncyBzZWUgaWYgYEJSQ01GTUFDYCBpcyBldmVuIGVuYWJsZWQgaW4gU3l6a2FsbGVyIGNvbmZpZ3MsIG9yIGlmIHRoZXJlIGFyZSBhbnkgU3l6a2FsbGVyIHBzZXVkby1zeXNjYWxscyBkZWZpbmVkIGZvciBpdC4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGUgZHJpdmVyIGlzIHR5cGljYWxseSBjb21waWxlZCBpbiBTeXprYWxsZXLigJlzIGNvbmZpZ3VyYXRpb24uIExldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGBLY29uZmlnYCBmb3IgYGJyY21mbWFjYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MTYsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6NTguMDk1MDM4NTI0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc5NDA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJDTUZNQUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxOmNvbmZpZyBCUkNNRk1BQ1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxMTpjb25maWcgQlJDTUZNQUNfUFJPVE9fQkNEQ1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEyLVxcdGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNDpjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTUtXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE3OmNvbmZpZyBCUkNNRk1BQ19TRElPXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTgtXFx0Ym9vbCBcXFwiU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6Mjk6Y29uZmlnIEJSQ01GTUFDX1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTMwLVxcdGJvb2wgXFxcIlVTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6NDA6Y29uZmlnIEJSQ01GTUFDX1BDSUVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy00MS1cXHRib29sIFxcXCJQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE2OjU4LjE2OTg0MDY0N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDMyMDkxMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGVwZW5kZW5jeSBDaGVjayBmb3IgQlJDTUZNQUNfUENJRSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgQlJDTUZNQUNfUENJRWAgbW9kdWxlLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIHdoYXQgaXQgcmVsaWVzIG9uIOKAkyBib3RoIGRpcmVjdGx5IGFuZCB0cmFuc2l0aXZlbHkuIFRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciBhbnkgZnV0dXJlIG1vZGlmaWNhdGlvbnMsIGRlYnVnZ2luZywgb3IgZXZlbiBqdXN0IGFzc2Vzc2luZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBjaGFuZ2VzIGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8ga25vdyAqZXhhY3RseSogd2hhdCB0aGlzIG1vZHVsZSdzIGZ1bmN0aW9uYWxpdHkgaGluZ2VzIHVwb24uIExldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgY2xlYXIgbWFwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM3NiwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE3OjAxLjIwMTkzNDMyMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzOTpcXHRcXG4gIDQwOlxcdGNvbmZpZyBCUkNNRk1BQ19QQ0lFXFxuICA0MTpcXHRcXHRib29sIFxcXCJQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuICA0MjpcXHRcXHRkZXBlbmRzIG9uIEJSQ01GTUFDXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgNDQ6XFx0XFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX01TR0JVRlxcbiAgNDU6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgNDY6XFx0XFx0aGVscFxcbiAgNDc6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgQnJvYWRjb21cXG4gIDQ4OlxcdFxcdCAgSUVFRTgwMi4xMWFjIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIuIFNheSBZIGlmIHlvdSB3YW50IHRvXFxuICA0OTpcXHRcXHQgIHVzZSB0aGUgZHJpdmVyIGZvciBhbiBQQ0lFIHdpcmVsZXNzIGNhcmQuXFxuICA1MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MDEuMjAxOTk3NjcxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzI1NDM4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgZGVwZW5kZW5jaWVzLCBsYWlkIG91dCBsb2dpY2FsbHk6XG5cbioqRGVwZW5kZW5jeSBDaGFpbiBCcmVha2Rvd24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQlJDTUZNQUNfUENJRWAgaGVyZS4gSXQgc2VlbXMgcHJldHR5IG9idmlvdXMgdGhhdCBpdCdzIGJ1aWx0IG9uIHRvcCBvZiBgQlJDTUZNQUNgLCBhbmQgYWxzbyByZXF1aXJlcyB0aGUgYFBDSWAgbGF5ZXIgZm9yLCB3ZWxsLCBQQ0llIGZ1bmN0aW9uYWxpdHkuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGEgYml0IGZ1cnRoZXIuIGBCUkNNRk1BQ2AgaXRzZWxmLi4uIEknbSBzdHJvbmdseSBzdXNwZWN0aW5nIGl0IGhpbmdlcyBvbiBib3RoIGBDRkc4MDIxMWAgYW5kIGBNQUM4MDIxMWAuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBXaS1GaSBzdGFjayByZWxhdGlvbnNoaXAuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCUkNNRk1BQ2AgaXRzZWxmLiBKdXN0IHRvIHZlcmlmeS4gVGhpcyB3YXksIEkgY2FuIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGUgd2hvbGUgcGljdHVyZSBpcyBjcnlzdGFsIGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc3MCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MDQuNTc0NTQ0NzY2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIEJSQ01GTUFDXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA0OlxcdFxcdHNlbGVjdCBCUkNNVVRJTFxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXFxuICAgNzpcXHRcXHQgIEZ1bGxNQUMgY2hpcHNldHMuIEl0IGhhcyB0byB3b3JrIHdpdGggYXQgbGVhc3Qgb25lIG9mIHRoZSBidXNcXG4gICA4OlxcdFxcdCAgaW50ZXJmYWNlIHN1cHBvcnQuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZFxcbiAgIDk6XFx0XFx0ICBicmNtZm1hYy5rby5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcXG4gIDEyOlxcdFxcdGJvb2xcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX01TR0JVRlxcbiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQlJDTUZNQUNfU0RJT1xcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiAoTU1DID0geSB8fCBNTUMgPSBCUkNNRk1BQylcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MDQuNTc0NjIxMDk2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTI3MDAyOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQlJDTUZNQUMgV2ktRmkgRHJpdmVyKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AsIHdoaWNoIEkga25vdyBpcyBwYXJ0IG9mIHRoZSBgQlJDTUZNQUNgIGRyaXZlciwgYW5kIGBCUkNNRk1BQ2AgZGVwZW5kcyBvbiBgQ0ZHODAyMTFgLiBUaGUgY2hhbmdlIGl0c2VsZiBzZWVtcyBmdW5jdGlvbmFsOyBpdCdzIGFkZGluZyBgcGt0aWRzLVx1MDAzZWRpcmVjdGlvbiA9IGRpcmVjdGlvbjtgLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmc/IENvbnNpZGVyaW5nIGl0J3MgYSBXaS1GaSBkcml2ZXIgYW5kIHRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbCwgSSB0aGluayBpdCdzIGRlZmluaXRlbHkgd29ydGggYSBzaG90LCBlc3BlY2lhbGx5IHNpbmNlIFdpLUZpIGRyaXZlcnMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSBmdXp6ZXIuXG5cbldhaXQsIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2suLi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgYnJjbWZtYWNgIGlzbid0IG9uZSBvZiB0aG9zZSBkcml2ZXJzIHRoYXQgc3BlY2lmaWNhbGx5IG5lZWRzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUuIFRoZSBwcm9tcHQgbGlzdHMgZXhjZXB0aW9ucyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLiBXaS1GaSBpc24ndCBvbiB0aGF0IGxpc3Q7IGRyaXZlcnMgbGlrZSBgaXdsd2lmaWAsIGBhdGgxMGtgLCBgcnR3ODhgLCBgbXQ3NmAgYWxsIGdldCBmdXp6ZWQgdmlhIFBDSS4gU28sIHdlJ3JlIGdvb2QgdG8gZ28uXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCB3aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYXJlIHRoYXQgd2UnbGwgZm9jdXMgb24uIGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXRzIHZpc2liaWxpdHkgaXMgbGltaXRlZC4gQnV0IGl0IGlzIGNhbGxlZCBieSBgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaGAsIGFuZCB0aGF0IGlzbid0IHN0YXRpYy4gQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGFuZCBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzMzcsIk91dHB1dFRva2VucyI6NTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNzoxMC41NjczMjQwOTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTY5NTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9wcm90b19tc2didWZfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTUyMz1zdGF0aWMgdm9pZCBicmNtZl9tc2didWZfZGVidWdmc19jcmVhdGUoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNTI3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxNTI4OmludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE1Mjkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNzoxMS4wMTcwMjQ2NjFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNjg4OTIxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGZ1bmN0aW9uOyB0aGF0IHNlZW1zIGxpa2UgYSBrZXkgYXJlYSBmb3IgdGhpcyBwYXRjaC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgYWZmZWN0ZWQuIEJ1dCBiZWZvcmUgSSBnbyB0b28gZGVlcCwgbGV0IG1lIHRha2UgYSBxdWljayBsb29rIGFyb3VuZDsgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhhdCBJIHNob3VsZCBjb25zaWRlcj8gTGV0IG1lIHNlZS4uLiBBaGEsIHRoZSBwYXRjaCBpcyBhbHNvIG1vZGlmeWluZyBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYC4gSW50ZXJlc3RpbmcuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCBkb2VzIGFueXRoaW5nICplbHNlKiBjYWxsIGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgPyBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHRzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBmYXIgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSByaXBwbGVzIHRocm91Z2hvdXQgdGhlIGRyaXZlci4gR290dGEgZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjQ2LCJPdXRwdXRUb2tlbnMiOjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MTQuNDMzOTE2MzgzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjMzMjU2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9tc2didWZfaW5pdF9wa3RpZHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0yOTU9c3RhdGljIHN0cnVjdCBicmNtZl9tc2didWZfcGt0aWRzICpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6Mjk2OmJyY21mX21zZ2J1Zl9pbml0X3BrdGlkcyh1MzIgbnJfYXJyYXlfZW50cmllcyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMjk3LVxcdFxcdFxcdCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTUyOD1pbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2MDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE2MDM6XFx0bXNnYnVmLVxcdTAwM2V0eF9wa3RpZHMgPSBicmNtZl9tc2didWZfaW5pdF9wa3RpZHMoTlJfVFhfUEtUSURTLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNjA0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgRE1BX1RPX0RFVklDRSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTYwNi1cXHRcXHRnb3RvIGZhaWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE2MDc6XFx0bXNnYnVmLVxcdTAwM2VyeF9wa3RpZHMgPSBicmNtZl9tc2didWZfaW5pdF9wa3RpZHMoTlJfUlhfUEtUSURTLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNjA4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgRE1BX0ZST01fREVWSUNFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MTQuNDk2MjUzOTE3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzMwOTI5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGhvbWluZyBpbiBvbiB0aGlzIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhhdCdzIHdoZXJlIHRoaXMgd2hvbGUgdGhpbmcga2lja3Mgb2ZmLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhpcyBjb2RlIG1vZGlmaWNhdGlvbi4gV2hpbGUgYGJyY21mX3BjaWVfcHJvYmVgICpjb3VsZCogYmUgYSByZWxhdGVkIHN5bWJvbCwgaXQncyBwcmV0dHkgZ2VuZXJpYyBhcyBhIHByb2JlIGZ1bmN0aW9uLCByaWdodD8gYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGZlZWxzIG11Y2ggbW9yZSB0YXJnZXRlZCB0byB0aGUgc3BlY2lmaWMgY2hhbmdlcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHdoYXQncyBuZWVkZWQgZm9yIHRoaXMgdG8gZnVuY3Rpb24uIEknbGwgbmVlZCBgQlJDTUZNQUNgLCBvYnZpb3VzbHksIGFuZCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSBzdXNwZWN0IGBCUkNNRk1BQ19QQ0lFYCBhcyB3ZWxsLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZXJlJ3MgdGhlIHN0YW5kYXJkIGBDRkc4MDIxMWAgYW5kIGBQQ0lgLiBJJ20ganVzdCBxdWlja2x5IHRyeWluZyB0byBpZGVudGlmeSB0aGUgY29yZSBjb21wb25lbnRzLlxuXG5CdXQsIGFyZSB0aGVyZSBhbnkgKm90aGVyKiByZWxldmFudCBjb25maWdzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBMZXQgbWUgcHVsbCB1cCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnYCBmaWxlIGFuZCBjaGVjay4gSSBqdXN0IHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiB0aGUgY29udGV4dCBvZiB0aGlzIHNwZWNpZmljIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMjYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MTguODI5MzUwMDMxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEJSQ01VVElMXFxuICAgMzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgQlJDTVNNQUNcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBJRUVFODAyLjExbiBQQ0llIFNvZnRNQUMgV0xBTiBkcml2ZXJcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIEJDTUFfUE9TU0lCTEVcXG4gICA5OlxcdFxcdHNlbGVjdCBCQ01BXFxuICAxMDpcXHRcXHRzZWxlY3QgQlJDTVVUSUxcXG4gIDExOlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDEyOlxcdFxcdHNlbGVjdCBDT1JESUNcXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBQQ0llIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXFxuICAxNTpcXHRcXHQgIElFRUU4MDIuMTFuIFNvZnRNQUMgY2hpcHNldHMuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIHRoZVxcbiAgMTY6XFx0XFx0ICBkcml2ZXIgd2lsbCBiZSBjYWxsZWQgYnJjbXNtYWMua28uXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBCUkNNU01BQ19MRURTXFxuICAxOTpcXHRcXHRkZWZfYm9vbCBCUkNNU01BQyBcXHUwMDI2XFx1MDAyNiBCQ01BX0RSSVZFUl9HUElPIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjExX0xFRFNcXG4gIDIwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MTguODI5NDY2OTkxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjQ3OTMwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgQnJvYWRjb20gV2lyZWxlc3MgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBCUkNNRk1BQ2Agc3ltYm9sIGlzIGRlZmluZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBicm9hZGNvbSB3aXJlbGVzcyBkcml2ZXIgZGlyZWN0b3J5LiBBaCwgeWVzLCBoZXJlIGl0IGlzIC0gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnYC4gR29vZC4gTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyB0YWtlIGEgbG9vayBhdCB0aGUgcGFyZW50IGBLY29uZmlnYCBmaWxlIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9LY29uZmlnYC4gSXQncyBhbHdheXMgYSBnb29kIGlkZWEgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgQnJvYWRjb20gd2lyZWxlc3MgZHJpdmVyLiBUaGF0IG1pZ2h0IGdpdmUgbWUgc29tZSBjb250ZXh0IEkgY2FuIHVzZSBsYXRlciBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3NzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE3OjIyLjE1NDI2Mzg2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBXTEFOX1ZFTkRPUl9CUk9BRENPTVxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiQnJvYWRjb20gZGV2aWNlc1xcXCJcXG4gICA0OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAgOTpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxMDpcXHRcXHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDExOlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBXTEFOX1ZFTkRPUl9CUk9BRENPTVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0My9LY29uZmlnXFxcIlxcbiAgMTY6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvS2NvbmZpZ1xcXCJcXG4gIDE3OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWdcXFwiXFxuICAxODpcXHRcXG4gIDE5OlxcdGVuZGlmICMgV0xBTl9WRU5ET1JfQlJPQURDT01cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MjIuMTU0MzU1MzRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NjYyODY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgV0xBTiBzZXR1cCwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIEknbSBnb2luZyB0byBuZWVkIGBXTEFOX1ZFTkRPUl9CUk9BRENPTWAuIEkgbWVhbiwgdGhhdCdzIGEgZ2l2ZW4uIEFuZCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGBXTEFOYCBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBhcyB3ZWxsLiBTbywgbGV0J3MganVzdCBtYWtlIGEgcXVpY2sgbGlzdCB0byBoYXZlIGl0IGFsbCBpbiBvbmUgcGxhY2U6IGBXTEFOYCwgYFdMQU5fVkVORE9SX0JST0FEQ09NYCwgYENGRzgwMjExYCwgYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1BDSUVgLCBhbmQgYFBDSWAuIE1ha2VzIHNlbnNlIHNvIGZhci4gTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB0byBhdm9pZCBhbnkgZG93bnN0cmVhbSBpc3N1ZXMsIEknbGwgcXVpY2tseSBjaGVjayBpZiBgQlJDTUZNQUNfUENJRWAgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGxpbmVkIHVwIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODMxOSwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MjUuODEwOTg3MTgxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM5OlxcdFxcbiAgNDA6XFx0Y29uZmlnIEJSQ01GTUFDX1BDSUVcXG4gIDQxOlxcdFxcdGJvb2wgXFxcIlBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4gIDQyOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG4gIDQzOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA0NDpcXHRcXHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXFxuICA0NTpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxcbiAgNDg6XFx0XFx0ICBJRUVFODAyLjExYWMgZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cXG4gIDQ5OlxcdFxcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGFuIFBDSUUgd2lyZWxlc3MgY2FyZC5cXG4gIDUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNzoyNS44MTEwNjc3MTFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY5ODE3MTkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQnJvYWRjb20gRmlybXdhcmUgTWVzc2FnZSBCdWZmZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgd2UncmUgZGVhbGluZyB3aXRoIGEgZGVwZW5kZW5jeSBjaGFpbiB0aGF0IHVsdGltYXRlbHkgaW52b2x2ZXMgdGhlIGBCUkNNRk1BQ2AgYW5kIGBQQ0lgIHN1YnN5c3RlbXMuIFNwZWNpZmljYWxseSwgYEJSQ01GTUFDYCBkZXBlbmRzIG9uIGBDRkc4MDIxMWAsIGFuZCBzbyBvbi4gVGhlIGtleSBtb2R1bGVzIGhlcmUgYXJlIGBXTEFOYCwgYFdMQU5fVkVORE9SX0JST0FEQ09NYCwgYENGRzgwMjExYCwgYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1BDSUVgLCBhbmQgYFBDSWAuIFRoaXMgZ2l2ZXMgdXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuTXkgbWFpbiBmb2N1cyBpcyB0byB2ZXJpZnkgaWYgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AgaXMgcmVhY2hhYmxlLiBBZnRlciByZXZpZXdpbmcgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgaXQgaXMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCwgd2hpY2ggZ2V0cyBjYWxsZWQgd2hlbiBgZHJ2ci1cdTAwM2VidXNfaWYtXHUwMDNlcHJvdG9fdHlwZWAgaXMgYEJSQ01GX1BST1RPX01TR0JVRmAuIFRoaXMsIGluIHR1cm4sIGlzIHNldCBpbiBgYnJjbWZfcGNpZV9wcm9iZWAsIGltcGx5aW5nIHRoYXQgd2UgY2FuIHRyaWdnZXIgdGhpcyBwYXRoIHRocm91Z2ggUENJIGludGVyYWN0aW9ucy4gUGVyZmVjdC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHRoZSBwYXRjaC4gSSBzZWUgYSBjb2RlIGNoYW5nZSB0aGF0IGFkZHMgYHBrdGlkcy1cdTAwM2VkaXJlY3Rpb24gPSBkaXJlY3Rpb247YCB0byB0aGUgZnVuY3Rpb24gYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqLiBJdCdzIGEgZmllbGQgYmVpbmcgYWRkZWQgdG8gYSBzdHJ1Y3R1cmUuIFRoaXMgbWVhbnMgaXQgaGFzIGEgcG90ZW50aWFsIGltcGFjdCBvbiBob3cgZGF0YSBpcyBoYW5kbGVkIG9yIGludGVycHJldGVkLiBUaHVzLCB3ZSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIHRoaXMgaW4gb3VyIGZ1enppbmcgc3RyYXRlZ3kuIFdlIG5lZWQgdG8gZXhwbG9yZSBhbnkgYXJlYXMgdGhhdCB1c2UgYHBrdGlkc2AgdG8gZW5zdXJlIHRoZSBuZXcgZmllbGQgaXMgcHJvcGVybHkgaGFuZGxlZC4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRoaXMuXG5cblNvLCBsZXQncyBmb3JtYWxpemUgdGhlIGZ1enppbmcgc3RyYXRlZ3kgYmFzZWQgb24gdGhlIGFib3ZlIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgyMiwiT3V0cHV0VG9rZW5zIjoxNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNzozMi41MDkyNDQzMDVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMwODU2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5cIixcbiAgICBcIldMQU5fVkVORE9SX0JST0FEQ09NXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1BDSUVcIixcbiAgICBcIlBDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJ5IHNldHRpbmcgdGhlICdkaXJlY3Rpb24nIGZpZWxkIGluIHRoZSAnYnJjbWZfbXNnYnVmX3BrdGlkcycgc3RydWN0IGR1cmluZyBpbml0aWFsaXphdGlvbi4gVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKSBhbmQgaXMgc3BlY2lmaWNhbGx5IHJlYWNoYWJsZSB2aWEgdGhlIFBDSWUgYnVzIGludGVyZmFjZSAoQlJDTUZfUFJPVE9fTVNHQlVGKS4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgdmlhIGl0cyBQQ0kgZGV2aWNlIGluamVjdGlvbi9tb2NraW5nIGNhcGFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOXCIsXG4gICAgXCJXTEFOX1ZFTkRPUl9CUk9BRENPTVwiLFxuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19QQ0lFXCIsXG4gICAgXCJQQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9wcm90b19tc2didWZfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBieSBzZXR0aW5nIHRoZSAnZGlyZWN0aW9uJyBmaWVsZCBpbiB0aGUgJ2JyY21mX21zZ2J1Zl9wa3RpZHMnIHN0cnVjdCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFRoaXMgY29kZSBpcyBwYXJ0IG9mIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChicmNtZm1hYykgYW5kIGlzIHNwZWNpZmljYWxseSByZWFjaGFibGUgdmlhIHRoZSBQQ0llIGJ1cyBpbnRlcmZhY2UgKEJSQ01GX1BST1RPX01TR0JVRikuIFN5emthbGxlciBjYW4gZnV6eiB0aGlzIHZpYSBpdHMgUENJIGRldmljZSBpbmplY3Rpb24vbW9ja2luZyBjYXBhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbgd5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 13:39:10 +0000 UTC FinishedAt: 2026-07-25 14:17:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "90883c513ca01e77c56b8d94be7de11420c1dacf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN", "WLAN_VENDOR_BROADCOM", "CFG80211", "BRCMFMAC", "BRCMFMAC_PCIE", "PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "90883c513ca01e77c56b8d94be7de11420c1dacf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN", "WLAN_VENDOR_BROADCOM", "CFG80211", "BRCMFMAC", "BRCMFMAC_PCIE", "PCI" ], "series_id": "5390a184-9eb6-48b9-a7bf-be75f9cd47f5" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "brcmf_proto_msgbuf_attach" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU4mIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfQlJPQURDT00mIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7QlJDTUZNQUMmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfUENJRSYjMzQ7LAogICAgJiMzNDtQQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticmNtZl9wcm90b19tc2didWZfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYnkgc2V0dGluZyB0aGUgJiMzOTtkaXJlY3Rpb24mIzM5OyBmaWVsZCBpbiB0aGUgJiMzOTticmNtZl9tc2didWZfcGt0aWRzJiMzOTsgc3RydWN0IGR1cmluZyBpbml0aWFsaXphdGlvbi4gVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKSBhbmQgaXMgc3BlY2lmaWNhbGx5IHJlYWNoYWJsZSB2aWEgdGhlIFBDSWUgYnVzIGludGVyZmFjZSAoQlJDTUZfUFJPVE9fTVNHQlVGKS4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgdmlhIGl0cyBQQ0kgZGV2aWNlIGluamVjdGlvbi9tb2NraW5nIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUxNmMzMjA0OTIxZWEyMzY1YTg1NDdiZGJlZDQ2Zjk0YWExMDIyYzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxNDoxNTozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcbmluZGV4IGJhMWNlMTU1MmUwZjQzLi5jMWZlYjE2NGQ4NDVhNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXG5AQCAtMzEwLDYgJiM0MzszMTAsNyBAQCBicmNtZl9tc2didWZfaW5pdF9wa3RpZHModTMyIG5yX2FycmF5X2VudHJpZXMsXG4gXHR9XG4gXHRwa3RpZHMtXHUwMDNlYXJyYXkgPSBhcnJheTtcbiBcdHBrdGlkcy1cdTAwM2VhcnJheV9zaXplID0gbnJfYXJyYXlfZW50cmllcztcbiYjNDM7XHRwa3RpZHMtXHUwMDNlZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuIFxuIFx0cmV0dXJuIHBrdGlkcztcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU4mIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfQlJPQURDT00mIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7QlJDTUZNQUMmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfUENJRSYjMzQ7LAogICAgJiMzNDtQQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticmNtZl9wcm90b19tc2didWZfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYnkgc2V0dGluZyB0aGUgJiMzOTtkaXJlY3Rpb24mIzM5OyBmaWVsZCBpbiB0aGUgJiMzOTticmNtZl9tc2didWZfcGt0aWRzJiMzOTsgc3RydWN0IGR1cmluZyBpbml0aWFsaXphdGlvbi4gVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKSBhbmQgaXMgc3BlY2lmaWNhbGx5IHJlYWNoYWJsZSB2aWEgdGhlIFBDSWUgYnVzIGludGVyZmFjZSAoQlJDTUZfUFJPVE9fTVNHQlVGKS4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgdmlhIGl0cyBQQ0kgZGV2aWNlIGluamVjdGlvbi9tb2NraW5nIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUxNmMzMjA0OTIxZWEyMzY1YTg1NDdiZGJlZDQ2Zjk0YWExMDIyYzgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAyNSAxNDoxNTozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYwppbmRleCBiYTFjZTE1NTJlMGY0My4uYzFmZWIxNjRkODQ1YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMKQEAgLTMxMCw2ICYjNDM7MzEwLDcgQEAgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKHUzMiBucl9hcnJheV9lbnRyaWVzLAogCX0KIAlwa3RpZHMtJmd0O2FycmF5ID0gYXJyYXk7CiAJcGt0aWRzLSZndDthcnJheV9zaXplID0gbnJfYXJyYXlfZW50cmllczsKJiM0MzsJcGt0aWRzLSZndDtkaXJlY3Rpb24gPSBkaXJlY3Rpb247CiAKIAlyZXR1cm4gcGt0aWRzOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDgwCgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogMTA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIGBicmNtZm1hYy9tc2didWYuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNgLiBJdCYjMzk7cyBhIHNpbXBsZSBvbmUsIHJlYWxseTsgaXQganVzdCBhZGRzIGBwa3RpZHMtJmd0O2RpcmVjdGlvbiA9IGRpcmVjdGlvbjtgIHRvIHRoZSBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYCBmdW5jdGlvbi4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVmb3JlIGFwcHJvdmluZyBzb21ldGhpbmcuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgIGZ1bmN0aW9uIHdpdGhpbiBgbXNnYnVmLmNgIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBtZXNzYWdlIGJ1ZmZlciBhcmNoaXRlY3R1cmUgb2YgdGhlIGJyY21mbWFjIGRyaXZlci4gV2hhdCBkb2VzIGBwa3RpZHNgIGFjdHVhbGx5IHJlcHJlc2VudD8gV2hhdCBpcyB0aGUgYGRpcmVjdGlvbmAgcGFyYW1ldGVyLCBhbmQgd2h5IGlzIHRoaXMgYXNzaWdubWVudCBiZWluZyBhZGRlZCBub3c/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgd2lsbCBiZSBrZXkgaGVyZS4gSXMgdGhpcyBmaXhpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24sIGFkZGluZyBhIG1pc3NpbmcgaW5pdGlhbGl6YXRpb24sIG9yIGVuYWJsaW5nIHNvbWUgbmV3IGZ1bmN0aW9uYWxpdHk/IFRpbWUgdG8gZ28gbGluZS1ieS1saW5lIGFuZCBmaWd1cmUgdGhpcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0yOTU9c3RhdGljIHN0cnVjdCBicmNtZl9tc2didWZfcGt0aWRzICpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoyOTY6YnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKHUzMiBucl9hcnJheV9lbnRyaWVzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTI5Ny1cdFx0XHQgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xNTI4PWludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2MDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTYwMzpcdG1zZ2J1Zi1cdTAwM2V0eF9wa3RpZHMgPSBicmNtZl9tc2didWZfaW5pdF9wa3RpZHMoTlJfVFhfUEtUSURTLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2MDQtXHRcdFx0XHRcdFx0ICAgICBETUFfVE9fREVWSUNFKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTYwNi1cdFx0Z290byBmYWlsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE2MDc6XHRtc2didWYtXHUwMDNlcnhfcGt0aWRzID0gYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKE5SX1JYX1BLVElEUyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNjA4LVx0XHRcdFx0XHRcdCAgICAgRE1BX0ZST01fREVWSUNFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcxCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGJyY21mbWFjIERyaXZlciB2aWEgVVNCKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBicmNtZm1hY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhhdCBsaW5lLCBgcGt0aWRzLSZndDtkaXJlY3Rpb24gPSBkaXJlY3Rpb247YCB3aXRoaW4gYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AuIFRoaXMgaXMgaW4gdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlciwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlIOKAkyBhbHdheXMgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXRpZXMgdGhlcmUuIFRoZSBxdWVzdGlvbiBpcywgY2FuIEkgZnV6eiB0aGlzPyBUaGlzIGRyaXZlciBoYW5kbGVzIFNESU8sIFVTQiwgYW5kIFBDSWUgaW50ZXJmYWNlcywgYW5kIHRoYXTigJlzIHdoZXJlIHRoaW5ncyBnZXQgaW50cmlndWluZy4KClVTQiBsb29rcyBsaWtlIHRoZSBtb3N0IHByb21pc2luZyByb3V0ZSBmb3IgZnV6emluZy4gSSBjYW4gZW11bGF0ZSBhIFVTQiBIb3N0IENvbnRyb2xsZXIgd2l0aCBzb21ldGhpbmcgbGlrZSBkdW1teS1oY2QsIHdoaWNoIGdpdmVzIG1lIGEgcmVsYXRpdmVseSBzaW1wbGUgdGFyZ2V0LiBUaGUga2V5IGlzIGdvaW5nIHRvIGJlIGZpZ3VyaW5nIG91dCBpZiBgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaGAgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFVTQiBwYXRoLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvZGUgYW5kIHNlZSBpZiBJIGNhbiB0cmlnZ2VyIHRoaXMgaW5pdGlhbGl6YXRpb24gZnJvbSBhIFVTQiBjb25uZWN0aW9uLiBJZiBJIGNhbiwgdGhlbiBJ4oCZdmUgZ290IGEgZ29vZCBwb3RlbnRpYWwgZnV6eiB0YXJnZXQgdG8gc3RhcnQgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9wcm90b19tc2didWZfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTUyMz1zdGF0aWMgdm9pZCBicmNtZl9tc2didWZfZGVidWdmc19jcmVhdGUoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTUyNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxNTI4OmludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTUyOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5oPTMyPXZvaWQgYnJjbWZfbXNnYnVmX2RlbGV0ZV9mbG93cmluZyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCB1MTYgZmxvd2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuaDozMzppbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuaC0zNC12b2lkIGJyY21mX3Byb3RvX21zZ2J1Zl9kZXRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmgtMzUtI2Vsc2VcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuaDozNjpzdGF0aWMgaW5saW5lIGludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmgtMzcte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jPTIwPWludCBicmNtZl9wcm90b19hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zNS1cdH0gZWxzZSBpZiAoZHJ2ci1cdTAwM2VidXNfaWYtXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19NU0dCVUYpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jOjM2Olx0XHRpZiAoYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChkcnZyKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTM3LVx0XHRcdGdvdG8gZmFpbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDIwCgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQW5hbHl6aW5nIGBicmNtZl9wcm90b19hdHRhY2hgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGJyY21mX3Byb3RvX2F0dGFjaGAuIEkmIzM5O3ZlIHNlZW4gdGhpcyBmdW5jdGlvbiBiZWZvcmU7IGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlciwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkgcmVtZW1iZXIgdGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJseSBpbnZvbHZlZCBpbiBhdHRhY2hpbmcgYSBzcGVjaWZpYyBwcm90b2NvbCBpbnN0YW5jZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGVudGFpbHMgaW4gdGhlIGJyb2FkZXIgZHJpdmVyIGNvbnRleHQuIElzIHRoaXMgY2FsbCBzaXRlIGZyb20gdGhlIGhvc3Qgc2lkZSwgdGhlIGZpcm13YXJlIHNpZGUsIG9yIGJvdGg/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBJIHNob3VsZCBpbW1lZGlhdGVseSBiZSBsb29raW5nIGZvciwgbGlrZSB1bmNoZWNrZWQgYnVmZmVyIHNpemVzIG9yIGltcHJvcGVyIGhhbmRsaW5nIG9mIHVzZXItc3VwcGxpZWQgZGF0YT8gVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV2ZWFsIG11Y2ggYWJvdXQgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBhbmQgdGhlbiB6b29tIGluIHRvIGFuYWx5emUgZWFjaCBkZXRhaWwuIEkmIzM5O20gbG9va2luZyBmb3IgYSBzb2xpZCB1bmRlcnN0YW5kaW5nLCBhbmQgYW55IGltbWVkaWF0ZWx5IGdsYXJpbmcgaXNzdWVzIG9yIGluZWZmaWNpZW5jaWVzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgd2Fsa2luZyB0aHJvdWdoIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX3Byb3RvX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMzMwPWludCBicmNtZl9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTM1My1cdC8qIEF0dGFjaCBhbmQgbGluayBpbiB0aGUgcHJvdG9jb2wgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTM1NDpcdHJldCA9IGJyY21mX3Byb3RvX2F0dGFjaChkcnZyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTM1NS1cdGlmIChyZXQgIT0gMCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTE5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MjA6aW50IGJyY21mX3Byb3RvX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMjEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5oPTE4PXN0cnVjdCBicmNtZl9wcm90byB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmgtNDQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uaDo0NTppbnQgYnJjbWZfcHJvdG9fYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmgtNDYtdm9pZCBicmNtZl9wcm90b19kZXRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc1OQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYGJyY21mX2F0dGFjaGAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIExldCYjMzk7cyBzZWUuLi4gdGhlIGluaXRpYWwgdGhvdWdodCBoZXJlIGlzIHRvIHplcm8gaW4gb24gYGJyY21mX2F0dGFjaGAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gb3IgYXR0YWNobWVudCBwcm9jZXNzLCBsaWtlbHkgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIGhhcmR3YXJlIGlzIGJyb3VnaHQgb25saW5lIGFuZCB0aGUgZHJpdmVyIHN0YXJ0cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBCcm9hZGNvbSBXaUZpIGNoaXAuIFdlJiMzOTtsbCBjaGVjayBpdCBvdXQgYW5kIHNlZSB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaD0yOTk9aW50IGJyY21mX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJyY21mX21wX2RldmljZSAqc2V0dGluZ3MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMwMC0vKiBJbmRpY2F0aW9uIGZyb20gYnVzIG1vZHVsZSByZWdhcmRpbmcgcHJlc2VuY2UvaW5zZXJ0aW9uIG9mIGRvbmdsZS4gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaDozMDE6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMwMi0vKiBJbmRpY2F0aW9uIGZyb20gYnVzIG1vZHVsZSByZWdhcmRpbmcgcmVtb3ZhbC9hYnNlbmNlIG9mIGRvbmdsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaC0xOC0gKiAobW9kdWxlKSBpbml0aWxpYXphdGlvbiB0YWtlcyBwbGFjZS4gVGhlIGRldmljZSBzcGVjaWZpYyBzZXR0aW5ncyBpcyBwYXJ0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmg6MTk6ICogb2YgdGhlIGRydnIgc3RydWN0IGFuZCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgb24gZXZlcnkgYnJjbWZfYXR0YWNoLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTIwLSAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTMwMT1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzMjktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEzMzA6aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzMzEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjEzNT1zdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIyMTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjIyMTY6XHRyZXQgPSBicmNtZl9hdHRhY2goXHUwMDI2ZGV2aW5mby1cdTAwM2VwZGV2LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIyMTctXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM9NDIwOT1zdGF0aWMgdm9pZCBicmNtZl9zZGlvX2Zpcm13YXJlX2NhbGxiYWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGVycixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQzOTktXHQvKiBBdHRhY2ggdG8gdGhlIGNvbW1vbiBsYXllciwgcmVzZXJ2ZSBoZHIgc3BhY2UgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQwMDpcdGVyciA9IGJyY21mX2F0dGFjaChzZGlvZC1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDAxLVx0aWYgKGVyciAhPSAwKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jOjQ0MDI6XHRcdGJyY21mX2VycihcJiMzNDticmNtZl9hdHRhY2ggZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQwMy1cdFx0Z290byBmcmVlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTc2PXN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjEwLVx0LyogQXR0YWNoIHRvIHRoZSBjb21tb24gZHJpdmVyIGludGVyZmFjZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyMTE6XHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyMTItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMjQ0PXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Byb2JlX2NiKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI5MC1cdFx0XHRnb3RvIGZhaWw7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTI5MTpcdFx0cmV0ID0gYnJjbWZfYXR0YWNoKGRldmluZm8tXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjkyLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjYwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipVU0IgQlJDTUYgSW5pdGlhbGl6YXRpb24gRmxvdyAtIEEgUXVpY2sgTG9vayoqCgpSaWdodCwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIHRyYWNpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciB0aGlzIEJSQ01GIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBVU0IuIE9rYXksIHNvIGBicmNtZl9hdHRhY2hgIGlzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24sIGFuZCB0aGUgbm90ZXMgc2F5IGl0JiMzOTtzIGNhbGxlZCBmcm9tIHR3byBwbGFjZXMg4oCTIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCBhbmQgYGJyY21mX3VzYl9wcm9iZV9jYmAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGF0dGFjaG1lbnQgaGFwcGVucyBhbmQgdGhlIGNvbnRleHQgb2YgdGhvc2UgY2FsbHMuCgpIbW0sIGJ1dCB3YWl0Li4uIHRoZXJlJiMzOTtzIGEgY3J1Y2lhbCBjaGVjayB3aXRoaW4gYGJyY21mX3Byb3RvX2F0dGFjaGAuIFRoZSBjb2RlIGlzIHZlcmlmeWluZyBpZiBgZHJ2ci0mZ3Q7YnVzX2lmLSZndDtwcm90b190eXBlID09IEJSQ01GX1BST1RPX01TR0JVRmAuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgcHJvdG9jb2wgdHlwZSBpcyBhIGNyaXRpY2FsIGZhY3RvciBpbiBob3cgdGhlIGRldmljZSBnZXRzIHNldCB1cC4gU28sIG15IGltbWVkaWF0ZSBxdWVzdGlvbiBiZWNvbWVzOiB3aGF0IGlzIHRoZSBzcGVjaWZpYyBgcHJvdG9fdHlwZWAgdmFsdWUgYmVpbmcgYXNzaWduZWQgZm9yIGEgVVNCIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjaGVjayBpcyBkb2luZy4gVGhhdCBgcHJvdG9fdHlwZWAgdmFsdWUgaXMgYSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGRyaXZlciBkZWNpZGVzIGhvdyB0byBjb21tdW5pY2F0ZSBvdmVyIHRoZSBVU0IgaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm90b190eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9MTA0MD1zdGF0aWMgaW50IGJyY21mX29wc19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTEwODUtXHRidXNfaWYtXHUwMDNlYnVzX3ByaXYuc2RpbyA9IHNkaW9kZXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6MTA4NjpcdGJ1c19pZi1cdTAwM2Vwcm90b190eXBlID0gQlJDTUZfUFJPVE9fQkNEQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy0xMDg3LVx0YnVzX2lmLVx1MDAzZWZ3dmlkID0gaWQtXHUwMDNlZHJpdmVyX2RhdGE7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oPTE0MT1zdHJ1Y3QgYnJjbWZfYnVzX3N0YXRzIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMTQ5LSAqIEBidXNfcHJpdjogcG9pbnRlciB0byBwcml2YXRlIGJ1cyBkZXZpY2UuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6MTUwOiAqIEBwcm90b190eXBlOiBwcm90b2NvbCB0eXBlLCBiY2RjIG9yIG1zZ2J1ZlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE1MS0gKiBAZGV2OiBkZXZpY2UgcG9pbnRlciBvZiBidXMgZGV2aWNlLlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaD0xNjU9c3RydWN0IGJyY21mX2J1cyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE3MC1cdH0gYnVzX3ByaXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6MTcxOlx0ZW51bSBicmNtZl9idXNfcHJvdG9jb2xfdHlwZSBwcm90b190eXBlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE3Mi1cdHN0cnVjdCBkZXZpY2UgKmRldjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI0Mzk9YnJjbWZfcGNpZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjUxNC1cdGJ1cy1cdTAwM2VvcHMgPSBcdTAwMjZicmNtZl9wY2llX2J1c19vcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI1MTU6XHRidXMtXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX01TR0JVRjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjUxNi1cdGJ1cy1cdTAwM2VjaGlwID0gZGV2aW5mby1cdTAwM2Vjb3JlaWQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM9MjA9aW50IGJyY21mX3Byb3RvX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTMxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MzI6XHRpZiAoZHJ2ci1cdTAwM2VidXNfaWYtXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19CQ0RDKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zMy1cdFx0aWYgKGJyY21mX3Byb3RvX2JjZGNfYXR0YWNoKGRydnIpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzQtXHRcdFx0Z290byBmYWlsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MzU6XHR9IGVsc2UgaWYgKGRydnItXHUwMDNlYnVzX2lmLVx1MDAzZXByb3RvX3R5cGUgPT0gQlJDTUZfUFJPVE9fTVNHQlVGKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zNi1cdFx0aWYgKGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goZHJ2cikpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzktXHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O1Vuc3VwcG9ydGVkIHByb3RvIHR5cGUgJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYzo0MDpcdFx0XHQgZHJ2ci1cdTAwM2VidXNfaWYtXHUwMDNlcHJvdG9fdHlwZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy00MS1cdFx0Z290byBmYWlsO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jPTU5PXZvaWQgYnJjbWZfcHJvdG9fZGV0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtNjMtXHRpZiAoZHJ2ci1cdTAwM2Vwcm90bykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6NjQ6XHRcdGlmIChkcnZyLVx1MDAzZWJ1c19pZi1cdTAwM2Vwcm90b190eXBlID09IEJSQ01GX1BST1RPX0JDREMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy02NS1cdFx0XHRicmNtZl9wcm90b19iY2RjX2RldGFjaChkcnZyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jOjY2Olx0XHRlbHNlIGlmIChkcnZyLVx1MDAzZWJ1c19pZi1cdTAwM2Vwcm90b190eXBlID09IEJSQ01GX1BST1RPX01TR0JVRilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTY3LVx0XHRcdGJyY21mX3Byb3RvX21zZ2J1Zl9kZXRhY2goZHJ2cik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjY4LVx0YnVzLVx1MDAzZW9wcyA9IFx1MDAyNmJyY21mX3VzYl9idXNfb3BzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNjk6XHRidXMtXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX0JDREM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI3MC1cdGJ1cy1cdTAwM2Vmd3ZpZCA9IGZ3dmlkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzU3CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBDSWUgRHJpdmVyIEZ1enppbmcgRmVhc2liaWxpdHkgLSBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBhc3NpZ25tZW50IG9mIGBidXMtJmd0O3Byb3RvX3R5cGUgPSBCUkNNRl9QUk9UT19NU0dCVUY7YCBqdW1wcyBvdXQgYXQgbWUuIEl0JiMzOTtzIG9ubHkgc2V0IGluIGBicmNtZl9wY2llX3Byb2JlYCwgbm90IHRoZSBVU0Igb3IgU0RJTyBlcXVpdmFsZW50cy4gVGhpcyBtZWFucyB0aGF0IGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCBpcyBPTkxZIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBQQ0llIHBhdGguIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byBmdXp6aW5nLiBDYW4gd2UgZnV6eiB0aGUgUENJZSBkcml2ZXI/CgpUaGUgaW5zdHJ1Y3Rpb25zIG9uIGRldGVybWluaW5nICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgYXJlIGNsZWFyOiB3ZSBjYW4mIzM5O3QgaWYgdGhlIHBhdGNoIGlzIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGNhcmRzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIHRoZSBrZXkuIE5vdywgYGJyY21mbWFjYC4uLiBpcyB0aGF0IGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlcj8gWWVzLCBpdCYjMzk7cyBCcm9hZGNvbSYjMzk7cyA4MDIuMTEgd2lyZWxlc3MgTEFOLiBEb2VzIFFFTVUsIGluIGl0cyBzdGFuZGFyZCBjb25maWd1cmF0aW9uLCBlbXVsYXRlIEJyb2FkY29tIFBDSWUgV2ktRmkgY2FyZHM/IE5vcGUuIFNvIHRoYXQmIzM5O3MgdGhlIGh1cmRsZS4KCkNhbiBzeXprYWxsZXIgaGVscCBoZXJlPyBJdCAqZG9lcyogaGF2ZSBzb21lIFBDSSBmdXp6aW5nIHN1cHBvcnQgd2l0aCBjYWxscyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgIG9yIHNpbWlsYXIuIEJ1dCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgaXQmIzM5O3Mgb2Z0ZW4gbGltaXRlZCwgdHlwaWNhbGx5IGZ1enppbmcgb25seSB0aGUgcHJvYmUgZnVuY3Rpb24gb3Igd2hhdCYjMzk7cyBzdXBwb3J0ZWQuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGNhbGwgb3V0IHRoaXMgdmVyeSBzY2VuYXJpbzogdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlLgoKTGV0JiMzOTtzIHRyYWNlIHRoZSBjYWxsIHN0YWNrIHRvIGJlIHN1cmU6IFRoaXMgcGF0Y2ggaXMgaW4gYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AuIFRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgYnJjbWZfcHJvdG9fYXR0YWNoYCwgd2hpY2ggY29tZXMgZnJvbSBgYnJjbWZfYXR0YWNoYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGJyY21mX3BjaWVfc2V0dXBgLCB3aGljaCwgZmluYWxseSwgaXMgY2FsbGVkIGZyb20gYGJyY21mX3BjaWVfcHJvYmVgLiBTbywgcmVhY2hpbmcgYGJyY21mX3BjaWVfcHJvYmVgIGlzIGNyaXRpY2FsLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHdlIGNhbiBldmVuIHJlYWNoIGl0LiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgYnJjbWZfcGNpZV9wcm9iZWAgZnVuY3Rpb24gbm93IHRvIGRldGVybWluZSBob3cgcmVhY2hhYmxlIGl0IGlzLCBhbmQgd2hldGhlciBzeXprYWxsZXImIzM5O3Mgc3VwcG9ydCBjYW4gY292ZXIgaXQgZ2l2ZW4gdGhlIGNvbnN0cmFpbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9wY2llX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI0Mzg9c3RhdGljIGludFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNDM5OmJyY21mX3BjaWVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjQ0MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNjU2PXN0YXRpYyBpbnQgYnJjbWZfcGNpZV9wbV9sZWF2ZV9EMyhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNjg5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNjkwOlx0ZXJyID0gYnJjbWZfcGNpZV9wcm9iZShwZGV2LCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY5MS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNzYyPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBicmNtZl9wY2llZHJ2ciA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NjQtXHQuaWRfdGFibGUgPSBicmNtZl9wY2llX2RldmlkX3RhYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNzY1Olx0LnByb2JlID0gYnJjbWZfcGNpZV9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjc2Ni1cdC5yZW1vdmUgPSBicmNtZl9wY2llX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkyOQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDE5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBQQ0kgUHJvYmUgRnVuY3Rpb25zIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwaWVjZSBvZiBjb2RlIGFuZCBpbW1lZGlhdGVseSB0aGUgcXVlc3Rpb24gcG9wcyBpbnRvIG15IGhlYWQ6IGNhbiB0aGlzIGFjdHVhbGx5IGJlIHRyaWdnZXJlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gU3l6a2FsbGVyJiMzOTtzIGdvdCB0aGlzIGBzeXpfcGNpX2RldmljZV9hZGRgIHBzZXVkby1zeXNjYWxsLCBjbGV2ZXIgdHJpY2ssIGl0IGluamVjdHMgYSB2aXJ0dWFsIFBDSSBkZXZpY2Ugd2l0aCBjZXJ0YWluIHZlbmRvciBhbmQgZGV2aWNlIElEcywgYWltaW5nIHRvIGZpcmUgdXAgdGhvc2UgUENJIHByb2JlIGZ1bmN0aW9ucy4gSG1tLCBpdCBtaWdodCBhY3R1YWxseSB3b3JrLCBpZiBpdCYjMzk7cyBqdXN0IHRoZSBwcm9iZSBmdW5jdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBpbnN0cnVjdGlvbnMgYWdhaW46ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpOb3csIGlzIGBicmNtZm1hY2AgdGhhdCBraW5kIG9mIGRyaXZlcj8gWWVhaCwgaXQmIzM5O3MgYSBCcm9hZGNvbSBXaS1GaSBkcml2ZXIsIHNvIGl0JiMzOTtzIHZlbmRvci1zcGVjaWZpYyBmb3Igc3VyZS4gQnV0LCBkb2VzIGl0IHN0cmljdGx5ICpyZXF1aXJlKiBwaHlzaWNhbCBoYXJkd2FyZT8gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLiBHb3R0YSBsb29rIGF0IHRoZSBgYnJjbWZfcGNpZV9wcm9iZWAgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfcGNpZV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNDM4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjQzOTpicmNtZl9wY2llX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI0NDAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjY1Nj1zdGF0aWMgaW50IGJyY21mX3BjaWVfcG1fbGVhdmVfRDMoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY4OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjY5MDpcdGVyciA9IGJyY21mX3BjaWVfcHJvYmUocGRldiwgTlVMTCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI2OTEtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9Mjc2Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYnJjbWZfcGNpZWRydnIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yNzY0LVx0LmlkX3RhYmxlID0gYnJjbWZfcGNpZV9kZXZpZF90YWJsZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6Mjc2NTpcdC5wcm9iZSA9IGJyY21mX3BjaWVfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NjYtXHQucmVtb3ZlID0gYnJjbWZfcGNpZV9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTIxCgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYnJjbWZfcGNpZV9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHdoYXQgdGhpcyBgYnJjbWZfcGNpZV9wcm9iZWAgZnVuY3Rpb24gaXMgZG9pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIGluaXRpYWxpemluZyB0aGUgQnJvYWRjb20gUENJZSBXaS1GaSBkcml2ZXIsIHNvIEkmIzM5O2xsIHF1aWNrbHkgZGlzc2VjdCBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgbGlrZWx5IHRvIHRyYWNlIGl0cyBwcmltYXJ5IHRhc2tzOiByZXNvdXJjZSBhbGxvY2F0aW9uLCBkZXZpY2UgaWRlbnRpZmljYXRpb24sIHBvdGVudGlhbGx5IERNQSBzZXR1cCwgaW50ZXJydXB0IHJlZ2lzdHJhdGlvbiwgYW5kIGZpbmFsbHksIHRoZSBvdmVyYWxsIGRyaXZlciBhdHRhY2htZW50IGFuZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgd2hldGhlciBpdCYjMzk7cyBjb3JyZWN0bHkgbWFuYWdpbmcgcmVzb3VyY2VzIGR1cmluZyB0aGUgcHJvYmUgcGhhc2UuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZGlmZmVyZW50IEJyb2FkY29tIGhhcmR3YXJlIHJldmlzaW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBQQ0llIGJ1cyBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBpdCBtaWdodCBlbmNvdW50ZXIuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDM4Olx0c3RhdGljIGludFxuMjQzOTpcdGJyY21mX3BjaWVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbjI0NDA6XHR7XG4yNDQxOlx0XHRpbnQgcmV0O1xuMjQ0MjpcdFx0c3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxO1xuMjQ0MzpcdFx0c3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbztcbjI0NDQ6XHRcdHN0cnVjdCBicmNtZl9wY2llZGV2ICpwY2llX2J1c19kZXY7XG4yNDQ1Olx0XHRzdHJ1Y3QgYnJjbWZfY29yZSAqY29yZTtcbjI0NDY6XHRcdHN0cnVjdCBicmNtZl9idXMgKmJ1cztcbjI0NDc6XHRcbjI0NDg6XHRcdGlmICghaWQpIHtcbjI0NDk6XHRcdFx0aWQgPSBwY2lfbWF0Y2hfaWQoYnJjbWZfcGNpZV9kZXZpZF90YWJsZSwgcGRldik7XG4yNDUwOlx0XHRcdGlmICghaWQpIHtcbjI0NTE6XHRcdFx0XHRwY2lfZXJyKHBkZXYsIFwmIzM0O0Vycm9yIGNvdWxkIG5vdCBmaW5kIHBjaV9kZXZpY2VfaWQgZm9yICV4OiV4XFxuXCYjMzQ7LCBwZGV2LVx1MDAzZXZlbmRvciwgcGRldi1cdTAwM2VkZXZpY2UpO1xuMjQ1MjpcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuMjQ1MzpcdFx0XHR9XG4yNDU0Olx0XHR9XG4yNDU1Olx0XG4yNDU2Olx0XHRicmNtZl9kYmcoUENJRSwgXCYjMzQ7RW50ZXIgJXg6JXhcXG5cJiMzNDssIHBkZXYtXHUwMDNldmVuZG9yLCBwZGV2LVx1MDAzZWRldmljZSk7XG4yNDU3Olx0XG4yNDU4Olx0XHRyZXQgPSAtRU5PTUVNO1xuMjQ1OTpcdFx0ZGV2aW5mbyA9IGt6YWxsb2Nfb2JqKCpkZXZpbmZvKTtcbjI0NjA6XHRcdGlmIChkZXZpbmZvID09IE5VTEwpXG4yNDYxOlx0XHRcdHJldHVybiByZXQ7XG4yNDYyOlx0XG4yNDYzOlx0XHRkZXZpbmZvLVx1MDAzZXBkZXYgPSBwZGV2O1xuMjQ2NDpcdFx0cGNpZV9idXNfZGV2ID0gTlVMTDtcbjI0NjU6XHRcdGRldmluZm8tXHUwMDNlY2kgPSBicmNtZl9jaGlwX2F0dGFjaChkZXZpbmZvLCBwZGV2LVx1MDAzZWRldmljZSxcbjI0NjY6XHRcdFx0XHRcdFx0XHUwMDI2YnJjbWZfcGNpZV9idXNjb3JlX29wcyk7XG4yNDY3Olx0XHRpZiAoSVNfRVJSKGRldmluZm8tXHUwMDNlY2kpKSB7XG4yNDY4Olx0XHRcdHJldCA9IFBUUl9FUlIoZGV2aW5mby1cdTAwM2VjaSk7XG4yNDY5Olx0XHRcdGRldmluZm8tXHUwMDNlY2kgPSBOVUxMO1xuMjQ3MDpcdFx0XHRnb3RvIGZhaWw7XG4yNDcxOlx0XHR9XG4yNDcyOlx0XG4yNDczOlx0XHRjb3JlID0gYnJjbWZfY2hpcF9nZXRfY29yZShkZXZpbmZvLVx1MDAzZWNpLCBCQ01BX0NPUkVfUENJRTIpO1xuMjQ3NDpcdFx0aWYgKGNvcmUtXHUwMDNlcmV2IFx1MDAzZT0gNjQpXG4yNDc1Olx0XHRcdGRldmluZm8tXHUwMDNlcmVnaW5mbyA9IFx1MDAyNmJyY21mX3JlZ2luZm9fNjQ7XG4yNDc2Olx0XHRlbHNlXG4yNDc3Olx0XHRcdGRldmluZm8tXHUwMDNlcmVnaW5mbyA9IFx1MDAyNmJyY21mX3JlZ2luZm9fZGVmYXVsdDtcbjI0Nzg6XHRcbjI0Nzk6XHRcdHBjaWVfYnVzX2RldiA9IGt6YWxsb2Nfb2JqKCpwY2llX2J1c19kZXYpO1xuMjQ4MDpcdFx0aWYgKHBjaWVfYnVzX2RldiA9PSBOVUxMKSB7XG4yNDgxOlx0XHRcdHJldCA9IC1FTk9NRU07XG4yNDgyOlx0XHRcdGdvdG8gZmFpbDtcbjI0ODM6XHRcdH1cbjI0ODQ6XHRcbjI0ODU6XHRcdGRldmluZm8tXHUwMDNlc2V0dGluZ3MgPSBicmNtZl9nZXRfbW9kdWxlX3BhcmFtKFx1MDAyNmRldmluZm8tXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4yNDg2Olx0XHRcdFx0XHRcdFx0ICAgQlJDTUZfQlVTVFlQRV9QQ0lFLFxuMjQ4NzpcdFx0XHRcdFx0XHRcdCAgIGRldmluZm8tXHUwMDNlY2ktXHUwMDNlY2hpcCxcbjI0ODg6XHRcdFx0XHRcdFx0XHQgICBkZXZpbmZvLVx1MDAzZWNpLVx1MDAzZWNoaXByZXYpO1xuMjQ4OTpcdFx0aWYgKCFkZXZpbmZvLVx1MDAzZXNldHRpbmdzKSB7XG4yNDkwOlx0XHRcdHJldCA9IC1FTk9NRU07XG4yNDkxOlx0XHRcdGdvdG8gZmFpbDtcbjI0OTI6XHRcdH1cbjI0OTM6XHRcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhkZXZpbmZvLVx1MDAzZXNldHRpbmdzKTtcbjI0OTQ6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yNDk1Olx0XHRcdGdvdG8gZmFpbDtcbjI0OTY6XHRcbjI0OTc6XHRcdGJ1cyA9IGt6YWxsb2Nfb2JqKCpidXMpO1xuMjQ5ODpcdFx0aWYgKCFidXMpIHtcbjI0OTk6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjI1MDA6XHRcdFx0Z290byBmYWlsO1xuMjUwMTpcdFx0fVxuMjUwMjpcdFx0YnVzLVx1MDAzZW1zZ2J1ZiA9IGt6YWxsb2Nfb2JqKCpidXMtXHUwMDNlbXNnYnVmKTtcbjI1MDM6XHRcdGlmICghYnVzLVx1MDAzZW1zZ2J1Zikge1xuMjUwNDpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMjUwNTpcdFx0XHRrZnJlZShidXMpO1xuMjUwNjpcdFx0XHRnb3RvIGZhaWw7XG4yNTA3Olx0XHR9XG4yNTA4Olx0XG4yNTA5Olx0XHQvKiBob29rIGl0IGFsbCB0b2dldGhlci4gKi9cbjI1MTA6XHRcdHBjaWVfYnVzX2Rldi1cdTAwM2VkZXZpbmZvID0gZGV2aW5mbztcbjI1MTE6XHRcdHBjaWVfYnVzX2Rldi1cdTAwM2VidXMgPSBidXM7XG4yNTEyOlx0XHRidXMtXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4yNTEzOlx0XHRidXMtXHUwMDNlYnVzX3ByaXYucGNpZSA9IHBjaWVfYnVzX2RldjtcbjI1MTQ6XHRcdGJ1cy1cdTAwM2VvcHMgPSBcdTAwMjZicmNtZl9wY2llX2J1c19vcHM7XG4yNTE1Olx0XHRidXMtXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX01TR0JVRjtcbjI1MTY6XHRcdGJ1cy1cdTAwM2VjaGlwID0gZGV2aW5mby1cdTAwM2Vjb3JlaWQ7XG4yNTE3Olx0XHRidXMtXHUwMDNld293bF9zdXBwb3J0ZWQgPSBwY2lfcG1lX2NhcGFibGUocGRldiwgUENJX0QzaG90KTtcbjI1MTg6XHRcdGJ1cy1cdTAwM2Vmd3ZpZCA9IGRydmRhdGFbaWQtXHUwMDNlZHJpdmVyX2RhdGFdLnZlbmRvcjtcbjI1MTk6XHRcdGRldmluZm8tXHUwMDNlZndzZWVkID0gZHJ2ZGF0YVtpZC1cdTAwM2Vkcml2ZXJfZGF0YV0uZndfc2VlZDtcbjI1MjA6XHRcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldiwgYnVzKTtcbjI1MjE6XHRcbjI1MjI6XHRcdHJldCA9IGJyY21mX2FsbG9jKFx1MDAyNmRldmluZm8tXHUwMDNlcGRldi1cdTAwM2VkZXYsIGRldmluZm8tXHUwMDNlc2V0dGluZ3MpO1xuMjUyMzpcdFx0aWYgKHJldClcbjI1MjQ6XHRcdFx0Z290byBmYWlsX2J1cztcbjI1MjU6XHRcbjI1MjY6XHRcdC8qIG90cCByZWFkIG9wZXJhdGlvbiAqL1xuMjUyNzpcdFx0c3dpdGNoIChidXMtXHUwMDNlZnd2aWQpIHtcbjI1Mjg6XHRcdGNhc2UgQlJDTUZfRldWRU5ET1JfV0NDOlxuMjUyOTpcdFx0Y2FzZSBCUkNNRl9GV1ZFTkRPUl9CQ0E6XG4yNTMwOlx0XHRcdHJldCA9IGJyY21mX3BjaWVfcmVhZF9vdHAoZGV2aW5mbyk7XG4yNTMxOlx0XHRcdGlmIChyZXQpIHtcbjI1MzI6XHRcdFx0XHRicmNtZl9lcnIoYnVzLCBcJiMzNDtmYWlsZWQgdG8gcGFyc2UgT1RQXFxuXCYjMzQ7KTtcbjI1MzM6XHRcdFx0XHRnb3RvIGZhaWxfYnJjbWY7XG4yNTM0Olx0XHRcdH1cbjI1MzU6XHRcdFx0YnJlYWs7XG4yNTM2Olx0XHRjYXNlIEJSQ01GX0ZXVkVORE9SX0NZVzpcbjI1Mzc6XHRcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzgzCgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoZSB0ZWNobmljYWwgZGV0YWlsczoKCioqRGlnZ2luZyBEZWVwZXIgaW50byBgYnJjbWZfcGNpZV9wcm9iZWAuLi4qKgoKQWxyaWdodCwgc28gdGhlIGludmVzdGlnYXRpb24gaGFzbiYjMzk7dCBoaXQgYSBkZWFkIGVuZCB5ZXQuIEkgc2VlIHRoYXQgYGJyY21mX3BjaWVfcHJvYmVgIGlzIGNvbnRpbnVpbmcgdG8gZXhlY3V0ZS4gVGhpcyBpcyBnb29kOyBpdCBtZWFucyB0aGVyZSYjMzk7cyBzdGlsbCBtb3JlIGdvaW5nIG9uIHdpdGggdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbi4gSSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gd2hhdCBpdCYjMzk7cyBkb2luZywgdGhlIGNhbGxzIGl0JiMzOTtzIG1ha2luZywgYW5kIHRoZSB2YWx1ZXMgb2YgdGhlIHZhcmlhYmxlcyBpdCYjMzk7cyBtYW5pcHVsYXRpbmcuIEVzc2VudGlhbGx5LCB0aGUgcHJvYmUgZnVuY3Rpb24gc3RpbGwgaGFzIHNvbWUgZmlnaHQgaW4gaXQsIGFuZCBsaWtlbHkgdGhlIHNvbHV0aW9uIGlzIHdpdGhpbiB0aGUgZnVydGhlciBzdGVwcyBpdCBpcyBydW5uaW5nLiBNeSBnb2FsIG5vdyBpcyB0byB1bmRlcnN0YW5kIHdoYXQgaXMgdHJpZ2dlcmluZyB0aG9zZSBuZXh0IHN0ZXBzIGFuZCB3aGV0aGVyIHRoZXkgYXJlIGJlaW5nIHN1Y2Nlc3NmdWwgb3Igbm90LiBNYXliZSBzb21lIGNvbmRpdGlvbiBpcyBub3QgbWV0LCBhIHJlc291cmNlIGlzIHVuYXZhaWxhYmxlLCBvciBhIGNvbmZpZ3VyYXRpb24gaXMgaW5jb3JyZWN0LiBUaGlzIGlzIGEgcG9pbnQgdG8gYmVnaW4gbmFycm93aW5nIGRvd24gdGhlIHNwZWNpZmljIHBvaW50IG9mIGZhaWx1cmUgaW4gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTM4Olx0XHRcdGJyZWFrO1xuMjUzOTpcdFx0fVxuMjU0MDpcdFxuMjU0MTpcdCNpZmRlZiBERUJVR1xuMjU0MjpcdFx0LyogU2V0IHVwIHRoZSBmd2NvbiB0aW1lciAqL1xuMjU0MzpcdFx0dGltZXJfc2V0dXAoXHUwMDI2ZGV2aW5mby1cdTAwM2V0aW1lciwgYnJjbWZfcGNpZV9md2NvbiwgMCk7XG4yNTQ0Olx0I2VuZGlmXG4yNTQ1Olx0XG4yNTQ2Olx0XHRmd3JlcSA9IGJyY21mX3BjaWVfcHJlcGFyZV9md19yZXF1ZXN0KGRldmluZm8pO1xuMjU0NzpcdFx0aWYgKCFmd3JlcSkge1xuMjU0ODpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMjU0OTpcdFx0XHRnb3RvIGZhaWxfYnJjbWY7XG4yNTUwOlx0XHR9XG4yNTUxOlx0XG4yNTUyOlx0XHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGJ1cy1cdTAwM2VkZXYsIGZ3cmVxLCBicmNtZl9wY2llX3NldHVwKTtcbjI1NTM6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjI1NTQ6XHRcdFx0a2ZyZWUoZndyZXEpO1xuMjU1NTpcdFx0XHRnb3RvIGZhaWxfYnJjbWY7XG4yNTU2Olx0XHR9XG4yNTU3Olx0XHRyZXR1cm4gMDtcbjI1NTg6XHRcbjI1NTk6XHRmYWlsX2JyY21mOlxuMjU2MDpcdFx0YnJjbWZfZnJlZShcdTAwMjZkZXZpbmZvLVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbjI1NjE6XHRmYWlsX2J1czpcbjI1NjI6XHRcdGtmcmVlKGJ1cy1cdTAwM2Vtc2didWYpO1xuMjU2MzpcdFx0a2ZyZWUoYnVzKTtcbjI1NjQ6XHRmYWlsOlxuMjU2NTpcdFx0YnJjbWZfZXJyKE5VTEwsIFwmIzM0O2ZhaWxlZCAleDoleFxcblwmIzM0OywgcGRldi1cdTAwM2V2ZW5kb3IsIHBkZXYtXHUwMDNlZGV2aWNlKTtcbjI1NjY6XHRcdGJyY21mX3BjaWVfcmVsZWFzZV9yZXNvdXJjZShkZXZpbmZvKTtcbjI1Njc6XHRcdGlmIChkZXZpbmZvLVx1MDAzZWNpKVxuMjU2ODpcdFx0XHRicmNtZl9jaGlwX2RldGFjaChkZXZpbmZvLVx1MDAzZWNpKTtcbjI1Njk6XHRcdGlmIChkZXZpbmZvLVx1MDAzZXNldHRpbmdzKVxuMjU3MDpcdFx0XHRicmNtZl9yZWxlYXNlX21vZHVsZV9wYXJhbShkZXZpbmZvLVx1MDAzZXNldHRpbmdzKTtcbjI1NzE6XHRcdGtmcmVlKHBjaWVfYnVzX2Rldik7XG4yNTcyOlx0XHRrZnJlZShkZXZpbmZvKTtcbjI1NzM6XHRcdHJldHVybiByZXQ7XG4yNTc0Olx0fVxuMjU3NTpcdFxuMjU3NjpcdFxuMjU3NzpcdHN0YXRpYyB2b2lkXG4yNTc4Olx0YnJjbWZfcGNpZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4yNTc5Olx0e1xuMjU4MDpcdFx0c3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbztcbjI1ODE6XHRcdHN0cnVjdCBicmNtZl9idXMgKmJ1cztcbjI1ODI6XHRcbjI1ODM6XHRcdGJyY21mX2RiZyhQQ0lFLCBcJiMzNDtFbnRlclxcblwmIzM0Oyk7XG4yNTg0Olx0XG4yNTg1Olx0XHRidXMgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMjU4NjpcdFx0aWYgKGJ1cyA9PSBOVUxMKVxuMjU4NzpcdFx0XHRyZXR1cm47XG4yNTg4Olx0XG4yNTg5Olx0XHRkZXZpbmZvID0gYnVzLVx1MDAzZWJ1c19wcml2LnBjaWUtXHUwMDNlZGV2aW5mbztcbjI1OTA6XHRcdGJyY21mX3BjaWVfYnVzX2NvbnNvbGVfcmVhZChkZXZpbmZvLCBmYWxzZSk7XG4yNTkxOlx0XHRicmNtZl9wY2llX2Z3Y29uX3RpbWVyKGRldmluZm8sIGZhbHNlKTtcbjI1OTI6XHRcbjI1OTM6XHRcdGRldmluZm8tXHUwMDNlc3RhdGUgPSBCUkNNRk1BQ19QQ0lFX1NUQVRFX0RPV047XG4yNTk0Olx0XHRpZiAoZGV2aW5mby1cdTAwM2VjaSlcbjI1OTU6XHRcdFx0YnJjbWZfcGNpZV9pbnRyX2Rpc2FibGUoZGV2aW5mbyk7XG4yNTk2Olx0XG4yNTk3Olx0XHRicmNtZl9kZXRhY2goXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMjU5ODpcdFx0YnJjbWZfZnJlZShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4yNTk5Olx0XG4yNjAwOlx0XHRrZnJlZShidXMtXHUwMDNlYnVzX3ByaXYucGNpZSk7XG4yNjAxOlx0XHRrZnJlZShidXMtXHUwMDNlbXNnYnVmLVx1MDAzZWZsb3dyaW5ncyk7XG4yNjAyOlx0XHRrZnJlZShidXMtXHUwMDNlbXNnYnVmKTtcbjI2MDM6XHRcdGtmcmVlKGJ1cyk7XG4yNjA0Olx0XG4yNjA1Olx0XHRicmNtZl9wY2llX3JlbGVhc2VfaXJxKGRldmluZm8pO1xuMjYwNjpcdFx0YnJjbWZfcGNpZV9yZWxlYXNlX3NjcmF0Y2hidWZmZXJzKGRldmluZm8pO1xuMjYwNzpcdFx0YnJjbWZfcGNpZV9yZWxlYXNlX3JpbmdidWZmZXJzKGRldmluZm8pO1xuMjYwODpcdFx0YnJjbWZfcGNpZV9yZXNldF9kZXZpY2UoZGV2aW5mbyk7XG4yNjA5Olx0XHRicmNtZl9wY2llX3JlbGVhc2VfcmVzb3VyY2UoZGV2aW5mbyk7XG4yNjEwOlx0XHRyZWxlYXNlX2Zpcm13YXJlKGRldmluZm8tXHUwMDNlY2xtX2Z3KTtcbjI2MTE6XHRcdHJlbGVhc2VfZmlybXdhcmUoZGV2aW5mby1cdTAwM2V0eGNhcF9mdyk7XG4yNjEyOlx0XG4yNjEzOlx0XHRpZiAoZGV2aW5mby1cdTAwM2VjaSlcbjI2MTQ6XHRcdFx0YnJjbWZfY2hpcF9kZXRhY2goZGV2aW5mby1cdTAwM2VjaSk7XG4yNjE1Olx0XHRpZiAoZGV2aW5mby1cdTAwM2VzZXR0aW5ncylcbjI2MTY6XHRcdFx0YnJjbWZfcmVsZWFzZV9tb2R1bGVfcGFyYW0oZGV2aW5mby1cdTAwM2VzZXR0aW5ncyk7XG4yNjE3Olx0XG4yNjE4Olx0XHRrZnJlZShkZXZpbmZvKTtcbjI2MTk6XHRcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldiwgTlVMTCk7XG4yNjIwOlx0fVxuMjYyMTpcdFxuMjYyMjpcdFxuMjYyMzpcdCNpZmRlZiBDT05GSUdfUE1cbjI2MjQ6XHRcbjI2MjU6XHRcbjI2MjY6XHRzdGF0aWMgaW50IGJyY21mX3BjaWVfcG1fZW50ZXJfRDMoc3RydWN0IGRldmljZSAqZGV2KVxuMjYyNzpcdHtcbjI2Mjg6XHRcdHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm87XG4yNjI5Olx0XHRzdHJ1Y3QgYnJjbWZfYnVzICpidXM7XG4yNjMwOlx0XG4yNjMxOlx0XHRicmNtZl9kYmcoUENJRSwgXCYjMzQ7RW50ZXJcXG5cJiMzNDspO1xuMjYzMjpcdFxuMjYzMzpcdFx0YnVzID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4yNjM0Olx0XHRkZXZpbmZvID0gYnVzLVx1MDAzZWJ1c19wcml2LnBjaWUtXHUwMDNlZGV2aW5mbztcbjI2MzU6XHRcbjI2MzY6XHRcdGJyY21mX3BjaWVfZndjb25fdGltZXIoZGV2aW5mbywgZmFsc2UpO1xuMjYzNzpcdFx0YnJjbWZfYnVzX2NoYW5nZV9zdGF0ZShidXMsIEJSQ01GX0JVU19ET1dOKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NjkKCQkJCQkJCW91dHB1dDogNTYKCQkJCQkJCXRob3VnaHRzOiAxMzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYnJjbWZtYWMgUENJZSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGJyY21mX3BjaWVfcHJvYmVgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBjYWxsIGBicmNtZl9md19nZXRfZmlybXdhcmVzYCwgd2hpY2ggdGhlbiB0cmlnZ2VycyBgYnJjbWZfcGNpZV9zZXR1cGAgYXMgYSBjYWxsYmFjayAqYWZ0ZXIqIHRoZSBmaXJtd2FyZSBsb2Fkcy4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIFN5emthbGxlciBjYW4sIGluIHRoZW9yeSwgbW9jayBmaXJtd2FyZSBsb2FkaW5nLiBJZiBjb25maWd1cmVkLCBvciBpZiB0aGUgZmlybXdhcmUgaXMgYmFrZWQgaW50byB0aGUgaW1hZ2UsIFN5emthbGxlciBjYW4gZWZmZWN0aXZlbHkgJiMzNDtsb2FkJiMzNDsgdGhlIGZpcm13YXJlIHVzaW5nIGl0cyBgcmVxdWVzdF9maXJtd2FyZWAgbW9ja2luZyBjYXBhYmlsaXRpZXMuCgpOb3csIGluc2lkZSBgYnJjbWZfcGNpZV9zZXR1cGAsIGl0IGdvZXMgb24gdG8gY2FsbCBgYnJjbWZfYXR0YWNoYCwgd2hpY2ggdGhlbiBjYWxscyBgYnJjbWZfcHJvdG9fYXR0YWNoYCwgYW5kIGZpbmFsbHkgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIGNvZGUgcGF0aCBJJiMzOTttIGludGVyZXN0ZWQgaW4gKmlzKiByZWFjaGFibGUgaWYgdGhlIGZpcm13YXJlIGxvYWRzIHN1Y2Nlc3NmdWxseSBhbmQgdGhlIFBDSWUgZGV2aWNlIGlzIGNvcnJlY3RseSBwcm9iZWQuCgpCdXQgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXM6IERvZXMgU3l6a2FsbGVyICpmdXp6KiB0aGlzIHBhdGg/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgaW5zdHJ1Y3Rpb25zIGFib3V0IHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgY2VydGFpbiB0eXBlcyBvZiBkcml2ZXJzLiBTcGVjaWZpY2FsbHksIHRoZSBpbnN0cnVjdGlvbnMgc3RhdGUgJiMzNDtDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0Oy4KCklzIGBicmNtZm1hY2Agb25lIG9mIHRob3NlPyBXZWxsLCBpdCYjMzk7cyBhIEJyb2FkY29tIFdpLUZpIGRyaXZlciwgc28gdGVjaG5pY2FsbHksIHllcywgaXQmIzM5O3MgdmVuZG9yLXNwZWNpZmljLCBidXQgSSBhbSBub3QgY2VydGFpbiBpZiBpdCYjMzk7cyBjb25zaWRlcmVkIHRvIGJlIGxpa2UgYSBTbWFydE5JQyBvciBHUFUsIHJlcXVpcmluZyBhY3R1YWwgaGFyZHdhcmUuCgpIb3dldmVyLCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYHN5el9wY2lfZGV2aWNlX2FkZGAuIFRoaXMgc3lzY2FsbCwgd2hpY2ggdGhlIGluc3RydWN0aW9ucyBhcmUgcmVmZXJyaW5nIHRvLCBjYW4gaW5qZWN0IFBDSSBkZXZpY2VzIHVzaW5nIGB2ZmlvYCBvciBzaW1pbGFyIG1lY2hhbmlzbXMsIGFuZCBldmVuIGNyZWF0ZSB2aXJ0dWFsIFBDSSBkZXZpY2VzIHdpdGhpbiBRRU1VLiBUaGF0JiMzOTtzIGhvdyBTeXprYWxsZXIgbW9ja3MgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgYW5kIE1NSU8uIFNvLCBpdCAqY2FuKiBmdXp6IFBDSSBkcml2ZXJzLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHN5el9wY2lfZGV2aWNlX2FkZGAgZG9lcyAqbm90KiBuZWVkIFFFTVUgdG8gc3BlY2lmaWNhbGx5IGVtdWxhdGUgdGhlIEJyb2FkY29tIFdpLUZpIGNhcmQuIEl0IHJlbGllcyBvbiBhIGdlbmVyaWMgUENJIGRldmljZSBpbmplY3RvciwgbGlrZSBhIGN1c3RvbSBRRU1VIGRldmljZSBjb250cm9sbGVkIGJ5IFN5emthbGxlci4KCkxldCBtZSBxdWlja2x5IGludmVzdGlnYXRlIGlmIHRoaXMgYGJyY21mbWFjYCBpcyBhbHJlYWR5IGZ1enplZC4gVW5mb3J0dW5hdGVseSwgSSBkbyBub3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoZSBTeXprYWxsZXIgZGVzY3JpcHRpb25zIGF0IHRoZSBtb21lbnQuIEJ1dCBJIGNvdWxkIHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gc2VhcmNoIHRoZSBrZXJuZWwgZm9yIHJlbGV2YW50IGtleXdvcmRzLgoKSG93ZXZlciwgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zOiBUaGV5IHNwZWNpZnkgJiMzNDtDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0Oy4gU28sIGlzIGBicmNtZm1hY2AgYSAmIzM0O1NtYXJ0TklDLCYjMzQ7ICYjMzQ7R1BVLCYjMzQ7IG9yICYjMzQ7UENJZSBzd2l0Y2gmIzM0Oz8gTm8sIGl0JiMzOTtzIGEgV2ktRmkgZHJpdmVyLiBBbmQgV2ktRmkgZHJpdmVycyBhcmUgb2Z0ZW4gZnV6emVkIHVzaW5nIGBtYWM4MDIxMV9od3NpbWAgb3IgZXZlbiBVU0IgKGUuZy4sIGBhdGg5a19odGNgLCBgcnRsd2lmaWApLgoKSG93ZXZlciwgd2hhdCBhYm91dCB0aGUgUENJZSBhc3BlY3Qgb2YgYGJyY21mbWFjYD8gTGV0IG1lIGNvbmZpcm06IGRvZXMgYGJyY21mbWFjYCBoYXZlIFVTQiBzdXBwb3J0PyBZZXMsIGl0IGRvZXMuIERvZXMgdGhlIFVTQiBpbXBsZW1lbnRhdGlvbiB1c2UgYG1zZ2J1ZmA/IExvb2tpbmcgYmFjayBhdCB0aGUgY29kZSwgVVNCIHVzZXMgYEJSQ01GX1BST1RPX0JDRENgLCB3aGljaCBpcyAqbm90KiBgQlJDTUZfUFJPVE9fTVNHQlVGYC4gU0RJTyBhbHNvIHVzZXMgYEJSQ01GX1BST1RPX0JDRENgLiBPbmx5IFBDSWUgdXNlcyBgQlJDTUZfUFJPVE9fTVNHQlVGYC4gU28sIHRoZSBjaGFuZ2VzIEkgc2F3IChgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYCBpbiBgbXNnYnVmLmNgKSBhcmUgb25seSByZWFjaGFibGUgdmlhIHRoZSBQQ0llIHBhdGguCgpTbywgc2luY2UgaXQmIzM5O3MgKm9ubHkqIHJlYWNoYWJsZSB2aWEgUENJZSwgYW5kIGl0JiMzOTtzIGEgQnJvYWRjb20gV2ktRmkgUENJZSBjYXJkLi4uIGNhbiBTeXprYWxsZXIgZnV6eiBpdD8gU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgKmNhbiogZnV6eiAqYW55KiBQQ0kgZHJpdmVyLCBieSBwcm92aWRpbmcgbWF0Y2hpbmcgUENJIHZlbmRvci9kZXZpY2UgSURzIGFuZCBtb2NraW5nIE1NSU8vRE1BLCBpZiBpdHMgY2FwYWJsZS4KCkJ1dCB0aGUgaW5zdHJ1Y3Rpb24gbWVudGlvbnM6ICYjMzQ7Q29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IE9rYXksIHNvIGlzIHRoaXMgV2ktRmkgY2FyZCBsaWtlIGEgJiMzNDtTbWFydE5JQyYjMzQ7IG9yIGEgR1BVIG9yIFBDSWUgc3dpdGNoPyBOb3QgZGlyZWN0bHkuIEJ1dCBkb2VzIGl0IHJlcXVpcmUgaGFyZHdhcmU/IE5vLiBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciB3b3JrcyBieSBlbXVsYXRpbmcgdGhlIFBDSSBkZXZpY2UgYXQgdGhlIGNvbmZpZyBzcGFjZSBhbmQgTU1JTyBsZXZlbAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMzU6XHRzdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbjIxMzY6XHRcdFx0XHQgICAgIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcSlcbjIxMzc6XHR7XG4yMTM4Olx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuMjEzOTpcdFx0dm9pZCAqbnZyYW07XG4yMTQwOlx0XHRzdHJ1Y3QgYnJjbWZfYnVzICpidXM7XG4yMTQxOlx0XHRzdHJ1Y3QgYnJjbWZfcGNpZWRldiAqcGNpZV9idXNfZGV2O1xuMjE0MjpcdFx0c3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbztcbjIxNDM6XHRcdHN0cnVjdCBicmNtZl9jb21tb25yaW5nICoqZmxvd3JpbmdzO1xuMjE0NDpcdFx0dTMyIGksIG52cmFtX2xlbjtcbjIxNDU6XHRcbjIxNDY6XHRcdGJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuMjE0NzpcdFx0cGNpZV9idXNfZGV2ID0gYnVzLVx1MDAzZWJ1c19wcml2LnBjaWU7XG4yMTQ4Olx0XHRkZXZpbmZvID0gcGNpZV9idXNfZGV2LVx1MDAzZWRldmluZm87XG4yMTQ5Olx0XG4yMTUwOlx0XHQvKiBjaGVjayBmaXJtd2FyZSBsb2FkaW5nIHJlc3VsdCAqL1xuMjE1MTpcdFx0aWYgKHJldClcbjIxNTI6XHRcdFx0Z290byBmYWlsO1xuMjE1MzpcdFxuMjE1NDpcdFx0YnJjbWZfcGNpZV9hdHRhY2goZGV2aW5mbyk7XG4yMTU1Olx0XG4yMTU2Olx0XHRmdyA9IGZ3cmVxLVx1MDAzZWl0ZW1zW0JSQ01GX1BDSUVfRldfQ09ERV0uYmluYXJ5O1xuMjE1NzpcdFx0bnZyYW0gPSBmd3JlcS1cdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX05WUkFNXS5udl9kYXRhLmRhdGE7XG4yMTU4Olx0XHRudnJhbV9sZW4gPSBmd3JlcS1cdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX05WUkFNXS5udl9kYXRhLmxlbjtcbjIxNTk6XHRcdGRldmluZm8tXHUwMDNlY2xtX2Z3ID0gZndyZXEtXHUwMDNlaXRlbXNbQlJDTUZfUENJRV9GV19DTE1dLmJpbmFyeTtcbjIxNjA6XHRcdGRldmluZm8tXHUwMDNldHhjYXBfZncgPSBmd3JlcS1cdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX1RYQ0FQXS5iaW5hcnk7XG4yMTYxOlx0XHRrZnJlZShmd3JlcSk7XG4yMTYyOlx0XG4yMTYzOlx0XHRyZXQgPSBicmNtZl9jaGlwX2dldF9yYW1pbmZvKGRldmluZm8tXHUwMDNlY2kpO1xuMjE2NDpcdFx0aWYgKHJldCkge1xuMjE2NTpcdFx0XHRicmNtZl9lcnIoYnVzLCBcJiMzNDtGYWlsZWQgdG8gZ2V0IFJBTSBpbmZvXFxuXCYjMzQ7KTtcbjIxNjY6XHRcdFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4yMTY3Olx0XHRcdGJyY21mX2Z3X252cmFtX2ZyZWUobnZyYW0pO1xuMjE2ODpcdFx0XHRnb3RvIGZhaWw7XG4yMTY5Olx0XHR9XG4yMTcwOlx0XG4yMTcxOlx0XHQvKiBTb21lIG9mIHRoZSBmaXJtd2FyZXMgaGF2ZSB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IG9mIHRoZSBkZXZpY2VcbjIxNzI6XHRcdCAqIGRlZmluZWQgaW5zaWRlIHRoZSBmaXJtd2FyZS4gVGhpcyBpcyBiZWNhdXNlIHBhcnQgb2YgdGhlIG1lbW9yeSBpblxuMjE3MzpcdFx0ICogdGhlIGRldmljZSBpcyBzaGFyZWQgYW5kIHRoZSBkZXZpc2lvbiBpcyBkZXRlcm1pbmVkIGJ5IEZXLiBQYXJzZVxuMjE3NDpcdFx0ICogdGhlIGZpcm13YXJlIGFuZCBhZGp1c3QgdGhlIGNoaXAgbWVtb3J5IHNpemUgbm93LlxuMjE3NTpcdFx0ICovXG4yMTc2Olx0XHRicmNtZl9wY2llX2FkanVzdF9yYW1zaXplKGRldmluZm8sICh1OCAqKWZ3LVx1MDAzZWRhdGEsIGZ3LVx1MDAzZXNpemUpO1xuMjE3NzpcdFxuMjE3ODpcdFx0cmV0ID0gYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbShkZXZpbmZvLCBmdywgbnZyYW0sIG52cmFtX2xlbik7XG4yMTc5Olx0XHRpZiAocmV0KVxuMjE4MDpcdFx0XHRnb3RvIGZhaWw7XG4yMTgxOlx0XG4yMTgyOlx0XHRkZXZpbmZvLVx1MDAzZXN0YXRlID0gQlJDTUZNQUNfUENJRV9TVEFURV9VUDtcbjIxODM6XHRcbjIxODQ6XHRcdHJldCA9IGJyY21mX3BjaWVfaW5pdF9yaW5nYnVmZmVycyhkZXZpbmZvKTtcbjIxODU6XHRcdGlmIChyZXQpXG4yMTg2Olx0XHRcdGdvdG8gZmFpbDtcbjIxODc6XHRcbjIxODg6XHRcdHJldCA9IGJyY21mX3BjaWVfaW5pdF9zY3JhdGNoYnVmZmVycyhkZXZpbmZvKTtcbjIxODk6XHRcdGlmIChyZXQpXG4yMTkwOlx0XHRcdGdvdG8gZmFpbDtcbjIxOTE6XHRcbjIxOTI6XHRcdGJyY21mX3BjaWVfc2VsZWN0X2NvcmUoZGV2aW5mbywgQkNNQV9DT1JFX1BDSUUyKTtcbjIxOTM6XHRcdHJldCA9IGJyY21mX3BjaWVfcmVxdWVzdF9pcnEoZGV2aW5mbyk7XG4yMTk0Olx0XHRpZiAocmV0KVxuMjE5NTpcdFx0XHRnb3RvIGZhaWw7XG4yMTk2Olx0XG4yMTk3Olx0XHQvKiBob29rIHRoZSBjb21tb25yaW5ncyBpbiB0aGUgYnVzIHN0cnVjdHVyZS4gKi9cbjIxOTg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJSQ01GX05ST0ZfQ09NTU9OX01TR1JJTkdTOyBpJiM0MzsmIzQzOylcbjIxOTk6XHRcdFx0YnVzLVx1MDAzZW1zZ2J1Zi1cdTAwM2Vjb21tb25yaW5nc1tpXSA9XG4yMjAwOlx0XHRcdFx0XHRcdTAwMjZkZXZpbmZvLVx1MDAzZXNoYXJlZC5jb21tb25yaW5nc1tpXS1cdTAwM2Vjb21tb25yaW5nO1xuMjIwMTpcdFxuMjIwMjpcdFx0Zmxvd3JpbmdzID0ga3phbGxvY19vYmpzKCpmbG93cmluZ3MsIGRldmluZm8tXHUwMDNlc2hhcmVkLm1heF9mbG93cmluZ3MpO1xuMjIwMzpcdFx0aWYgKCFmbG93cmluZ3MpXG4yMjA0Olx0XHRcdGdvdG8gZmFpbDtcbjIyMDU6XHRcbjIyMDY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldmluZm8tXHUwMDNlc2hhcmVkLm1heF9mbG93cmluZ3M7IGkmIzQzOyYjNDM7KVxuMjIwNzpcdFx0XHRmbG93cmluZ3NbaV0gPSBcdTAwMjZkZXZpbmZvLVx1MDAzZXNoYXJlZC5mbG93cmluZ3NbaV0uY29tbW9ucmluZztcbjIyMDg6XHRcdGJ1cy1cdTAwM2Vtc2didWYtXHUwMDNlZmxvd3JpbmdzID0gZmxvd3JpbmdzO1xuMjIwOTpcdFxuMjIxMDpcdFx0YnVzLVx1MDAzZW1zZ2J1Zi1cdTAwM2VyeF9kYXRhb2Zmc2V0ID0gZGV2aW5mby1cdTAwM2VzaGFyZWQucnhfZGF0YW9mZnNldDtcbjIyMTE6XHRcdGJ1cy1cdTAwM2Vtc2didWYtXHUwMDNlbWF4X3J4YnVmcG9zdCA9IGRldmluZm8tXHUwMDNlc2hhcmVkLm1heF9yeGJ1ZnBvc3Q7XG4yMjEyOlx0XHRidXMtXHUwMDNlbXNnYnVmLVx1MDAzZW1heF9mbG93cmluZ3MgPSBkZXZpbmZvLVx1MDAzZXNoYXJlZC5tYXhfZmxvd3JpbmdzO1xuMjIxMzpcdFxuMjIxNDpcdFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZkZXZpbmZvLVx1MDAzZW1iZGF0YV9yZXNwX3dhaXQpO1xuMjIxNTpcdFxuMjIxNjpcdFx0cmV0ID0gYnJjbWZfYXR0YWNoKFx1MDAyNmRldmluZm8tXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuMjIxNzpcdFx0aWYgKHJldClcbjIyMTg6XHRcdFx0Z290byBmYWlsO1xuMjIxOTpcdFxuMjIyMDpcdFx0YnJjbWZfcGNpZV9idXNfY29uc29sZV9yZWFkKGRldmluZm8sIGZhbHNlKTtcbjIyMjE6XHRcbjIyMjI6XHRcdGJyY21mX3BjaWVfZndjb25fdGltZXIoZGV2aW5mbywgdHJ1ZSk7XG4yMjIzOlx0XG4yMjI0Olx0XHRyZXR1cm47XG4yMjI1Olx0XG4yMjI2Olx0ZmFpbDpcbjIyMjc6XHRcdGJyY21mX2VycihidXMsIFwmIzM0O0RvbmdsZSBzZXR1cCBmYWlsZWRcXG5cJiMzNDspO1xuMjIyODpcdFx0YnJjbWZfcGNpZV9idXNfY29uc29sZV9yZWFkKGRldmluZm8sIHRydWUpO1xuMjIyOTpcdFx0YnJjbWZfZndfY3Jhc2hlZChkZXYpO1xuMjIzMDpcdFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7XG4yMjMxOlx0fVxuMjIzMjpcdFxuMjIzMzpcdHN0YXRpYyBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqXG4yMjM0Olx0YnJjbWZfcGNpZV9wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NjQKCQkJCQkJCW91dHB1dDogNTcKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBGaXJtd2FyZSBMb2FkaW5nIElzc3VlcyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBkZWFsLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaWYgdGhlIHJldHVybiBjb2RlLCBgcmV0YCwgaW5kaWNhdGVzIGEgZmlybXdhcmUgbG9hZCBmYWlsdXJlLCB0aGUgY29kZSBicmFuY2hlcyB0byBgZmFpbGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYGRldmljZV9yZWxlYXNlX2RyaXZlcihkZXYpYCBpcyBjYWxsZWQsIGFuZCBgYnJjbWZfYXR0YWNoYCBpcyBjb21wbGV0ZWx5IGJ5cGFzc2VkLiBUaGlzIG1lYW5zIGBicmNtZl9hdHRhY2hgIGlzIG9ubHkgZW50ZXJlZCBpZiB0aGUgZmlybXdhcmUgbG9hZHMgc3VjY2Vzc2Z1bGx5LiBCdXQsIHRoZSBxdWVzdGlvbiBJJiMzOTttIHRyeWluZyB0byBhbnN3ZXIgaXMgd2hhdCBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIG1vY2tpbmcuCgpJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBTeXprYWxsZXIgY2FuLCBhbmQgbGlrZWx5ICpkb2VzKiBtb2NrIGZpcm13YXJlIGxvYWRpbmcuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBTeXprYWxsZXIgZWl0aGVyIHVzZXMgYENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVJgIG9yIHByb3ZpZGVzIHNvbWUgcGxhY2Vob2xkZXIgZmlybXdhcmUgZmlsZXMgZGlyZWN0bHkgd2l0aGluIHRoZSBpbWFnZS4gQnV0IHRoYXQgYnJpbmdzIG1lIHRvIGEgcG90ZW50aWFsbHkgY3JpdGljYWwgaXNzdWUgd2l0aCBgYnJjbWZtYWNgLgoKTm93IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGJyY21mX3BjaWVfc2V0dXBgLiBTcGVjaWZpY2FsbHksIHRoZSBmaXJtd2FyZSBwYXJzaW5nIGRvbmUgdGhlcmU6IGBicmNtZl9wY2llX2FkanVzdF9yYW1zaXplKGRldmluZm8sICh1OCAqKWZ3LSZndDtkYXRhLCBmdy0mZ3Q7c2l6ZSk7YCBhbmQgYHJldCA9IGJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW0oZGV2aW5mbywgZncsIG52cmFtLCBudnJhbV9sZW4pO2AuIElmIFN5emthbGxlciYjMzk7cyBmaXJtd2FyZSBpcyBlc3NlbnRpYWxseSBqdXN0IGR1bW15IGJ5dGVzLCB3aWxsIHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgaXQgZ3JhY2VmdWxseT8gSSBuZWVkIHRvIGxvb2sgaW50byBgYnJjbWZfcGNpZV9hZGp1c3RfcmFtc2l6ZWAgbW9yZSBjbG9zZWx5LiBJIGhhdmUgYSBmZWVsaW5nIHRoYXQgbWlnaHQgYmUgd2hlcmUgdGhlIHByb2JsZW1zIGFyaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9wY2llX2FkanVzdF9yYW1zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTE1OTU9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MTU5NjpicmNtZl9wY2llX2FkanVzdF9yYW1zaXplKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHU4ICpkYXRhLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0xNTk3LVx0XHRcdCAgdTMyIGRhdGFfbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjEzNT1zdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIxNzUtXHQgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjE3NjpcdGJyY21mX3BjaWVfYWRqdXN0X3JhbXNpemUoZGV2aW5mbywgKHU4ICopZnctXHUwMDNlZGF0YSwgZnctXHUwMDNlc2l6ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTIxNzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjEzCgkJCQkJCQlvdXRwdXQ6IDU2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhbmFseXplIHRob3NlIGZ1bmN0aW9ucywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgZ2VhcmVkIHRvd2FyZHMgYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byB0aGUgRmlybXdhcmUgTG9hZGluZyBhbmQgUkFNIFNpemluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIEJyb2FkY29tIFBDSWUgZHJpdmVyIGhhbmRsZXMgZmlybXdhcmUgbG9hZGluZyBhbmQsIGNydWNpYWxseSwgaG93IGl0IG1hbmFnZXMgUkFNIHNpemUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYGJyY21mX3BjaWVfYWRqdXN0X3JhbXNpemVgIGFuZCBgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUsIGZyb20gdGhlIG5hbWVzIGFsb25lLCBwcm9iYWJseSB0aGUgY29yZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgdGhlIGRldmljZS4gSSBhbnRpY2lwYXRlIGBicmNtZl9wY2llX2FkanVzdF9yYW1zaXplYCBkZWFsaW5nIHdpdGggdGhlIGhhcmR3YXJlJiMzOTtzIG1lbW9yeSBjb25maWd1cmF0aW9uLCBwcm9iYWJseSByZWFkaW5nIHNvbWUgcmVnaXN0ZXJzIG9yIGV2ZW4gcHJvYmluZyB0byBmaWd1cmUgb3V0IHRoZSBhdmFpbGFibGUgUkFNIGFuZCBtYXliZSBldmVuIGRvaW5nIHNvbWUgZWFybHkgbWVtb3J5IGFsbG9jYXRpb24sIHdoZXJlYXMgYGJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW1gIGhhcyB0byBiZSBhbGwgYWJvdXQgZ2V0dGluZyB0aGF0IGZpcm13YXJlIGltYWdlIG9udG8gdGhlIGRldmljZS4gSSYjMzk7bSBndWVzc2luZyB0aGlzIG1pZ2h0IGludm9sdmUgRE1BIHRyYW5zZmVycywgYW5kIGxpa2VseSBzb21lIHNvcnQgb2YgaGFuZHNoYWtpbmcgb3Igc2lnbmFsaW5nIHRvIHRoZSBCcm9hZGNvbSBjaGlwIGl0c2VsZiB0byBpbml0aWF0ZSB0aGUgdHJhbnNmZXIgYW5kIGdldCBpdCByZWFkeSBmb3IgZXhlY3V0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMg4oCTIGhvdyB0aGV5IGRlYWwgd2l0aCBmYWlsZWQgdHJhbnNmZXJzLCBpbnZhbGlkIGZpcm13YXJlLCBvciB1bmV4cGVjdGVkIGhhcmR3YXJlIHJlc3BvbnNlcy4gRGVidWdnaW5nIHRoYXQgbGF0ZXIgb24gd2lsbCBiZSB0aGUgbWFpbiBnb2FsIGhlcmUuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gRG9lcyBgYWRqdXN0X3JhbXNpemVgIGhhcHBlbiBmaXJzdD8gRG9lcyBpdCBwcm92aWRlIGFueSBjb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBmaXJtd2FyZSBkb3dubG9hZD8gQXJlIHRoZXJlIGFueSBzaGFyZWQgcmVzb3VyY2VzIG9yIGRhdGEgc3RydWN0dXJlcyB0aGVzZSBmdW5jdGlvbnMgcmVseSBvbj8gSXQgaXMgYWxzbyBsaWtlbHkgdGhhdCBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgTlZSQU0gaXMgYmVpbmcgcmVmZXJlbmNlZC4gSXQgc2VlbXMgaW1wb3J0YW50IHRvIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgdGhlIGRyaXZlciB1bHRpbWF0ZWx5IGZ1bmN0aW9ucyBhbmQgaXMgbGlrZWx5IGEgcG90ZW50aWFsIHZlY3RvciBvZiBhIGJ1Zy4gSSYjMzk7bGwgd2FudCB0byB0cmFjZSBhbnkgcG90ZW50aWFsIHBhdGhzIHRvIHRoZXNlIGFyZWFzLiBJIHN1c3BlY3QsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCB0aGVyZSBtaWdodCBiZSBzb21lIHNwZWNpZmljIHRpbWluZyBjb25zaWRlcmF0aW9ucyBvciBzZXF1ZW5jaW5nIHJlcXVpcmVtZW50cyBoZXJlLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGF0IGFzIHdlbGwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGVzZSBmdW5jdGlvbnMgcmV2ZWFsIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTk1Olx0c3RhdGljIHZvaWRcbjE1OTY6XHRicmNtZl9wY2llX2FkanVzdF9yYW1zaXplKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHU4ICpkYXRhLFxuMTU5NzpcdFx0XHRcdCAgdTMyIGRhdGFfbGVuKVxuMTU5ODpcdHtcbjE1OTk6XHRcdF9fbGUzMiAqZmllbGQ7XG4xNjAwOlx0XHR1MzIgbmV3c2l6ZTtcbjE2MDE6XHRcbjE2MDI6XHRcdGlmIChkYXRhX2xlbiBcdTAwM2MgQlJDTUZfUkFNU0laRV9PRkZTRVQgJiM0MzsgOClcbjE2MDM6XHRcdFx0cmV0dXJuO1xuMTYwNDpcdFxuMTYwNTpcdFx0ZmllbGQgPSAoX19sZTMyICopXHUwMDI2ZGF0YVtCUkNNRl9SQU1TSVpFX09GRlNFVF07XG4xNjA2Olx0XHRpZiAobGUzMl90b19jcHVwKGZpZWxkKSAhPSBCUkNNRl9SQU1TSVpFX01BR0lDKVxuMTYwNzpcdFx0XHRyZXR1cm47XG4xNjA4Olx0XHRmaWVsZCYjNDM7JiM0Mzs7XG4xNjA5Olx0XHRuZXdzaXplID0gbGUzMl90b19jcHVwKGZpZWxkKTtcbjE2MTA6XHRcbjE2MTE6XHRcdGJyY21mX2RiZyhQQ0lFLCBcJiMzNDtGb3VuZCByYW1zaXplIGluZm8gaW4gRlcsIGFkanVzdGluZyB0byAweCV4XFxuXCYjMzQ7LFxuMTYxMjpcdFx0XHQgIG5ld3NpemUpO1xuMTYxMzpcdFx0ZGV2aW5mby1cdTAwM2VjaS1cdTAwM2VyYW1zaXplID0gbmV3c2l6ZTtcbjE2MTQ6XHR9XG4xNjE1Olx0XG4xNjE2Olx0XG4xNjE3Olx0c3RhdGljIGludFxuMTYxODpcdGJyY21mX3BjaWVfaW5pdF9zaGFyZV9yYW1faW5mbyhzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLFxuMTYxOTpcdFx0XHRcdCAgICAgICB1MzIgc2hhcmVkcmFtX2FkZHIpXG4xNjIwOlx0e1xuMTYyMTpcdFx0c3RydWN0IGJyY21mX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNmRldmluZm8tXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuMTYyMjpcdFx0c3RydWN0IGJyY21mX3BjaWVfc2hhcmVkX2luZm8gKnNoYXJlZDtcbjE2MjM6XHRcdHUzMiBhZGRyO1xuMTYyNDpcdFxuMTYyNTpcdFx0c2hhcmVkID0gXHUwMDI2ZGV2aW5mby1cdTAwM2VzaGFyZWQ7XG4xNjI2Olx0XHRzaGFyZWQtXHUwMDNldGNtX2Jhc2VfYWRkcmVzcyA9IHNoYXJlZHJhbV9hZGRyO1xuMTYyNzpcdFxuMTYyODpcdFx0c2hhcmVkLVx1MDAzZWZsYWdzID0gYnJjbWZfcGNpZV9yZWFkX3RjbTMyKGRldmluZm8sIHNoYXJlZHJhbV9hZGRyKTtcbjE2Mjk6XHRcdHNoYXJlZC1cdTAwM2V2ZXJzaW9uID0gKHU4KShzaGFyZWQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJSQ01GX1BDSUVfU0hBUkVEX1ZFUlNJT05fTUFTSyk7XG4xNjMwOlx0XHRicmNtZl9kYmcoUENJRSwgXCYjMzQ7UENJZSBwcm90b2NvbCB2ZXJzaW9uICVkXFxuXCYjMzQ7LCBzaGFyZWQtXHUwMDNldmVyc2lvbik7XG4xNjMxOlx0XHRpZiAoKHNoYXJlZC1cdTAwM2V2ZXJzaW9uIFx1MDAzZSBCUkNNRl9QQ0lFX01BWF9TSEFSRURfVkVSU0lPTikgfHxcbjE2MzI6XHRcdCAgICAoc2hhcmVkLVx1MDAzZXZlcnNpb24gXHUwMDNjIEJSQ01GX1BDSUVfTUlOX1NIQVJFRF9WRVJTSU9OKSkge1xuMTYzMzpcdFx0XHRicmNtZl9lcnIoYnVzLCBcJiMzNDtVbnN1cHBvcnRlZCBQQ0lFIHZlcnNpb24gJWRcXG5cJiMzNDssXG4xNjM0Olx0XHRcdFx0ICBzaGFyZWQtXHUwMDNldmVyc2lvbik7XG4xNjM1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYzNjpcdFx0fVxuMTYzNzpcdFxuMTYzODpcdFx0LyogY2hlY2sgZmlybXdhcmUgc3VwcG9ydCBkbWEgaW5kaWNpZXMgKi9cbjE2Mzk6XHRcdGlmIChzaGFyZWQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJSQ01GX1BDSUVfU0hBUkVEX0RNQV9JTkRFWCkge1xuMTY0MDpcdFx0XHRpZiAoc2hhcmVkLVx1MDAzZWZsYWdzIFx1MDAyNiBCUkNNRl9QQ0lFX1NIQVJFRF9ETUFfMkJfSURYKVxuMTY0MTpcdFx0XHRcdGRldmluZm8tXHUwMDNlZG1hX2lkeF9zeiA9IHNpemVvZih1MTYpO1xuMTY0MjpcdFx0XHRlbHNlXG4xNjQzOlx0XHRcdFx0ZGV2aW5mby1cdTAwM2VkbWFfaWR4X3N6ID0gc2l6ZW9mKHUzMik7XG4xNjQ0Olx0XHR9XG4xNjQ1Olx0XG4xNjQ2Olx0XHRhZGRyID0gc2hhcmVkcmFtX2FkZHIgJiM0MzsgQlJDTUZfU0hBUkVEX01BWF9SWEJVRlBPU1RfT0ZGU0VUO1xuMTY0NzpcdFx0c2hhcmVkLVx1MDAzZW1heF9yeGJ1ZnBvc3QgPSBicmNtZl9wY2llX3JlYWRfdGNtMTYoZGV2aW5mbywgYWRkcik7XG4xNjQ4Olx0XHRpZiAoc2hhcmVkLVx1MDAzZW1heF9yeGJ1ZnBvc3QgPT0gMClcbjE2NDk6XHRcdFx0c2hhcmVkLVx1MDAzZW1heF9yeGJ1ZnBvc3QgPSBCUkNNRl9ERUZfTUFYX1JYQlVGUE9TVDtcbjE2NTA6XHRcbjE2NTE6XHRcdGFkZHIgPSBzaGFyZWRyYW1fYWRkciAmIzQzOyBCUkNNRl9TSEFSRURfUlhfREFUQU9GRlNFVF9PRkZTRVQ7XG4xNjUyOlx0XHRzaGFyZWQtXHUwMDNlcnhfZGF0YW9mZnNldCA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTtcbjE2NTM6XHRcbjE2NTQ6XHRcdGFkZHIgPSBzaGFyZWRyYW1fYWRkciAmIzQzOyBCUkNNRl9TSEFSRURfSFRPRF9NQl9EQVRBX0FERFJfT0ZGU0VUO1xuMTY1NTpcdFx0c2hhcmVkLVx1MDAzZWh0b2RfbWJfZGF0YV9hZGRyID0gYnJjbWZfcGNpZV9yZWFkX3RjbTMyKGRldmluZm8sIGFkZHIpO1xuMTY1NjpcdFxuMTY1NzpcdFx0YWRkciA9IHNoYXJlZHJhbV9hZGRyICYjNDM7IEJSQ01GX1NIQVJFRF9EVE9IX01CX0RBVEFfQUREUl9PRkZTRVQ7XG4xNjU4Olx0XHRzaGFyZWQtXHUwMDNlZHRvaF9tYl9kYXRhX2FkZHIgPSBicmNtZl9wY2llX3JlYWRfdGNtMzIoZGV2aW5mbywgYWRkcik7XG4xNjU5Olx0XG4xNjYwOlx0XHRhZGRyID0gc2hhcmVkcmFtX2FkZHIgJiM0MzsgQlJDTUZfU0hBUkVEX1JJTkdfSU5GT19BRERSX09GRlNFVDtcbjE2NjE6XHRcdHNoYXJlZC1cdTAwM2VyaW5nX2luZm9fYWRkciA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTtcbjE2NjI6XHRcbjE2NjM6XHRcdGJyY21mX2RiZyhQQ0lFLCBcJiMzNDttYXggcnggYnVmIHBvc3QgJWQsIHJ4IGRhdGFvZmZzZXQgJWRcXG5cJiMzNDssXG4xNjY0Olx0XHRcdCAgc2hhcmVkLVx1MDAzZW1heF9yeGJ1ZnBvc3QsIHNoYXJlZC1cdTAwM2VyeF9kYXRhb2Zmc2V0KTtcbjE2NjU6XHRcbjE2NjY6XHRcdGJyY21mX3BjaWVfYnVzX2NvbnNvbGVfaW5pdChkZXZpbmZvKTtcbjE2Njc6XHRcdGJyY21mX3BjaWVfYnVzX2NvbnNvbGVfcmVhZChkZXZpbmZvLCBmYWxzZSk7XG4xNjY4Olx0XG4xNjY5Olx0XHRyZXR1cm4gMDtcbjE2NzA6XHR9XG4xNjcxOlx0XG4xNjcyOlx0c3RydWN0IGJyY21mX3JhbmRvbV9zZWVkX2Zvb3RlciB7XG4xNjczOlx0XHRfX2xlMzIgbGVuZ3RoO1xuMTY3NDpcdFx0X19sZTMyIG1hZ2ljO1xuMTY3NTpcdH07XG4xNjc2Olx0XG4xNjc3Olx0I2RlZmluZSBCUkNNRl9SQU5ET01fU0VFRF9NQUdJQ1x0XHQweGZlZWRjMGRlXG4xNjc4Olx0I2RlZmluZSBCUkNNRl9SQU5ET01fU0VFRF9MRU5HVEhcdDB4MTAwXG4xNjc5Olx0XG4xNjgwOlx0c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkXG4xNjgxOlx0YnJjbWZfcGNpZV9wcm92aWRlX3JhbmRvbV9ieXRlcyhzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1MzIgYWRkcmVzcylcbjE2ODI6XHR7XG4xNjgzOlx0XHR1OCByYW5kYnVmW0JSQ01GX1JBTkRPTV9TRUVEX0xFTkdUSF07XG4xNjg0Olx0XG4xNjg1Olx0XHRnZXRfcmFuZG9tX2J5dGVzKHJhbmRidWYsIEJSQ01GX1JBTkRPTV9TRUVEX0xFTkdUSCk7XG4xNjg2Olx0XHRtZW1jcHlfdG9pbyhkZXZpbmZvLVx1MDAzZXRjbSAmIzQzOyBhZGRyZXNzLCByYW5kYnVmLCBCUkNNRl9SQU5ET01fU0VFRF9MRU5HVEgpO1xuMTY4NzpcdH1cbjE2ODg6XHRcbjE2ODk6XHRzdGF0aWMgaW50IGJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW0oc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbyxcbjE2OTA6XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqbnZyYW0sXG4xNjkxOlx0XHRcdFx0XHRcdHUzMiBudnJhbV9sZW4pXG4xNjkyOlx0e1xuMTY5MzpcdFx0c3RydWN0IGJyY21mX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNmRldmluZm8tXHUwMDNlcGRldi1cdTAwM2VkZXYpO1xuMTY5NDpcdFx0dTMyIHNoYXJlZHJhbV9hZGRyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTk3MwoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGJyY21mX3BjaWUgRmlybXdhcmUgRG93bmxvYWQgYW5kIFNoYXJlZCBSQU0gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgd3JpdGVzIHRoZSBmaXJtd2FyZSB0byB0aGUgZGV2aWNlJiMzOTtzIFRhcmdldCBDb2RlIE1lbW9yeSAoVENNKS4gSW50ZXJlc3RpbmcuIFRoZW4sIGl0JiMzOTtzIGdyYWJiaW5nIHRoZSBgc2hhcmVkcmFtX2FkZHJgIGZyb20gdGhlIGRldmljZSBtZW1vcnkuIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEZvbGxvd2luZyB0aGF0LCBgYnJjbWZfcGNpZV9pbml0X3NoYXJlX3JhbV9pbmZvYCBpcyBjYWxsZWQsIHdoaWNoIHRoZW4gcHJvY2VlZHMgdG8gcHVsbCBhIGJ1bmNoIG9mIG9mZnNldCB2YWx1ZXMgZnJvbSB0aGUgZGV2aWNlIG1lbW9yeS4KCk5vdywgaGVyZSYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJZiBzeXprYWxsZXIgaXMgbW9ja2luZyB0aGUgZGV2aWNlIG1lbW9yeSwgcGVyaGFwcyB0aHJvdWdoIE1NSU8gbW9ja2luZyBpbiBgc3l6X3BjaV9kZXZpY2VfYWRkYCwgdGhlbiBgYnJjbWZfcGNpZV9yZWFkX3RjbTMyYCBpcyBnb2luZyB0byByZXR1cm4gZGF0YSBjb250cm9sbGVkIGJ5IHRoZSBmdXp6ZXIuIEhvbGQgb24sIGBicmNtZl9wY2llX3JlYWRfdGNtMzJgIHJlYWRzIGZyb20gYGRldmluZm8tJmd0O3RjbWAuIFJpZ2h0LCBzbyBgZGV2aW5mby0mZ3Q7dGNtYCBpcyB0aGUgYWRkcmVzcyB0aGF0IGFjdHVhbGx5IGdldHMgcmVhZCBmcm9tLiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBgZGV2aW5mby0mZ3Q7dGNtYCBpcyBtYXBwZWQgdG8sIHNvIEkgY2FuIHNlZSB3aGF0IGtpbmQgb2YgaW1wYWN0IGEgZnV6emVyLWNvbnRyb2xsZWQgdmFsdWUgY291bGQgaGF2ZSBpbiB0aGF0IG1lbW9yeSBsb2NhdGlvbi4gVGltZSB0byB0cmFjZSB0aGF0IHBvaW50ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmluZm8tXHUwMDNldGNtID0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MTc4Mz1zdGF0aWMgaW50IGJyY21mX3BjaWVfZ2V0X3Jlc291cmNlKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0xODExLVx0ZGV2aW5mby1cdTAwM2VyZWdzID0gaW9yZW1hcChiYXIwX2FkZHIsIEJSQ01GX1BDSUVfUkVHX01BUF9TSVpFKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MTgxMjpcdGRldmluZm8tXHUwMDNldGNtID0gaW9yZW1hcChiYXIxX2FkZHIsIGJhcjFfc2l6ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTE4MTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzE2CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYCBGdW5jdGlvbiB2aWEgU3l6a2FsbGVyKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgYGRldmluZm8tJmd0O3RjbWAgaXMgbWFwcGVkIGZyb20gQkFSMSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEFuZCByaWdodCwgU3l6a2FsbGVy4oCZcyBQQ0kgZnV6emVyIG1vY2tzIHRob3NlIEJBUnMhIFRoaXMgbWVhbnMgYGJyY21mX3BjaWVfcmVhZF90Y20zMmAgd2lsbCBiZSByZWFkaW5nIGZyb20gdGhhdCBtb2NrZWQgQkFSMSwgd2hpY2ggaXMgY29tcGxldGVseSB1bmRlciB0aGUgZnV6emVyJiMzOTtzIGNvbnRyb2wuIFRoYXQmIzM5O3MgZ29vZDsgaXQgbWVhbnMgdGhlIGZ1enplciAqY2FuKiBwcm92aWRlIGEgdmFsaWQgYHNoYXJlZC0mZ3Q7dmVyc2lvbmAg4oCTIGJldHdlZW4gdGhvc2UgbWluL21heCB2YWx1ZXMg4oCTIGFuZCBwb3RlbnRpYWxseSB2YWxpZCBvZmZzZXRzIHRvby4KClRoaXMgbG9va3MgcHJvbWlzaW5nLiBJIHNlZSBgYnJjbWZfcGNpZV9zZXR1cGAgY2FsbGVkLCB0aGVuIGl0IGNhbGxzIGBicmNtZl9hdHRhY2hgLCB3aGljaCBjYWxscyBgYnJjbWZfcHJvdG9fYXR0YWNoYCwgd2hpY2ggY2FsbHMgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgLCBhbmQgZmluYWxseSwgdGhhdCBjYWxscyBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYC4gWWVwLCBpdOKAmXMgY2xlYXI6IHRoaXMgKmlzKiByZWFjaGFibGUgdmlhIHRoZSBTeXprYWxsZXIgUENJIGZ1enplciEKCkJ1dCB3YWl0LCBob2xkIG9uLi4uIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IG1lbnRpb24gc29tZSBzY2VuYXJpb3Mgd2hlcmUgaXTigJlzICpub3QqIHdvcnRoIGZ1enppbmcuIEl0IHNheXM6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsKCklzIGBicmNtZm1hY2AgY29uc2lkZXJlZCBvbmUgb2YgdGhlc2U/IFRoZSBleGFtcGxlcyBhcmUgYWxsIGNvbXBsZXggZGV2aWNlcywgbGlrZSBgbWx4c3dgIChNZWxsYW5veCBzd2l0Y2gpLCBgcGRzX2NvcmVgIChQZW5zYW5kbyBTbWFydE5JQyksIGBxZWRgIChRTG9naWMgRmFzdExpblEpLCBgaW9uaWNgIChQZW5zYW5kbyBJb25pYyksIGBhbWRncHVgIChBTUQgR1BVKS4gVGhvc2UgZGVmaW5pdGVseSBuZWVkIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgb3IgZW11bGF0aW9uLiBCdXQgYGJyY21mbWFjYCBpcyBqdXN0IGEgV2ktRmkgZHJpdmVyLiBBbmQgU3l6a2FsbGVyIGZ1enplcyBXaS1GaSBkcml2ZXJzIGV4dGVuc2l2ZWx5LCBzbyBJIHdvdWxkbuKAmXQgZXhwZWN0IHRoZXJlIHRvIGJlIGEgcHJvYmxlbS4KCkhhbmcgb24uLi4gZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKmZ1enoqIGBicmNtZm1hY2A/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQuIExldCYjMzk7cyBzZWUgaWYgYEJSQ01GTUFDYCBpcyBldmVuIGVuYWJsZWQgaW4gU3l6a2FsbGVyIGNvbmZpZ3MsIG9yIGlmIHRoZXJlIGFyZSBhbnkgU3l6a2FsbGVyIHBzZXVkby1zeXNjYWxscyBkZWZpbmVkIGZvciBpdC4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGUgZHJpdmVyIGlzIHR5cGljYWxseSBjb21waWxlZCBpbiBTeXprYWxsZXLigJlzIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBgS2NvbmZpZ2AgZm9yIGBicmNtZm1hY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUkNNRk1BQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTpjb25maWcgQlJDTUZNQUNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxMTpjb25maWcgQlJDTUZNQUNfUFJPVE9fQkNEQ1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXHRib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE1LVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNzpjb25maWcgQlJDTUZNQUNfU0RJT1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTgtXHRib29sIFwmIzM0O1NESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6Mjk6Y29uZmlnIEJSQ01GTUFDX1VTQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXHRib29sIFwmIzM0O1VTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctNDEtXHRib29sIFwmIzM0O1BDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM3NgoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipEZXBlbmRlbmN5IENoZWNrIGZvciBCUkNNRk1BQ19QQ0lFKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgQlJDTUZNQUNfUENJRWAgbW9kdWxlLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIGdsYW5jZTsgSSBuZWVkIHRvIHRob3JvdWdobHkgdW5kZXJzdGFuZCB3aGF0IGl0IHJlbGllcyBvbiDigJMgYm90aCBkaXJlY3RseSBhbmQgdHJhbnNpdGl2ZWx5LiBUaGlzIGxldmVsIG9mIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgYW55IGZ1dHVyZSBtb2RpZmljYXRpb25zLCBkZWJ1Z2dpbmcsIG9yIGV2ZW4ganVzdCBhc3Nlc3NpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgY2hhbmdlcyBlbHNld2hlcmUgaW4gdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgKmV4YWN0bHkqIHdoYXQgdGhpcyBtb2R1bGUmIzM5O3MgZnVuY3Rpb25hbGl0eSBoaW5nZXMgdXBvbi4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgY2xlYXIgbWFwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzOTpcdFxuICA0MDpcdGNvbmZpZyBCUkNNRk1BQ19QQ0lFXG4gIDQxOlx0XHRib29sIFwmIzM0O1BDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuICA0MjpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNDQ6XHRcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19NU0dCVUZcbiAgNDU6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgNDY6XHRcdGhlbHBcbiAgNDc6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgUENJRSBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXG4gIDQ4Olx0XHQgIElFRUU4MDIuMTFhYyBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xuICA0OTpcdFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYW4gUENJRSB3aXJlbGVzcyBjYXJkLlxuICA1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc3MAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGxhaWQgb3V0IGxvZ2ljYWxseToKCioqRGVwZW5kZW5jeSBDaGFpbiBCcmVha2Rvd24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBCUkNNRk1BQ19QQ0lFYCBoZXJlLiBJdCBzZWVtcyBwcmV0dHkgb2J2aW91cyB0aGF0IGl0JiMzOTtzIGJ1aWx0IG9uIHRvcCBvZiBgQlJDTUZNQUNgLCBhbmQgYWxzbyByZXF1aXJlcyB0aGUgYFBDSWAgbGF5ZXIgZm9yLCB3ZWxsLCBQQ0llIGZ1bmN0aW9uYWxpdHkuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYSBiaXQgZnVydGhlci4gYEJSQ01GTUFDYCBpdHNlbGYuLi4gSSYjMzk7bSBzdHJvbmdseSBzdXNwZWN0aW5nIGl0IGhpbmdlcyBvbiBib3RoIGBDRkc4MDIxMWAgYW5kIGBNQUM4MDIxMWAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgV2ktRmkgc3RhY2sgcmVsYXRpb25zaGlwLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJSQ01GTUFDYCBpdHNlbGYuIEp1c3QgdG8gdmVyaWZ5LiBUaGlzIHdheSwgSSBjYW4gY29uZmlybSBteSBhc3N1bXB0aW9ucyBhbmQgbWFrZSBzdXJlIHRoZSB3aG9sZSBwaWN0dXJlIGlzIGNyeXN0YWwgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgQlJDTUZNQUNcbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDQ6XHRcdHNlbGVjdCBCUkNNVVRJTFxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXG4gICA3Olx0XHQgIEZ1bGxNQUMgY2hpcHNldHMuIEl0IGhhcyB0byB3b3JrIHdpdGggYXQgbGVhc3Qgb25lIG9mIHRoZSBidXNcbiAgIDg6XHRcdCAgaW50ZXJmYWNlIHN1cHBvcnQuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWRcbiAgIDk6XHRcdCAgYnJjbWZtYWMua28uXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcbiAgMTI6XHRcdGJvb2xcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG4gIDE1Olx0XHRib29sXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIEJSQ01GTUFDX1NESU9cbiAgMTg6XHRcdGJvb2wgXCYjMzQ7U0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIChNTUMgPSB5IHx8IE1NQyA9IEJSQ01GTUFDKVxuICAyMDpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTMzNwoJCQkJCQkJb3V0cHV0OiA1NgoJCQkJCQkJdGhvdWdodHM6IDMyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBCUkNNRk1BQyBXaS1GaSBEcml2ZXIqKgoKT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbW9kaWZ5aW5nIGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgLCB3aGljaCBJIGtub3cgaXMgcGFydCBvZiB0aGUgYEJSQ01GTUFDYCBkcml2ZXIsIGFuZCBgQlJDTUZNQUNgIGRlcGVuZHMgb24gYENGRzgwMjExYC4gVGhlIGNoYW5nZSBpdHNlbGYgc2VlbXMgZnVuY3Rpb25hbDsgaXQmIzM5O3MgYWRkaW5nIGBwa3RpZHMtJmd0O2RpcmVjdGlvbiA9IGRpcmVjdGlvbjtgLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmc/IENvbnNpZGVyaW5nIGl0JiMzOTtzIGEgV2ktRmkgZHJpdmVyIGFuZCB0aGUgY2hhbmdlIGlzIGZ1bmN0aW9uYWwsIEkgdGhpbmsgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBhIHNob3QsIGVzcGVjaWFsbHkgc2luY2UgV2ktRmkgZHJpdmVycyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgUENJIGZ1enplci4KCldhaXQsIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2suLi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgYnJjbWZtYWNgIGlzbiYjMzk7dCBvbmUgb2YgdGhvc2UgZHJpdmVycyB0aGF0IHNwZWNpZmljYWxseSBuZWVkcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLiBUaGUgcHJvbXB0IGxpc3RzIGV4Y2VwdGlvbnMgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4gV2ktRmkgaXNuJiMzOTt0IG9uIHRoYXQgbGlzdDsgZHJpdmVycyBsaWtlIGBpd2x3aWZpYCwgYGF0aDEwa2AsIGBydHc4OGAsIGBtdDc2YCBhbGwgZ2V0IGZ1enplZCB2aWEgUENJLiBTbywgd2UmIzM5O3JlIGdvb2QgdG8gZ28uCgpOb3csIGxldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBhcmUgdGhhdCB3ZSYjMzk7bGwgZm9jdXMgb24uIGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXRzIHZpc2liaWxpdHkgaXMgbGltaXRlZC4gQnV0IGl0IGlzIGNhbGxlZCBieSBgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaGAsIGFuZCB0aGF0IGlzbiYjMzk7dCBzdGF0aWMuIEFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaGAgYW5kIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9wcm90b19tc2didWZfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xNTIzPXN0YXRpYyB2b2lkIGJyY21mX21zZ2J1Zl9kZWJ1Z2ZzX2NyZWF0ZShzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNTI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE1Mjg6aW50IGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNTI5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyNDYKCQkJCQkJCW91dHB1dDogNTcKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGZ1bmN0aW9uOyB0aGF0IHNlZW1zIGxpa2UgYSBrZXkgYXJlYSBmb3IgdGhpcyBwYXRjaC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBiZWluZyBhZmZlY3RlZC4gQnV0IGJlZm9yZSBJIGdvIHRvbyBkZWVwLCBsZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kOyBhcmUgdGhlcmUgYW55ICpvdGhlciogZnVuY3Rpb25zIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGF0IEkgc2hvdWxkIGNvbnNpZGVyPyBMZXQgbWUgc2VlLi4uIEFoYSwgdGhlIHBhdGNoIGlzIGFsc28gbW9kaWZ5aW5nIGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgLiBJbnRlcmVzdGluZy4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIGRvZXMgYW55dGhpbmcgKmVsc2UqIGNhbGwgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2A/IEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGZhciB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIHJpcHBsZXMgdGhyb3VnaG91dCB0aGUgZHJpdmVyLiBHb3R0YSBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0yOTU9c3RhdGljIHN0cnVjdCBicmNtZl9tc2didWZfcGt0aWRzICpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoyOTY6YnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKHUzMiBucl9hcnJheV9lbnRyaWVzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTI5Ny1cdFx0XHQgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xNTI4PWludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2MDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTYwMzpcdG1zZ2J1Zi1cdTAwM2V0eF9wa3RpZHMgPSBicmNtZl9tc2didWZfaW5pdF9wa3RpZHMoTlJfVFhfUEtUSURTLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2MDQtXHRcdFx0XHRcdFx0ICAgICBETUFfVE9fREVWSUNFKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTYwNi1cdFx0Z290byBmYWlsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE2MDc6XHRtc2didWYtXHUwMDNlcnhfcGt0aWRzID0gYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKE5SX1JYX1BLVElEUyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNjA4LVx0XHRcdFx0XHRcdCAgICAgRE1BX0ZST01fREVWSUNFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwMjYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gaG9taW5nIGluIG9uIHRoaXMgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGF0JiMzOTtzIHdoZXJlIHRoaXMgd2hvbGUgdGhpbmcga2lja3Mgb2ZmLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhpcyBjb2RlIG1vZGlmaWNhdGlvbi4gV2hpbGUgYGJyY21mX3BjaWVfcHJvYmVgICpjb3VsZCogYmUgYSByZWxhdGVkIHN5bWJvbCwgaXQmIzM5O3MgcHJldHR5IGdlbmVyaWMgYXMgYSBwcm9iZSBmdW5jdGlvbiwgcmlnaHQ/IGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCBmZWVscyBtdWNoIG1vcmUgdGFyZ2V0ZWQgdG8gdGhlIHNwZWNpZmljIGNoYW5nZXMuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB3aGF0JiMzOTtzIG5lZWRlZCBmb3IgdGhpcyB0byBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCBgQlJDTUZNQUNgLCBvYnZpb3VzbHksIGFuZCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSBzdXNwZWN0IGBCUkNNRk1BQ19QQ0lFYCBhcyB3ZWxsLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZXJlJiMzOTtzIHRoZSBzdGFuZGFyZCBgQ0ZHODAyMTFgIGFuZCBgUENJYC4gSSYjMzk7bSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNvbXBvbmVudHMuCgpCdXQsIGFyZSB0aGVyZSBhbnkgKm90aGVyKiByZWxldmFudCBjb25maWdzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBMZXQgbWUgcHVsbCB1cCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnYCBmaWxlIGFuZCBjaGVjay4gSSBqdXN0IHdhbnQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBzcGVjaWZpYyBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgQlJDTVVUSUxcbiAgIDM6XHRcdHRyaXN0YXRlXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIEJSQ01TTUFDXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBJRUVFODAyLjExbiBQQ0llIFNvZnRNQUMgV0xBTiBkcml2ZXJcJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDg6XHRcdGRlcGVuZHMgb24gQkNNQV9QT1NTSUJMRVxuICAgOTpcdFx0c2VsZWN0IEJDTUFcbiAgMTA6XHRcdHNlbGVjdCBCUkNNVVRJTFxuICAxMTpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAxMjpcdFx0c2VsZWN0IENPUkRJQ1xuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIFBDSWUgd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gQnJvYWRjb21cbiAgMTU6XHRcdCAgSUVFRTgwMi4xMW4gU29mdE1BQyBjaGlwc2V0cy4gSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgdGhlXG4gIDE2Olx0XHQgIGRyaXZlciB3aWxsIGJlIGNhbGxlZCBicmNtc21hYy5rby5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgQlJDTVNNQUNfTEVEU1xuICAxOTpcdFx0ZGVmX2Jvb2wgQlJDTVNNQUMgXHUwMDI2XHUwMDI2IEJDTUFfRFJJVkVSX0dQSU8gXHUwMDI2XHUwMDI2IE1BQzgwMjExX0xFRFNcbiAgMjA6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3NzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBCcm9hZGNvbSBXaXJlbGVzcyBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBCUkNNRk1BQ2Agc3ltYm9sIGlzIGRlZmluZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBicm9hZGNvbSB3aXJlbGVzcyBkcml2ZXIgZGlyZWN0b3J5LiBBaCwgeWVzLCBoZXJlIGl0IGlzIC0gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnYC4gR29vZC4gTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyB0YWtlIGEgbG9vayBhdCB0aGUgcGFyZW50IGBLY29uZmlnYCBmaWxlIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9LY29uZmlnYC4gSXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlci4gVGhhdCBtaWdodCBnaXZlIG1lIHNvbWUgY29udGV4dCBJIGNhbiB1c2UgbGF0ZXIgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDE0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXTEFOX1ZFTkRPUl9CUk9BRENPTVxuICAgMzpcdFx0Ym9vbCBcJiMzNDtCcm9hZGNvbSBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IHlcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgSWYgeW91IGhhdmUgYSB3aXJlbGVzcyBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gICA5Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDEwOlx0XHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcbiAgMTE6XHRcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxMjpcdFxuICAxMzpcdGlmIFdMQU5fVkVORE9SX0JST0FEQ09NXG4gIDE0Olx0XG4gIDE1Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0My9LY29uZmlnXCYjMzQ7XG4gIDE2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0M2xlZ2FjeS9LY29uZmlnXCYjMzQ7XG4gIDE3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnXCYjMzQ7XG4gIDE4Olx0XG4gIDE5Olx0ZW5kaWYgIyBXTEFOX1ZFTkRPUl9CUk9BRENPTVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODMxOQoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFdMQU4gc2V0dXAsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgSSYjMzk7bSBnb2luZyB0byBuZWVkIGBXTEFOX1ZFTkRPUl9CUk9BRENPTWAuIEkgbWVhbiwgdGhhdCYjMzk7cyBhIGdpdmVuLiBBbmQgb2YgY291cnNlLCB0aGUgZ2VuZXJhbCBgV0xBTmAgY29uZmlndXJhdGlvbiBpcyBlc3NlbnRpYWwgYXMgd2VsbC4gU28sIGxldCYjMzk7cyBqdXN0IG1ha2UgYSBxdWljayBsaXN0IHRvIGhhdmUgaXQgYWxsIGluIG9uZSBwbGFjZTogYFdMQU5gLCBgV0xBTl9WRU5ET1JfQlJPQURDT01gLCBgQ0ZHODAyMTFgLCBgQlJDTUZNQUNgLCBgQlJDTUZNQUNfUENJRWAsIGFuZCBgUENJYC4gTWFrZXMgc2Vuc2Ugc28gZmFyLiBOb3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHRvIGF2b2lkIGFueSBkb3duc3RyZWFtIGlzc3VlcywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgQlJDTUZNQUNfUENJRWAgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBsaW5lZCB1cCByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzk6XHRcbiAgNDA6XHRjb25maWcgQlJDTUZNQUNfUENJRVxuICA0MTpcdFx0Ym9vbCBcJiMzNDtQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbiAgNDI6XHRcdGRlcGVuZHMgb24gQlJDTUZNQUNcbiAgNDM6XHRcdGRlcGVuZHMgb24gUENJXG4gIDQ0Olx0XHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG4gIDQ1Olx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDQ2Olx0XHRoZWxwXG4gIDQ3Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxuICA0ODpcdFx0ICBJRUVFODAyLjExYWMgZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cbiAgNDk6XHRcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGFuIFBDSUUgd2lyZWxlc3MgY2FyZC5cbiAgNTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4MjIKCQkJCQkJCW91dHB1dDogMTczCgkJCQkJCQl0aG91Z2h0czogMzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCcm9hZGNvbSBGaXJtd2FyZSBNZXNzYWdlIEJ1ZmZlciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBkZXBlbmRlbmN5IGNoYWluIHRoYXQgdWx0aW1hdGVseSBpbnZvbHZlcyB0aGUgYEJSQ01GTUFDYCBhbmQgYFBDSWAgc3Vic3lzdGVtcy4gU3BlY2lmaWNhbGx5LCBgQlJDTUZNQUNgIGRlcGVuZHMgb24gYENGRzgwMjExYCwgYW5kIHNvIG9uLiBUaGUga2V5IG1vZHVsZXMgaGVyZSBhcmUgYFdMQU5gLCBgV0xBTl9WRU5ET1JfQlJPQURDT01gLCBgQ0ZHODAyMTFgLCBgQlJDTUZNQUNgLCBgQlJDTUZNQUNfUENJRWAsIGFuZCBgUENJYC4gVGhpcyBnaXZlcyB1cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKTXkgbWFpbiBmb2N1cyBpcyB0byB2ZXJpZnkgaWYgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AgaXMgcmVhY2hhYmxlLiBBZnRlciByZXZpZXdpbmcgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgaXQgaXMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCwgd2hpY2ggZ2V0cyBjYWxsZWQgd2hlbiBgZHJ2ci0mZ3Q7YnVzX2lmLSZndDtwcm90b190eXBlYCBpcyBgQlJDTUZfUFJPVE9fTVNHQlVGYC4gVGhpcywgaW4gdHVybiwgaXMgc2V0IGluIGBicmNtZl9wY2llX3Byb2JlYCwgaW1wbHlpbmcgdGhhdCB3ZSBjYW4gdHJpZ2dlciB0aGlzIHBhdGggdGhyb3VnaCBQQ0kgaW50ZXJhY3Rpb25zLiBQZXJmZWN0LgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHRoZSBwYXRjaC4gSSBzZWUgYSBjb2RlIGNoYW5nZSB0aGF0IGFkZHMgYHBrdGlkcy0mZ3Q7ZGlyZWN0aW9uID0gZGlyZWN0aW9uO2AgdG8gdGhlIGZ1bmN0aW9uIGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKi4gSXQmIzM5O3MgYSBmaWVsZCBiZWluZyBhZGRlZCB0byBhIHN0cnVjdHVyZS4gVGhpcyBtZWFucyBpdCBoYXMgYSBwb3RlbnRpYWwgaW1wYWN0IG9uIGhvdyBkYXRhIGlzIGhhbmRsZWQgb3IgaW50ZXJwcmV0ZWQuIFRodXMsIHdlIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgdGhpcyBpbiBvdXIgZnV6emluZyBzdHJhdGVneS4gV2UgbmVlZCB0byBleHBsb3JlIGFueSBhcmVhcyB0aGF0IHVzZSBgcGt0aWRzYCB0byBlbnN1cmUgdGhlIG5ldyBmaWVsZCBpcyBwcm9wZXJseSBoYW5kbGVkLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy4KClNvLCBsZXQmIzM5O3MgZm9ybWFsaXplIHRoZSBmdXp6aW5nIHN0cmF0ZWd5IGJhc2VkIG9uIHRoZSBhYm92ZSBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU4mIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfQlJPQURDT00mIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7QlJDTUZNQUMmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfUENJRSYjMzQ7LAogICAgJiMzNDtQQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticmNtZl9wcm90b19tc2didWZfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYnkgc2V0dGluZyB0aGUgJiMzOTtkaXJlY3Rpb24mIzM5OyBmaWVsZCBpbiB0aGUgJiMzOTticmNtZl9tc2didWZfcGt0aWRzJiMzOTsgc3RydWN0IGR1cmluZyBpbml0aWFsaXphdGlvbi4gVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKSBhbmQgaXMgc3BlY2lmaWNhbGx5IHJlYWNoYWJsZSB2aWEgdGhlIFBDSWUgYnVzIGludGVyZmFjZSAoQlJDTUZfUFJPVE9fTVNHQlVGKS4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgdmlhIGl0cyBQQ0kgZGV2aWNlIGluamVjdGlvbi9tb2NraW5nIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTiYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9CUk9BRENPTSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQyYjMzQ7LAogICAgJiMzNDtCUkNNRk1BQ19QQ0lFJiMzNDssCiAgICAmIzM0O1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBieSBzZXR0aW5nIHRoZSAmIzM5O2RpcmVjdGlvbiYjMzk7IGZpZWxkIGluIHRoZSAmIzM5O2JyY21mX21zZ2J1Zl9wa3RpZHMmIzM5OyBzdHJ1Y3QgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYnJjbWZtYWMpIGFuZCBpcyBzcGVjaWZpY2FsbHkgcmVhY2hhYmxlIHZpYSB0aGUgUENJZSBidXMgaW50ZXJmYWNlIChCUkNNRl9QUk9UT19NU0dCVUYpLiBTeXprYWxsZXIgY2FuIGZ1enogdGhpcyB2aWEgaXRzIFBDSSBkZXZpY2UgaW5qZWN0aW9uL21vY2tpbmcgY2FwYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTU6MzMuMTU2NTU1NTMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NDk1Nzg4NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5cIixcbiAgICBcIldMQU5fVkVORE9SX0JST0FEQ09NXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1BDSUVcIixcbiAgICBcIlBDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJ5IHNldHRpbmcgdGhlICdkaXJlY3Rpb24nIGZpZWxkIGluIHRoZSAnYnJjbWZfbXNnYnVmX3BrdGlkcycgc3RydWN0IGR1cmluZyBpbml0aWFsaXphdGlvbi4gVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKSBhbmQgaXMgc3BlY2lmaWNhbGx5IHJlYWNoYWJsZSB2aWEgdGhlIFBDSWUgYnVzIGludGVyZmFjZSAoQlJDTUZfUFJPVE9fTVNHQlVGKS4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgdmlhIGl0cyBQQ0kgZGV2aWNlIGluamVjdGlvbi9tb2NraW5nIGNhcGFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTU6MzMuMTU2NTYzNDEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTk3MjI4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MTZjMzIwNDkyMWVhMjM2NWE4NTQ3YmRiZWQ0NmY5NGFhMTAyMmM4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDE0OjE1OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xcbmluZGV4IGJhMWNlMTU1MmUwZjQzLi5jMWZlYjE2NGQ4NDVhNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcXG5AQCAtMzEwLDYgKzMxMCw3IEBAIGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkcyh1MzIgbnJfYXJyYXlfZW50cmllcyxcXG4gXFx0fVxcbiBcXHRwa3RpZHMtXFx1MDAzZWFycmF5ID0gYXJyYXk7XFxuIFxcdHBrdGlkcy1cXHUwMDNlYXJyYXlfc2l6ZSA9IG5yX2FycmF5X2VudHJpZXM7XFxuK1xcdHBrdGlkcy1cXHUwMDNlZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xcbiBcXG4gXFx0cmV0dXJuIHBrdGlkcztcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNTozMy44NzcxNjc5NzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTg3NzUxNjYwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTlwiLFxuICAgIFwiV0xBTl9WRU5ET1JfQlJPQURDT01cIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJCUkNNRk1BQ1wiLFxuICAgIFwiQlJDTUZNQUNfUENJRVwiLFxuICAgIFwiUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYnkgc2V0dGluZyB0aGUgJ2RpcmVjdGlvbicgZmllbGQgaW4gdGhlICdicmNtZl9tc2didWZfcGt0aWRzJyBzdHJ1Y3QgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlciAoYnJjbWZtYWMpIGFuZCBpcyBzcGVjaWZpY2FsbHkgcmVhY2hhYmxlIHZpYSB0aGUgUENJZSBidXMgaW50ZXJmYWNlIChCUkNNRl9QUk9UT19NU0dCVUYpLiBTeXprYWxsZXIgY2FuIGZ1enogdGhpcyB2aWEgaXRzIFBDSSBkZXZpY2UgaW5qZWN0aW9uL21vY2tpbmcgY2FwYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MTZjMzIwNDkyMWVhMjM2NWE4NTQ3YmRiZWQ0NmY5NGFhMTAyMmM4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTQ6MTU6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcbmluZGV4IGJhMWNlMTU1MmUwZjQzLi5jMWZlYjE2NGQ4NDVhNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXG5AQCAtMzEwLDYgKzMxMCw3IEBAIGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkcyh1MzIgbnJfYXJyYXlfZW50cmllcyxcbiBcdH1cbiBcdHBrdGlkcy1cdTAwM2VhcnJheSA9IGFycmF5O1xuIFx0cGt0aWRzLVx1MDAzZWFycmF5X3NpemUgPSBucl9hcnJheV9lbnRyaWVzO1xuK1x0cGt0aWRzLVx1MDAzZWRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiBcbiBcdHJldHVybiBwa3RpZHM7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTU6MzMuODc3MTY5OTIyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NjgyODYyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byBgYnJjbWZtYWMvbXNnYnVmLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY2AuIEl0J3MgYSBzaW1wbGUgb25lLCByZWFsbHk7IGl0IGp1c3QgYWRkcyBgcGt0aWRzLVx1MDAzZWRpcmVjdGlvbiA9IGRpcmVjdGlvbjtgIHRvIHRoZSBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYCBmdW5jdGlvbi4gU3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVmb3JlIGFwcHJvdmluZyBzb21ldGhpbmcuIExldCdzIGRpZyBpbnRvIHRoYXQgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AgZnVuY3Rpb24gd2l0aGluIGBtc2didWYuY2AgaXRzZWxmLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG1lc3NhZ2UgYnVmZmVyIGFyY2hpdGVjdHVyZSBvZiB0aGUgYnJjbWZtYWMgZHJpdmVyLiBXaGF0IGRvZXMgYHBrdGlkc2AgYWN0dWFsbHkgcmVwcmVzZW50PyBXaGF0IGlzIHRoZSBgZGlyZWN0aW9uYCBwYXJhbWV0ZXIsIGFuZCB3aHkgaXMgdGhpcyBhc3NpZ25tZW50IGJlaW5nIGFkZGVkIG5vdz8gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCB3aWxsIGJlIGtleSBoZXJlLiBJcyB0aGlzIGZpeGluZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiwgYWRkaW5nIGEgbWlzc2luZyBpbml0aWFsaXphdGlvbiwgb3IgZW5hYmxpbmcgc29tZSBuZXcgZnVuY3Rpb25hbGl0eT8gVGltZSB0byBnbyBsaW5lLWJ5LWxpbmUgYW5kIGZpZ3VyZSB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4MCwiT3V0cHV0VG9rZW5zIjo1NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE1OjM4LjA0NDAwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODYzNzIyOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9Mjk1PXN0YXRpYyBzdHJ1Y3QgYnJjbWZfbXNnYnVmX3BrdGlkcyAqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjI5NjpicmNtZl9tc2didWZfaW5pdF9wa3RpZHModTMyIG5yX2FycmF5X2VudHJpZXMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTI5Ny1cXHRcXHRcXHQgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTE1Mjg9aW50IGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNjAyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxNjAzOlxcdG1zZ2J1Zi1cXHUwMDNldHhfcGt0aWRzID0gYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKE5SX1RYX1BLVElEUyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTYwNC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIERNQV9UT19ERVZJQ0UpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2MDYtXFx0XFx0Z290byBmYWlsO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxNjA3OlxcdG1zZ2J1Zi1cXHUwMDNlcnhfcGt0aWRzID0gYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzKE5SX1JYX1BLVElEUyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTYwOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIERNQV9GUk9NX0RFVklDRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE1OjM4LjMzMDM3OTUyNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjE3MTkxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgYnJjbWZtYWMgRHJpdmVyIHZpYSBVU0IqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBicmNtZm1hY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhhdCBsaW5lLCBgcGt0aWRzLVx1MDAzZWRpcmVjdGlvbiA9IGRpcmVjdGlvbjtgIHdpdGhpbiBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYC4gVGhpcyBpcyBpbiB0aGUgQnJvYWRjb20gd2lyZWxlc3MgZHJpdmVyLCB3aGljaCBpcyBpbnRlcmVzdGluZyBmcm9tIGEgc2VjdXJpdHkgcGVyc3BlY3RpdmUg4oCTIGFsd2F5cyBwb3RlbnRpYWwgZm9yIHZ1bG5lcmFiaWxpdGllcyB0aGVyZS4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSBmdXp6IHRoaXM/IFRoaXMgZHJpdmVyIGhhbmRsZXMgU0RJTywgVVNCLCBhbmQgUENJZSBpbnRlcmZhY2VzLCBhbmQgdGhhdOKAmXMgd2hlcmUgdGhpbmdzIGdldCBpbnRyaWd1aW5nLlxuXG5VU0IgbG9va3MgbGlrZSB0aGUgbW9zdCBwcm9taXNpbmcgcm91dGUgZm9yIGZ1enppbmcuIEkgY2FuIGVtdWxhdGUgYSBVU0IgSG9zdCBDb250cm9sbGVyIHdpdGggc29tZXRoaW5nIGxpa2UgZHVtbXktaGNkLCB3aGljaCBnaXZlcyBtZSBhIHJlbGF0aXZlbHkgc2ltcGxlIHRhcmdldC4gVGhlIGtleSBpcyBnb2luZyB0byBiZSBmaWd1cmluZyBvdXQgaWYgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBVU0IgcGF0aC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIGFuZCBzZWUgaWYgSSBjYW4gdHJpZ2dlciB0aGlzIGluaXRpYWxpemF0aW9uIGZyb20gYSBVU0IgY29ubmVjdGlvbi4gSWYgSSBjYW4sIHRoZW4gSeKAmXZlIGdvdCBhIGdvb2QgcG90ZW50aWFsIGZ1enogdGFyZ2V0IHRvIHN0YXJ0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzEsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTU6NDIuMzkyMTAwNjMyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyMDE0OTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTUyMz1zdGF0aWMgdm9pZCBicmNtZl9tc2didWZfZGVidWdmc19jcmVhdGUoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNTI3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxNTI4OmludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE1Mjkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5oPTMyPXZvaWQgYnJjbWZfbXNnYnVmX2RlbGV0ZV9mbG93cmluZyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCB1MTYgZmxvd2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmg6MzM6aW50IGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5oLTM0LXZvaWQgYnJjbWZfcHJvdG9fbXNnYnVmX2RldGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmgtMzUtI2Vsc2VcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmg6MzY6c3RhdGljIGlubGluZSBpbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuaC0zNy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYz0yMD1pbnQgYnJjbWZfcHJvdG9fYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zNS1cXHR9IGVsc2UgaWYgKGRydnItXFx1MDAzZWJ1c19pZi1cXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19NU0dCVUYpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYzozNjpcXHRcXHRpZiAoYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChkcnZyKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zNy1cXHRcXHRcXHRnb3RvIGZhaWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE1OjQyLjQ2NDEyMTI5NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzU4MjcwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqQW5hbHl6aW5nIGBicmNtZl9wcm90b19hdHRhY2hgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgYnJjbWZfcHJvdG9fYXR0YWNoYC4gSSd2ZSBzZWVuIHRoaXMgZnVuY3Rpb24gYmVmb3JlOyBpdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlciwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy4gSSByZW1lbWJlciB0aGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IGludm9sdmVkIGluIGF0dGFjaGluZyBhIHNwZWNpZmljIHByb3RvY29sIGluc3RhbmNlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgZW50YWlscyBpbiB0aGUgYnJvYWRlciBkcml2ZXIgY29udGV4dC4gSXMgdGhpcyBjYWxsIHNpdGUgZnJvbSB0aGUgaG9zdCBzaWRlLCB0aGUgZmlybXdhcmUgc2lkZSwgb3IgYm90aD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGJlIGxvb2tpbmcgZm9yLCBsaWtlIHVuY2hlY2tlZCBidWZmZXIgc2l6ZXMgb3IgaW1wcm9wZXIgaGFuZGxpbmcgb2YgdXNlci1zdXBwbGllZCBkYXRhPyBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCByZXZlYWwgbXVjaCBhYm91dCB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IGFuZCB0aGVuIHpvb20gaW4gdG8gYW5hbHl6ZSBlYWNoIGRldGFpbC4gSSdtIGxvb2tpbmcgZm9yIGEgc29saWQgdW5kZXJzdGFuZGluZywgYW5kIGFueSBpbW1lZGlhdGVseSBnbGFyaW5nIGlzc3VlcyBvciBpbmVmZmljaWVuY2llcy4gTGV0J3Mgc3RhcnQgYnkgd2Fsa2luZyB0aHJvdWdoIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDIwLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTU6NDYuMjM5OTUxMDE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTU2Nzc1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9wcm90b19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEzMzA9aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNTMtXFx0LyogQXR0YWNoIGFuZCBsaW5rIGluIHRoZSBwcm90b2NvbCAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTM1NDpcXHRyZXQgPSBicmNtZl9wcm90b19hdHRhY2goZHJ2cik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzU1LVxcdGlmIChyZXQgIT0gMCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMTktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MjA6aW50IGJyY21mX3Byb3RvX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTIxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5oPTE4PXN0cnVjdCBicmNtZl9wcm90byB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uaC00NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uaDo0NTppbnQgYnJjbWZfcHJvdG9fYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5oLTQ2LXZvaWQgYnJjbWZfcHJvdG9fZGV0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNTo0Ni40ODU1MjQ0MDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQyNTg1NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYGJyY21mX2F0dGFjaGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTGV0J3Mgc2VlLi4uIHRoZSBpbml0aWFsIHRob3VnaHQgaGVyZSBpcyB0byB6ZXJvIGluIG9uIGBicmNtZl9hdHRhY2hgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBvciBhdHRhY2htZW50IHByb2Nlc3MsIGxpa2VseSBhIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUgaGFyZHdhcmUgaXMgYnJvdWdodCBvbmxpbmUgYW5kIHRoZSBkcml2ZXIgc3RhcnRzIGludGVyYWN0aW5nIHdpdGggdGhlIEJyb2FkY29tIFdpRmkgY2hpcC4gV2UnbGwgY2hlY2sgaXQgb3V0IGFuZCBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE1OjQ5LjIyODExMjE3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUyNTQ2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oPTI5OT1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMwMC0vKiBJbmRpY2F0aW9uIGZyb20gYnVzIG1vZHVsZSByZWdhcmRpbmcgcHJlc2VuY2UvaW5zZXJ0aW9uIG9mIGRvbmdsZS4gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6MzAxOmludCBicmNtZl9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMzAyLS8qIEluZGljYXRpb24gZnJvbSBidXMgbW9kdWxlIHJlZ2FyZGluZyByZW1vdmFsL2Fic2VuY2Ugb2YgZG9uZ2xlICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmgtMTgtICogKG1vZHVsZSkgaW5pdGlsaWF6YXRpb24gdGFrZXMgcGxhY2UuIFRoZSBkZXZpY2Ugc3BlY2lmaWMgc2V0dGluZ3MgaXMgcGFydFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaDoxOTogKiBvZiB0aGUgZHJ2ciBzdHJ1Y3QgYW5kIHNob3VsZCBiZSBpbml0aWFsaXplZCBvbiBldmVyeSBicmNtZl9hdHRhY2guXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTIwLSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMzAxPWludCBicmNtZl9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKnNldHRpbmdzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzI5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTMzMDppbnQgYnJjbWZfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzMzEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yMTM1PXN0YXRpYyB2b2lkIGJyY21mX3BjaWVfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yMjE1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjIxNjpcXHRyZXQgPSBicmNtZl9hdHRhY2goXFx1MDAyNmRldmluZm8tXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yMjE3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jPTQyMDk9c3RhdGljIHZvaWQgYnJjbWZfc2Rpb19maXJtd2FyZV9jYWxsYmFjayhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBlcnIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQzOTktXFx0LyogQXR0YWNoIHRvIHRoZSBjb21tb24gbGF5ZXIsIHJlc2VydmUgaGRyIHNwYWNlICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYzo0NDAwOlxcdGVyciA9IGJyY21mX2F0dGFjaChzZGlvZC1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQ0MDEtXFx0aWYgKGVyciAhPSAwKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYzo0NDAyOlxcdFxcdGJyY21mX2VycihcXFwiYnJjbWZfYXR0YWNoIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDAzLVxcdFxcdGdvdG8gZnJlZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTc2PXN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyMTAtXFx0LyogQXR0YWNoIHRvIHRoZSBjb21tb24gZHJpdmVyIGludGVyZmFjZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMjExOlxcdHJldCA9IGJyY21mX2F0dGFjaChkZXZpbmZvLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjEyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTI0ND1zdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI5MC1cXHRcXHRcXHRnb3RvIGZhaWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyOTE6XFx0XFx0cmV0ID0gYnJjbWZfYXR0YWNoKGRldmluZm8tXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyOTItXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTU6NDkuMjkzMzc0NTM5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDI4Mjc4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgc25pcHBldCwgZGVsaXZlcmVkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipVU0IgQlJDTUYgSW5pdGlhbGl6YXRpb24gRmxvdyAtIEEgUXVpY2sgTG9vayoqXG5cblJpZ2h0LCBsZXQgbWUgc2VlLi4uIEknbSB0cmFjaW5nIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgdGhpcyBCUkNNRiBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgVVNCLiBPa2F5LCBzbyBgYnJjbWZfYXR0YWNoYCBpcyBjbGVhcmx5IGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhlIG5vdGVzIHNheSBpdCdzIGNhbGxlZCBmcm9tIHR3byBwbGFjZXMg4oCTIGBicmNtZl91c2JfcHJvYmVfcGhhc2UyYCBhbmQgYGJyY21mX3VzYl9wcm9iZV9jYmAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXR0YWNobWVudCBoYXBwZW5zIGFuZCB0aGUgY29udGV4dCBvZiB0aG9zZSBjYWxscy5cblxuSG1tLCBidXQgd2FpdC4uLiB0aGVyZSdzIGEgY3J1Y2lhbCBjaGVjayB3aXRoaW4gYGJyY21mX3Byb3RvX2F0dGFjaGAuIFRoZSBjb2RlIGlzIHZlcmlmeWluZyBpZiBgZHJ2ci1cdTAwM2VidXNfaWYtXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19NU0dCVUZgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIHByb3RvY29sIHR5cGUgaXMgYSBjcml0aWNhbCBmYWN0b3IgaW4gaG93IHRoZSBkZXZpY2UgZ2V0cyBzZXQgdXAuIFNvLCBteSBpbW1lZGlhdGUgcXVlc3Rpb24gYmVjb21lczogd2hhdCBpcyB0aGUgc3BlY2lmaWMgYHByb3RvX3R5cGVgIHZhbHVlIGJlaW5nIGFzc2lnbmVkIGZvciBhIFVTQiBjb25maWd1cmF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY2hlY2sgaXMgZG9pbmcuIFRoYXQgYHByb3RvX3R5cGVgIHZhbHVlIGlzIGEga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgZGVjaWRlcyBob3cgdG8gY29tbXVuaWNhdGUgb3ZlciB0aGUgVVNCIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI2MCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE1OjUzLjIzNjIwNTExNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkyNjg4Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb3RvX3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9MTA0MD1zdGF0aWMgaW50IGJyY21mX29wc19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTA4NS1cXHRidXNfaWYtXFx1MDAzZWJ1c19wcml2LnNkaW8gPSBzZGlvZGV2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzoxMDg2OlxcdGJ1c19pZi1cXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX0JDREM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTEwODctXFx0YnVzX2lmLVxcdTAwM2Vmd3ZpZCA9IGlkLVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaD0xNDE9c3RydWN0IGJyY21mX2J1c19zdGF0cyB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMTQ5LSAqIEBidXNfcHJpdjogcG9pbnRlciB0byBwcml2YXRlIGJ1cyBkZXZpY2UuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oOjE1MDogKiBAcHJvdG9fdHlwZTogcHJvdG9jb2wgdHlwZSwgYmNkYyBvciBtc2didWZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMTUxLSAqIEBkZXY6IGRldmljZSBwb2ludGVyIG9mIGJ1cyBkZXZpY2UuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg9MTY1PXN0cnVjdCBicmNtZl9idXMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE3MC1cXHR9IGJ1c19wcml2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaDoxNzE6XFx0ZW51bSBicmNtZl9idXNfcHJvdG9jb2xfdHlwZSBwcm90b190eXBlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaC0xNzItXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNDM5PWJyY21mX3BjaWVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjUxNC1cXHRidXMtXFx1MDAzZW9wcyA9IFxcdTAwMjZicmNtZl9wY2llX2J1c19vcHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNTE1OlxcdGJ1cy1cXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX01TR0JVRjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI1MTYtXFx0YnVzLVxcdTAwM2VjaGlwID0gZGV2aW5mby1cXHUwMDNlY29yZWlkO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM9MjA9aW50IGJyY21mX3Byb3RvX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MzI6XFx0aWYgKGRydnItXFx1MDAzZWJ1c19pZi1cXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19CQ0RDKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzMtXFx0XFx0aWYgKGJyY21mX3Byb3RvX2JjZGNfYXR0YWNoKGRydnIpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTM0LVxcdFxcdFxcdGdvdG8gZmFpbDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYzozNTpcXHR9IGVsc2UgaWYgKGRydnItXFx1MDAzZWJ1c19pZi1cXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19NU0dCVUYpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zNi1cXHRcXHRpZiAoYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChkcnZyKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTM5LVxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJVbnN1cHBvcnRlZCBwcm90byB0eXBlICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jOjQwOlxcdFxcdFxcdCBkcnZyLVxcdTAwM2VidXNfaWYtXFx1MDAzZXByb3RvX3R5cGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTQxLVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jPTU5PXZvaWQgYnJjbWZfcHJvdG9fZGV0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy02My1cXHRpZiAoZHJ2ci1cXHUwMDNlcHJvdG8pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYzo2NDpcXHRcXHRpZiAoZHJ2ci1cXHUwMDNlYnVzX2lmLVxcdTAwM2Vwcm90b190eXBlID09IEJSQ01GX1BST1RPX0JDREMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtNjUtXFx0XFx0XFx0YnJjbWZfcHJvdG9fYmNkY19kZXRhY2goZHJ2cik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6NjY6XFx0XFx0ZWxzZSBpZiAoZHJ2ci1cXHUwMDNlYnVzX2lmLVxcdTAwM2Vwcm90b190eXBlID09IEJSQ01GX1BST1RPX01TR0JVRilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy02Ny1cXHRcXHRcXHRicmNtZl9wcm90b19tc2didWZfZGV0YWNoKGRydnIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNjgtXFx0YnVzLVxcdTAwM2VvcHMgPSBcXHUwMDI2YnJjbWZfdXNiX2J1c19vcHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNjk6XFx0YnVzLVxcdTAwM2Vwcm90b190eXBlID0gQlJDTUZfUFJPVE9fQkNEQztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI3MC1cXHRidXMtXFx1MDAzZWZ3dmlkID0gZnd2aWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE1OjUzLjUyODg5OTI5MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mzc4NzU2NDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSWUgRHJpdmVyIEZ1enppbmcgRmVhc2liaWxpdHkgLSBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgYXNzaWdubWVudCBvZiBgYnVzLVx1MDAzZXByb3RvX3R5cGUgPSBCUkNNRl9QUk9UT19NU0dCVUY7YCBqdW1wcyBvdXQgYXQgbWUuIEl0J3Mgb25seSBzZXQgaW4gYGJyY21mX3BjaWVfcHJvYmVgLCBub3QgdGhlIFVTQiBvciBTRElPIGVxdWl2YWxlbnRzLiBUaGlzIG1lYW5zIHRoYXQgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGlzIE9OTFkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFBDSWUgcGF0aC4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIGZ1enppbmcuIENhbiB3ZSBmdXp6IHRoZSBQQ0llIGRyaXZlcj9cblxuVGhlIGluc3RydWN0aW9ucyBvbiBkZXRlcm1pbmluZyBcIldvcnRoRnV6emluZ1wiIGFyZSBjbGVhcjogd2UgY2FuJ3QgaWYgdGhlIHBhdGNoIGlzIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMgdGhhdCBuZWVkIHBoeXNpY2FsIGNhcmRzIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0J3MgdGhlIGtleS4gTm93LCBgYnJjbWZtYWNgLi4uIGlzIHRoYXQgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyPyBZZXMsIGl0J3MgQnJvYWRjb20ncyA4MDIuMTEgd2lyZWxlc3MgTEFOLiBEb2VzIFFFTVUsIGluIGl0cyBzdGFuZGFyZCBjb25maWd1cmF0aW9uLCBlbXVsYXRlIEJyb2FkY29tIFBDSWUgV2ktRmkgY2FyZHM/IE5vcGUuIFNvIHRoYXQncyB0aGUgaHVyZGxlLlxuXG5DYW4gc3l6a2FsbGVyIGhlbHAgaGVyZT8gSXQgKmRvZXMqIGhhdmUgc29tZSBQQ0kgZnV6emluZyBzdXBwb3J0IHdpdGggY2FsbHMgbGlrZSBgc3l6X3BjaV9kZXZpY2VfYWRkYCBvciBzaW1pbGFyLiBCdXQgSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGl0J3Mgb2Z0ZW4gbGltaXRlZCwgdHlwaWNhbGx5IGZ1enppbmcgb25seSB0aGUgcHJvYmUgZnVuY3Rpb24gb3Igd2hhdCdzIHN1cHBvcnRlZC4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgY2FsbCBvdXQgdGhpcyB2ZXJ5IHNjZW5hcmlvOiB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgdGhhdCBRRU1VIGRvZXNuJ3QgZW11bGF0ZS5cblxuTGV0J3MgdHJhY2UgdGhlIGNhbGwgc3RhY2sgdG8gYmUgc3VyZTogVGhpcyBwYXRjaCBpcyBpbiBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYC4gVGhhdCdzIGNhbGxlZCBmcm9tIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGJyY21mX3Byb3RvX2F0dGFjaGAsIHdoaWNoIGNvbWVzIGZyb20gYGJyY21mX2F0dGFjaGAsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBicmNtZl9wY2llX3NldHVwYCwgd2hpY2gsIGZpbmFsbHksIGlzIGNhbGxlZCBmcm9tIGBicmNtZl9wY2llX3Byb2JlYC4gU28sIHJlYWNoaW5nIGBicmNtZl9wY2llX3Byb2JlYCBpcyBjcml0aWNhbC4gV2UgbmVlZCB0byBjaGVjayBpZiB3ZSBjYW4gZXZlbiByZWFjaCBpdC4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBgYnJjbWZfcGNpZV9wcm9iZWAgZnVuY3Rpb24gbm93IHRvIGRldGVybWluZSBob3cgcmVhY2hhYmxlIGl0IGlzLCBhbmQgd2hldGhlciBzeXprYWxsZXIncyBzdXBwb3J0IGNhbiBjb3ZlciBpdCBnaXZlbiB0aGUgY29uc3RyYWludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNTcsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6MDEuOTA3NjU4MjgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUxOTgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9wY2llX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNDM4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI0Mzk6YnJjbWZfcGNpZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjQ0MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI2NTY9c3RhdGljIGludCBicmNtZl9wY2llX3BtX2xlYXZlX0QzKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY4OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI2OTA6XFx0ZXJyID0gYnJjbWZfcGNpZV9wcm9iZShwZGV2LCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI2OTEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9Mjc2Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYnJjbWZfcGNpZWRydnIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NjQtXFx0LmlkX3RhYmxlID0gYnJjbWZfcGNpZV9kZXZpZF90YWJsZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI3NjU6XFx0LnByb2JlID0gYnJjbWZfcGNpZV9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NjYtXFx0LnJlbW92ZSA9IGJyY21mX3BjaWVfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjowMS45NjkxODM2NzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxOTI4MDM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBQQ0kgUHJvYmUgRnVuY3Rpb25zIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgY29kZSBhbmQgaW1tZWRpYXRlbHkgdGhlIHF1ZXN0aW9uIHBvcHMgaW50byBteSBoZWFkOiBjYW4gdGhpcyBhY3R1YWxseSBiZSB0cmlnZ2VyZWQgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFN5emthbGxlcidzIGdvdCB0aGlzIGBzeXpfcGNpX2RldmljZV9hZGRgIHBzZXVkby1zeXNjYWxsLCBjbGV2ZXIgdHJpY2ssIGl0IGluamVjdHMgYSB2aXJ0dWFsIFBDSSBkZXZpY2Ugd2l0aCBjZXJ0YWluIHZlbmRvciBhbmQgZGV2aWNlIElEcywgYWltaW5nIHRvIGZpcmUgdXAgdGhvc2UgUENJIHByb2JlIGZ1bmN0aW9ucy4gSG1tLCBpdCBtaWdodCBhY3R1YWxseSB3b3JrLCBpZiBpdCdzIGp1c3QgdGhlIHByb2JlIGZ1bmN0aW9uLiBMZXQgbWUgY2hlY2sgdGhlIGluc3RydWN0aW9ucyBhZ2FpbjogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuTm93LCBpcyBgYnJjbWZtYWNgIHRoYXQga2luZCBvZiBkcml2ZXI/IFllYWgsIGl0J3MgYSBCcm9hZGNvbSBXaS1GaSBkcml2ZXIsIHNvIGl0J3MgdmVuZG9yLXNwZWNpZmljIGZvciBzdXJlLiBCdXQsIGRvZXMgaXQgc3RyaWN0bHkgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlPyBUaGF0J3MgdGhlIGtleSBxdWVzdGlvbi4gR290dGEgbG9vayBhdCB0aGUgYGJyY21mX3BjaWVfcHJvYmVgIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MjksIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6MDYuNDg4NDY3OTM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mzc2MzM4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9wY2llX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNDM4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI0Mzk6YnJjbWZfcGNpZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjQ0MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI2NTY9c3RhdGljIGludCBicmNtZl9wY2llX3BtX2xlYXZlX0QzKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjY4OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI2OTA6XFx0ZXJyID0gYnJjbWZfcGNpZV9wcm9iZShwZGV2LCBOVUxMKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI2OTEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9Mjc2Mj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYnJjbWZfcGNpZWRydnIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NjQtXFx0LmlkX3RhYmxlID0gYnJjbWZfcGNpZV9kZXZpZF90YWJsZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI3NjU6XFx0LnByb2JlID0gYnJjbWZfcGNpZV9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI3NjYtXFx0LnJlbW92ZSA9IGJyY21mX3BjaWVfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjowNi41NjIyNDA1N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIyODYxNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBicmNtZl9wY2llX3Byb2JlYCoqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHdoYXQgdGhpcyBgYnJjbWZfcGNpZV9wcm9iZWAgZnVuY3Rpb24gaXMgZG9pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIGluaXRpYWxpemluZyB0aGUgQnJvYWRjb20gUENJZSBXaS1GaSBkcml2ZXIsIHNvIEknbGwgcXVpY2tseSBkaXNzZWN0IGl0LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBsaWtlbHkgdG8gdHJhY2UgaXRzIHByaW1hcnkgdGFza3M6IHJlc291cmNlIGFsbG9jYXRpb24sIGRldmljZSBpZGVudGlmaWNhdGlvbiwgcG90ZW50aWFsbHkgRE1BIHNldHVwLCBpbnRlcnJ1cHQgcmVnaXN0cmF0aW9uLCBhbmQgZmluYWxseSwgdGhlIG92ZXJhbGwgZHJpdmVyIGF0dGFjaG1lbnQgYW5kIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHdoZXRoZXIgaXQncyBjb3JyZWN0bHkgbWFuYWdpbmcgcmVzb3VyY2VzIGR1cmluZyB0aGUgcHJvYmUgcGhhc2UuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBjb21wYXRpYmlsaXR5IHdpdGggZGlmZmVyZW50IEJyb2FkY29tIGhhcmR3YXJlIHJldmlzaW9ucy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIFBDSWUgYnVzIGFuZCBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgcXVpcmtzIGl0IG1pZ2h0IGVuY291bnRlci4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTIxLCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6MDkuOTg1MTA0NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDM4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQzODpcXHRzdGF0aWMgaW50XFxuMjQzOTpcXHRicmNtZl9wY2llX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuMjQ0MDpcXHR7XFxuMjQ0MTpcXHRcXHRpbnQgcmV0O1xcbjI0NDI6XFx0XFx0c3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxO1xcbjI0NDM6XFx0XFx0c3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbztcXG4yNDQ0OlxcdFxcdHN0cnVjdCBicmNtZl9wY2llZGV2ICpwY2llX2J1c19kZXY7XFxuMjQ0NTpcXHRcXHRzdHJ1Y3QgYnJjbWZfY29yZSAqY29yZTtcXG4yNDQ2OlxcdFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1cztcXG4yNDQ3OlxcdFxcbjI0NDg6XFx0XFx0aWYgKCFpZCkge1xcbjI0NDk6XFx0XFx0XFx0aWQgPSBwY2lfbWF0Y2hfaWQoYnJjbWZfcGNpZV9kZXZpZF90YWJsZSwgcGRldik7XFxuMjQ1MDpcXHRcXHRcXHRpZiAoIWlkKSB7XFxuMjQ1MTpcXHRcXHRcXHRcXHRwY2lfZXJyKHBkZXYsIFxcXCJFcnJvciBjb3VsZCBub3QgZmluZCBwY2lfZGV2aWNlX2lkIGZvciAleDoleFxcXFxuXFxcIiwgcGRldi1cXHUwMDNldmVuZG9yLCBwZGV2LVxcdTAwM2VkZXZpY2UpO1xcbjI0NTI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMjQ1MzpcXHRcXHRcXHR9XFxuMjQ1NDpcXHRcXHR9XFxuMjQ1NTpcXHRcXG4yNDU2OlxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiRW50ZXIgJXg6JXhcXFxcblxcXCIsIHBkZXYtXFx1MDAzZXZlbmRvciwgcGRldi1cXHUwMDNlZGV2aWNlKTtcXG4yNDU3OlxcdFxcbjI0NTg6XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4yNDU5OlxcdFxcdGRldmluZm8gPSBremFsbG9jX29iaigqZGV2aW5mbyk7XFxuMjQ2MDpcXHRcXHRpZiAoZGV2aW5mbyA9PSBOVUxMKVxcbjI0NjE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4yNDYyOlxcdFxcbjI0NjM6XFx0XFx0ZGV2aW5mby1cXHUwMDNlcGRldiA9IHBkZXY7XFxuMjQ2NDpcXHRcXHRwY2llX2J1c19kZXYgPSBOVUxMO1xcbjI0NjU6XFx0XFx0ZGV2aW5mby1cXHUwMDNlY2kgPSBicmNtZl9jaGlwX2F0dGFjaChkZXZpbmZvLCBwZGV2LVxcdTAwM2VkZXZpY2UsXFxuMjQ2NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2YnJjbWZfcGNpZV9idXNjb3JlX29wcyk7XFxuMjQ2NzpcXHRcXHRpZiAoSVNfRVJSKGRldmluZm8tXFx1MDAzZWNpKSkge1xcbjI0Njg6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihkZXZpbmZvLVxcdTAwM2VjaSk7XFxuMjQ2OTpcXHRcXHRcXHRkZXZpbmZvLVxcdTAwM2VjaSA9IE5VTEw7XFxuMjQ3MDpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjQ3MTpcXHRcXHR9XFxuMjQ3MjpcXHRcXG4yNDczOlxcdFxcdGNvcmUgPSBicmNtZl9jaGlwX2dldF9jb3JlKGRldmluZm8tXFx1MDAzZWNpLCBCQ01BX0NPUkVfUENJRTIpO1xcbjI0NzQ6XFx0XFx0aWYgKGNvcmUtXFx1MDAzZXJldiBcXHUwMDNlPSA2NClcXG4yNDc1OlxcdFxcdFxcdGRldmluZm8tXFx1MDAzZXJlZ2luZm8gPSBcXHUwMDI2YnJjbWZfcmVnaW5mb182NDtcXG4yNDc2OlxcdFxcdGVsc2VcXG4yNDc3OlxcdFxcdFxcdGRldmluZm8tXFx1MDAzZXJlZ2luZm8gPSBcXHUwMDI2YnJjbWZfcmVnaW5mb19kZWZhdWx0O1xcbjI0Nzg6XFx0XFxuMjQ3OTpcXHRcXHRwY2llX2J1c19kZXYgPSBremFsbG9jX29iaigqcGNpZV9idXNfZGV2KTtcXG4yNDgwOlxcdFxcdGlmIChwY2llX2J1c19kZXYgPT0gTlVMTCkge1xcbjI0ODE6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4yNDgyOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yNDgzOlxcdFxcdH1cXG4yNDg0OlxcdFxcbjI0ODU6XFx0XFx0ZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MgPSBicmNtZl9nZXRfbW9kdWxlX3BhcmFtKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuMjQ4NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBCUkNNRl9CVVNUWVBFX1BDSUUsXFxuMjQ4NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXZpbmZvLVxcdTAwM2VjaS1cXHUwMDNlY2hpcCxcXG4yNDg4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGRldmluZm8tXFx1MDAzZWNpLVxcdTAwM2VjaGlwcmV2KTtcXG4yNDg5OlxcdFxcdGlmICghZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpIHtcXG4yNDkwOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMjQ5MTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjQ5MjpcXHRcXHR9XFxuMjQ5MzpcXHRcXHRyZXQgPSBQVFJfRVJSX09SX1pFUk8oZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpO1xcbjI0OTQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjQ5NTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjQ5NjpcXHRcXG4yNDk3OlxcdFxcdGJ1cyA9IGt6YWxsb2Nfb2JqKCpidXMpO1xcbjI0OTg6XFx0XFx0aWYgKCFidXMpIHtcXG4yNDk5OlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMjUwMDpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjUwMTpcXHRcXHR9XFxuMjUwMjpcXHRcXHRidXMtXFx1MDAzZW1zZ2J1ZiA9IGt6YWxsb2Nfb2JqKCpidXMtXFx1MDAzZW1zZ2J1Zik7XFxuMjUwMzpcXHRcXHRpZiAoIWJ1cy1cXHUwMDNlbXNnYnVmKSB7XFxuMjUwNDpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjI1MDU6XFx0XFx0XFx0a2ZyZWUoYnVzKTtcXG4yNTA2OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yNTA3OlxcdFxcdH1cXG4yNTA4OlxcdFxcbjI1MDk6XFx0XFx0LyogaG9vayBpdCBhbGwgdG9nZXRoZXIuICovXFxuMjUxMDpcXHRcXHRwY2llX2J1c19kZXYtXFx1MDAzZWRldmluZm8gPSBkZXZpbmZvO1xcbjI1MTE6XFx0XFx0cGNpZV9idXNfZGV2LVxcdTAwM2VidXMgPSBidXM7XFxuMjUxMjpcXHRcXHRidXMtXFx1MDAzZWRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuMjUxMzpcXHRcXHRidXMtXFx1MDAzZWJ1c19wcml2LnBjaWUgPSBwY2llX2J1c19kZXY7XFxuMjUxNDpcXHRcXHRidXMtXFx1MDAzZW9wcyA9IFxcdTAwMjZicmNtZl9wY2llX2J1c19vcHM7XFxuMjUxNTpcXHRcXHRidXMtXFx1MDAzZXByb3RvX3R5cGUgPSBCUkNNRl9QUk9UT19NU0dCVUY7XFxuMjUxNjpcXHRcXHRidXMtXFx1MDAzZWNoaXAgPSBkZXZpbmZvLVxcdTAwM2Vjb3JlaWQ7XFxuMjUxNzpcXHRcXHRidXMtXFx1MDAzZXdvd2xfc3VwcG9ydGVkID0gcGNpX3BtZV9jYXBhYmxlKHBkZXYsIFBDSV9EM2hvdCk7XFxuMjUxODpcXHRcXHRidXMtXFx1MDAzZWZ3dmlkID0gZHJ2ZGF0YVtpZC1cXHUwMDNlZHJpdmVyX2RhdGFdLnZlbmRvcjtcXG4yNTE5OlxcdFxcdGRldmluZm8tXFx1MDAzZWZ3c2VlZCA9IGRydmRhdGFbaWQtXFx1MDAzZWRyaXZlcl9kYXRhXS5md19zZWVkO1xcbjI1MjA6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGJ1cyk7XFxuMjUyMTpcXHRcXG4yNTIyOlxcdFxcdHJldCA9IGJyY21mX2FsbG9jKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIGRldmluZm8tXFx1MDAzZXNldHRpbmdzKTtcXG4yNTIzOlxcdFxcdGlmIChyZXQpXFxuMjUyNDpcXHRcXHRcXHRnb3RvIGZhaWxfYnVzO1xcbjI1MjU6XFx0XFxuMjUyNjpcXHRcXHQvKiBvdHAgcmVhZCBvcGVyYXRpb24gKi9cXG4yNTI3OlxcdFxcdHN3aXRjaCAoYnVzLVxcdTAwM2Vmd3ZpZCkge1xcbjI1Mjg6XFx0XFx0Y2FzZSBCUkNNRl9GV1ZFTkRPUl9XQ0M6XFxuMjUyOTpcXHRcXHRjYXNlIEJSQ01GX0ZXVkVORE9SX0JDQTpcXG4yNTMwOlxcdFxcdFxcdHJldCA9IGJyY21mX3BjaWVfcmVhZF9vdHAoZGV2aW5mbyk7XFxuMjUzMTpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMjUzMjpcXHRcXHRcXHRcXHRicmNtZl9lcnIoYnVzLCBcXFwiZmFpbGVkIHRvIHBhcnNlIE9UUFxcXFxuXFxcIik7XFxuMjUzMzpcXHRcXHRcXHRcXHRnb3RvIGZhaWxfYnJjbWY7XFxuMjUzNDpcXHRcXHRcXHR9XFxuMjUzNTpcXHRcXHRcXHRicmVhaztcXG4yNTM2OlxcdFxcdGNhc2UgQlJDTUZfRldWRU5ET1JfQ1lXOlxcbjI1Mzc6XFx0XFx0ZGVmYXVsdDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6MDkuOTg1MjU2MzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NzE3MTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gZGVhbGluZyB3aXRoIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoZSB0ZWNobmljYWwgZGV0YWlsczpcblxuKipEaWdnaW5nIERlZXBlciBpbnRvIGBicmNtZl9wY2llX3Byb2JlYC4uLioqXG5cbkFscmlnaHQsIHNvIHRoZSBpbnZlc3RpZ2F0aW9uIGhhc24ndCBoaXQgYSBkZWFkIGVuZCB5ZXQuIEkgc2VlIHRoYXQgYGJyY21mX3BjaWVfcHJvYmVgIGlzIGNvbnRpbnVpbmcgdG8gZXhlY3V0ZS4gVGhpcyBpcyBnb29kOyBpdCBtZWFucyB0aGVyZSdzIHN0aWxsIG1vcmUgZ29pbmcgb24gd2l0aCB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBJIG5lZWQgdG8ga2VlcCBhIGNsb3NlIGV5ZSBvbiB3aGF0IGl0J3MgZG9pbmcsIHRoZSBjYWxscyBpdCdzIG1ha2luZywgYW5kIHRoZSB2YWx1ZXMgb2YgdGhlIHZhcmlhYmxlcyBpdCdzIG1hbmlwdWxhdGluZy4gRXNzZW50aWFsbHksIHRoZSBwcm9iZSBmdW5jdGlvbiBzdGlsbCBoYXMgc29tZSBmaWdodCBpbiBpdCwgYW5kIGxpa2VseSB0aGUgc29sdXRpb24gaXMgd2l0aGluIHRoZSBmdXJ0aGVyIHN0ZXBzIGl0IGlzIHJ1bm5pbmcuIE15IGdvYWwgbm93IGlzIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyB0cmlnZ2VyaW5nIHRob3NlIG5leHQgc3RlcHMgYW5kIHdoZXRoZXIgdGhleSBhcmUgYmVpbmcgc3VjY2Vzc2Z1bCBvciBub3QuIE1heWJlIHNvbWUgY29uZGl0aW9uIGlzIG5vdCBtZXQsIGEgcmVzb3VyY2UgaXMgdW5hdmFpbGFibGUsIG9yIGEgY29uZmlndXJhdGlvbiBpcyBpbmNvcnJlY3QuIFRoaXMgaXMgYSBwb2ludCB0byBiZWdpbiBuYXJyb3dpbmcgZG93biB0aGUgc3BlY2lmaWMgcG9pbnQgb2YgZmFpbHVyZSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzgzLCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjoxMy42NTI0MzA1OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTM4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjUzODpcXHRcXHRcXHRicmVhaztcXG4yNTM5OlxcdFxcdH1cXG4yNTQwOlxcdFxcbjI1NDE6XFx0I2lmZGVmIERFQlVHXFxuMjU0MjpcXHRcXHQvKiBTZXQgdXAgdGhlIGZ3Y29uIHRpbWVyICovXFxuMjU0MzpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2ZGV2aW5mby1cXHUwMDNldGltZXIsIGJyY21mX3BjaWVfZndjb24sIDApO1xcbjI1NDQ6XFx0I2VuZGlmXFxuMjU0NTpcXHRcXG4yNTQ2OlxcdFxcdGZ3cmVxID0gYnJjbWZfcGNpZV9wcmVwYXJlX2Z3X3JlcXVlc3QoZGV2aW5mbyk7XFxuMjU0NzpcXHRcXHRpZiAoIWZ3cmVxKSB7XFxuMjU0ODpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjI1NDk6XFx0XFx0XFx0Z290byBmYWlsX2JyY21mO1xcbjI1NTA6XFx0XFx0fVxcbjI1NTE6XFx0XFxuMjU1MjpcXHRcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGJ1cy1cXHUwMDNlZGV2LCBmd3JlcSwgYnJjbWZfcGNpZV9zZXR1cCk7XFxuMjU1MzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjI1NTQ6XFx0XFx0XFx0a2ZyZWUoZndyZXEpO1xcbjI1NTU6XFx0XFx0XFx0Z290byBmYWlsX2JyY21mO1xcbjI1NTY6XFx0XFx0fVxcbjI1NTc6XFx0XFx0cmV0dXJuIDA7XFxuMjU1ODpcXHRcXG4yNTU5OlxcdGZhaWxfYnJjbWY6XFxuMjU2MDpcXHRcXHRicmNtZl9mcmVlKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbjI1NjE6XFx0ZmFpbF9idXM6XFxuMjU2MjpcXHRcXHRrZnJlZShidXMtXFx1MDAzZW1zZ2J1Zik7XFxuMjU2MzpcXHRcXHRrZnJlZShidXMpO1xcbjI1NjQ6XFx0ZmFpbDpcXG4yNTY1OlxcdFxcdGJyY21mX2VycihOVUxMLCBcXFwiZmFpbGVkICV4OiV4XFxcXG5cXFwiLCBwZGV2LVxcdTAwM2V2ZW5kb3IsIHBkZXYtXFx1MDAzZWRldmljZSk7XFxuMjU2NjpcXHRcXHRicmNtZl9wY2llX3JlbGVhc2VfcmVzb3VyY2UoZGV2aW5mbyk7XFxuMjU2NzpcXHRcXHRpZiAoZGV2aW5mby1cXHUwMDNlY2kpXFxuMjU2ODpcXHRcXHRcXHRicmNtZl9jaGlwX2RldGFjaChkZXZpbmZvLVxcdTAwM2VjaSk7XFxuMjU2OTpcXHRcXHRpZiAoZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpXFxuMjU3MDpcXHRcXHRcXHRicmNtZl9yZWxlYXNlX21vZHVsZV9wYXJhbShkZXZpbmZvLVxcdTAwM2VzZXR0aW5ncyk7XFxuMjU3MTpcXHRcXHRrZnJlZShwY2llX2J1c19kZXYpO1xcbjI1NzI6XFx0XFx0a2ZyZWUoZGV2aW5mbyk7XFxuMjU3MzpcXHRcXHRyZXR1cm4gcmV0O1xcbjI1NzQ6XFx0fVxcbjI1NzU6XFx0XFxuMjU3NjpcXHRcXG4yNTc3OlxcdHN0YXRpYyB2b2lkXFxuMjU3ODpcXHRicmNtZl9wY2llX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4yNTc5OlxcdHtcXG4yNTgwOlxcdFxcdHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm87XFxuMjU4MTpcXHRcXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXM7XFxuMjU4MjpcXHRcXG4yNTgzOlxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiRW50ZXJcXFxcblxcXCIpO1xcbjI1ODQ6XFx0XFxuMjU4NTpcXHRcXHRidXMgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuMjU4NjpcXHRcXHRpZiAoYnVzID09IE5VTEwpXFxuMjU4NzpcXHRcXHRcXHRyZXR1cm47XFxuMjU4ODpcXHRcXG4yNTg5OlxcdFxcdGRldmluZm8gPSBidXMtXFx1MDAzZWJ1c19wcml2LnBjaWUtXFx1MDAzZWRldmluZm87XFxuMjU5MDpcXHRcXHRicmNtZl9wY2llX2J1c19jb25zb2xlX3JlYWQoZGV2aW5mbywgZmFsc2UpO1xcbjI1OTE6XFx0XFx0YnJjbWZfcGNpZV9md2Nvbl90aW1lcihkZXZpbmZvLCBmYWxzZSk7XFxuMjU5MjpcXHRcXG4yNTkzOlxcdFxcdGRldmluZm8tXFx1MDAzZXN0YXRlID0gQlJDTUZNQUNfUENJRV9TVEFURV9ET1dOO1xcbjI1OTQ6XFx0XFx0aWYgKGRldmluZm8tXFx1MDAzZWNpKVxcbjI1OTU6XFx0XFx0XFx0YnJjbWZfcGNpZV9pbnRyX2Rpc2FibGUoZGV2aW5mbyk7XFxuMjU5NjpcXHRcXG4yNTk3OlxcdFxcdGJyY21mX2RldGFjaChcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4yNTk4OlxcdFxcdGJyY21mX2ZyZWUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuMjU5OTpcXHRcXG4yNjAwOlxcdFxcdGtmcmVlKGJ1cy1cXHUwMDNlYnVzX3ByaXYucGNpZSk7XFxuMjYwMTpcXHRcXHRrZnJlZShidXMtXFx1MDAzZW1zZ2J1Zi1cXHUwMDNlZmxvd3JpbmdzKTtcXG4yNjAyOlxcdFxcdGtmcmVlKGJ1cy1cXHUwMDNlbXNnYnVmKTtcXG4yNjAzOlxcdFxcdGtmcmVlKGJ1cyk7XFxuMjYwNDpcXHRcXG4yNjA1OlxcdFxcdGJyY21mX3BjaWVfcmVsZWFzZV9pcnEoZGV2aW5mbyk7XFxuMjYwNjpcXHRcXHRicmNtZl9wY2llX3JlbGVhc2Vfc2NyYXRjaGJ1ZmZlcnMoZGV2aW5mbyk7XFxuMjYwNzpcXHRcXHRicmNtZl9wY2llX3JlbGVhc2VfcmluZ2J1ZmZlcnMoZGV2aW5mbyk7XFxuMjYwODpcXHRcXHRicmNtZl9wY2llX3Jlc2V0X2RldmljZShkZXZpbmZvKTtcXG4yNjA5OlxcdFxcdGJyY21mX3BjaWVfcmVsZWFzZV9yZXNvdXJjZShkZXZpbmZvKTtcXG4yNjEwOlxcdFxcdHJlbGVhc2VfZmlybXdhcmUoZGV2aW5mby1cXHUwMDNlY2xtX2Z3KTtcXG4yNjExOlxcdFxcdHJlbGVhc2VfZmlybXdhcmUoZGV2aW5mby1cXHUwMDNldHhjYXBfZncpO1xcbjI2MTI6XFx0XFxuMjYxMzpcXHRcXHRpZiAoZGV2aW5mby1cXHUwMDNlY2kpXFxuMjYxNDpcXHRcXHRcXHRicmNtZl9jaGlwX2RldGFjaChkZXZpbmZvLVxcdTAwM2VjaSk7XFxuMjYxNTpcXHRcXHRpZiAoZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpXFxuMjYxNjpcXHRcXHRcXHRicmNtZl9yZWxlYXNlX21vZHVsZV9wYXJhbShkZXZpbmZvLVxcdTAwM2VzZXR0aW5ncyk7XFxuMjYxNzpcXHRcXG4yNjE4OlxcdFxcdGtmcmVlKGRldmluZm8pO1xcbjI2MTk6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbjI2MjA6XFx0fVxcbjI2MjE6XFx0XFxuMjYyMjpcXHRcXG4yNjIzOlxcdCNpZmRlZiBDT05GSUdfUE1cXG4yNjI0OlxcdFxcbjI2MjU6XFx0XFxuMjYyNjpcXHRzdGF0aWMgaW50IGJyY21mX3BjaWVfcG1fZW50ZXJfRDMoc3RydWN0IGRldmljZSAqZGV2KVxcbjI2Mjc6XFx0e1xcbjI2Mjg6XFx0XFx0c3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbztcXG4yNjI5OlxcdFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1cztcXG4yNjMwOlxcdFxcbjI2MzE6XFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuMjYzMjpcXHRcXG4yNjMzOlxcdFxcdGJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjI2MzQ6XFx0XFx0ZGV2aW5mbyA9IGJ1cy1cXHUwMDNlYnVzX3ByaXYucGNpZS1cXHUwMDNlZGV2aW5mbztcXG4yNjM1OlxcdFxcbjI2MzY6XFx0XFx0YnJjbWZfcGNpZV9md2Nvbl90aW1lcihkZXZpbmZvLCBmYWxzZSk7XFxuMjYzNzpcXHRcXHRicmNtZl9idXNfY2hhbmdlX3N0YXRlKGJ1cywgQlJDTUZfQlVTX0RPV04pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjoxMy42NTI1ODY4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjg2NzA5OTA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGJyY21mbWFjIFBDSWUgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYnJjbWZfcGNpZV9wcm9iZWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGNhbGwgYGJyY21mX2Z3X2dldF9maXJtd2FyZXNgLCB3aGljaCB0aGVuIHRyaWdnZXJzIGBicmNtZl9wY2llX3NldHVwYCBhcyBhIGNhbGxiYWNrICphZnRlciogdGhlIGZpcm13YXJlIGxvYWRzLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgU3l6a2FsbGVyIGNhbiwgaW4gdGhlb3J5LCBtb2NrIGZpcm13YXJlIGxvYWRpbmcuIElmIGNvbmZpZ3VyZWQsIG9yIGlmIHRoZSBmaXJtd2FyZSBpcyBiYWtlZCBpbnRvIHRoZSBpbWFnZSwgU3l6a2FsbGVyIGNhbiBlZmZlY3RpdmVseSBcImxvYWRcIiB0aGUgZmlybXdhcmUgdXNpbmcgaXRzIGByZXF1ZXN0X2Zpcm13YXJlYCBtb2NraW5nIGNhcGFiaWxpdGllcy5cblxuTm93LCBpbnNpZGUgYGJyY21mX3BjaWVfc2V0dXBgLCBpdCBnb2VzIG9uIHRvIGNhbGwgYGJyY21mX2F0dGFjaGAsIHdoaWNoIHRoZW4gY2FsbHMgYGJyY21mX3Byb3RvX2F0dGFjaGAsIGFuZCBmaW5hbGx5IGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYC4gVGhpcyBjb25maXJtcyB0aGF0IHRoZSBjb2RlIHBhdGggSSdtIGludGVyZXN0ZWQgaW4gKmlzKiByZWFjaGFibGUgaWYgdGhlIGZpcm13YXJlIGxvYWRzIHN1Y2Nlc3NmdWxseSBhbmQgdGhlIFBDSWUgZGV2aWNlIGlzIGNvcnJlY3RseSBwcm9iZWQuXG5cbkJ1dCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogRG9lcyBTeXprYWxsZXIgKmZ1enoqIHRoaXMgcGF0aD8gSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBpbnN0cnVjdGlvbnMgYWJvdXQgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBjZXJ0YWluIHR5cGVzIG9mIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgdGhlIGluc3RydWN0aW9ucyBzdGF0ZSBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiLlxuXG5JcyBgYnJjbWZtYWNgIG9uZSBvZiB0aG9zZT8gV2VsbCwgaXQncyBhIEJyb2FkY29tIFdpLUZpIGRyaXZlciwgc28gdGVjaG5pY2FsbHksIHllcywgaXQncyB2ZW5kb3Itc3BlY2lmaWMsIGJ1dCBJIGFtIG5vdCBjZXJ0YWluIGlmIGl0J3MgY29uc2lkZXJlZCB0byBiZSBsaWtlIGEgU21hcnROSUMgb3IgR1BVLCByZXF1aXJpbmcgYWN0dWFsIGhhcmR3YXJlLlxuXG5Ib3dldmVyLCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYHN5el9wY2lfZGV2aWNlX2FkZGAuIFRoaXMgc3lzY2FsbCwgd2hpY2ggdGhlIGluc3RydWN0aW9ucyBhcmUgcmVmZXJyaW5nIHRvLCBjYW4gaW5qZWN0IFBDSSBkZXZpY2VzIHVzaW5nIGB2ZmlvYCBvciBzaW1pbGFyIG1lY2hhbmlzbXMsIGFuZCBldmVuIGNyZWF0ZSB2aXJ0dWFsIFBDSSBkZXZpY2VzIHdpdGhpbiBRRU1VLiBUaGF0J3MgaG93IFN5emthbGxlciBtb2NrcyBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBhbmQgTU1JTy4gU28sIGl0ICpjYW4qIGZ1enogUENJIGRyaXZlcnMuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgc3l6X3BjaV9kZXZpY2VfYWRkYCBkb2VzICpub3QqIG5lZWQgUUVNVSB0byBzcGVjaWZpY2FsbHkgZW11bGF0ZSB0aGUgQnJvYWRjb20gV2ktRmkgY2FyZC4gSXQgcmVsaWVzIG9uIGEgZ2VuZXJpYyBQQ0kgZGV2aWNlIGluamVjdG9yLCBsaWtlIGEgY3VzdG9tIFFFTVUgZGV2aWNlIGNvbnRyb2xsZWQgYnkgU3l6a2FsbGVyLlxuXG5MZXQgbWUgcXVpY2tseSBpbnZlc3RpZ2F0ZSBpZiB0aGlzIGBicmNtZm1hY2AgaXMgYWxyZWFkeSBmdXp6ZWQuIFVuZm9ydHVuYXRlbHksIEkgZG8gbm90IGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgU3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBhdCB0aGUgbW9tZW50LiBCdXQgSSBjb3VsZCB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHNlYXJjaCB0aGUga2VybmVsIGZvciByZWxldmFudCBrZXl3b3Jkcy5cblxuSG93ZXZlciwgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zOiBUaGV5IHNwZWNpZnkgXCJDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi4gU28sIGlzIGBicmNtZm1hY2AgYSBcIlNtYXJ0TklDLFwiIFwiR1BVLFwiIG9yIFwiUENJZSBzd2l0Y2hcIj8gTm8sIGl0J3MgYSBXaS1GaSBkcml2ZXIuIEFuZCBXaS1GaSBkcml2ZXJzIGFyZSBvZnRlbiBmdXp6ZWQgdXNpbmcgYG1hYzgwMjExX2h3c2ltYCBvciBldmVuIFVTQiAoZS5nLiwgYGF0aDlrX2h0Y2AsIGBydGx3aWZpYCkuXG5cbkhvd2V2ZXIsIHdoYXQgYWJvdXQgdGhlIFBDSWUgYXNwZWN0IG9mIGBicmNtZm1hY2A/IExldCBtZSBjb25maXJtOiBkb2VzIGBicmNtZm1hY2AgaGF2ZSBVU0Igc3VwcG9ydD8gWWVzLCBpdCBkb2VzLiBEb2VzIHRoZSBVU0IgaW1wbGVtZW50YXRpb24gdXNlIGBtc2didWZgPyBMb29raW5nIGJhY2sgYXQgdGhlIGNvZGUsIFVTQiB1c2VzIGBCUkNNRl9QUk9UT19CQ0RDYCwgd2hpY2ggaXMgKm5vdCogYEJSQ01GX1BST1RPX01TR0JVRmAuIFNESU8gYWxzbyB1c2VzIGBCUkNNRl9QUk9UT19CQ0RDYC4gT25seSBQQ0llIHVzZXMgYEJSQ01GX1BST1RPX01TR0JVRmAuIFNvLCB0aGUgY2hhbmdlcyBJIHNhdyAoYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AgaW4gYG1zZ2J1Zi5jYCkgYXJlIG9ubHkgcmVhY2hhYmxlIHZpYSB0aGUgUENJZSBwYXRoLlxuXG5Tbywgc2luY2UgaXQncyAqb25seSogcmVhY2hhYmxlIHZpYSBQQ0llLCBhbmQgaXQncyBhIEJyb2FkY29tIFdpLUZpIFBDSWUgY2FyZC4uLiBjYW4gU3l6a2FsbGVyIGZ1enogaXQ/IFN5emthbGxlcidzIFBDSSBmdXp6ZXIgKmNhbiogZnV6eiAqYW55KiBQQ0kgZHJpdmVyLCBieSBwcm92aWRpbmcgbWF0Y2hpbmcgUENJIHZlbmRvci9kZXZpY2UgSURzIGFuZCBtb2NraW5nIE1NSU8vRE1BLCBpZiBpdHMgY2FwYWJsZS5cblxuQnV0IHRoZSBpbnN0cnVjdGlvbiBtZW50aW9uczogXCJDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCIgT2theSwgc28gaXMgdGhpcyBXaS1GaSBjYXJkIGxpa2UgYSBcIlNtYXJ0TklDXCIgb3IgYSBHUFUgb3IgUENJZSBzd2l0Y2g/IE5vdCBkaXJlY3RseS4gQnV0IGRvZXMgaXQgcmVxdWlyZSBoYXJkd2FyZT8gTm8uIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgd29ya3MgYnkgZW11bGF0aW5nIHRoZSBQQ0kgZGV2aWNlIGF0IHRoZSBjb25maWcgc3BhY2UgYW5kIE1NSU8gbGV2ZWxcblxuIiwiSW5wdXRUb2tlbnMiOjE0NTY5LCJPdXRwdXRUb2tlbnMiOjU2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE2OjMwLjUxOTY4ODk1NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTM1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEzNTpcXHRzdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4yMTM2OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxcbjIxMzc6XFx0e1xcbjIxMzg6XFx0XFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdztcXG4yMTM5OlxcdFxcdHZvaWQgKm52cmFtO1xcbjIxNDA6XFx0XFx0c3RydWN0IGJyY21mX2J1cyAqYnVzO1xcbjIxNDE6XFx0XFx0c3RydWN0IGJyY21mX3BjaWVkZXYgKnBjaWVfYnVzX2RldjtcXG4yMTQyOlxcdFxcdHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm87XFxuMjE0MzpcXHRcXHRzdHJ1Y3QgYnJjbWZfY29tbW9ucmluZyAqKmZsb3dyaW5ncztcXG4yMTQ0OlxcdFxcdHUzMiBpLCBudnJhbV9sZW47XFxuMjE0NTpcXHRcXG4yMTQ2OlxcdFxcdGJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjIxNDc6XFx0XFx0cGNpZV9idXNfZGV2ID0gYnVzLVxcdTAwM2VidXNfcHJpdi5wY2llO1xcbjIxNDg6XFx0XFx0ZGV2aW5mbyA9IHBjaWVfYnVzX2Rldi1cXHUwMDNlZGV2aW5mbztcXG4yMTQ5OlxcdFxcbjIxNTA6XFx0XFx0LyogY2hlY2sgZmlybXdhcmUgbG9hZGluZyByZXN1bHQgKi9cXG4yMTUxOlxcdFxcdGlmIChyZXQpXFxuMjE1MjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjE1MzpcXHRcXG4yMTU0OlxcdFxcdGJyY21mX3BjaWVfYXR0YWNoKGRldmluZm8pO1xcbjIxNTU6XFx0XFxuMjE1NjpcXHRcXHRmdyA9IGZ3cmVxLVxcdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX0NPREVdLmJpbmFyeTtcXG4yMTU3OlxcdFxcdG52cmFtID0gZndyZXEtXFx1MDAzZWl0ZW1zW0JSQ01GX1BDSUVfRldfTlZSQU1dLm52X2RhdGEuZGF0YTtcXG4yMTU4OlxcdFxcdG52cmFtX2xlbiA9IGZ3cmVxLVxcdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX05WUkFNXS5udl9kYXRhLmxlbjtcXG4yMTU5OlxcdFxcdGRldmluZm8tXFx1MDAzZWNsbV9mdyA9IGZ3cmVxLVxcdTAwM2VpdGVtc1tCUkNNRl9QQ0lFX0ZXX0NMTV0uYmluYXJ5O1xcbjIxNjA6XFx0XFx0ZGV2aW5mby1cXHUwMDNldHhjYXBfZncgPSBmd3JlcS1cXHUwMDNlaXRlbXNbQlJDTUZfUENJRV9GV19UWENBUF0uYmluYXJ5O1xcbjIxNjE6XFx0XFx0a2ZyZWUoZndyZXEpO1xcbjIxNjI6XFx0XFxuMjE2MzpcXHRcXHRyZXQgPSBicmNtZl9jaGlwX2dldF9yYW1pbmZvKGRldmluZm8tXFx1MDAzZWNpKTtcXG4yMTY0OlxcdFxcdGlmIChyZXQpIHtcXG4yMTY1OlxcdFxcdFxcdGJyY21mX2VycihidXMsIFxcXCJGYWlsZWQgdG8gZ2V0IFJBTSBpbmZvXFxcXG5cXFwiKTtcXG4yMTY2OlxcdFxcdFxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcbjIxNjc6XFx0XFx0XFx0YnJjbWZfZndfbnZyYW1fZnJlZShudnJhbSk7XFxuMjE2ODpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjE2OTpcXHRcXHR9XFxuMjE3MDpcXHRcXG4yMTcxOlxcdFxcdC8qIFNvbWUgb2YgdGhlIGZpcm13YXJlcyBoYXZlIHRoZSBzaXplIG9mIHRoZSBtZW1vcnkgb2YgdGhlIGRldmljZVxcbjIxNzI6XFx0XFx0ICogZGVmaW5lZCBpbnNpZGUgdGhlIGZpcm13YXJlLiBUaGlzIGlzIGJlY2F1c2UgcGFydCBvZiB0aGUgbWVtb3J5IGluXFxuMjE3MzpcXHRcXHQgKiB0aGUgZGV2aWNlIGlzIHNoYXJlZCBhbmQgdGhlIGRldmlzaW9uIGlzIGRldGVybWluZWQgYnkgRlcuIFBhcnNlXFxuMjE3NDpcXHRcXHQgKiB0aGUgZmlybXdhcmUgYW5kIGFkanVzdCB0aGUgY2hpcCBtZW1vcnkgc2l6ZSBub3cuXFxuMjE3NTpcXHRcXHQgKi9cXG4yMTc2OlxcdFxcdGJyY21mX3BjaWVfYWRqdXN0X3JhbXNpemUoZGV2aW5mbywgKHU4ICopZnctXFx1MDAzZWRhdGEsIGZ3LVxcdTAwM2VzaXplKTtcXG4yMTc3OlxcdFxcbjIxNzg6XFx0XFx0cmV0ID0gYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbShkZXZpbmZvLCBmdywgbnZyYW0sIG52cmFtX2xlbik7XFxuMjE3OTpcXHRcXHRpZiAocmV0KVxcbjIxODA6XFx0XFx0XFx0Z290byBmYWlsO1xcbjIxODE6XFx0XFxuMjE4MjpcXHRcXHRkZXZpbmZvLVxcdTAwM2VzdGF0ZSA9IEJSQ01GTUFDX1BDSUVfU1RBVEVfVVA7XFxuMjE4MzpcXHRcXG4yMTg0OlxcdFxcdHJldCA9IGJyY21mX3BjaWVfaW5pdF9yaW5nYnVmZmVycyhkZXZpbmZvKTtcXG4yMTg1OlxcdFxcdGlmIChyZXQpXFxuMjE4NjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjE4NzpcXHRcXG4yMTg4OlxcdFxcdHJldCA9IGJyY21mX3BjaWVfaW5pdF9zY3JhdGNoYnVmZmVycyhkZXZpbmZvKTtcXG4yMTg5OlxcdFxcdGlmIChyZXQpXFxuMjE5MDpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjE5MTpcXHRcXG4yMTkyOlxcdFxcdGJyY21mX3BjaWVfc2VsZWN0X2NvcmUoZGV2aW5mbywgQkNNQV9DT1JFX1BDSUUyKTtcXG4yMTkzOlxcdFxcdHJldCA9IGJyY21mX3BjaWVfcmVxdWVzdF9pcnEoZGV2aW5mbyk7XFxuMjE5NDpcXHRcXHRpZiAocmV0KVxcbjIxOTU6XFx0XFx0XFx0Z290byBmYWlsO1xcbjIxOTY6XFx0XFxuMjE5NzpcXHRcXHQvKiBob29rIHRoZSBjb21tb25yaW5ncyBpbiB0aGUgYnVzIHN0cnVjdHVyZS4gKi9cXG4yMTk4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCUkNNRl9OUk9GX0NPTU1PTl9NU0dSSU5HUzsgaSsrKVxcbjIxOTk6XFx0XFx0XFx0YnVzLVxcdTAwM2Vtc2didWYtXFx1MDAzZWNvbW1vbnJpbmdzW2ldID1cXG4yMjAwOlxcdFxcdFxcdFxcdFxcdFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VzaGFyZWQuY29tbW9ucmluZ3NbaV0tXFx1MDAzZWNvbW1vbnJpbmc7XFxuMjIwMTpcXHRcXG4yMjAyOlxcdFxcdGZsb3dyaW5ncyA9IGt6YWxsb2Nfb2JqcygqZmxvd3JpbmdzLCBkZXZpbmZvLVxcdTAwM2VzaGFyZWQubWF4X2Zsb3dyaW5ncyk7XFxuMjIwMzpcXHRcXHRpZiAoIWZsb3dyaW5ncylcXG4yMjA0OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yMjA1OlxcdFxcbjIyMDY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRldmluZm8tXFx1MDAzZXNoYXJlZC5tYXhfZmxvd3JpbmdzOyBpKyspXFxuMjIwNzpcXHRcXHRcXHRmbG93cmluZ3NbaV0gPSBcXHUwMDI2ZGV2aW5mby1cXHUwMDNlc2hhcmVkLmZsb3dyaW5nc1tpXS5jb21tb25yaW5nO1xcbjIyMDg6XFx0XFx0YnVzLVxcdTAwM2Vtc2didWYtXFx1MDAzZWZsb3dyaW5ncyA9IGZsb3dyaW5ncztcXG4yMjA5OlxcdFxcbjIyMTA6XFx0XFx0YnVzLVxcdTAwM2Vtc2didWYtXFx1MDAzZXJ4X2RhdGFvZmZzZXQgPSBkZXZpbmZvLVxcdTAwM2VzaGFyZWQucnhfZGF0YW9mZnNldDtcXG4yMjExOlxcdFxcdGJ1cy1cXHUwMDNlbXNnYnVmLVxcdTAwM2VtYXhfcnhidWZwb3N0ID0gZGV2aW5mby1cXHUwMDNlc2hhcmVkLm1heF9yeGJ1ZnBvc3Q7XFxuMjIxMjpcXHRcXHRidXMtXFx1MDAzZW1zZ2J1Zi1cXHUwMDNlbWF4X2Zsb3dyaW5ncyA9IGRldmluZm8tXFx1MDAzZXNoYXJlZC5tYXhfZmxvd3JpbmdzO1xcbjIyMTM6XFx0XFxuMjIxNDpcXHRcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VtYmRhdGFfcmVzcF93YWl0KTtcXG4yMjE1OlxcdFxcbjIyMTY6XFx0XFx0cmV0ID0gYnJjbWZfYXR0YWNoKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbjIyMTc6XFx0XFx0aWYgKHJldClcXG4yMjE4OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yMjE5OlxcdFxcbjIyMjA6XFx0XFx0YnJjbWZfcGNpZV9idXNfY29uc29sZV9yZWFkKGRldmluZm8sIGZhbHNlKTtcXG4yMjIxOlxcdFxcbjIyMjI6XFx0XFx0YnJjbWZfcGNpZV9md2Nvbl90aW1lcihkZXZpbmZvLCB0cnVlKTtcXG4yMjIzOlxcdFxcbjIyMjQ6XFx0XFx0cmV0dXJuO1xcbjIyMjU6XFx0XFxuMjIyNjpcXHRmYWlsOlxcbjIyMjc6XFx0XFx0YnJjbWZfZXJyKGJ1cywgXFxcIkRvbmdsZSBzZXR1cCBmYWlsZWRcXFxcblxcXCIpO1xcbjIyMjg6XFx0XFx0YnJjbWZfcGNpZV9idXNfY29uc29sZV9yZWFkKGRldmluZm8sIHRydWUpO1xcbjIyMjk6XFx0XFx0YnJjbWZfZndfY3Jhc2hlZChkZXYpO1xcbjIyMzA6XFx0XFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7XFxuMjIzMTpcXHR9XFxuMjIzMjpcXHRcXG4yMjMzOlxcdHN0YXRpYyBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqXFxuMjIzNDpcXHRicmNtZl9wY2llX3ByZXBhcmVfZndfcmVxdWVzdChzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjozMC41MTk5NzA4MDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc1MzA3NDM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEZpcm13YXJlIExvYWRpbmcgSXNzdWVzKipcblxuT2theSwgc28gaGVyZSdzIHRoZSBkZWFsLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgaWYgdGhlIHJldHVybiBjb2RlLCBgcmV0YCwgaW5kaWNhdGVzIGEgZmlybXdhcmUgbG9hZCBmYWlsdXJlLCB0aGUgY29kZSBicmFuY2hlcyB0byBgZmFpbGAuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYGRldmljZV9yZWxlYXNlX2RyaXZlcihkZXYpYCBpcyBjYWxsZWQsIGFuZCBgYnJjbWZfYXR0YWNoYCBpcyBjb21wbGV0ZWx5IGJ5cGFzc2VkLiBUaGlzIG1lYW5zIGBicmNtZl9hdHRhY2hgIGlzIG9ubHkgZW50ZXJlZCBpZiB0aGUgZmlybXdhcmUgbG9hZHMgc3VjY2Vzc2Z1bGx5LiBCdXQsIHRoZSBxdWVzdGlvbiBJJ20gdHJ5aW5nIHRvIGFuc3dlciBpcyB3aGF0IGhhcHBlbnMgaW4gdGhlIGNhc2Ugb2YgbW9ja2luZy5cblxuSSdtIHByZXR0eSBjb25maWRlbnQgdGhhdCBTeXprYWxsZXIgY2FuLCBhbmQgbGlrZWx5ICpkb2VzKiBtb2NrIGZpcm13YXJlIGxvYWRpbmcuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBTeXprYWxsZXIgZWl0aGVyIHVzZXMgYENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVJgIG9yIHByb3ZpZGVzIHNvbWUgcGxhY2Vob2xkZXIgZmlybXdhcmUgZmlsZXMgZGlyZWN0bHkgd2l0aGluIHRoZSBpbWFnZS4gQnV0IHRoYXQgYnJpbmdzIG1lIHRvIGEgcG90ZW50aWFsbHkgY3JpdGljYWwgaXNzdWUgd2l0aCBgYnJjbWZtYWNgLlxuXG5Ob3cgSSdtIHRoaW5raW5nIGFib3V0IGBicmNtZl9wY2llX3NldHVwYC4gU3BlY2lmaWNhbGx5LCB0aGUgZmlybXdhcmUgcGFyc2luZyBkb25lIHRoZXJlOiBgYnJjbWZfcGNpZV9hZGp1c3RfcmFtc2l6ZShkZXZpbmZvLCAodTggKilmdy1cdTAwM2VkYXRhLCBmdy1cdTAwM2VzaXplKTtgIGFuZCBgcmV0ID0gYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbShkZXZpbmZvLCBmdywgbnZyYW0sIG52cmFtX2xlbik7YC4gSWYgU3l6a2FsbGVyJ3MgZmlybXdhcmUgaXMgZXNzZW50aWFsbHkganVzdCBkdW1teSBieXRlcywgd2lsbCB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIGl0IGdyYWNlZnVsbHk/IEkgbmVlZCB0byBsb29rIGludG8gYGJyY21mX3BjaWVfYWRqdXN0X3JhbXNpemVgIG1vcmUgY2xvc2VseS4gSSBoYXZlIGEgZmVlbGluZyB0aGF0IG1pZ2h0IGJlIHdoZXJlIHRoZSBwcm9ibGVtcyBhcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NjQsIk91dHB1dFRva2VucyI6NTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjozNi4yNzMwNDc3MzhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDUwODE3NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfcGNpZV9hZGp1c3RfcmFtc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MTU5NT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MTU5NjpicmNtZl9wY2llX2FkanVzdF9yYW1zaXplKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHU4ICpkYXRhLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMTU5Ny1cXHRcXHRcXHQgIHUzMiBkYXRhX2xlbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM9MjEzNT1zdGF0aWMgdm9pZCBicmNtZl9wY2llX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjE3NS1cXHQgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjIxNzY6XFx0YnJjbWZfcGNpZV9hZGp1c3RfcmFtc2l6ZShkZXZpbmZvLCAodTggKilmdy1cXHUwMDNlZGF0YSwgZnctXFx1MDAzZXNpemUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjE3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6MzguMTE4MTM2OTMyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzE1NDQ4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYW5hbHl6ZSB0aG9zZSBmdW5jdGlvbnMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGdlYXJlZCB0b3dhcmRzIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgRmlybXdhcmUgTG9hZGluZyBhbmQgUkFNIFNpemluZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBCcm9hZGNvbSBQQ0llIGRyaXZlciBoYW5kbGVzIGZpcm13YXJlIGxvYWRpbmcgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBtYW5hZ2VzIFJBTSBzaXplLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYGJyY21mX3BjaWVfYWRqdXN0X3JhbXNpemVgIGFuZCBgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUsIGZyb20gdGhlIG5hbWVzIGFsb25lLCBwcm9iYWJseSB0aGUgY29yZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgdGhlIGRldmljZS4gSSBhbnRpY2lwYXRlIGBicmNtZl9wY2llX2FkanVzdF9yYW1zaXplYCBkZWFsaW5nIHdpdGggdGhlIGhhcmR3YXJlJ3MgbWVtb3J5IGNvbmZpZ3VyYXRpb24sIHByb2JhYmx5IHJlYWRpbmcgc29tZSByZWdpc3RlcnMgb3IgZXZlbiBwcm9iaW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGF2YWlsYWJsZSBSQU0gYW5kIG1heWJlIGV2ZW4gZG9pbmcgc29tZSBlYXJseSBtZW1vcnkgYWxsb2NhdGlvbiwgd2hlcmVhcyBgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbWAgaGFzIHRvIGJlIGFsbCBhYm91dCBnZXR0aW5nIHRoYXQgZmlybXdhcmUgaW1hZ2Ugb250byB0aGUgZGV2aWNlLiBJJ20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBpbnZvbHZlIERNQSB0cmFuc2ZlcnMsIGFuZCBsaWtlbHkgc29tZSBzb3J0IG9mIGhhbmRzaGFraW5nIG9yIHNpZ25hbGluZyB0byB0aGUgQnJvYWRjb20gY2hpcCBpdHNlbGYgdG8gaW5pdGlhdGUgdGhlIHRyYW5zZmVyIGFuZCBnZXQgaXQgcmVhZHkgZm9yIGV4ZWN1dGlvbi4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMg4oCTIGhvdyB0aGV5IGRlYWwgd2l0aCBmYWlsZWQgdHJhbnNmZXJzLCBpbnZhbGlkIGZpcm13YXJlLCBvciB1bmV4cGVjdGVkIGhhcmR3YXJlIHJlc3BvbnNlcy4gRGVidWdnaW5nIHRoYXQgbGF0ZXIgb24gd2lsbCBiZSB0aGUgbWFpbiBnb2FsIGhlcmUuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gRG9lcyBgYWRqdXN0X3JhbXNpemVgIGhhcHBlbiBmaXJzdD8gRG9lcyBpdCBwcm92aWRlIGFueSBjb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBmaXJtd2FyZSBkb3dubG9hZD8gQXJlIHRoZXJlIGFueSBzaGFyZWQgcmVzb3VyY2VzIG9yIGRhdGEgc3RydWN0dXJlcyB0aGVzZSBmdW5jdGlvbnMgcmVseSBvbj8gSXQgaXMgYWxzbyBsaWtlbHkgdGhhdCBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgTlZSQU0gaXMgYmVpbmcgcmVmZXJlbmNlZC4gSXQgc2VlbXMgaW1wb3J0YW50IHRvIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgdGhlIGRyaXZlciB1bHRpbWF0ZWx5IGZ1bmN0aW9ucyBhbmQgaXMgbGlrZWx5IGEgcG90ZW50aWFsIHZlY3RvciBvZiBhIGJ1Zy4gSSdsbCB3YW50IHRvIHRyYWNlIGFueSBwb3RlbnRpYWwgcGF0aHMgdG8gdGhlc2UgYXJlYXMuIEkgc3VzcGVjdCwgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIHRoZXJlIG1pZ2h0IGJlIHNvbWUgc3BlY2lmaWMgdGltaW5nIGNvbnNpZGVyYXRpb25zIG9yIHNlcXVlbmNpbmcgcmVxdWlyZW1lbnRzIGhlcmUsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgdGhhdCBhcyB3ZWxsLiBMZXQncyBzZWUgd2hhdCB0aGVzZSBmdW5jdGlvbnMgcmV2ZWFsIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTYxMywiT3V0cHV0VG9rZW5zIjo1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE2OjQyLjg0OTY4NDIyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTk1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU5NTpcXHRzdGF0aWMgdm9pZFxcbjE1OTY6XFx0YnJjbWZfcGNpZV9hZGp1c3RfcmFtc2l6ZShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1OCAqZGF0YSxcXG4xNTk3OlxcdFxcdFxcdFxcdCAgdTMyIGRhdGFfbGVuKVxcbjE1OTg6XFx0e1xcbjE1OTk6XFx0XFx0X19sZTMyICpmaWVsZDtcXG4xNjAwOlxcdFxcdHUzMiBuZXdzaXplO1xcbjE2MDE6XFx0XFxuMTYwMjpcXHRcXHRpZiAoZGF0YV9sZW4gXFx1MDAzYyBCUkNNRl9SQU1TSVpFX09GRlNFVCArIDgpXFxuMTYwMzpcXHRcXHRcXHRyZXR1cm47XFxuMTYwNDpcXHRcXG4xNjA1OlxcdFxcdGZpZWxkID0gKF9fbGUzMiAqKVxcdTAwMjZkYXRhW0JSQ01GX1JBTVNJWkVfT0ZGU0VUXTtcXG4xNjA2OlxcdFxcdGlmIChsZTMyX3RvX2NwdXAoZmllbGQpICE9IEJSQ01GX1JBTVNJWkVfTUFHSUMpXFxuMTYwNzpcXHRcXHRcXHRyZXR1cm47XFxuMTYwODpcXHRcXHRmaWVsZCsrO1xcbjE2MDk6XFx0XFx0bmV3c2l6ZSA9IGxlMzJfdG9fY3B1cChmaWVsZCk7XFxuMTYxMDpcXHRcXG4xNjExOlxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiRm91bmQgcmFtc2l6ZSBpbmZvIGluIEZXLCBhZGp1c3RpbmcgdG8gMHgleFxcXFxuXFxcIixcXG4xNjEyOlxcdFxcdFxcdCAgbmV3c2l6ZSk7XFxuMTYxMzpcXHRcXHRkZXZpbmZvLVxcdTAwM2VjaS1cXHUwMDNlcmFtc2l6ZSA9IG5ld3NpemU7XFxuMTYxNDpcXHR9XFxuMTYxNTpcXHRcXG4xNjE2OlxcdFxcbjE2MTc6XFx0c3RhdGljIGludFxcbjE2MTg6XFx0YnJjbWZfcGNpZV9pbml0X3NoYXJlX3JhbV9pbmZvKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sXFxuMTYxOTpcXHRcXHRcXHRcXHQgICAgICAgdTMyIHNoYXJlZHJhbV9hZGRyKVxcbjE2MjA6XFx0e1xcbjE2MjE6XFx0XFx0c3RydWN0IGJyY21mX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKFxcdTAwMjZkZXZpbmZvLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYpO1xcbjE2MjI6XFx0XFx0c3RydWN0IGJyY21mX3BjaWVfc2hhcmVkX2luZm8gKnNoYXJlZDtcXG4xNjIzOlxcdFxcdHUzMiBhZGRyO1xcbjE2MjQ6XFx0XFxuMTYyNTpcXHRcXHRzaGFyZWQgPSBcXHUwMDI2ZGV2aW5mby1cXHUwMDNlc2hhcmVkO1xcbjE2MjY6XFx0XFx0c2hhcmVkLVxcdTAwM2V0Y21fYmFzZV9hZGRyZXNzID0gc2hhcmVkcmFtX2FkZHI7XFxuMTYyNzpcXHRcXG4xNjI4OlxcdFxcdHNoYXJlZC1cXHUwMDNlZmxhZ3MgPSBicmNtZl9wY2llX3JlYWRfdGNtMzIoZGV2aW5mbywgc2hhcmVkcmFtX2FkZHIpO1xcbjE2Mjk6XFx0XFx0c2hhcmVkLVxcdTAwM2V2ZXJzaW9uID0gKHU4KShzaGFyZWQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJDTUZfUENJRV9TSEFSRURfVkVSU0lPTl9NQVNLKTtcXG4xNjMwOlxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiUENJZSBwcm90b2NvbCB2ZXJzaW9uICVkXFxcXG5cXFwiLCBzaGFyZWQtXFx1MDAzZXZlcnNpb24pO1xcbjE2MzE6XFx0XFx0aWYgKChzaGFyZWQtXFx1MDAzZXZlcnNpb24gXFx1MDAzZSBCUkNNRl9QQ0lFX01BWF9TSEFSRURfVkVSU0lPTikgfHxcXG4xNjMyOlxcdFxcdCAgICAoc2hhcmVkLVxcdTAwM2V2ZXJzaW9uIFxcdTAwM2MgQlJDTUZfUENJRV9NSU5fU0hBUkVEX1ZFUlNJT04pKSB7XFxuMTYzMzpcXHRcXHRcXHRicmNtZl9lcnIoYnVzLCBcXFwiVW5zdXBwb3J0ZWQgUENJRSB2ZXJzaW9uICVkXFxcXG5cXFwiLFxcbjE2MzQ6XFx0XFx0XFx0XFx0ICBzaGFyZWQtXFx1MDAzZXZlcnNpb24pO1xcbjE2MzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTYzNjpcXHRcXHR9XFxuMTYzNzpcXHRcXG4xNjM4OlxcdFxcdC8qIGNoZWNrIGZpcm13YXJlIHN1cHBvcnQgZG1hIGluZGljaWVzICovXFxuMTYzOTpcXHRcXHRpZiAoc2hhcmVkLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSQ01GX1BDSUVfU0hBUkVEX0RNQV9JTkRFWCkge1xcbjE2NDA6XFx0XFx0XFx0aWYgKHNoYXJlZC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUkNNRl9QQ0lFX1NIQVJFRF9ETUFfMkJfSURYKVxcbjE2NDE6XFx0XFx0XFx0XFx0ZGV2aW5mby1cXHUwMDNlZG1hX2lkeF9zeiA9IHNpemVvZih1MTYpO1xcbjE2NDI6XFx0XFx0XFx0ZWxzZVxcbjE2NDM6XFx0XFx0XFx0XFx0ZGV2aW5mby1cXHUwMDNlZG1hX2lkeF9zeiA9IHNpemVvZih1MzIpO1xcbjE2NDQ6XFx0XFx0fVxcbjE2NDU6XFx0XFxuMTY0NjpcXHRcXHRhZGRyID0gc2hhcmVkcmFtX2FkZHIgKyBCUkNNRl9TSEFSRURfTUFYX1JYQlVGUE9TVF9PRkZTRVQ7XFxuMTY0NzpcXHRcXHRzaGFyZWQtXFx1MDAzZW1heF9yeGJ1ZnBvc3QgPSBicmNtZl9wY2llX3JlYWRfdGNtMTYoZGV2aW5mbywgYWRkcik7XFxuMTY0ODpcXHRcXHRpZiAoc2hhcmVkLVxcdTAwM2VtYXhfcnhidWZwb3N0ID09IDApXFxuMTY0OTpcXHRcXHRcXHRzaGFyZWQtXFx1MDAzZW1heF9yeGJ1ZnBvc3QgPSBCUkNNRl9ERUZfTUFYX1JYQlVGUE9TVDtcXG4xNjUwOlxcdFxcbjE2NTE6XFx0XFx0YWRkciA9IHNoYXJlZHJhbV9hZGRyICsgQlJDTUZfU0hBUkVEX1JYX0RBVEFPRkZTRVRfT0ZGU0VUO1xcbjE2NTI6XFx0XFx0c2hhcmVkLVxcdTAwM2VyeF9kYXRhb2Zmc2V0ID0gYnJjbWZfcGNpZV9yZWFkX3RjbTMyKGRldmluZm8sIGFkZHIpO1xcbjE2NTM6XFx0XFxuMTY1NDpcXHRcXHRhZGRyID0gc2hhcmVkcmFtX2FkZHIgKyBCUkNNRl9TSEFSRURfSFRPRF9NQl9EQVRBX0FERFJfT0ZGU0VUO1xcbjE2NTU6XFx0XFx0c2hhcmVkLVxcdTAwM2VodG9kX21iX2RhdGFfYWRkciA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTtcXG4xNjU2OlxcdFxcbjE2NTc6XFx0XFx0YWRkciA9IHNoYXJlZHJhbV9hZGRyICsgQlJDTUZfU0hBUkVEX0RUT0hfTUJfREFUQV9BRERSX09GRlNFVDtcXG4xNjU4OlxcdFxcdHNoYXJlZC1cXHUwMDNlZHRvaF9tYl9kYXRhX2FkZHIgPSBicmNtZl9wY2llX3JlYWRfdGNtMzIoZGV2aW5mbywgYWRkcik7XFxuMTY1OTpcXHRcXG4xNjYwOlxcdFxcdGFkZHIgPSBzaGFyZWRyYW1fYWRkciArIEJSQ01GX1NIQVJFRF9SSU5HX0lORk9fQUREUl9PRkZTRVQ7XFxuMTY2MTpcXHRcXHRzaGFyZWQtXFx1MDAzZXJpbmdfaW5mb19hZGRyID0gYnJjbWZfcGNpZV9yZWFkX3RjbTMyKGRldmluZm8sIGFkZHIpO1xcbjE2NjI6XFx0XFxuMTY2MzpcXHRcXHRicmNtZl9kYmcoUENJRSwgXFxcIm1heCByeCBidWYgcG9zdCAlZCwgcnggZGF0YW9mZnNldCAlZFxcXFxuXFxcIixcXG4xNjY0OlxcdFxcdFxcdCAgc2hhcmVkLVxcdTAwM2VtYXhfcnhidWZwb3N0LCBzaGFyZWQtXFx1MDAzZXJ4X2RhdGFvZmZzZXQpO1xcbjE2NjU6XFx0XFxuMTY2NjpcXHRcXHRicmNtZl9wY2llX2J1c19jb25zb2xlX2luaXQoZGV2aW5mbyk7XFxuMTY2NzpcXHRcXHRicmNtZl9wY2llX2J1c19jb25zb2xlX3JlYWQoZGV2aW5mbywgZmFsc2UpO1xcbjE2Njg6XFx0XFxuMTY2OTpcXHRcXHRyZXR1cm4gMDtcXG4xNjcwOlxcdH1cXG4xNjcxOlxcdFxcbjE2NzI6XFx0c3RydWN0IGJyY21mX3JhbmRvbV9zZWVkX2Zvb3RlciB7XFxuMTY3MzpcXHRcXHRfX2xlMzIgbGVuZ3RoO1xcbjE2NzQ6XFx0XFx0X19sZTMyIG1hZ2ljO1xcbjE2NzU6XFx0fTtcXG4xNjc2OlxcdFxcbjE2Nzc6XFx0I2RlZmluZSBCUkNNRl9SQU5ET01fU0VFRF9NQUdJQ1xcdFxcdDB4ZmVlZGMwZGVcXG4xNjc4OlxcdCNkZWZpbmUgQlJDTUZfUkFORE9NX1NFRURfTEVOR1RIXFx0MHgxMDBcXG4xNjc5OlxcdFxcbjE2ODA6XFx0c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkXFxuMTY4MTpcXHRicmNtZl9wY2llX3Byb3ZpZGVfcmFuZG9tX2J5dGVzKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHUzMiBhZGRyZXNzKVxcbjE2ODI6XFx0e1xcbjE2ODM6XFx0XFx0dTggcmFuZGJ1ZltCUkNNRl9SQU5ET01fU0VFRF9MRU5HVEhdO1xcbjE2ODQ6XFx0XFxuMTY4NTpcXHRcXHRnZXRfcmFuZG9tX2J5dGVzKHJhbmRidWYsIEJSQ01GX1JBTkRPTV9TRUVEX0xFTkdUSCk7XFxuMTY4NjpcXHRcXHRtZW1jcHlfdG9pbyhkZXZpbmZvLVxcdTAwM2V0Y20gKyBhZGRyZXNzLCByYW5kYnVmLCBCUkNNRl9SQU5ET01fU0VFRF9MRU5HVEgpO1xcbjE2ODc6XFx0fVxcbjE2ODg6XFx0XFxuMTY4OTpcXHRzdGF0aWMgaW50IGJyY21mX3BjaWVfZG93bmxvYWRfZndfbnZyYW0oc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbyxcXG4xNjkwOlxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsIHZvaWQgKm52cmFtLFxcbjE2OTE6XFx0XFx0XFx0XFx0XFx0XFx0dTMyIG52cmFtX2xlbilcXG4xNjkyOlxcdHtcXG4xNjkzOlxcdFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2ZGV2aW5mby1cXHUwMDNlcGRldi1cXHUwMDNlZGV2KTtcXG4xNjk0OlxcdFxcdHUzMiBzaGFyZWRyYW1fYWRkcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6NDIuODQ5ODM4OTAyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxODg5MDQ2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBicmNtZl9wY2llIEZpcm13YXJlIERvd25sb2FkIGFuZCBTaGFyZWQgUkFNIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgYnJjbWZfcGNpZV9kb3dubG9hZF9md19udnJhbWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgd3JpdGVzIHRoZSBmaXJtd2FyZSB0byB0aGUgZGV2aWNlJ3MgVGFyZ2V0IENvZGUgTWVtb3J5IChUQ00pLiBJbnRlcmVzdGluZy4gVGhlbiwgaXQncyBncmFiYmluZyB0aGUgYHNoYXJlZHJhbV9hZGRyYCBmcm9tIHRoZSBkZXZpY2UgbWVtb3J5LiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIEZvbGxvd2luZyB0aGF0LCBgYnJjbWZfcGNpZV9pbml0X3NoYXJlX3JhbV9pbmZvYCBpcyBjYWxsZWQsIHdoaWNoIHRoZW4gcHJvY2VlZHMgdG8gcHVsbCBhIGJ1bmNoIG9mIG9mZnNldCB2YWx1ZXMgZnJvbSB0aGUgZGV2aWNlIG1lbW9yeS5cblxuTm93LCBoZXJlJ3Mgd2hlcmUgdGhpbmdzIGdldCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSWYgc3l6a2FsbGVyIGlzIG1vY2tpbmcgdGhlIGRldmljZSBtZW1vcnksIHBlcmhhcHMgdGhyb3VnaCBNTUlPIG1vY2tpbmcgaW4gYHN5el9wY2lfZGV2aWNlX2FkZGAsIHRoZW4gYGJyY21mX3BjaWVfcmVhZF90Y20zMmAgaXMgZ29pbmcgdG8gcmV0dXJuIGRhdGEgY29udHJvbGxlZCBieSB0aGUgZnV6emVyLiBIb2xkIG9uLCBgYnJjbWZfcGNpZV9yZWFkX3RjbTMyYCByZWFkcyBmcm9tIGBkZXZpbmZvLVx1MDAzZXRjbWAuIFJpZ2h0LCBzbyBgZGV2aW5mby1cdTAwM2V0Y21gIGlzIHRoZSBhZGRyZXNzIHRoYXQgYWN0dWFsbHkgZ2V0cyByZWFkIGZyb20uIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGBkZXZpbmZvLVx1MDAzZXRjbWAgaXMgbWFwcGVkIHRvLCBzbyBJIGNhbiBzZWUgd2hhdCBraW5kIG9mIGltcGFjdCBhIGZ1enplci1jb250cm9sbGVkIHZhbHVlIGNvdWxkIGhhdmUgaW4gdGhhdCBtZW1vcnkgbG9jYXRpb24uIFRpbWUgdG8gdHJhY2UgdGhhdCBwb2ludGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk3MywiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE2OjUwLjAzODc0NzMxNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxOTY2NjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldmluZm8tXFx1MDAzZXRjbSA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0xNzgzPXN0YXRpYyBpbnQgYnJjbWZfcGNpZV9nZXRfcmVzb3VyY2Uoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMTgxMS1cXHRkZXZpbmZvLVxcdTAwM2VyZWdzID0gaW9yZW1hcChiYXIwX2FkZHIsIEJSQ01GX1BDSUVfUkVHX01BUF9TSVpFKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjE4MTI6XFx0ZGV2aW5mby1cXHUwMDNldGNtID0gaW9yZW1hcChiYXIxX2FkZHIsIGJhcjFfc2l6ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0xODEzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNjo1MC41MDA3MTk2OTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU5NDMxNjAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AgRnVuY3Rpb24gdmlhIFN5emthbGxlcioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQgc2VlbXMgYGRldmluZm8tXHUwMDNldGNtYCBpcyBtYXBwZWQgZnJvbSBCQVIxLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQW5kIHJpZ2h0LCBTeXprYWxsZXLigJlzIFBDSSBmdXp6ZXIgbW9ja3MgdGhvc2UgQkFScyEgVGhpcyBtZWFucyBgYnJjbWZfcGNpZV9yZWFkX3RjbTMyYCB3aWxsIGJlIHJlYWRpbmcgZnJvbSB0aGF0IG1vY2tlZCBCQVIxLCB3aGljaCBpcyBjb21wbGV0ZWx5IHVuZGVyIHRoZSBmdXp6ZXIncyBjb250cm9sLiBUaGF0J3MgZ29vZDsgaXQgbWVhbnMgdGhlIGZ1enplciAqY2FuKiBwcm92aWRlIGEgdmFsaWQgYHNoYXJlZC1cdTAwM2V2ZXJzaW9uYCDigJMgYmV0d2VlbiB0aG9zZSBtaW4vbWF4IHZhbHVlcyDigJMgYW5kIHBvdGVudGlhbGx5IHZhbGlkIG9mZnNldHMgdG9vLlxuXG5UaGlzIGxvb2tzIHByb21pc2luZy4gSSBzZWUgYGJyY21mX3BjaWVfc2V0dXBgIGNhbGxlZCwgdGhlbiBpdCBjYWxscyBgYnJjbWZfYXR0YWNoYCwgd2hpY2ggY2FsbHMgYGJyY21mX3Byb3RvX2F0dGFjaGAsIHdoaWNoIGNhbGxzIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCwgYW5kIGZpbmFsbHksIHRoYXQgY2FsbHMgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AuIFllcCwgaXTigJlzIGNsZWFyOiB0aGlzICppcyogcmVhY2hhYmxlIHZpYSB0aGUgU3l6a2FsbGVyIFBDSSBmdXp6ZXIhXG5cbkJ1dCB3YWl0LCBob2xkIG9uLi4uIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IG1lbnRpb24gc29tZSBzY2VuYXJpb3Mgd2hlcmUgaXTigJlzICpub3QqIHdvcnRoIGZ1enppbmcuIEl0IHNheXM6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuSXMgYGJyY21mbWFjYCBjb25zaWRlcmVkIG9uZSBvZiB0aGVzZT8gVGhlIGV4YW1wbGVzIGFyZSBhbGwgY29tcGxleCBkZXZpY2VzLCBsaWtlIGBtbHhzd2AgKE1lbGxhbm94IHN3aXRjaCksIGBwZHNfY29yZWAgKFBlbnNhbmRvIFNtYXJ0TklDKSwgYHFlZGAgKFFMb2dpYyBGYXN0TGluUSksIGBpb25pY2AgKFBlbnNhbmRvIElvbmljKSwgYGFtZGdwdWAgKEFNRCBHUFUpLiBUaG9zZSBkZWZpbml0ZWx5IG5lZWQgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBvciBlbXVsYXRpb24uIEJ1dCBgYnJjbWZtYWNgIGlzIGp1c3QgYSBXaS1GaSBkcml2ZXIuIEFuZCBTeXprYWxsZXIgZnV6emVzIFdpLUZpIGRyaXZlcnMgZXh0ZW5zaXZlbHksIHNvIEkgd291bGRu4oCZdCBleHBlY3QgdGhlcmUgdG8gYmUgYSBwcm9ibGVtLlxuXG5IYW5nIG9uLi4uIGRvZXMgc3l6a2FsbGVyIGFjdHVhbGx5ICpmdXp6KiBgYnJjbWZtYWNgPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0LiBMZXQncyBzZWUgaWYgYEJSQ01GTUFDYCBpcyBldmVuIGVuYWJsZWQgaW4gU3l6a2FsbGVyIGNvbmZpZ3MsIG9yIGlmIHRoZXJlIGFyZSBhbnkgU3l6a2FsbGVyIHBzZXVkby1zeXNjYWxscyBkZWZpbmVkIGZvciBpdC4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGUgZHJpdmVyIGlzIHR5cGljYWxseSBjb21waWxlZCBpbiBTeXprYWxsZXLigJlzIGNvbmZpZ3VyYXRpb24uIExldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGBLY29uZmlnYCBmb3IgYGJyY21mbWFjYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3MTYsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTY6NTguMDk1MDM4NTI0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc5NDA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJDTUZNQUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxOmNvbmZpZyBCUkNNRk1BQ1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxMTpjb25maWcgQlJDTUZNQUNfUFJPVE9fQkNEQ1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEyLVxcdGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNDpjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTUtXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE3OmNvbmZpZyBCUkNNRk1BQ19TRElPXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTgtXFx0Ym9vbCBcXFwiU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6Mjk6Y29uZmlnIEJSQ01GTUFDX1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTMwLVxcdGJvb2wgXFxcIlVTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6NDA6Y29uZmlnIEJSQ01GTUFDX1BDSUVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy00MS1cXHRib29sIFxcXCJQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE2OjU4LjE2OTg0MDY0N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDMyMDkxMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqRGVwZW5kZW5jeSBDaGVjayBmb3IgQlJDTUZNQUNfUENJRSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgQlJDTUZNQUNfUENJRWAgbW9kdWxlLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJIG5lZWQgdG8gdGhvcm91Z2hseSB1bmRlcnN0YW5kIHdoYXQgaXQgcmVsaWVzIG9uIOKAkyBib3RoIGRpcmVjdGx5IGFuZCB0cmFuc2l0aXZlbHkuIFRoaXMgbGV2ZWwgb2YgZGV0YWlsIGlzIGNyaXRpY2FsIGZvciBhbnkgZnV0dXJlIG1vZGlmaWNhdGlvbnMsIGRlYnVnZ2luZywgb3IgZXZlbiBqdXN0IGFzc2Vzc2luZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBjaGFuZ2VzIGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8ga25vdyAqZXhhY3RseSogd2hhdCB0aGlzIG1vZHVsZSdzIGZ1bmN0aW9uYWxpdHkgaGluZ2VzIHVwb24uIExldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgY2xlYXIgbWFwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM3NiwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE3OjAxLjIwMTkzNDMyMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzOTpcXHRcXG4gIDQwOlxcdGNvbmZpZyBCUkNNRk1BQ19QQ0lFXFxuICA0MTpcXHRcXHRib29sIFxcXCJQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuICA0MjpcXHRcXHRkZXBlbmRzIG9uIEJSQ01GTUFDXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgNDQ6XFx0XFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX01TR0JVRlxcbiAgNDU6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgNDY6XFx0XFx0aGVscFxcbiAgNDc6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgQnJvYWRjb21cXG4gIDQ4OlxcdFxcdCAgSUVFRTgwMi4xMWFjIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIuIFNheSBZIGlmIHlvdSB3YW50IHRvXFxuICA0OTpcXHRcXHQgIHVzZSB0aGUgZHJpdmVyIGZvciBhbiBQQ0lFIHdpcmVsZXNzIGNhcmQuXFxuICA1MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MDEuMjAxOTk3NjcxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzI1NDM4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgZGVwZW5kZW5jaWVzLCBsYWlkIG91dCBsb2dpY2FsbHk6XG5cbioqRGVwZW5kZW5jeSBDaGFpbiBCcmVha2Rvd24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQlJDTUZNQUNfUENJRWAgaGVyZS4gSXQgc2VlbXMgcHJldHR5IG9idmlvdXMgdGhhdCBpdCdzIGJ1aWx0IG9uIHRvcCBvZiBgQlJDTUZNQUNgLCBhbmQgYWxzbyByZXF1aXJlcyB0aGUgYFBDSWAgbGF5ZXIgZm9yLCB3ZWxsLCBQQ0llIGZ1bmN0aW9uYWxpdHkuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGEgYml0IGZ1cnRoZXIuIGBCUkNNRk1BQ2AgaXRzZWxmLi4uIEknbSBzdHJvbmdseSBzdXNwZWN0aW5nIGl0IGhpbmdlcyBvbiBib3RoIGBDRkc4MDIxMWAgYW5kIGBNQUM4MDIxMWAuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBXaS1GaSBzdGFjayByZWxhdGlvbnNoaXAuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCUkNNRk1BQ2AgaXRzZWxmLiBKdXN0IHRvIHZlcmlmeS4gVGhpcyB3YXksIEkgY2FuIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIG1ha2Ugc3VyZSB0aGUgd2hvbGUgcGljdHVyZSBpcyBjcnlzdGFsIGNsZWFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc3MCwiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MDQuNTc0NTQ0NzY2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIEJSQ01GTUFDXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA0OlxcdFxcdHNlbGVjdCBCUkNNVVRJTFxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXFxuICAgNzpcXHRcXHQgIEZ1bGxNQUMgY2hpcHNldHMuIEl0IGhhcyB0byB3b3JrIHdpdGggYXQgbGVhc3Qgb25lIG9mIHRoZSBidXNcXG4gICA4OlxcdFxcdCAgaW50ZXJmYWNlIHN1cHBvcnQuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZFxcbiAgIDk6XFx0XFx0ICBicmNtZm1hYy5rby5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcXG4gIDEyOlxcdFxcdGJvb2xcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX01TR0JVRlxcbiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQlJDTUZNQUNfU0RJT1xcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiAoTU1DID0geSB8fCBNTUMgPSBCUkNNRk1BQylcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MDQuNTc0NjIxMDk2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5OTI3MDAyOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQlJDTUZNQUMgV2ktRmkgRHJpdmVyKipcblxuT2theSwgc28gSSBzZWUgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AsIHdoaWNoIEkga25vdyBpcyBwYXJ0IG9mIHRoZSBgQlJDTUZNQUNgIGRyaXZlciwgYW5kIGBCUkNNRk1BQ2AgZGVwZW5kcyBvbiBgQ0ZHODAyMTFgLiBUaGUgY2hhbmdlIGl0c2VsZiBzZWVtcyBmdW5jdGlvbmFsOyBpdCdzIGFkZGluZyBgcGt0aWRzLVx1MDAzZWRpcmVjdGlvbiA9IGRpcmVjdGlvbjtgLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmc/IENvbnNpZGVyaW5nIGl0J3MgYSBXaS1GaSBkcml2ZXIgYW5kIHRoZSBjaGFuZ2UgaXMgZnVuY3Rpb25hbCwgSSB0aGluayBpdCdzIGRlZmluaXRlbHkgd29ydGggYSBzaG90LCBlc3BlY2lhbGx5IHNpbmNlIFdpLUZpIGRyaXZlcnMgYXJlIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSBmdXp6ZXIuXG5cbldhaXQsIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2suLi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgYnJjbWZtYWNgIGlzbid0IG9uZSBvZiB0aG9zZSBkcml2ZXJzIHRoYXQgc3BlY2lmaWNhbGx5IG5lZWRzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUuIFRoZSBwcm9tcHQgbGlzdHMgZXhjZXB0aW9ucyBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLiBXaS1GaSBpc24ndCBvbiB0aGF0IGxpc3Q7IGRyaXZlcnMgbGlrZSBgaXdsd2lmaWAsIGBhdGgxMGtgLCBgcnR3ODhgLCBgbXQ3NmAgYWxsIGdldCBmdXp6ZWQgdmlhIFBDSS4gU28sIHdlJ3JlIGdvb2QgdG8gZ28uXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCB3aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYXJlIHRoYXQgd2UnbGwgZm9jdXMgb24uIGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXRzIHZpc2liaWxpdHkgaXMgbGltaXRlZC4gQnV0IGl0IGlzIGNhbGxlZCBieSBgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaGAsIGFuZCB0aGF0IGlzbid0IHN0YXRpYy4gQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGFuZCBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzMzcsIk91dHB1dFRva2VucyI6NTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNzoxMC41NjczMjQwOTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTY5NTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9wcm90b19tc2didWZfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTUyMz1zdGF0aWMgdm9pZCBicmNtZl9tc2didWZfZGVidWdmc19jcmVhdGUoc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNTI3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxNTI4OmludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE1Mjkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNzoxMS4wMTcwMjQ2NjFaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNjg4OTIxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGZ1bmN0aW9uOyB0aGF0IHNlZW1zIGxpa2UgYSBrZXkgYXJlYSBmb3IgdGhpcyBwYXRjaC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgYWZmZWN0ZWQuIEJ1dCBiZWZvcmUgSSBnbyB0b28gZGVlcCwgbGV0IG1lIHRha2UgYSBxdWljayBsb29rIGFyb3VuZDsgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhhdCBJIHNob3VsZCBjb25zaWRlcj8gTGV0IG1lIHNlZS4uLiBBaGEsIHRoZSBwYXRjaCBpcyBhbHNvIG1vZGlmeWluZyBgYnJjbWZfbXNnYnVmX2luaXRfcGt0aWRzYC4gSW50ZXJlc3RpbmcuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCBkb2VzIGFueXRoaW5nICplbHNlKiBjYWxsIGBicmNtZl9tc2didWZfaW5pdF9wa3RpZHNgPyBLbm93aW5nIHRoZSBjYWxsaW5nIGNvbnRleHRzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBmYXIgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSByaXBwbGVzIHRocm91Z2hvdXQgdGhlIGRyaXZlci4gR290dGEgZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjQ2LCJPdXRwdXRUb2tlbnMiOjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MTQuNDMzOTE2MzgzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjMzMjU2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9tc2didWZfaW5pdF9wa3RpZHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0yOTU9c3RhdGljIHN0cnVjdCBicmNtZl9tc2didWZfcGt0aWRzICpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6Mjk2OmJyY21mX21zZ2J1Zl9pbml0X3BrdGlkcyh1MzIgbnJfYXJyYXlfZW50cmllcyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMjk3LVxcdFxcdFxcdCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTUyOD1pbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2MDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE2MDM6XFx0bXNnYnVmLVxcdTAwM2V0eF9wa3RpZHMgPSBicmNtZl9tc2didWZfaW5pdF9wa3RpZHMoTlJfVFhfUEtUSURTLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNjA0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgRE1BX1RPX0RFVklDRSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTYwNi1cXHRcXHRnb3RvIGZhaWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE2MDc6XFx0bXNnYnVmLVxcdTAwM2VyeF9wa3RpZHMgPSBicmNtZl9tc2didWZfaW5pdF9wa3RpZHMoTlJfUlhfUEtUSURTLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNjA4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgRE1BX0ZST01fREVWSUNFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MTQuNDk2MjUzOTE3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzMwOTI5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGhvbWluZyBpbiBvbiB0aGlzIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhhdCdzIHdoZXJlIHRoaXMgd2hvbGUgdGhpbmcga2lja3Mgb2ZmLCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhpcyBjb2RlIG1vZGlmaWNhdGlvbi4gV2hpbGUgYGJyY21mX3BjaWVfcHJvYmVgICpjb3VsZCogYmUgYSByZWxhdGVkIHN5bWJvbCwgaXQncyBwcmV0dHkgZ2VuZXJpYyBhcyBhIHByb2JlIGZ1bmN0aW9uLCByaWdodD8gYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGZlZWxzIG11Y2ggbW9yZSB0YXJnZXRlZCB0byB0aGUgc3BlY2lmaWMgY2hhbmdlcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHdoYXQncyBuZWVkZWQgZm9yIHRoaXMgdG8gZnVuY3Rpb24uIEknbGwgbmVlZCBgQlJDTUZNQUNgLCBvYnZpb3VzbHksIGFuZCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSBzdXNwZWN0IGBCUkNNRk1BQ19QQ0lFYCBhcyB3ZWxsLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZXJlJ3MgdGhlIHN0YW5kYXJkIGBDRkc4MDIxMWAgYW5kIGBQQ0lgLiBJJ20ganVzdCBxdWlja2x5IHRyeWluZyB0byBpZGVudGlmeSB0aGUgY29yZSBjb21wb25lbnRzLlxuXG5CdXQsIGFyZSB0aGVyZSBhbnkgKm90aGVyKiByZWxldmFudCBjb25maWdzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBMZXQgbWUgcHVsbCB1cCB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9LY29uZmlnYCBmaWxlIGFuZCBjaGVjay4gSSBqdXN0IHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiB0aGUgY29udGV4dCBvZiB0aGlzIHNwZWNpZmljIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMjYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MTguODI5MzUwMDMxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEJSQ01VVElMXFxuICAgMzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgQlJDTVNNQUNcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBJRUVFODAyLjExbiBQQ0llIFNvZnRNQUMgV0xBTiBkcml2ZXJcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIEJDTUFfUE9TU0lCTEVcXG4gICA5OlxcdFxcdHNlbGVjdCBCQ01BXFxuICAxMDpcXHRcXHRzZWxlY3QgQlJDTVVUSUxcXG4gIDExOlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDEyOlxcdFxcdHNlbGVjdCBDT1JESUNcXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBQQ0llIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXFxuICAxNTpcXHRcXHQgIElFRUU4MDIuMTFuIFNvZnRNQUMgY2hpcHNldHMuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIHRoZVxcbiAgMTY6XFx0XFx0ICBkcml2ZXIgd2lsbCBiZSBjYWxsZWQgYnJjbXNtYWMua28uXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBCUkNNU01BQ19MRURTXFxuICAxOTpcXHRcXHRkZWZfYm9vbCBCUkNNU01BQyBcXHUwMDI2XFx1MDAyNiBCQ01BX0RSSVZFUl9HUElPIFxcdTAwMjZcXHUwMDI2IE1BQzgwMjExX0xFRFNcXG4gIDIwOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MTguODI5NDY2OTkxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjQ3OTMwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgQnJvYWRjb20gV2lyZWxlc3MgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGBCUkNNRk1BQ2Agc3ltYm9sIGlzIGRlZmluZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBicm9hZGNvbSB3aXJlbGVzcyBkcml2ZXIgZGlyZWN0b3J5LiBBaCwgeWVzLCBoZXJlIGl0IGlzIC0gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnYC4gR29vZC4gTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyB0YWtlIGEgbG9vayBhdCB0aGUgcGFyZW50IGBLY29uZmlnYCBmaWxlIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9LY29uZmlnYC4gSXQncyBhbHdheXMgYSBnb29kIGlkZWEgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgQnJvYWRjb20gd2lyZWxlc3MgZHJpdmVyLiBUaGF0IG1pZ2h0IGdpdmUgbWUgc29tZSBjb250ZXh0IEkgY2FuIHVzZSBsYXRlciBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3NzQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDE0OjE3OjIyLjE1NDI2Mzg2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBXTEFOX1ZFTkRPUl9CUk9BRENPTVxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiQnJvYWRjb20gZGV2aWNlc1xcXCJcXG4gICA0OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIHdpcmVsZXNzIGNhcmQgYmVsb25naW5nIHRvIHRoaXMgY2xhc3MsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRcXHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24ndCBkaXJlY3RseSBhZmZlY3QgdGhlXFxuICAgOTpcXHRcXHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAxMDpcXHRcXHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDExOlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRpZiBXTEFOX1ZFTkRPUl9CUk9BRENPTVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0My9LY29uZmlnXFxcIlxcbiAgMTY6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvS2NvbmZpZ1xcXCJcXG4gIDE3OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL0tjb25maWdcXFwiXFxuICAxODpcXHRcXG4gIDE5OlxcdGVuZGlmICMgV0xBTl9WRU5ET1JfQlJPQURDT01cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MjIuMTU0MzU1MzRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NjYyODY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgV0xBTiBzZXR1cCwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIEknbSBnb2luZyB0byBuZWVkIGBXTEFOX1ZFTkRPUl9CUk9BRENPTWAuIEkgbWVhbiwgdGhhdCdzIGEgZ2l2ZW4uIEFuZCBvZiBjb3Vyc2UsIHRoZSBnZW5lcmFsIGBXTEFOYCBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBhcyB3ZWxsLiBTbywgbGV0J3MganVzdCBtYWtlIGEgcXVpY2sgbGlzdCB0byBoYXZlIGl0IGFsbCBpbiBvbmUgcGxhY2U6IGBXTEFOYCwgYFdMQU5fVkVORE9SX0JST0FEQ09NYCwgYENGRzgwMjExYCwgYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1BDSUVgLCBhbmQgYFBDSWAuIE1ha2VzIHNlbnNlIHNvIGZhci4gTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB0byBhdm9pZCBhbnkgZG93bnN0cmVhbSBpc3N1ZXMsIEknbGwgcXVpY2tseSBjaGVjayBpZiBgQlJDTUZNQUNfUENJRWAgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGxpbmVkIHVwIHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODMxOSwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTQ6MTc6MjUuODEwOTg3MTgxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM5OlxcdFxcbiAgNDA6XFx0Y29uZmlnIEJSQ01GTUFDX1BDSUVcXG4gIDQxOlxcdFxcdGJvb2wgXFxcIlBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG4gIDQyOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG4gIDQzOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA0NDpcXHRcXHRzZWxlY3QgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXFxuICA0NTpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBCcm9hZGNvbVxcbiAgNDg6XFx0XFx0ICBJRUVFODAyLjExYWMgZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cXG4gIDQ5OlxcdFxcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGFuIFBDSUUgd2lyZWxlc3MgY2FyZC5cXG4gIDUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNzoyNS44MTEwNjc3MTFaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY5ODE3MTkzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQnJvYWRjb20gRmlybXdhcmUgTWVzc2FnZSBCdWZmZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgd2UncmUgZGVhbGluZyB3aXRoIGEgZGVwZW5kZW5jeSBjaGFpbiB0aGF0IHVsdGltYXRlbHkgaW52b2x2ZXMgdGhlIGBCUkNNRk1BQ2AgYW5kIGBQQ0lgIHN1YnN5c3RlbXMuIFNwZWNpZmljYWxseSwgYEJSQ01GTUFDYCBkZXBlbmRzIG9uIGBDRkc4MDIxMWAsIGFuZCBzbyBvbi4gVGhlIGtleSBtb2R1bGVzIGhlcmUgYXJlIGBXTEFOYCwgYFdMQU5fVkVORE9SX0JST0FEQ09NYCwgYENGRzgwMjExYCwgYEJSQ01GTUFDYCwgYEJSQ01GTUFDX1BDSUVgLCBhbmQgYFBDSWAuIFRoaXMgZ2l2ZXMgdXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuTXkgbWFpbiBmb2N1cyBpcyB0byB2ZXJpZnkgaWYgYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AgaXMgcmVhY2hhYmxlLiBBZnRlciByZXZpZXdpbmcgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgaXQgaXMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYCwgd2hpY2ggZ2V0cyBjYWxsZWQgd2hlbiBgZHJ2ci1cdTAwM2VidXNfaWYtXHUwMDNlcHJvdG9fdHlwZWAgaXMgYEJSQ01GX1BST1RPX01TR0JVRmAuIFRoaXMsIGluIHR1cm4sIGlzIHNldCBpbiBgYnJjbWZfcGNpZV9wcm9iZWAsIGltcGx5aW5nIHRoYXQgd2UgY2FuIHRyaWdnZXIgdGhpcyBwYXRoIHRocm91Z2ggUENJIGludGVyYWN0aW9ucy4gUGVyZmVjdC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IHRoZSBwYXRjaC4gSSBzZWUgYSBjb2RlIGNoYW5nZSB0aGF0IGFkZHMgYHBrdGlkcy1cdTAwM2VkaXJlY3Rpb24gPSBkaXJlY3Rpb247YCB0byB0aGUgZnVuY3Rpb24gYGJyY21mX21zZ2J1Zl9pbml0X3BrdGlkc2AuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqLiBJdCdzIGEgZmllbGQgYmVpbmcgYWRkZWQgdG8gYSBzdHJ1Y3R1cmUuIFRoaXMgbWVhbnMgaXQgaGFzIGEgcG90ZW50aWFsIGltcGFjdCBvbiBob3cgZGF0YSBpcyBoYW5kbGVkIG9yIGludGVycHJldGVkLiBUaHVzLCB3ZSBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIHRoaXMgaW4gb3VyIGZ1enppbmcgc3RyYXRlZ3kuIFdlIG5lZWQgdG8gZXhwbG9yZSBhbnkgYXJlYXMgdGhhdCB1c2UgYHBrdGlkc2AgdG8gZW5zdXJlIHRoZSBuZXcgZmllbGQgaXMgcHJvcGVybHkgaGFuZGxlZC4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRoaXMuXG5cblNvLCBsZXQncyBmb3JtYWxpemUgdGhlIGZ1enppbmcgc3RyYXRlZ3kgYmFzZWQgb24gdGhlIGFib3ZlIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODgyMiwiT3V0cHV0VG9rZW5zIjoxNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxNDoxNzozMi41MDkyNDQzMDVaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMwODU2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5cIixcbiAgICBcIldMQU5fVkVORE9SX0JST0FEQ09NXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1BDSUVcIixcbiAgICBcIlBDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJ5IHNldHRpbmcgdGhlICdkaXJlY3Rpb24nIGZpZWxkIGluIHRoZSAnYnJjbWZfbXNnYnVmX3BrdGlkcycgc3RydWN0IGR1cmluZyBpbml0aWFsaXphdGlvbi4gVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEJyb2FkY29tIEZ1bGxNQUMgV0xBTiBkcml2ZXIgKGJyY21mbWFjKSBhbmQgaXMgc3BlY2lmaWNhbGx5IHJlYWNoYWJsZSB2aWEgdGhlIFBDSWUgYnVzIGludGVyZmFjZSAoQlJDTUZfUFJPVE9fTVNHQlVGKS4gU3l6a2FsbGVyIGNhbiBmdXp6IHRoaXMgdmlhIGl0cyBQQ0kgZGV2aWNlIGluamVjdGlvbi9tb2NraW5nIGNhcGFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOXCIsXG4gICAgXCJXTEFOX1ZFTkRPUl9CUk9BRENPTVwiLFxuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19QQ0lFXCIsXG4gICAgXCJQQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9wcm90b19tc2didWZfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBieSBzZXR0aW5nIHRoZSAnZGlyZWN0aW9uJyBmaWVsZCBpbiB0aGUgJ2JyY21mX21zZ2J1Zl9wa3RpZHMnIHN0cnVjdCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFRoaXMgY29kZSBpcyBwYXJ0IG9mIHRoZSBCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyIChicmNtZm1hYykgYW5kIGlzIHNwZWNpZmljYWxseSByZWFjaGFibGUgdmlhIHRoZSBQQ0llIGJ1cyBpbnRlcmZhY2UgKEJSQ01GX1BST1RPX01TR0JVRikuIFN5emthbGxlciBjYW4gZnV6eiB0aGlzIHZpYSBpdHMgUENJIGRldmljZSBpbmplY3Rpb24vbW9ja2luZyBjYXBhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbgd5[1] Phase: Succeeded StartedAt: 2026-07-25 14:17:54 +0000 UTC FinishedAt: 2026-07-25 14:17:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 14:17:54 +0000 UTC FinishedAt: 2026-07-25 14:17:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2] Phase: Succeeded StartedAt: 2026-07-25 14:17:54 +0000 UTC FinishedAt: 2026-07-25 16:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-25 14:17:54 +0000 UTC FinishedAt: 2026-07-25 16:24:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 14:17:54 +0000 UTC FinishedAt: 2026-07-25 14:18:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-25 14:17:54 +0000 UTC FinishedAt: 2026-07-25 14:18:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwbgd5/series-workflowwbgd5-convert-artifact-3647379583/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 14:18:14 +0000 UTC FinishedAt: 2026-07-25 14:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-25 14:18:14 +0000 UTC FinishedAt: 2026-07-25 14:54:31 +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:*33e08eed-4322-4074-b99c-a17fa8b1524f,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-workflowwbgd5/series-workflowwbgd5-convert-artifact-3647379583/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": "5c3ecd48-ce4e-4bca-b674-53f9b51d2a10", "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-workflowwbgd5/series-workflowwbgd5-build-action-1323135749/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-25 14:18:14 +0000 UTC FinishedAt: 2026-07-25 14:53: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:*33e08eed-4322-4074-b99c-a17fa8b1524f,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-workflowwbgd5/series-workflowwbgd5-convert-artifact-3647379583/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": "5c3ecd48-ce4e-4bca-b674-53f9b51d2a10", "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-workflowwbgd5/series-workflowwbgd5-build-action-1323135749/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-25 14:54:31 +0000 UTC FinishedAt: 2026-07-25 14:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-25 14:54:31 +0000 UTC FinishedAt: 2026-07-25 14:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-25 14:54:31 +0000 UTC FinishedAt: 2026-07-25 14:56:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-25 14:54:31 +0000 UTC FinishedAt: 2026-07-25 14:55:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwbgd5/series-workflowwbgd5-convert-artifact-3723161486/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-25 14:56:03 +0000 UTC FinishedAt: 2026-07-25 14:58:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-25 14:56:03 +0000 UTC FinishedAt: 2026-07-25 14:58:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5c3ecd48-ce4e-4bca-b674-53f9b51d2a10,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-workflowwbgd5/series-workflowwbgd5-build-action-1323135749/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-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-25 14:58:15 +0000 UTC FinishedAt: 2026-07-25 14:58:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-25 14:58:15 +0000 UTC FinishedAt: 2026-07-25 14:58:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-25 14:58:15 +0000 UTC FinishedAt: 2026-07-25 15:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-25 14:58:15 +0000 UTC FinishedAt: 2026-07-25 15:30:48 +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:*33e08eed-4322-4074-b99c-a17fa8b1524f,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-workflowwbgd5/series-workflowwbgd5-convert-artifact-3723161486/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": "676ade9f-51f0-438b-afb6-795035543ef0", "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-workflowwbgd5/series-workflowwbgd5-build-action-2226537762/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-25 14:58:15 +0000 UTC FinishedAt: 2026-07-25 15:29:20 +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:*33e08eed-4322-4074-b99c-a17fa8b1524f,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-workflowwbgd5/series-workflowwbgd5-convert-artifact-3723161486/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": "676ade9f-51f0-438b-afb6-795035543ef0", "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-workflowwbgd5/series-workflowwbgd5-build-action-2226537762/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 15:30:48 +0000 UTC FinishedAt: 2026-07-25 15:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-25 15:30:48 +0000 UTC FinishedAt: 2026-07-25 15:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 15:30:48 +0000 UTC FinishedAt: 2026-07-25 15:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-25 15:30:48 +0000 UTC FinishedAt: 2026-07-25 15:32:39 +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:*676ade9f-51f0-438b-afb6-795035543ef0,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-workflowwbgd5/series-workflowwbgd5-build-action-2226537762/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-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 15:32:49 +0000 UTC FinishedAt: 2026-07-25 16:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-25 15:32:49 +0000 UTC FinishedAt: 2026-07-25 16:24:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"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:*5c3ecd48-ce4e-4bca-b674-53f9b51d2a10,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*676ade9f-51f0-438b-afb6-795035543ef0,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-workflowwbgd5/series-workflowwbgd5-build-action-1323135749/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-workflowwbgd5/series-workflowwbgd5-build-action-2226537762/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-25 15:32:49 +0000 UTC FinishedAt: 2026-07-25 15:32:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-25 15:32:49 +0000 UTC FinishedAt: 2026-07-25 15:32:56 +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":["brcmf_proto_msgbuf_attach"],"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-workflowwbgd5/series-workflowwbgd5-convert-artifact-332015795/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-25 15:32:49 +0000 UTC FinishedAt: 2026-07-25 15:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 15:32:49 +0000 UTC FinishedAt: 2026-07-25 15:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-25 15:32:49 +0000 UTC FinishedAt: 2026-07-25 15:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-25 15:32:59 +0000 UTC FinishedAt: 2026-07-25 16:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwbgd5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brcmf_proto_msgbuf_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"90883c513ca01e77c56b8d94be7de11420c1dacf","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_BROADCOM","CFG80211","BRCMFMAC","BRCMFMAC_PCIE","PCI"],"series_id":"5390a184-9eb6-48b9-a7bf-be75f9cd47f5","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-25 15:32:59 +0000 UTC FinishedAt: 2026-07-25 16:24:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5c3ecd48-ce4e-4bca-b674-53f9b51d2a10,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*676ade9f-51f0-438b-afb6-795035543ef0,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-workflowwbgd5/series-workflowwbgd5-build-action-1323135749/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-workflowwbgd5/series-workflowwbgd5-build-action-2226537762/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-workflowwbgd5/series-workflowwbgd5-convert-artifact-332015795/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,}