Name: series-workflowdfvsz Phase: Succeeded StartedAt: 2026-07-26 16:48:28 +0000 UTC FinishedAt: 2026-07-26 19:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[0] Phase: Succeeded StartedAt: 2026-07-26 16:48:28 +0000 UTC FinishedAt: 2026-07-26 17:20:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 16:48:28 +0000 UTC FinishedAt: 2026-07-26 17:20:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NIU", "NET_VENDOR_SUN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NIU", "NET_VENDOR_SUN" ], "series_id": "e76369e3-12cc-41c6-a26d-26bdfc36ebfa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "niu_open", "niu_change_mtu", "niu_pci_init_one" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05JVSYjMzQ7LAogICAgJiMzNDtORVRfVkVORE9SX1NVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25pdV9vcGVuJiMzNDssCiAgICAmIzM0O25pdV9jaGFuZ2VfbXR1JiMzNDssCiAgICAmIzM0O25pdV9wY2lfaW5pdF9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGhhcmR3YXJlIHJlZ2lzdGVyIHdyaXRlIGluIHRoZSBTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgZHJpdmVyIChuaXUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIG9wZW4vY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY4NWI0OTVkZTY0NWJkOTZkMTVjNzJiMjVlYzJmM2NlNGZhMWIxZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNzoxODo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcbmluZGV4IDg4ZGYxNWU2ZGQ3NDY3Li4zNzA3OWE2ZDZlZTkyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jXG5AQCAtNDY1MCw2ICYjNDM7NDY1MCw3IEBAIHN0YXRpYyB2b2lkIG5pdV90eGNfc2V0X2ltYXNrKHN0cnVjdCBuaXUgKm5wLCB1NjQgaW1hc2spXG4gXHR2YWwgPSBucjY0KFRYQ19JTlRfTUFTSyk7XG4gXHR2YWwgXHUwMDI2PSB+VFhDX0lOVF9NQVNLX1ZBTChucC1cdTAwM2Vwb3J0KTtcbiBcdHZhbCB8PSAoaW1hc2sgXHUwMDNjXHUwMDNjIFRYQ19JTlRfTUFTS19WQUxfU0hJRlQobnAtXHUwMDNlcG9ydCkpO1xuJiM0MztcdG53NjQoVFhDX0lOVF9NQVNLLCB2YWwpO1xuIFx0bml1X3VubG9ja19wYXJlbnQobnAsIGZsYWdzKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05JVSYjMzQ7LAogICAgJiMzNDtORVRfVkVORE9SX1NVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25pdV9vcGVuJiMzNDssCiAgICAmIzM0O25pdV9jaGFuZ2VfbXR1JiMzNDssCiAgICAmIzM0O25pdV9wY2lfaW5pdF9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGhhcmR3YXJlIHJlZ2lzdGVyIHdyaXRlIGluIHRoZSBTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgZHJpdmVyIChuaXUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIG9wZW4vY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4NWI0OTVkZTY0NWJkOTZkMTVjNzJiMjVlYzJmM2NlNGZhMWIxZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAyNiAxNzoxODo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYwppbmRleCA4OGRmMTVlNmRkNzQ2Ny4uMzcwNzlhNmQ2ZWU5MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMKQEAgLTQ2NTAsNiAmIzQzOzQ2NTAsNyBAQCBzdGF0aWMgdm9pZCBuaXVfdHhjX3NldF9pbWFzayhzdHJ1Y3Qgbml1ICpucCwgdTY0IGltYXNrKQogCXZhbCA9IG5yNjQoVFhDX0lOVF9NQVNLKTsKIAl2YWwgJmFtcDs9IH5UWENfSU5UX01BU0tfVkFMKG5wLSZndDtwb3J0KTsKIAl2YWwgfD0gKGltYXNrICZsdDsmbHQ7IFRYQ19JTlRfTUFTS19WQUxfU0hJRlQobnAtJmd0O3BvcnQpKTsKJiM0MzsJbnc2NChUWENfSU5UX01BU0ssIHZhbCk7CiAJbml1X3VubG9ja19wYXJlbnQobnAsIGZsYWdzKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5JVSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB1cGRhdGluZyBgbml1X3R4Y19zZXRfaW1hc2tgLiBJIGNhbiBzZWUgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZTogdGhleSYjMzk7dmUgYWRkZWQgYSBgbnc2NChUWENfSU5UX01BU0ssIHZhbCk7YCBjYWxsIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSBuZXcgbWFzayB2YWx1ZS4gVGhpcyBpcyBhIGJpdCBvZiBhIGNsYXNzaWMsIHJpZ2h0PyBNb2RpZnlpbmcgYSB2YWx1ZSBhbmQgdGhlbiAqbm90KiB3cml0aW5nIGl0IGJhY2sgaXMgYSByb29raWUgbWlzdGFrZSwgc28gaG9wZWZ1bGx5LCB0aGlzIGZpeGVzIHNvbWUga2luZCBvZiBpbnRlcnJ1cHQgbWFza2luZyBpc3N1ZSBpbiB0aGUgU3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0IE1BQyBkcml2ZXIuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogY2FuIEkgdGVzdCB0aGlzIGVhc2lseT8gSSB3b25kZXIgaWYgdGhpcyBpcyBzb21ldGhpbmcgSSBjYW4gdmVyaWZ5IGluIFFFTVU/IEkmIzM5O20gcHJldHR5IHN1cmUgSSBoYXZlIGEgc2V0dXAgdGhhdCBjb3VsZCBoYW5kbGUgdGhhdC4gVGltZSB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWdgIHRvIHNlZSB3aGF0IGRlcGVuZGVuY2llcyBgTklVYCBoYXMuIFRoYXQmIzM5O2xsIHRlbGwgbWUgaWYgSSBjYW4gZXZlbiBjb25maWd1cmUgaXQgZm9yIHRoZSBlbXVsYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIGFyZSBpbiBwbGFjZSBzbyBJIGNhbiBldmVuIGhvcGUgdG8gYnVpbGQgYW5kIHJ1biB0aGlzIHdpdGggUUVNVS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTklVJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWc9ODc9Y29uZmlnIExETVZTV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnLTk5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWc6MTAwOmNvbmZpZyBOSVVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnLTEwMS1cdHRyaXN0YXRlIFwmIzM0O1N1biBOZXB0dW5lIDEwR2JpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFN1biBFdGhlcm5ldCBkcml2ZXJzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9gLiBUaGUgZmlsZSYjMzk7cyBwcm9iYWJseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgY29uZmlndXJhdGlvbiBsaXZlcywgZGVmaW5pbmcgdGhlIHNlbGVjdGFibGUgZmVhdHVyZXMgYW5kIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDEwMCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBJIHN1c3BlY3QgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbW9yZSBpbnRlcmVzdGluZyBvcHRpb25zIGFyZSBwcm9iYWJseSBncm91cGVkIG9yIGRlZmluZWQuIEhvcGVmdWxseSBpdCYjMzk7cyB3ZWxsLXN0cnVjdHVyZWQgYW5kIEkgY2FuIHF1aWNrbHkgZ3Jhc3AgdGhlIGtleSBzZXR0aW5ncyB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYW5kIGhvdyB0aGlzIG1pZ2h0IGltcGFjdCBhIHNwZWNpZmljIEV0aGVybmV0IGltcGxlbWVudGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBmaWd1cmUgb3V0IHdoZXJlIHRvIGdvIG5leHQsIGlmIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NTpcdFx0ICBmb3VuZCBpbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBvZiBhIHNlcnZpY2UgZG9tYWluLlxuICA5NjpcdFx0ICBMaW51eCBicmlkZ2Uvc3dpdGNoIHNvZnR3YXJlIGNhbiB1c2UgdGhlc2UgaW50ZXJmYWNlcyBmb3JcbiAgOTc6XHRcdCAgZ3Vlc3QgZG9tYWluIG5ldHdvcmsgaW50ZXJjb25uZWN0aXZpdHkgb3IgZ3Vlc3QgZG9tYWluXG4gIDk4Olx0XHQgIGNvbm5lY3Rpb24gdG8gYSBwaHlzaWNhbCBuZXR3b3JrIG9uIGEgc2VydmljZSBkb21haW4uXG4gIDk5Olx0XG4gMTAwOlx0Y29uZmlnIE5JVVxuIDEwMTpcdFx0dHJpc3RhdGUgXCYjMzQ7U3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAxMDI6XHRcdGRlcGVuZHMgb24gUENJXG4gMTAzOlx0XHRzZWxlY3QgQ1JDMzJcbiAxMDQ6XHRcdGhlbHBcbiAxMDU6XHRcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIHVwb24gU3VuJiMzOTtzXG4gMTA2Olx0XHQgIE5lcHR1bmUgY2hpcHNldC5cbiAxMDc6XHRcbiAxMDg6XHRlbmRpZiAjIE5FVF9WRU5ET1JfU1VOXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDgwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enphYmlsaXR5IG9mIHRoZSBOSVUgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBOSVVgIGRyaXZlciwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IGlzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgZHJpdmVyIGZvciB0aGUgU3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0LCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7cGh5c2ljYWwgaGFyZHdhcmUuJiMzNDsgVGhlIHF1ZXN0aW9uIGJlY29tZXM6IGNhbiBJIGV2ZW4gcmVhY2ggdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPwoKTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IFFFTVUgcHJvYmFibHkgKmRvZXNuJiMzOTt0KiBlbXVsYXRlIGEgYG5pdWAgbmV0d29yayBjYXJkIGRpcmVjdGx5LiBJIG1lYW4sIGl0IGhhcyBvdGhlciBlbXVsYXRlZCBuZXR3b3JrIGludGVyZmFjZXMgbGlrZSBgbmUya19wY2lgLCBgZTEwMDBgLCBhbmQgc28gb24sIGJ1dCB0aG9zZSBhcmUgZ2VuZXJhbGx5IG9sZGVyIG9yIG1vcmUgY29tbW9uLiAxMEdiaXQgY2FyZHMgYXJlIG9mdGVuIGEgYml0IHRyaWNraWVyIHRvIGVtdWxhdGUsICp1bmxlc3MqIGl0JiMzOTtzIHNvbWV0aGluZyByZWxhdGl2ZWx5IHN0YW5kYXJkIGxpa2UgdGhlIGl4Z2JlIG9yIGUxMDAwZS4gU28sIEkgbmVlZCB0byB2ZXJpZnkuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoIG9mIHRoZSBRRU1VIGRvY3MsIGJ1dCB0aGUgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhpcyBpcyBhIHBoeXNpY2FsIGNhcmQuCgpXYWl0LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0aGF0IGlmIGEgZHJpdmVyIHJlcXVpcmVzIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VIGl0IG1pZ2h0IG5vdCBiZSB3b3J0aCBmdXp6aW5nLCBidXQgdGhlbiB0aGVyZSYjMzk7cyB0aGUgUENJIGZ1enplciBpbiBTeXprYWxsZXIhIFRoZSBkcml2ZXIgaXMgbGlzdGVkIGFzIGEgUENJIGRldmljZSwgc28gaXQgbWlnaHQgYmUgZnV6emFibGUuIGBzeXpfcGNpX3ZwY2lgIG9yIHNpbWlsYXIgY291bGQgYmUgdXNlZC4KClNvIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGNhbGwgb3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgbmVlZCAqcGh5c2ljYWwqIFBDSWUgaGFyZHdhcmUgYXMgcG9zc2libHkgbm90IHdvcnRoIGZ1enppbmcuIE9rYXksIGlzIGBOSVVgIGEgU21hcnROSUMgb3IgR1BVPyBOb3BlLCBpdCYjMzk7cyBhIDEwR2JpdCBFdGhlcm5ldCBjYXJkLiBCdXQgdGhlIGluc3RydWN0aW9ucyBtZW50aW9uIHRoYXQgc3l6a2FsbGVyICpjYW4qIGZ1enogKmFueSogUENJIGRyaXZlciBieSBlbXVsYXRpbmcgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBNTUlPL1BJTyByZWdpb25zLCB3aGljaCBtZWFucyB0aGF0IHRoZSBjYXJkIGlzIG5vdCBuZWVkZWQgdG8gZnV6eiB0aGUgY29kZSEgVGhhdCYjMzk7cyBnb29kLgoKU28sIHRoZSBuZXh0IHRoaW5nIHRvIGRldGVybWluZSBpcyB3aGV0aGVyIGl0IGNhbiBiZSBmdXp6YWJsZSBieSBzeXprYWxsZXIuIFNpbmNlIEkgY2FuJiMzOTt0IGRpcmVjdGx5IGNoZWNrIHRoZSBTeXprYWxsZXIgZGVzY3JpcHRpb25zIHRvIHNlZSBpZiBgTklVYCBpcyBkaXJlY3RseSBsaXN0ZWQsIEkmIzM5O2xsIG9wZXJhdGUgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCBQQ0kgbmV0d29yayBkcml2ZXJzICphcmUqIGZ1enphYmxlLCBpZiB0aGV5IGFyZSBQQ0kgZGV2aWNlcy4KCk9rYXksIGhlcmUmIzM5O3MgdGhlIHJ1Yi4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBwYXRoIGlzICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb3IgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgKm5vdCogZW11bGF0ZWQgaW4gUUVNVS4gYE5JVWAgaXMgdmVuZG9yLXNwZWNpZmljIChTdW4gTmVwdHVuZSkuIEl0JiMzOTtzICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEl0ICpkb2VzKiByZXF1aXJlIGEgcGh5c2ljYWwgUENJZSBjYXJkLiBUaGF0IHNvdW5kcyBsaWtlIGEgbm8tZ28sIHJpZ2h0PwoKQnV0ICpTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBjYW4gc3RpbGwqIGZ1enogdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBNTUlPL1BJTyByZWdpb25zLiBJdCBjYW4gdGVjaG5pY2FsbHkgZnV6eiBhbnkgUENJIGRyaXZlci4gU28sIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQgaXMgc3RpbGwgd29ydGggZnV6emluZy4gTm93LCBsZXQmIzM5O3Mgc2VlIGlmIGEgZnVuY3Rpb24sIGBuaXVfdHhjX3NldF9pbWFza2AsIGlzIHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuaXVfdHhjX3NldF9pbWFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NDYyNT1zdGF0aWMgdm9pZCBuaXVfdHhjX2VuYWJsZV9wb3J0KHN0cnVjdCBuaXUgKm5wLCBpbnQgb24pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTQ2NDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NDY0NDpzdGF0aWMgdm9pZCBuaXVfdHhjX3NldF9pbWFzayhzdHJ1Y3Qgbml1ICpucCwgdTY0IGltYXNrKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTQ2NDUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz01OTM0PXN0YXRpYyBpbnQgbml1X2luaXRfaHcoc3RydWN0IG5pdSAqbnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTU5NDAtXHRuaXVfdHhjX3BvcnRfZG1hX2VuYWJsZShucCwgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NTk0MTpcdG5pdV90eGNfc2V0X2ltYXNrKG5wLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy01OTQyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4ODQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5JQyBJbml0aWFsaXphdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgTklDIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGlzIGNydWNpYWwgZnVuY3Rpb24sIGBuaXVfaW5pdF9od2AsIGlzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGdldHRpbmcgdGhpbmdzIGdvaW5nLiBJIHNlZSB0aGF0IGBuaXVfaW5pdF9od2AgZ2V0cyBjYWxsZWQgZnJvbSBgbml1X29wZW5gLCB3aGljaCBpcyB0aGUgbmV0d29yayBkZXZpY2UmIzM5O3Mgb3BlbiBmdW5jdGlvbi4gTXkgZmlyc3QgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIGBuaXVfb3BlbmAgaW4gYSBzY2VuYXJpbyB0aGF0IG1hdHRlcnMgdG8gbWU/CgpOb3csIGFzc3VtaW5nIHRoZSBQQ0kgZGV2aWNlIHByb2Jpbmcgc3VjY2VlZHMsIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyByZWdpc3RlcmVkLCB3aGljaCBpcyB0aGUgZGVzaXJlZCBvdXRjb21lLiBCdXQgaWYgSSB3YW50IHRvICp0cmlnZ2VyKiB0aGUgcHJvY2VzcywgY29tbWFuZHMgbGlrZSBgaXAgbGluayBzZXQgZGV2IGV0aFggdXBgIHdpbGwga2ljayBvZmYgYG5pdV9vcGVuYC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCB3aWxsIHRoZSBQQ0kgZnV6emVyIGJlIGFibGUgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIHRoZSBQQ0kgZGV2aWNlPyBUeXBpY2FsbHksIHRoZSBQQ0kgZnV6emVyIGNhbiBwYXNzIHRoZSBwcm9iZSBmdW5jdGlvbiBpZiBpdCBjYW4gcHJvdmlkZSB0aGUgY29ycmVjdCBNTUlPIHJlYWRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBuaXVfcGNpX3Byb2JlYCB0byBzZWUgd2hhdCBraW5kIG9mIE1NSU8gaW50ZXJhY3Rpb25zIGl0IGV4cGVjdHMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBlZmZlY3RpdmVseSB0YXJnZXQgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bml1X3BjaV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9ODM1Nj1zdGF0aWMgdm9pZCBuaXVfcGNpX3ZwZF92YWxpZGF0ZShzdHJ1Y3Qgbml1ICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtODQwMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo4NDAzOnN0YXRpYyBpbnQgbml1X3BjaV9wcm9iZV9zcHJvbShzdHJ1Y3Qgbml1ICpucClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy04NDA0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9OTMxND1zdGF0aWMgaW50IG5pdV9nZXRfaW52YXJpYW50cyhzdHJ1Y3Qgbml1ICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtOTM1OS1cdFx0XHRcdHJldHVybiBlcnI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6OTM2MDpcdFx0XHRlcnIgPSBuaXVfcGNpX3Byb2JlX3Nwcm9tKG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05MzYxLVx0XHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbml1YCBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gVGhlIGNvZGUgbWVudGlvbnMgYG5pdV9wY2lfcHJvYmVgLCB3aGljaCAqc3Ryb25nbHkqIHN1Z2dlc3RzIGl0JiMzOTtzIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24uIFRoYXQgbWFrZXMgc2Vuc2U7IHVzdWFsbHksIHlvdSYjMzk7ZCBleHBlY3QgYSBQQ0kgZHJpdmVyIHRvIGhhdmUgYSBwcm9iZSBmdW5jdGlvbiB0byBpZGVudGlmeSBhbmQgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLiBTbywgbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBsb2NhdGUgdGhhdCBgbml1X3BjaV9wcm9iZWAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gVW5kZXJzdGFuZGluZyB3aGF0IGhhcHBlbnMgZHVyaW5nIHRoZSBwcm9iZSB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaG93IHRoZSBoYXJkd2FyZSBpcyBpbml0aWFsbHkgc2V0IHVwIGFuZCBjb25maWd1cmVkLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGV2aWNlJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwucHJvYmUuKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTk5OTE9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5pdV9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05OTkzLVx0LmlkX3RhYmxlXHQ9IG5pdV9wY2lfdGJsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjk5OTQ6XHQucHJvYmVcdFx0PSBuaXVfcGNpX2luaXRfb25lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTk5OTUtXHQucmVtb3ZlXHRcdD0gbml1X3BjaV9yZW1vdmVfb25lLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz0xMDIyMj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBuaXVfb2ZfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy0xMDIyNi1cdH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6MTAyMjc6XHQucHJvYmVcdFx0PSBuaXVfb2ZfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtMTAyMjgtXHQucmVtb3ZlXHRcdD0gbml1X29mX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAzNQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDg0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciBuaXVfcGNpX2luaXRfb25lKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbml1X3BjaV9pbml0X29uZWAsIHdoaWNoLCBmcm9tIHdoYXQgSSBnYXRoZXIsIGlzIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBgbml1YCBkcml2ZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzZXNzIGlmIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGEgc3RhbmRhcmQgbmV0d29yayBkcml2ZXI/JiMzNDsuIFllcywgaXQgYXBwZWFycyB0byBiZS4KCk5vdywgdGhlIGluc3RydWN0aW9ucyBJIGhhdmUgbGF5IG91dCBzb21lIGNvbnN0cmFpbnRzLiBUaGV5IGhpZ2hsaWdodCBkcml2ZXJzIGZvciB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCAqcmVxdWlyZSogcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGJ5IHN0YW5kYXJkIFFFTVUuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb246IElzIGBuaXVgIGEgU21hcnROSUM/IE5vLCBpdCYjMzk7cyB0aGF0IG9sZCBTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgY2FyZC4gQnV0IHRoZSBrZXkgaXMgJiMzNDtyZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VJiMzNDsuIERvZXMgdGhpcyBibGFua2V0IGFwcGx5IHRvIGFueSBwaHlzaWNhbCBuZXR3b3JrIGNhcmQgdGhhdCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgcGVyZmVjdGx5PyBZZXMsIHRoYXQmIzM5O3MgdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIHJ1bGUuIElmIGl0IHJlcXVpcmVzICphY3R1YWwqIGhhcmR3YXJlLCBhbmQgUUVNVSYjMzk7cyBub3QgdXAgdG8gdGhlIHRhc2ssIHRoZW4gaXQgZmFsbHMgdW5kZXIgdGhhdCBuby1mdXp6aW5nIGNhdGVnb3J5LgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBzeXprYWxsZXIgaXMgYWxyZWFkeSB0ZXN0aW5nIHRoaXMgZHJpdmVyLCB3aGljaCB3b3VsZCBiZSBhbiBpbmRpY2F0b3Igb2YgaXQgYmVpbmcgcmVhY2hhYmxlLiBUaGUgY29tbWl0IG1lc3NhZ2Ugc2hvd3MgYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLiBBdCBmaXJzdCBnbGFuY2UsIG15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIHdhcywgJiMzNDtTeXprYWxsZXIgZm91bmQgYSBidWchJiMzNDsuIEJ1dCB3YWl0Li4uIGl0JiMzOTtzIGp1c3QgYSBkdW1teSBjb21taXQgZ2VuZXJhdGVkIGJ5IHN5emthbGxlciYjMzk7cyB0ZXN0IGluZnJhc3RydWN0dXJlLiBJdCBtZWFucyBzb21lb25lIHN1Ym1pdHRlZCB0aGlzIHBhdGNoIHRvIFN5emthbGxlciBmb3IgdGVzdGluZywgc28gaXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHN5emthbGxlciBjYW4gcmVhY2ggaXQuCgpUaGVyZWZvcmUsIEkgbmVlZCB0byBnbyBiYWNrIHRvIHRoZSBydWxlLiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGJhc2VkIG9uIHRoaXMgcnVsZToKCiYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLi4uCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpBbHJpZ2h0LCBpcyBgbml1YCBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcj8gTm90IGluIHRoZSBjb250ZXh0IG9mIHRoZSBydWxlJiMzOTtzIGV4YW1wbGVzLCBpdCYjMzk7cyBqdXN0IGFuIG9sZCBFdGhlcm5ldCBjYXJkLiBEb2VzIGl0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgUUVNVT8gWWVzLCBiZWNhdXNlIGl0JiMzOTtzIGEgcGh5c2ljYWwgRXRoZXJuZXQgY2FyZCwgYW5kIGl0IGxvb2tzIGxpa2UgUUVNVSBsaWtlbHkgd291bGRuJiMzOTt0IGVtdWxhdGUgdGhpcyBjYXJkLiBCdXQgdGhlIHF1ZXN0aW9uIGlzOiBjYW4gc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgcmVhY2ggaXQ/IFRoZSBzeXprYWxsZXIgUENJIGZ1enplciBjYW4gaW5kZWVkIHJlYWNoIFBDSSBwcm9iZSBmdW5jdGlvbnMsIGFuZCBpdCBtYXkgYmUgYWJsZSB0byByZWFjaCBvcGVuIGZ1bmN0aW9ucyBpZiB0aGUgcHJvYmUgc3VjY2VlZHMuCgpUaGUgcHJvYmxlbSB3aXRoIG1hbnkgbmV0d29yayBjYXJkcyBpcyB0aGF0IHRoZXkgaGF2ZSByZXF1aXJlbWVudHMgdGhhdCBhcmUgbW9yZSBjb21wbGV4LiBUaGV5IGhhdmUgRE1BIHJlcXVpcmVtZW50cywgdGhleSByZXF1aXJlIGZpcm13YXJlLCBvciB0aGV5IG1pZ2h0IGhhdmUgY29tcGxleCBNTUlPIGhhbmRzaGFrZXMgdGhhdCBjYW5ub3QgYmUgZWFzaWx5IGd1ZXNzZWQuCgpTbywgaW4gdGhlIGVuZCwgaXQgYm9pbHMgZG93biB0bzogaXMgYG5pdWAgYSBkcml2ZXIgdGhhdCAqcmVxdWlyZXMqIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IHByb3Blcmx5IGVtdWxhdGVkIGJ5IFFFTVU/IFllcywgdGhhdCBhcHBlYXJzIHRvIGJlIHRoZSBjYXNlLiBUaGVyZWZvcmUsIGZvbGxvd2luZyB0aGUgcnVsZSwgbXkgY29uY2x1c2lvbiBsZWFucyB0b3dhcmRzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRob3VnaCB0byBtYWtlIGEgZmluYWwgY2FsbCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5NjAwOlx0XG45NjAxOlx0XHRCVUdfT04oIXAgfHwgcC1cdTAwM2Vwb3J0c1twb3J0XSAhPSBucCk7XG45NjAyOlx0XG45NjAzOlx0XHRuZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC1cdTAwM2VkZXYsXG45NjA0Olx0XHRcdCAgICAgXCYjMzQ7JXMoKSBwb3J0WyV1XVxcblwmIzM0OywgX19mdW5jX18sIHBvcnQpO1xuOTYwNTpcdFxuOTYwNjpcdFx0c3ByaW50Zihwb3J0X25hbWUsIFwmIzM0O3BvcnQlZFwmIzM0OywgcG9ydCk7XG45NjA3Olx0XG45NjA4Olx0XHRtdXRleF9sb2NrKFx1MDAyNm5pdV9wYXJlbnRfbG9jayk7XG45NjA5Olx0XG45NjEwOlx0XHRzeXNmc19yZW1vdmVfbGluayhcdTAwMjZwLVx1MDAzZXBsYXRfZGV2LVx1MDAzZWRldi5rb2JqLCBwb3J0X25hbWUpO1xuOTYxMTpcdFxuOTYxMjpcdFx0cC1cdTAwM2Vwb3J0c1twb3J0XSA9IE5VTEw7XG45NjEzOlx0XHRucC1cdTAwM2VwYXJlbnQgPSBOVUxMO1xuOTYxNDpcdFxuOTYxNTpcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cC1cdTAwM2VyZWZjbnQpKSB7XG45NjE2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlbGlzdCk7XG45NjE3Olx0XHRcdHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHAtXHUwMDNlcGxhdF9kZXYpO1xuOTYxODpcdFx0fVxuOTYxOTpcdFxuOTYyMDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pdV9wYXJlbnRfbG9jayk7XG45NjIxOlx0fVxuOTYyMjpcdFxuOTYyMzpcdHN0YXRpYyB2b2lkICpuaXVfcGNpX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG45NjI0Olx0XHRcdFx0XHQgICAgdTY0ICpoYW5kbGUsIGdmcF90IGZsYWcpXG45NjI1Olx0e1xuOTYyNjpcdFx0ZG1hX2FkZHJfdCBkaDtcbjk2Mjc6XHRcdHZvaWQgKnJldDtcbjk2Mjg6XHRcbjk2Mjk6XHRcdHJldCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIFx1MDAyNmRoLCBmbGFnKTtcbjk2MzA6XHRcdGlmIChyZXQpXG45NjMxOlx0XHRcdCpoYW5kbGUgPSBkaDtcbjk2MzI6XHRcdHJldHVybiByZXQ7XG45NjMzOlx0fVxuOTYzNDpcdFxuOTYzNTpcdHN0YXRpYyB2b2lkIG5pdV9wY2lfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuOTYzNjpcdFx0XHRcdFx0ICB2b2lkICpjcHVfYWRkciwgdTY0IGhhbmRsZSlcbjk2Mzc6XHR7XG45NjM4Olx0XHRkbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIGNwdV9hZGRyLCBoYW5kbGUpO1xuOTYzOTpcdH1cbjk2NDA6XHRcbjk2NDE6XHRzdGF0aWMgdTY0IG5pdV9wY2lfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbjk2NDI6XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLFxuOTY0MzpcdFx0XHRcdCAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pXG45NjQ0Olx0e1xuOTY0NTpcdFx0cmV0dXJuIGRtYV9tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTtcbjk2NDY6XHR9XG45NjQ3Olx0XG45NjQ4Olx0c3RhdGljIHZvaWQgbml1X3BjaV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9hZGRyZXNzLFxuOTY0OTpcdFx0XHRcdCAgICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxuOTY1MDpcdHtcbjk2NTE6XHRcdGRtYV91bm1hcF9wYWdlKGRldiwgZG1hX2FkZHJlc3MsIHNpemUsIGRpcmVjdGlvbik7XG45NjUyOlx0fVxuOTY1MzpcdFxuOTY1NDpcdHN0YXRpYyB1NjQgbml1X3BjaV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG45NjU1Olx0XHRcdFx0ICAgICAgc2l6ZV90IHNpemUsXG45NjU2Olx0XHRcdFx0ICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxuOTY1NzpcdHtcbjk2NTg6XHRcdHJldHVybiBkbWFfbWFwX3NpbmdsZShkZXYsIGNwdV9hZGRyLCBzaXplLCBkaXJlY3Rpb24pO1xuOTY1OTpcdH1cbjk2NjA6XHRcbjk2NjE6XHRzdGF0aWMgdm9pZCBuaXVfcGNpX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfYWRkcmVzcyxcbjk2NjI6XHRcdFx0XHRcdCBzaXplX3Qgc2l6ZSxcbjk2NjM6XHRcdFx0XHRcdCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pXG45NjY0Olx0e1xuOTY2NTpcdFx0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyZXNzLCBzaXplLCBkaXJlY3Rpb24pO1xuOTY2NjpcdH1cbjk2Njc6XHRcbjk2Njg6XHRzdGF0aWMgaW50IG5pdV9wY2lfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBhZGRyKVxuOTY2OTpcdHtcbjk2NzA6XHRcdHJldHVybiBkbWFfbWFwcGluZ19lcnJvcihkZXYsIGFkZHIpO1xuOTY3MTpcdH1cbjk2NzI6XHRcbjk2NzM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5pdV9vcHMgbml1X3BjaV9vcHMgPSB7XG45Njc0Olx0XHQuYWxsb2NfY29oZXJlbnRcdD0gbml1X3BjaV9hbGxvY19jb2hlcmVudCxcbjk2NzU6XHRcdC5mcmVlX2NvaGVyZW50XHQ9IG5pdV9wY2lfZnJlZV9jb2hlcmVudCxcbjk2NzY6XHRcdC5tYXBfcGFnZVx0PSBuaXVfcGNpX21hcF9wYWdlLFxuOTY3NzpcdFx0LnVubWFwX3BhZ2VcdD0gbml1X3BjaV91bm1hcF9wYWdlLFxuOTY3ODpcdFx0Lm1hcF9zaW5nbGVcdD0gbml1X3BjaV9tYXBfc2luZ2xlLFxuOTY3OTpcdFx0LnVubWFwX3NpbmdsZVx0PSBuaXVfcGNpX3VubWFwX3NpbmdsZSxcbjk2ODA6XHRcdC5tYXBwaW5nX2Vycm9yXHQ9IG5pdV9wY2lfbWFwcGluZ19lcnJvcixcbjk2ODE6XHR9O1xuOTY4MjpcdFxuOTY4MzpcdHN0YXRpYyB2b2lkIG5pdV9kcml2ZXJfdmVyc2lvbih2b2lkKVxuOTY4NDpcdHtcbjk2ODU6XHRcdHN0YXRpYyBpbnQgbml1X3ZlcnNpb25fcHJpbnRlZDtcbjk2ODY6XHRcbjk2ODc6XHRcdGlmIChuaXVfdmVyc2lvbl9wcmludGVkJiM0MzsmIzQzOyA9PSAwKVxuOTY4ODpcdFx0XHRwcl9pbmZvKFwmIzM0OyVzXCYjMzQ7LCB2ZXJzaW9uKTtcbjk2ODk6XHR9XG45NjkwOlx0XG45NjkxOlx0c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuaXVfYWxsb2NfYW5kX2luaXQoc3RydWN0IGRldmljZSAqZ2VuX2Rldixcbjk2OTI6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldixcbjk2OTM6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCxcbjk2OTQ6XHRcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgbml1X29wcyAqb3BzLCB1OCBwb3J0KVxuOTY5NTpcdHtcbjk2OTY6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG45Njk3Olx0XHRzdHJ1Y3Qgbml1ICpucDtcbjk2OTg6XHRcbjk2OTk6XHRcdGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3Qgbml1KSwgTklVX05VTV9UWENIQU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjE0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG5pdV9wY2lfaW5pdF9vbmVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhpcyBQQ0kgZGV2aWNlIGluaXRpYWxpemF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIGBuaXVfcGNpX2luaXRfb25lYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNraXAgdGhlIGZsdWZmIGFuZCBzZWUgaG93IHRoaXMgZHJpdmVyIGhhbmRsZXMgdGhlIGRldmljZSBjb21pbmcgb25saW5lLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIHN0ZXBzOiByZXNvdXJjZSBhbGxvY2F0aW9uLCByZWdpc3RlciBhY2Nlc3MgaW5pdGlhbGl6YXRpb24sIGFueSBkZXZpY2Utc3BlY2lmaWMgc2V0dXDigKYgdGhhdCBzb3J0IG9mIHRoaW5nLiBJIGV4cGVjdCB0byBzZWUgdGhlIHN0YW5kYXJkIFBDSSBwcm9iZSBwcm9jZXNzIHdpdGggYWxsIHRoZSBzdGFuZGFyZCBQQ0kgY2FsbHMsIG5vdGhpbmcgdG9vIGZhbmN5ICh5ZXQpLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGUgdXN1YWwgc3RlcHM6IG1hcHBpbmcgdGhlIEJBUnMsIG1heWJlIHNvbWUgaW50ZXJydXB0IGhhbmRsaW5nIHNldHVwLCBwb3NzaWJseSBzb21lIERNQSBlbmdpbmUgY29uZmlndXJhdGlvbiBpZiB0aGlzIE5JQyBpcyBvZiB0aGF0IHR5cGUuIEkgYW0gY3VyaW91cyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB2ZW5kb3Itc3BlY2lmaWMgcGVjdWxpYXJpdGllcyB0aGlzIGRyaXZlciBuZWVkcyB0byBoYW5kbGUuIEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGVzZSBzdGFnZXMg4oCTIGEgcm9idXN0IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGlzIGEgc2lnbiBvZiBhIHdlbGwtd3JpdHRlbiBkcml2ZXIuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSwgbG9va2luZyBmb3IgdGhlIGNyaXRpY2FsIHBhdGgsIHRoZSBjb3JlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMsIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcgY29udGluZ2VuY2llcy4gSSYjMzk7bSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSB0aGluZ3MgY291bGQgZ28gd3JvbmcsIHNvIEkgY2FuIHNlZSB3aGF0IHRoZSBhdXRob3ImIzM5O3MgYW50aWNpcGF0ZWQgZmFpbHVyZSBtb2RlcyBhcmUgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3dlciBtYW5hZ2VtZW50LXJlbGF0ZWQgaW5pdGlhbGl6YXRpb24gaWYgYXBwbGljYWJsZSAtIGxvb2tpbmcgZm9yIGFueXRoaW5nIGRlYWxpbmcgd2l0aCBjbG9jayBnYXRpbmcgb3Igdm9sdGFnZSBzZXR0aW5ncy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIChvciBwb3RlbnRpYWwgaXNzdWVzKSBhd2FpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5NzAwOlx0XHRpZiAoIWRldilcbjk3MDE6XHRcdFx0cmV0dXJuIE5VTEw7XG45NzAyOlx0XG45NzAzOlx0XHRTRVRfTkVUREVWX0RFVihkZXYsIGdlbl9kZXYpO1xuOTcwNDpcdFxuOTcwNTpcdFx0bnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuOTcwNjpcdFx0bnAtXHUwMDNlZGV2ID0gZGV2O1xuOTcwNzpcdFx0bnAtXHUwMDNlcGRldiA9IHBkZXY7XG45NzA4Olx0XHRucC1cdTAwM2VvcCA9IG9wO1xuOTcwOTpcdFx0bnAtXHUwMDNlZGV2aWNlID0gZ2VuX2Rldjtcbjk3MTA6XHRcdG5wLVx1MDAzZW9wcyA9IG9wcztcbjk3MTE6XHRcbjk3MTI6XHRcdG5wLVx1MDAzZW1zZ19lbmFibGUgPSBuaXVfZGVidWc7XG45NzEzOlx0XG45NzE0Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZucC1cdTAwM2Vsb2NrKTtcbjk3MTU6XHRcdElOSVRfV09SSyhcdTAwMjZucC1cdTAwM2VyZXNldF90YXNrLCBuaXVfcmVzZXRfdGFzayk7XG45NzE2Olx0XG45NzE3Olx0XHRucC1cdTAwM2Vwb3J0ID0gcG9ydDtcbjk3MTg6XHRcbjk3MTk6XHRcdHJldHVybiBkZXY7XG45NzIwOlx0fVxuOTcyMTpcdFxuOTcyMjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbml1X25ldGRldl9vcHMgPSB7XG45NzIzOlx0XHQubmRvX29wZW5cdFx0PSBuaXVfb3Blbixcbjk3MjQ6XHRcdC5uZG9fc3RvcFx0XHQ9IG5pdV9jbG9zZSxcbjk3MjU6XHRcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IG5pdV9zdGFydF94bWl0LFxuOTcyNjpcdFx0Lm5kb19nZXRfc3RhdHM2NFx0PSBuaXVfZ2V0X3N0YXRzLFxuOTcyNzpcdFx0Lm5kb19zZXRfcnhfbW9kZVx0PSBuaXVfc2V0X3J4X21vZGUsXG45NzI4Olx0XHQubmRvX3ZhbGlkYXRlX2FkZHJcdD0gZXRoX3ZhbGlkYXRlX2FkZHIsXG45NzI5Olx0XHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBuaXVfc2V0X21hY19hZGRyLFxuOTczMDpcdFx0Lm5kb19ldGhfaW9jdGxcdFx0PSBuaXVfaW9jdGwsXG45NzMxOlx0XHQubmRvX3R4X3RpbWVvdXRcdFx0PSBuaXVfdHhfdGltZW91dCxcbjk3MzI6XHRcdC5uZG9fY2hhbmdlX210dVx0XHQ9IG5pdV9jaGFuZ2VfbXR1LFxuOTczMzpcdH07XG45NzM0Olx0XG45NzM1Olx0c3RhdGljIHZvaWQgbml1X2Fzc2lnbl9uZXRkZXZfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG45NzM2Olx0e1xuOTczNzpcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZuaXVfbmV0ZGV2X29wcztcbjk3Mzg6XHRcdGRldi1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNm5pdV9ldGh0b29sX29wcztcbjk3Mzk6XHRcdGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IE5JVV9UWF9USU1FT1VUO1xuOTc0MDpcdH1cbjk3NDE6XHRcbjk3NDI6XHRzdGF0aWMgdm9pZCBuaXVfZGV2aWNlX2Fubm91bmNlKHN0cnVjdCBuaXUgKm5wKVxuOTc0MzpcdHtcbjk3NDQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBucC1cdTAwM2VkZXY7XG45NzQ1Olx0XG45NzQ2Olx0XHRwcl9pbmZvKFwmIzM0OyVzOiBOSVUgRXRoZXJuZXQgJXBNXFxuXCYjMzQ7LCBkZXYtXHUwMDNlbmFtZSwgZGV2LVx1MDAzZWRldl9hZGRyKTtcbjk3NDc6XHRcbjk3NDg6XHRcdGlmIChucC1cdTAwM2VwYXJlbnQtXHUwMDNlcGxhdF90eXBlID09IFBMQVRfVFlQRV9BVENBX0NQMzIyMCkge1xuOTc0OTpcdFx0XHRwcl9pbmZvKFwmIzM0OyVzOiBQb3J0IHR5cGVbJXNdIG1vZGVbJXM6JXNdIFhDVlJbJXNdIHBoeVslc11cXG5cJiMzNDssXG45NzUwOlx0XHRcdFx0XHRkZXYtXHUwMDNlbmFtZSxcbjk3NTE6XHRcdFx0XHRcdChucC1cdTAwM2VmbGFncyBcdTAwMjYgTklVX0ZMQUdTX1hNQUMgPyBcJiMzNDtYTUFDXCYjMzQ7IDogXCYjMzQ7Qk1BQ1wmIzM0OyksXG45NzUyOlx0XHRcdFx0XHQobnAtXHUwMDNlZmxhZ3MgXHUwMDI2IE5JVV9GTEFHU18xMEcgPyBcJiMzNDsxMEdcJiMzNDsgOiBcJiMzNDsxR1wmIzM0OyksXG45NzUzOlx0XHRcdFx0XHQobnAtXHUwMDNlZmxhZ3MgXHUwMDI2IE5JVV9GTEFHU19GSUJFUiA/IFwmIzM0O1JHTUlJIEZJQkVSXCYjMzQ7IDogXCYjMzQ7U0VSREVTXCYjMzQ7KSxcbjk3NTQ6XHRcdFx0XHRcdChucC1cdTAwM2VtYWNfeGN2ciA9PSBNQUNfWENWUl9NSUkgPyBcJiMzNDtNSUlcJiMzNDsgOlxuOTc1NTpcdFx0XHRcdFx0IChucC1cdTAwM2VtYWNfeGN2ciA9PSBNQUNfWENWUl9QQ1MgPyBcJiMzNDtQQ1NcJiMzNDsgOiBcJiMzNDtYUENTXCYjMzQ7KSksXG45NzU2Olx0XHRcdFx0XHRucC1cdTAwM2V2cGQucGh5X3R5cGUpO1xuOTc1NzpcdFx0fSBlbHNlIHtcbjk3NTg6XHRcdFx0cHJfaW5mbyhcJiMzNDslczogUG9ydCB0eXBlWyVzXSBtb2RlWyVzOiVzXSBYQ1ZSWyVzXSBwaHlbJXNdXFxuXCYjMzQ7LFxuOTc1OTpcdFx0XHRcdFx0ZGV2LVx1MDAzZW5hbWUsXG45NzYwOlx0XHRcdFx0XHQobnAtXHUwMDNlZmxhZ3MgXHUwMDI2IE5JVV9GTEFHU19YTUFDID8gXCYjMzQ7WE1BQ1wmIzM0OyA6IFwmIzM0O0JNQUNcJiMzNDspLFxuOTc2MTpcdFx0XHRcdFx0KG5wLVx1MDAzZWZsYWdzIFx1MDAyNiBOSVVfRkxBR1NfMTBHID8gXCYjMzQ7MTBHXCYjMzQ7IDogXCYjMzQ7MUdcJiMzNDspLFxuOTc2MjpcdFx0XHRcdFx0KG5wLVx1MDAzZWZsYWdzIFx1MDAyNiBOSVVfRkxBR1NfRklCRVIgPyBcJiMzNDtGSUJFUlwmIzM0OyA6XG45NzYzOlx0XHRcdFx0XHQgKG5wLVx1MDAzZWZsYWdzIFx1MDAyNiBOSVVfRkxBR1NfWENWUl9TRVJERVMgPyBcJiMzNDtTRVJERVNcJiMzNDsgOlxuOTc2NDpcdFx0XHRcdFx0ICBcJiMzNDtDT1BQRVJcJiMzNDspKSxcbjk3NjU6XHRcdFx0XHRcdChucC1cdTAwM2VtYWNfeGN2ciA9PSBNQUNfWENWUl9NSUkgPyBcJiMzNDtNSUlcJiMzNDsgOlxuOTc2NjpcdFx0XHRcdFx0IChucC1cdTAwM2VtYWNfeGN2ciA9PSBNQUNfWENWUl9QQ1MgPyBcJiMzNDtQQ1NcJiMzNDsgOiBcJiMzNDtYUENTXCYjMzQ7KSksXG45NzY3Olx0XHRcdFx0XHRucC1cdTAwM2V2cGQucGh5X3R5cGUpO1xuOTc2ODpcdFx0fVxuOTc2OTpcdH1cbjk3NzA6XHRcbjk3NzE6XHRzdGF0aWMgdm9pZCBuaXVfc2V0X2Jhc2ljX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG45NzcyOlx0e1xuOTc3MzpcdFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhIQVNIO1xuOTc3NDpcdFx0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IGRldi1cdTAwM2Vod19mZWF0dXJlcyB8IE5FVElGX0ZfUlhDU1VNO1xuOTc3NTpcdH1cbjk3NzY6XHRcbjk3Nzc6XHRzdGF0aWMgaW50IG5pdV9wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG45Nzc4Olx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG45Nzc5Olx0e1xuOTc4MDpcdFx0dW5pb24gbml1X3BhcmVudF9pZCBwYXJlbnRfaWQ7XG45NzgxOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuOTc4MjpcdFx0c3RydWN0IG5pdSAqbnA7XG45NzgzOlx0XHRpbnQgZXJyO1xuOTc4NDpcdFxuOTc4NTpcdFx0bml1X2RyaXZlcl92ZXJzaW9uKCk7XG45Nzg2Olx0XG45Nzg3Olx0XHRlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTtcbjk3ODg6XHRcdGlmIChlcnIpIHtcbjk3ODk6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZ1xcblwmIzM0Oyk7XG45NzkwOlx0XHRcdHJldHVybiBlcnI7XG45NzkxOlx0XHR9XG45NzkyOlx0XG45NzkzOlx0XHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSB8fFxuOTc5NDpcdFx0ICAgICEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDIpIFx1MDAyNiBJT1JFU09VUkNFX01FTSkpIHtcbjk3OTU6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2Fubm90IGZpbmQgcHJvcGVyIFBDSSBkZXZpY2UgYmFzZSBhZGRyZXNzZXMsIGFib3J0aW5nXFxuXCYjMzQ7KTtcbjk3OTY6XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjk3OTc6XHRcdFx0Z290byBlcnJfb3V0X2Rpc2FibGVfcGRldjtcbjk3OTg6XHRcdH1cbjk3OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNDUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBuaXVfcGNpX2luaXRfb25lYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgbml1X3BjaV9pbml0X29uZWAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoZSBuYW1lIGluc3RhbnRseSwgaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgTklDIGRyaXZlciBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgdGhlIFBDSSBpbml0aWFsaXphdGlvbiBwYXRoIGZvciB0aGUgTklVIChOZXR3b3JrIEludGVyZmFjZSBVbml0KS4gS25vd2luZyBpdCYjMzk7cyBQQ0ktZm9jdXNlZCBhbHJlYWR5IGdpdmVzIG1lIGNvbnRleHQg4oCTIEkmIzM5O20gYW50aWNpcGF0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIHByb2JhYmx5IHNvbWUgZGV2aWNlLXNwZWNpZmljIHNldHVwIGJhc2VkIG9uIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaGVyZTsgaW5jb3JyZWN0IHNlcXVlbmNlIGR1cmluZyBpbml0IGNhbiBsZWFkIHRvIHVucHJlZGljdGFibGUgcmVzdWx0cyBpbiB0aGUgbG9uZyBydW4uIExldCYjMzk7cyBzZWUgaG93IHRoaXMgdGhpbmcgYWN0dWFsbHkgdGlja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTgwMDpcdFx0ZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTU9EVUxFX05BTUUpO1xuOTgwMTpcdFx0aWYgKGVycikge1xuOTgwMjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsIGFib3J0aW5nXFxuXCYjMzQ7KTtcbjk4MDM6XHRcdFx0Z290byBlcnJfb3V0X2Rpc2FibGVfcGRldjtcbjk4MDQ6XHRcdH1cbjk4MDU6XHRcbjk4MDY6XHRcdGlmICghcGNpX2lzX3BjaWUocGRldikpIHtcbjk4MDc6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2Fubm90IGZpbmQgUENJIEV4cHJlc3MgY2FwYWJpbGl0eSwgYWJvcnRpbmdcXG5cJiMzNDspO1xuOTgwODpcdFx0XHRlcnIgPSAtRU5PREVWO1xuOTgwOTpcdFx0XHRnb3RvIGVycl9vdXRfZnJlZV9yZXM7XG45ODEwOlx0XHR9XG45ODExOlx0XG45ODEyOlx0XHRkZXYgPSBuaXVfYWxsb2NfYW5kX2luaXQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBkZXYsIE5VTEwsXG45ODEzOlx0XHRcdFx0XHQgXHUwMDI2bml1X3BjaV9vcHMsIFBDSV9GVU5DKHBkZXYtXHUwMDNlZGV2Zm4pKTtcbjk4MTQ6XHRcdGlmICghZGV2KSB7XG45ODE1Olx0XHRcdGVyciA9IC1FTk9NRU07XG45ODE2Olx0XHRcdGdvdG8gZXJyX291dF9mcmVlX3Jlcztcbjk4MTc6XHRcdH1cbjk4MTg6XHRcdG5wID0gbmV0ZGV2X3ByaXYoZGV2KTtcbjk4MTk6XHRcbjk4MjA6XHRcdG1lbXNldChcdTAwMjZwYXJlbnRfaWQsIDAsIHNpemVvZihwYXJlbnRfaWQpKTtcbjk4MjE6XHRcdHBhcmVudF9pZC5wY2kuZG9tYWluID0gcGNpX2RvbWFpbl9ucihwZGV2LVx1MDAzZWJ1cyk7XG45ODIyOlx0XHRwYXJlbnRfaWQucGNpLmJ1cyA9IHBkZXYtXHUwMDNlYnVzLVx1MDAzZW51bWJlcjtcbjk4MjM6XHRcdHBhcmVudF9pZC5wY2kuZGV2aWNlID0gUENJX1NMT1QocGRldi1cdTAwM2VkZXZmbik7XG45ODI0Olx0XG45ODI1Olx0XHRucC1cdTAwM2VwYXJlbnQgPSBuaXVfZ2V0X3BhcmVudChucCwgXHUwMDI2cGFyZW50X2lkLFxuOTgyNjpcdFx0XHRcdFx0ICAgIFBMQVRfVFlQRV9BVExBUyk7XG45ODI3Olx0XHRpZiAoIW5wLVx1MDAzZXBhcmVudCkge1xuOTgyODpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuOTgyOTpcdFx0XHRnb3RvIGVycl9vdXRfZnJlZV9kZXY7XG45ODMwOlx0XHR9XG45ODMxOlx0XG45ODMyOlx0XHRwY2llX2NhcGFiaWxpdHlfY2xlYXJfYW5kX3NldF93b3JkKHBkZXYsIFBDSV9FWFBfREVWQ1RMLFxuOTgzMzpcdFx0XHRQQ0lfRVhQX0RFVkNUTF9OT1NOT09QX0VOLFxuOTgzNDpcdFx0XHRQQ0lfRVhQX0RFVkNUTF9DRVJFIHwgUENJX0VYUF9ERVZDVExfTkZFUkUgfFxuOTgzNTpcdFx0XHRQQ0lfRVhQX0RFVkNUTF9GRVJFIHwgUENJX0VYUF9ERVZDVExfVVJSRSB8XG45ODM2Olx0XHRcdFBDSV9FWFBfREVWQ1RMX1JFTEFYX0VOKTtcbjk4Mzc6XHRcbjk4Mzg6XHRcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIERNQV9CSVRfTUFTSyg0NCkpO1xuOTgzOTpcdFx0aWYgKCFlcnIpXG45ODQwOlx0XHRcdGRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7XG45ODQxOlx0XHRpZiAoZXJyKSB7XG45ODQyOlx0XHRcdGVyciA9IGRtYV9zZXRfbWFzayhcdTAwMjZwZGV2LVx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XG45ODQzOlx0XHRcdGlmIChlcnIpIHtcbjk4NDQ6XHRcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nXFxuXCYjMzQ7KTtcbjk4NDU6XHRcdFx0XHRnb3RvIGVycl9vdXRfcmVsZWFzZV9wYXJlbnQ7XG45ODQ2Olx0XHRcdH1cbjk4NDc6XHRcdH1cbjk4NDg6XHRcbjk4NDk6XHRcdG5pdV9zZXRfYmFzaWNfZmVhdHVyZXMoZGV2KTtcbjk4NTA6XHRcbjk4NTE6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9VTklDQVNUX0ZMVDtcbjk4NTI6XHRcbjk4NTM6XHRcdG5wLVx1MDAzZXJlZ3MgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCk7XG45ODU0Olx0XHRpZiAoIW5wLVx1MDAzZXJlZ3MpIHtcbjk4NTU6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzLCBhYm9ydGluZ1xcblwmIzM0Oyk7XG45ODU2Olx0XHRcdGVyciA9IC1FTk9NRU07XG45ODU3Olx0XHRcdGdvdG8gZXJyX291dF9yZWxlYXNlX3BhcmVudDtcbjk4NTg6XHRcdH1cbjk4NTk6XHRcbjk4NjA6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuOTg2MTpcdFx0cGNpX3NhdmVfc3RhdGUocGRldik7XG45ODYyOlx0XG45ODYzOlx0XHRkZXYtXHUwMDNlaXJxID0gcGRldi1cdTAwM2VpcnE7XG45ODY0Olx0XG45ODY1Olx0XHQvKiBNVFUgcmFuZ2U6IDY4IC0gOTIxNiAqL1xuOTg2NjpcdFx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbjk4Njc6XHRcdGRldi1cdTAwM2VtYXhfbXR1ID0gTklVX01BWF9NVFU7XG45ODY4Olx0XG45ODY5Olx0XHRuaXVfYXNzaWduX25ldGRldl9vcHMoZGV2KTtcbjk4NzA6XHRcbjk4NzE6XHRcdGVyciA9IG5pdV9nZXRfaW52YXJpYW50cyhucCk7XG45ODcyOlx0XHRpZiAoZXJyKSB7XG45ODczOlx0XHRcdGlmIChlcnIgIT0gLUVOT0RFVilcbjk4NzQ6XHRcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtQcm9ibGVtIGZldGNoaW5nIGludmFyaWFudHMgb2YgY2hpcCwgYWJvcnRpbmdcXG5cJiMzNDspO1xuOTg3NTpcdFx0XHRnb3RvIGVycl9vdXRfaW91bm1hcDtcbjk4NzY6XHRcdH1cbjk4Nzc6XHRcbjk4Nzg6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpO1xuOTg3OTpcdFx0aWYgKGVycikge1xuOTg4MDpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmdcXG5cJiMzNDspO1xuOTg4MTpcdFx0XHRnb3RvIGVycl9vdXRfaW91bm1hcDtcbjk4ODI6XHRcdH1cbjk4ODM6XHRcbjk4ODQ6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpO1xuOTg4NTpcdFxuOTg4NjpcdFx0bml1X2RldmljZV9hbm5vdW5jZShucCk7XG45ODg3Olx0XG45ODg4Olx0XHRyZXR1cm4gMDtcbjk4ODk6XHRcbjk4OTA6XHRlcnJfb3V0X2lvdW5tYXA6XG45ODkxOlx0XHRpZiAobnAtXHUwMDNlcmVncykge1xuOTg5MjpcdFx0XHRpb3VubWFwKG5wLVx1MDAzZXJlZ3MpO1xuOTg5MzpcdFx0XHRucC1cdTAwM2VyZWdzID0gTlVMTDtcbjk4OTQ6XHRcdH1cbjk4OTU6XHRcbjk4OTY6XHRlcnJfb3V0X3JlbGVhc2VfcGFyZW50OlxuOTg5NzpcdFx0bml1X3B1dF9wYXJlbnQobnApO1xuOTg5ODpcdFxuOTg5OTpcdGVycl9vdXRfZnJlZV9kZXY6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTU1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBuaXVfZ2V0X2ludmFyaWFudHNgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRoZSBkZWJ1Z2dlciYjMzk7cyBoaXQgYSBjYWxsIHRvIGBuaXVfZ2V0X2ludmFyaWFudHNgLiBUaW1lIHRvIGdldCBteSBiZWFyaW5ncyBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBhY2NvbXBsaXNoLiBHaXZlbiB0aGUgbmFtZSwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGlzIGlzIHdoZXJlIHRoZSBzeXN0ZW0gYXR0ZW1wdHMgdG8gZGVyaXZlIG9yIHJldHJpZXZlIGludmFyaWFudHMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIE5JVSAoTmV0d29yayBJbnRlcmZhY2UgVW5pdCkgY29udGV4dC4gUGVyaGFwcyBpdCYjMzk7cyBxdWVyeWluZyBoYXJkd2FyZSByZWdpc3RlcnMsIGFuYWx5emluZyBkYXRhIHN0cnVjdHVyZXMsIG9yIHJlbHlpbmcgb24gc29tZSBwcmUtY2FsY3VsYXRlZCBzdGF0ZS4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqRGF0YSBTb3VyY2VzOioqIFdoYXQgc291cmNlcyBvZiBpbmZvcm1hdGlvbiBhcmUgYmVpbmcgdGFwcGVkPyBIYXJkd2FyZSByZWdpc3RlcnMsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGludGVybmFsIHN0YXRlLCBuZXR3b3JrIHRyYWZmaWMsIGV0Yy4/CiogICAqKkludmFyaWFudHMgRGVmaW5lZDoqKiBXaGF0IGNvbnN0aXR1dGVzIGFuICYjMzQ7aW52YXJpYW50JiMzNDsgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBvcGVyYXRpb25hbCBwYXJhbWV0ZXJzIChNVFUsIHNwZWVkKSwgaGFyZHdhcmUgc3RhdHVzIChsaW5rIHVwL2Rvd24sIGVycm9yIGNvdW50cyksIG9yIHNvbWUgaGlnaC1sZXZlbCBzeXN0ZW0gcHJvcGVydHk/IElzIGl0IGxvb2tpbmcgZm9yIGNlcnRhaW4gcGF0dGVybnMsIGJvdW5kcywgb3IgcmVsYXRpb25zaGlwcz8KKiAgICoqRGVyaXZhdGlvbiBMb2dpYzoqKiBIb3cgYXJlIHRoZXNlIGludmFyaWFudHMgYmVpbmcgY2FsY3VsYXRlZCBvciByZXRyaWV2ZWQ/IElzIGl0IGEgZGlyZWN0IGxvb2t1cCwgYSBzZXJpZXMgb2YgY2FsY3VsYXRpb25zLCBvciBhIHN0YXRlIG1hY2hpbmU/IEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuCiogICAqKkVycm9yIEhhbmRsaW5nL0VkZ2UgQ2FzZXM6KiogSG93IGRvZXMgdGhlIGZ1bmN0aW9uIGhhbmRsZSB1bmV4cGVjdGVkIHNpdHVhdGlvbnM/IFdoYXQgYXJlIHRoZSBmYWlsdXJlIG1vZGVzLCBhbmQgaG93IGFyZSB0aGV5IHJlcG9ydGVkPyBXaGF0IGtpbmQgb2YgZXJyb3ItY2hlY2tpbmcgaXMgcHJlc2VudD8KKiAgICoqUGVyZm9ybWFuY2U6KiogR2l2ZW4gd2hlcmUgd2UgYXJlIGluIHRoZSBjYWxsIHN0YWNrLCB3aGF0JiMzOTtzIHRoZSBjb21wdXRhdGlvbmFsIGNvbXBsZXhpdHkgb2YgdGhpcyBmdW5jdGlvbj8gQW0gSSBsaWtlbHkgdG8gZW5jb3VudGVyIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBoZXJlPwoKTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZXN0YWJsaXNoIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0ICYjMzQ7aW52YXJpYW50cyYjMzQ7IHRoaXMgZnVuY3Rpb24gaXMgZGVhbGluZyB3aXRoLiBUaGUgc3BlY2lmaWNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBtaWdodCBiZSBsZXNzIGltcG9ydGFudCBpbml0aWFsbHksIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIHJlY29nbml6ZSBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCB3b3JrIGJhY2t3YXJkIGZyb20gdGhlcmUuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTMxNDpcdHN0YXRpYyBpbnQgbml1X2dldF9pbnZhcmlhbnRzKHN0cnVjdCBuaXUgKm5wKVxuOTMxNTpcdHtcbjkzMTY6XHRcdGludCBlcnIsIGhhdmVfcHJvcHM7XG45MzE3Olx0XHR1MzIgb2Zmc2V0O1xuOTMxODpcdFxuOTMxOTpcdFx0ZXJyID0gbml1X2dldF9vZl9wcm9wcyhucCk7XG45MzIwOlx0XHRpZiAoZXJyID09IC1FTk9ERVYpXG45MzIxOlx0XHRcdHJldHVybiBlcnI7XG45MzIyOlx0XG45MzIzOlx0XHRoYXZlX3Byb3BzID0gIWVycjtcbjkzMjQ6XHRcbjkzMjU6XHRcdGVyciA9IG5pdV9pbml0X21hY19pcHBfcGNzX2Jhc2UobnApO1xuOTMyNjpcdFx0aWYgKGVycilcbjkzMjc6XHRcdFx0cmV0dXJuIGVycjtcbjkzMjg6XHRcbjkzMjk6XHRcdGlmIChoYXZlX3Byb3BzKSB7XG45MzMwOlx0XHRcdGVyciA9IG5pdV9nZXRfYW5kX3ZhbGlkYXRlX3BvcnQobnApO1xuOTMzMTpcdFx0XHRpZiAoZXJyKVxuOTMzMjpcdFx0XHRcdHJldHVybiBlcnI7XG45MzMzOlx0XG45MzM0Olx0XHR9IGVsc2UgIHtcbjkzMzU6XHRcdFx0aWYgKG5wLVx1MDAzZXBhcmVudC1cdTAwM2VwbGF0X3R5cGUgPT0gUExBVF9UWVBFX05JVSlcbjkzMzY6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkzMzc6XHRcbjkzMzg6XHRcdFx0bnc2NChFU1BDX1BJT19FTiwgRVNQQ19QSU9fRU5fRU5BQkxFKTtcbjkzMzk6XHRcdFx0b2Zmc2V0ID0gbml1X3BjaV92cGRfb2Zmc2V0KG5wKTtcbjkzNDA6XHRcdFx0bmV0aWZfcHJpbnRrKG5wLCBwcm9iZSwgS0VSTl9ERUJVRywgbnAtXHUwMDNlZGV2LFxuOTM0MTpcdFx0XHRcdCAgICAgXCYjMzQ7JXMoKSBWUEQgb2Zmc2V0IFslMDh4XVxcblwmIzM0OywgX19mdW5jX18sIG9mZnNldCk7XG45MzQyOlx0XHRcdGlmIChvZmZzZXQpIHtcbjkzNDM6XHRcdFx0XHRlcnIgPSBuaXVfcGNpX3ZwZF9mZXRjaChucCwgb2Zmc2V0KTtcbjkzNDQ6XHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuOTM0NTpcdFx0XHRcdFx0cmV0dXJuIGVycjtcbjkzNDY6XHRcdFx0fVxuOTM0NzpcdFx0XHRudzY0KEVTUENfUElPX0VOLCAwKTtcbjkzNDg6XHRcbjkzNDk6XHRcdFx0aWYgKG5wLVx1MDAzZWZsYWdzIFx1MDAyNiBOSVVfRkxBR1NfVlBEX1ZBTElEKSB7XG45MzUwOlx0XHRcdFx0bml1X3BjaV92cGRfdmFsaWRhdGUobnApO1xuOTM1MTpcdFx0XHRcdGVyciA9IG5pdV9nZXRfYW5kX3ZhbGlkYXRlX3BvcnQobnApO1xuOTM1MjpcdFx0XHRcdGlmIChlcnIpXG45MzUzOlx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuOTM1NDpcdFx0XHR9XG45MzU1Olx0XG45MzU2Olx0XHRcdGlmICghKG5wLVx1MDAzZWZsYWdzIFx1MDAyNiBOSVVfRkxBR1NfVlBEX1ZBTElEKSkge1xuOTM1NzpcdFx0XHRcdGVyciA9IG5pdV9nZXRfYW5kX3ZhbGlkYXRlX3BvcnQobnApO1xuOTM1ODpcdFx0XHRcdGlmIChlcnIpXG45MzU5Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuOTM2MDpcdFx0XHRcdGVyciA9IG5pdV9wY2lfcHJvYmVfc3Byb20obnApO1xuOTM2MTpcdFx0XHRcdGlmIChlcnIpXG45MzYyOlx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuOTM2MzpcdFx0XHR9XG45MzY0Olx0XHR9XG45MzY1Olx0XG45MzY2Olx0XHRlcnIgPSBuaXVfcHJvYmVfcG9ydHMobnApO1xuOTM2NzpcdFx0aWYgKGVycilcbjkzNjg6XHRcdFx0cmV0dXJuIGVycjtcbjkzNjk6XHRcbjkzNzA6XHRcdG5pdV9sZGdfaW5pdChucCk7XG45MzcxOlx0XG45MzcyOlx0XHRuaXVfY2xhc3NpZmllcl9zd3N0YXRlX2luaXQobnApO1xuOTM3MzpcdFx0bml1X2xpbmtfY29uZmlnX2luaXQobnApO1xuOTM3NDpcdFxuOTM3NTpcdFx0ZXJyID0gbml1X2RldGVybWluZV9waHlfZGlzcG9zaXRpb24obnApO1xuOTM3NjpcdFx0aWYgKCFlcnIpXG45Mzc3Olx0XHRcdGVyciA9IG5pdV9pbml0X2xpbmsobnApO1xuOTM3ODpcdFxuOTM3OTpcdFx0cmV0dXJuIGVycjtcbjkzODA6XHR9XG45MzgxOlx0XG45MzgyOlx0c3RhdGljIExJU1RfSEVBRChuaXVfcGFyZW50X2xpc3QpO1xuOTM4MzpcdHN0YXRpYyBERUZJTkVfTVVURVgobml1X3BhcmVudF9sb2NrKTtcbjkzODQ6XHRzdGF0aWMgaW50IG5pdV9wYXJlbnRfaW5kZXg7XG45Mzg1Olx0XG45Mzg2Olx0c3RhdGljIHNzaXplX3Qgc2hvd19wb3J0X3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsXG45Mzg3Olx0XHRcdFx0ICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuOTM4ODpcdHtcbjkzODk6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7XG45MzkwOlx0XHRzdHJ1Y3Qgbml1X3BhcmVudCAqcCA9IGRldl9nZXRfcGxhdGRhdGEoXHUwMDI2cGxhdF9kZXYtXHUwMDNlZGV2KTtcbjkzOTE6XHRcdHUzMiBwb3J0X3BoeSA9IHAtXHUwMDNlcG9ydF9waHk7XG45MzkyOlx0XHRjaGFyICpvcmlnX2J1ZiA9IGJ1ZjtcbjkzOTM6XHRcdGludCBpO1xuOTM5NDpcdFxuOTM5NTpcdFx0aWYgKHBvcnRfcGh5ID09IFBPUlRfUEhZX1VOS05PV04gfHxcbjkzOTY6XHRcdCAgICBwb3J0X3BoeSA9PSBQT1JUX1BIWV9JTlZBTElEKVxuOTM5NzpcdFx0XHRyZXR1cm4gMDtcbjkzOTg6XHRcbjkzOTk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHAtXHUwMDNlbnVtX3BvcnRzOyBpJiM0MzsmIzQzOykge1xuOTQwMDpcdFx0XHRjb25zdCBjaGFyICp0eXBlX3N0cjtcbjk0MDE6XHRcdFx0aW50IHR5cGU7XG45NDAyOlx0XG45NDAzOlx0XHRcdHR5cGUgPSBwaHlfZGVjb2RlKHBvcnRfcGh5LCBpKTtcbjk0MDQ6XHRcdFx0aWYgKHR5cGUgPT0gUE9SVF9UWVBFXzEwRylcbjk0MDU6XHRcdFx0XHR0eXBlX3N0ciA9IFwmIzM0OzEwR1wmIzM0Oztcbjk0MDY6XHRcdFx0ZWxzZVxuOTQwNzpcdFx0XHRcdHR5cGVfc3RyID0gXCYjMzQ7MUdcJiMzNDs7XG45NDA4Olx0XHRcdGJ1ZiAmIzQzOz0gc3ByaW50ZihidWYsXG45NDA5Olx0XHRcdFx0ICAgICAgIChpID09IDApID8gXCYjMzQ7JXNcJiMzNDsgOiBcJiMzNDsgJXNcJiMzNDssXG45NDEwOlx0XHRcdFx0ICAgICAgIHR5cGVfc3RyKTtcbjk0MTE6XHRcdH1cbjk0MTI6XHRcdGJ1ZiAmIzQzOz0gc3ByaW50ZihidWYsIFwmIzM0O1xcblwmIzM0Oyk7XG45NDEzOlx0XHRyZXR1cm4gYnVmIC0gb3JpZ19idWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDc2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoIEZ1enppbmcgRGVjaXNpb246IG5pdSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQg4oCTIGl0JiMzOTtzIGEgbWlzc2luZyB3cml0ZSBvcGVyYXRpb24gKGBudzY0YCkgaW4gYG5pdV90eGNfc2V0X2ltYXNrYCwgcGFydCBvZiBhIHN0YW5kYXJkIG5ldHdvcmsgZHJpdmVyLCBgbml1YC4gVGhlIGNvZGUgbW9kaWZpZXMgYSBoYXJkd2FyZSByZWdpc3Rlci4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGNyaXRlcmlhLCBpdCBtaWdodCBub3QgYmUgaWYgaXQmIzM5O3MgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuCgpCdXQgaXMgYG5pdWAgYW55IG9mIHRob3NlPyBObywgaXQmIzM5O3MgYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIuIFNvIHRoYXQgZXhjbHVzaW9uIGRvZXNuJiMzOTt0IGFwcGx5IGRpcmVjdGx5LiBIb3dldmVyLCB0aGUgbmV4dCBwb2ludCBpbiB0aGUgaW5zdHJ1Y3Rpb25zIHNheXMgbm90IHRvIGZ1enogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4KClNvLCBjYW4gd2UgcmVhY2ggYG5pdV90eGNfc2V0X2ltYXNrYCBpbiBRRU1VPyBUaGlzIGlzIHdoZXJlIHRoZSBQQ0kgZnV6emVyIGNvbWVzIGluLiBJdCBpbnRlcmNlcHRzIFBDSSBjb25maWcgc3BhY2UgYW5kIE1NSU8gcmVhZHMvd3JpdGVzLiBXaGVuIGBuaXVfdHhjX3NldF9pbWFza2AgY2FsbHMgYG5yNjRgIChyZWFkcSksIHRoZSBmdXp6ZXIgcHJvdmlkZXMgYSBmdXp6ZWQgdmFsdWUuIFdoZW4gaXQgY2FsbHMgYG53NjRgICh3cml0ZXEpLCB0aGUgd3JpdGUgZ29lcyB0byB0aGUgZnV6emVyLiBNZWFuaW5nIHRoZSBmdXp6ZXIgKmNhbiogaW5mbHVlbmNlIHRoaXMgY29kZS4KCk5vdywgY2FuIHdlIGFjdHVhbGx5ICp0cmlnZ2VyKiBgbml1X3R4Y19zZXRfaW1hc2tgIHZpYSBhIGZ1enplcj8gSXQmIzM5O3MgY2FsbGVkIGZyb20gYG5pdV9pbml0X2h3YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYG5pdV9vcGVuYC4gYG5pdV9vcGVuYCBpcyB0aGUgYG5kb19vcGVuYCBjYWxsYmFjay4gU28sIGNhbiB3ZSByZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2U/IElmIGByZWdpc3Rlcl9uZXRkZXZgIHN1Y2NlZWRzLCB0aGF0IGxldHMgdXMgZG8gYSBgaXAgbGluayBzZXQgZGV2IGV0aFggdXBgLCB3aGljaCB0cmlnZ2VycyBgbml1X29wZW5gIGFuZCB0aGVyZWZvcmUgdGhlIHRhcmdldC4KCmBuaXVfZ2V0X2ludmFyaWFudHNgIGlzIGNhbGxlZCB3aGVuIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyByZWdpc3RlcmVkLiBJdCBjYWxscyBgbml1X3BjaV92cGRfZmV0Y2hgLCB3aGljaCBpcyBNTUlPLiBUaGUgZnV6emVyIGNvbnRyb2xzIHRoZSBNTUlPIHJlYWRzLCBzbyB3ZSBjYW4gbWFrZSB0aGlzIHN1Y2NlZWQuIEZyb20gdGhpcyBwb2ludCwgYHJlZ2lzdGVyX25ldGRldmAgY2FuIHRoZW4gc3VjY2VlZCwgd2hpY2ggdGhlbiBzZXRzIHVwIHRoZSBwYXRoIHRocm91Z2ggYG5pdV9vcGVuYCwgYW5kIGV2ZW50dWFsbHkgdG8gYG5pdV90eGNfc2V0X2ltYXNrYC4KClRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIFFFTVUgdmlhIHRoZSBQQ0kgZnV6emVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgc3ltYm9scywgZ2l2ZW4gdGhlIGNhbGwgY2hhaW4sIGFyZSBgbml1X29wZW5gLCBzaW5jZSBpdCBpcyB0aGUgYG5kb19vcGVuYCBjYWxsYmFjay4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgZm9yIG90aGVyIGNhbGxlcnMgb2YgYG5pdV90eGNfc2V0X2ltYXNrYCwgYnV0IHRoYXQgaXMgbXkga2V5IHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuaXVfdHhjX3NldF9pbWFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NDYyNT1zdGF0aWMgdm9pZCBuaXVfdHhjX2VuYWJsZV9wb3J0KHN0cnVjdCBuaXUgKm5wLCBpbnQgb24pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTQ2NDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NDY0NDpzdGF0aWMgdm9pZCBuaXVfdHhjX3NldF9pbWFzayhzdHJ1Y3Qgbml1ICpucCwgdTY0IGltYXNrKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTQ2NDUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz01OTM0PXN0YXRpYyBpbnQgbml1X2luaXRfaHcoc3RydWN0IG5pdSAqbnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTU5NDAtXHRuaXVfdHhjX3BvcnRfZG1hX2VuYWJsZShucCwgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NTk0MTpcdG5pdV90eGNfc2V0X2ltYXNrKG5wLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy01OTQyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgbml1X2luaXRfaHdgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRoZSBjbHVlIGlzIHRoYXQgd2UmIzM5O3JlIG9ubHkgc2VlaW5nIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20gYG5pdV9pbml0X2h3YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IG5vdCB0ZXJyaWJseSBzdXJwcmlzaW5nIGdpdmVuIHRoZSBuYW1pbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgdHJhY2UgYmFjayBmcm9tIGBuaXVfaW5pdF9od2AuIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgKmFsbCogdGhlIGNhbGxlcnMgb2YgYG5pdV9pbml0X2h3YC4gVGhhdCB3aWxsIGdpdmUgdXMgdGhlIGJyb2FkZXIgY29udGV4dC4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBmcm9tIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc2NvcGUuIElzIGl0IGR1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24/IEhhcmR3YXJlIHByb2JlPyBPciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIG5hcnJvdyBkb3duIHRoZSBhcmVhIHRvIGZvY3VzIG9uIGFuZCBpbGx1bWluYXRlIHRoZSBsaWtlbHkgcmVsYXRpb25zaGlwcyBpbnZvbHZlZCBoZXJlLiBUaW1lIHRvIGdldCB0byBpdCEgTGV0JiMzOTtzIGdldCB0byB0aG9zZSBjYWxsIGdyYXBocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bml1X2luaXRfaHcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTU5MDU9c3RhdGljIHZvaWQgbml1X2Rpc2FibGVfaXBwKHN0cnVjdCBuaXUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy01OTMzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjU5MzQ6c3RhdGljIGludCBuaXVfaW5pdF9odyhzdHJ1Y3Qgbml1ICpucClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy01OTM1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NjA5OD1zdGF0aWMgaW50IG5pdV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTYxMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NjEyMzpcdGVyciA9IG5pdV9pbml0X2h3KG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy02MTI0LVx0aWYgKCFlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NjQzNj1zdGF0aWMgdm9pZCBuaXVfbmV0aWZfc3RhcnQoc3RydWN0IG5pdSAqbnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY0MzktXHQgKiBzbyBsb25nIGFzIGFsbCBjYWxsZXJzIGFyZSBhc3N1cmVkIHRvIGhhdmUgZnJlZSB0eCBzbG90c1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjY0NDA6XHQgKiAoc3VjaCBhcyBhZnRlciBuaXVfaW5pdF9odykuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjQ0MS1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz02NDk4PXN0YXRpYyB2b2lkIG5pdV9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjUyNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo2NTI3Olx0ZXJyID0gbml1X2luaXRfaHcobnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY1MjgtXHRpZiAoIWVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz02NzY1PXN0YXRpYyBpbnQgbml1X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY3OTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6Njc5MzpcdGVyciA9IG5pdV9pbml0X2h3KG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy02Nzk0LVx0aWYgKCFlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9OTk2MT1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIG5pdV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2X2QpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTk5NzUtXHRuZXRkZXZfbG9jayhkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjk5NzY6XHRlcnIgPSBuaXVfaW5pdF9odyhucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtOTk3Ny1cdGlmICghZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODk5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXkgTklVIERyaXZlciBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBOSVUgZHJpdmVyIGZ1bmN0aW9ucyBhcmUgc3RydWN0dXJlZC4gSXQgc2VlbXMgbGlrZSBgbml1X29wZW5gLCBgbml1X3Jlc2V0X3Rhc2tgLCBgbml1X2NoYW5nZV9tdHVgLCBhbmQgYG5pdV9yZXN1bWVgIGFsbCBldmVudHVhbGx5IGNhbGwgYG5pdV9pbml0X2h3YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBidXQgdGhlIGtleSBlbnRyeXBvaW50cyBmb3IgbXkgYW5hbHlzaXMgc2VlbSB0byBiZSBgbml1X29wZW5gIGFuZCBgbml1X2NoYW5nZV9tdHVgLiBUaGVzZSBmZWVsIGxpa2Ugc29saWQgZm9jdXMgc3ltYm9scy4KCldhaXQgYSBtaW51dGUsIEkgdGhpbmsgYG5pdV9vcGVuYCBpcyBzdGF0aWMuIERvZXMgdGhhdCB3b3JrIGZvciB0aGlzIGFuYWx5c2lzPyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJ1bGUgaXMgdG8gZm9jdXMgb24gdGhvc2UsIGFuZCBhdm9pZCB0aGUgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBhcmUgaW5saW5lZC4KCkhvd2V2ZXIsIGBuaXVfb3BlbmAgaXMgYXNzaWduZWQgdG8gYG5kb19vcGVuYCBpbiBgbml1X25ldGRldl9vcHNgLiBTbywgc2luY2UgaXQmIzM5O3Mgbm90IGJlaW5nIGlubGluZWQsIGl0IGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBPa2F5LCB0aGF0JiMzOTtzIGdvb2QuCgpgbml1X2NoYW5nZV9tdHVgIHNob3VsZCBiZSB0aGUgc2FtZSwgc28gaXQmIzM5O3MgYWxsIGdvb2QuCgpOb3csIGxldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBuaXVfb3BlbmAgaXNuJiMzOTt0IHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bml1X29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTYwOTA9c3RhdGljIHZvaWQgbml1X2Rpc2FibGVfbmFwaShzdHJ1Y3Qgbml1ICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjA5Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo2MDk4OnN0YXRpYyBpbnQgbml1X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy02MDk5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9OTcyMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5pdV9uZXRkZXZfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjk3MjM6XHQubmRvX29wZW5cdFx0PSBuaXVfb3BlbixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05NzI0LVx0Lm5kb19zdG9wXHRcdD0gbml1X2Nsb3NlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYxMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5JVSBEcml2ZXImIzM5O3MgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpbml0aWFsbHksIGl0IGFwcGVhcnMgdGhhdCB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIGFsbCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIGRpcmVjdCBleGFtaW5hdGlvbi4gSG93ZXZlciwgb24gY2xvc2VyIGluc3BlY3Rpb24sIEkgc2VlIHRoYXQgdGhpcyBpc24mIzM5O3QgYSBtYWpvciBpc3N1ZSBzaW5jZSBzdGF0aWMgZnVuY3Rpb25zIGFyZW4mIzM5O3QgaW5saW5lZCwgYXMgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgaW4gYSBzdHJ1Y3QuIFNvIEkmIzM5O3ZlIGdvdCB0byBmaW5kIG5vbi1zdGF0aWMgc3ltYm9scyB0byB0YXJnZXQuCgpUaGUgZnVuY3Rpb25zIGBuaXVfb3BlbmAgYW5kIGBuaXVfY2hhbmdlX210dWAgbG9vayBwcm9taXNpbmcgYXMgZW50cnkgcG9pbnRzLiBCdXQgd2FpdCwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBuaXVfcGNpX2luaXRfb25lYC4gSXNuJiMzOTt0IHRoYXQgdGhlIHByb2JlIGZ1bmN0aW9uPyBZZXMsIGl0IGlzISBSaWdodCwgZ290IGl0LgoKTm93LCBJIHJlbWVtYmVyIHRoZSBidWcgcmVwb3J0IG1lbnRpb25lZCBgbml1X3R4Y19zZXRfaW1hc2tgLiBUaGF0JiMzOTtzIGNhbGxlZCBmcm9tIGBuaXVfaW5pdF9od2AuIEFuZCBhaGEhIGBuaXVfaW5pdF9od2AgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgbml1X29wZW5gLCBgbml1X2NoYW5nZV9tdHVgLCBgbml1X3Jlc3VtZWAsIGFuZCBgbml1X3Jlc2V0X3Rhc2tgLiBTbyBJIHN0aWxsIGZlZWwgdGhhdCBgbml1X29wZW5gIGFuZCBgbml1X2NoYW5nZV9tdHVgIGFyZSB0aGUgYmVzdCBzeW1ib2xzIHRvIGZvY3VzIG9uLCBhcyB0aGV5IGFyZSB0aGUgbW9zdCBkaXJlY3QgZW50cnkgcG9pbnRzIGZyb20gdGhlIHVzZXItc3BhY2UgcGVyc3BlY3RpdmUuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgbm93IGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBOSVVgIGRlcGVuZHMgb24gYFBDSWAsIEkgYWxyZWFkeSBpZGVudGlmaWVkIHRoYXQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZ2AgdG8gYmUgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5JVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnPTg3PWNvbmZpZyBMRE1WU1dcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZy05OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnOjEwMDpjb25maWcgTklVXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMwOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU3VuIG1pY3Jvc3lzdGVtcyYjMzk7IGRyaXZlciBkaXJlY3RvcnkuIE15IGZvY3VzIGlzIGxpa2VseSBhcm91bmQgbGluZSAxMDAgb2YgdGhlIGBLY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIGhlcmUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgaW52b2x2ZSB1bmRlcnN0YW5kaW5nIHRoZSBgQ09ORklHX2AgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkLCB0aGVpciBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZHJpdmVycyBvciBoYXJkd2FyZSwgYW5kIGFueSBjb25kaXRpb25hbCBidWlsZCBzY2VuYXJpb3MuIEkgd2FudCB0byBpZGVudGlmeSB0aGUgY29yZSBjb21wb25lbnRzLiBJJiMzOTtsbCBuZWVkIHRvIHJlY29nbml6ZSB0aGlzIGlzIGxpa2VseSBhIHRhcmdldC1zcGVjaWZpYyBmaWxlLCBzbyBJIG5lZWQgdG8gcGxhY2UgdGhpcyBmaWxlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2suIEkmIzM5O2xsIGxpa2VseSBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogdGhlIGJhc2UgZHJpdmVyIHNlbGVjdGlvbiwgUEhZIGNvbmZpZ3VyYXRpb24sIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyB0aGF0IGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcy4gVGhlbiwgYmFzZWQgb24gd2hhdCBJIHNlZSBoZXJlLCBJIGNhbiBmb3JtIGEgbWVudGFsIG1hcCBvZiBob3cgdGhpcyBkcml2ZXIgaXMgY29udHJvbGxlZCBhbmQgY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcdCAgZm91bmQgaW4gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24gb2YgYSBzZXJ2aWNlIGRvbWFpbi5cbiAgOTY6XHRcdCAgTGludXggYnJpZGdlL3N3aXRjaCBzb2Z0d2FyZSBjYW4gdXNlIHRoZXNlIGludGVyZmFjZXMgZm9yXG4gIDk3Olx0XHQgIGd1ZXN0IGRvbWFpbiBuZXR3b3JrIGludGVyY29ubmVjdGl2aXR5IG9yIGd1ZXN0IGRvbWFpblxuICA5ODpcdFx0ICBjb25uZWN0aW9uIHRvIGEgcGh5c2ljYWwgbmV0d29yayBvbiBhIHNlcnZpY2UgZG9tYWluLlxuICA5OTpcdFxuIDEwMDpcdGNvbmZpZyBOSVVcbiAxMDE6XHRcdHRyaXN0YXRlIFwmIzM0O1N1biBOZXB0dW5lIDEwR2JpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gMTAyOlx0XHRkZXBlbmRzIG9uIFBDSVxuIDEwMzpcdFx0c2VsZWN0IENSQzMyXG4gMTA0Olx0XHRoZWxwXG4gMTA1Olx0XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjYXJkcyBiYXNlZCB1cG9uIFN1biYjMzk7c1xuIDEwNjpcdFx0ICBOZXB0dW5lIGNoaXBzZXQuXG4gMTA3Olx0XG4gMTA4Olx0ZW5kaWYgIyBORVRfVkVORE9SX1NVTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc5OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gTGFieXJpbnRoKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgTklVYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGBOSVVgIGlzICp0aGUqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJiMzOTtyZSBmb2N1c2luZyBvbi4gQnV0IHdhaXQgYSBzZWNvbmQsIHRoYXQgZmVlbHMgdG9vIHNpbXBsaXN0aWMuIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gc2VlaW5nIHRoZSB3aG9sZSBwaWN0dXJlLiBMZXQmIzM5O3MgdHJhY2UgaXQgYmFjay4gQWhhISBSaWdodCwgYE5FVF9WRU5ET1JfU1VOYC4uLiB0aGF0JiMzOTtzIHRoZSBwYXJlbnQgY29uZmlnLCBpc24mIzM5O3QgaXQ/IFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSSBrbm93IG15IG5ldHdvcmtpbmcgdHJlZXMsIGFuZCBgTklVYCB1bmRvdWJ0ZWRseSBmYWxscyB1bmRlciB0aGF0IHVtYnJlbGxhLiBOb3csIGJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgY29ubmVjdGlvbi4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2YgYE5FVF9WRU5ET1JfU1VOYCBhbmQgbWFrZSBzdXJlIGl0IGFsaWducyB3aXRoIHdoYXQgSSBleHBlY3QuIEkgbmVlZCB0byBzZWUgdGhlIHJlbGF0aW9uc2hpcCBjbGVhcmx5IGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZFTkRPUl9TVU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9TVU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnLTctXHRib29sIFwmIzM0O1N1biBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBTdW4gRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYmV0dGVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBqdW1wIHJpZ2h0IGludG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnYCBhcm91bmQgbGluZSA2LiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgc2V0dGluZ3MgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBncmFzcGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyBwdXQgdG9nZXRoZXIgYW5kIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgU3VuIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE5FVF9WRU5ET1JfU1VOXG4gICA3Olx0XHRib29sIFwmIzM0O1N1biBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdGRlcGVuZHMgb24gU1VOMyB8fCBTQlVTIHx8IFBDSSB8fCBTVU5fTERPTVNcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4gIDEyOlx0XG4gIDEzOlx0XHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuICAxNDpcdFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXG4gIDE1Olx0XHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgU3VuIG5ldHdvcmsgaW50ZXJmYWNlcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZVxuICAxNjpcdFx0ICBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxNzpcdFxuICAxODpcdGlmIE5FVF9WRU5ET1JfU1VOXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEhBUFBZTUVBTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU3MAoJCQkJCQkJb3V0cHV0OiAxMjYKCQkJCQkJCXRob3VnaHRzOiA3MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTklVIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgTkVUX1ZFTkRPUl9TVU5gIGRlZmF1bHRzIHRvICYjMzQ7eSYjMzQ7IGFuZCBkZXBlbmRzIG9uIGBQQ0lgLCBzbyBlbmFibGluZyBgTklVYCBhbmQgYE5FVF9WRU5ET1JfU1VOYCBzaG91bGQgYmUgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBgUENJYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQuIFNvLCBgTklVYCBhbmQgYE5FVF9WRU5ET1JfU1VOYCBpdCBpcy4KCkJ1dCwgYSBuYWdnaW5nIGRvdWJ0IGNyZWVwcyBpbjogaXMgYG5pdWAgb25lIG9mIHRob3NlIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgdGhhdCYjMzk7cyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudD8gVGhlIGluc3RydWN0aW9ucyB3YXJuIGFib3V0IGNvZGUgaW4gJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyYjMzQ7IHRoYXQgcmVseSBvbiByZWFsIGhhcmR3YXJlLiBJIGhhdmUgdG8gYmUgY2FyZWZ1bCBoZXJlLiBgbml1YCBpcyBhIDEwR2JpdCBFdGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIG9sZCBTdW4gTmVwdHVuZSBjYXJkLiBJcyBpdCBhIFNtYXJ0TklDPyBOby4gUENJZSBzd2l0Y2g/IE5vLiBHUFU/IERlZmluaXRlbHkgbm90LgoKVGhlIGNvbmNlcm4gaXMgdGhhdCBpdCAqcmVxdWlyZXMqIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUuIEJ1dCB3YWl0LCBkb2VzIGl0ICphY3R1YWxseSo/IE5vdyBJIHJlY2FsbCB0aGF0IHRoZSBzeXprYWxsZXIgUENJIGZ1enplciAqY2FuKiBmdXp6IGl0LiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBkaWZmZXJlbmNlLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBleGNsdWRlIHN0YW5kYXJkIEV0aGVybmV0IGRyaXZlcnMgZnJvbSB0aGUgd2FybmluZy4gU3RhbmRhcmQgRXRoZXJuZXQgZHJpdmVycyBhcmUgY29tbW9ubHkgZnV6emVkIGJ5IHRoZSBQQ0kgZnV6emVyLCBhbmQgYnVncyBhcmUgZm91bmQgdGhlcmUgYWxsIHRoZSB0aW1lIGluIGRyaXZlcnMgbGlrZSBgaWdiYCwgYGUxMDAwZWAsIGByODE2OWAsIGB0ZzNgLCBldGMuIEl0IHNlZW1zIHRoYXQgKnRob3NlKiBkcml2ZXJzLCBsaWtlIHRoZSBgTklVYCBkcml2ZXIsIGFyZSB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy4gVGhlIHN0YXRlbWVudCBpcyBsaW1pdGVkIHRvIHRob3NlIGNvbXBsaWNhdGVkIGRyaXZlcnMgd2l0aCBmaXJtd2FyZSBvciBjb21wbGV4IGNvbnRyb2wgcGF0aHMuCgpTdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXJzIGFyZSBtdWNoIHNpbXBsZXIsIGFuZCB0aGUgcHJvYmUvb3BlbiBmdW5jdGlvbnMgY2FuIG9mdGVuIGJlIHJlYWNoZWQgYnkgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIuIFNvLCBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIGl0c2VsZi4gQWgsIHRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZpeCBmb3IgYSBtaXNzaW5nIHdyaXRlIHRvIGBUWENfSU5UX01BU0tgLiBOb3RoaW5nIHRvIHJhaXNlIGFuIGFsYXJtLCBzbyB0aGUgcGF0Y2ggaXMgZmluZS4KClRoZSBpbXBvcnRhbnQgc3ltYm9scyB0byBrZWVwIGluIG1pbmQgYXJlIGBuaXVfb3BlbmAsIGBuaXVfY2hhbmdlX210dWAsIGFuZCBgbml1X3BjaV9pbml0X29uZWAuCgpBbmQganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWdgLiBZZXMsIHRoZSBgTklVYCBjb25maWcgZGVwZW5kcyBvbiBgUENJYCBhbmQgc2VsZWN0cyBgQ1JDMzJgLiBObyBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgcHJlc2VudC4KCk5vdywgdGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCB0YXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TklVJiMzNDssCiAgICAmIzM0O05FVF9WRU5ET1JfU1VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bml1X29wZW4mIzM0OywKICAgICYjMzQ7bml1X2NoYW5nZV9tdHUmIzM0OywKICAgICYjMzQ7bml1X3BjaV9pbml0X29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgaGFyZHdhcmUgcmVnaXN0ZXIgd3JpdGUgaW4gdGhlIFN1biBOZXB0dW5lIDEwR2JpdCBFdGhlcm5ldCBkcml2ZXIgKG5pdSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHN0YW5kYXJkIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBieSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCBpbnRlcmZhY2Ugb3Blbi9jb25maWd1cmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOSVUmIzM0OywKICAgICYjMzQ7TkVUX1ZFTkRPUl9TVU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuaXVfb3BlbiYjMzQ7LAogICAgJiMzNDtuaXVfY2hhbmdlX210dSYjMzQ7LAogICAgJiMzNDtuaXVfcGNpX2luaXRfb25lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBoYXJkd2FyZSByZWdpc3RlciB3cml0ZSBpbiB0aGUgU3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0IGRyaXZlciAobml1KS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgc3RhbmRhcmQgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIGJ5IHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGR1cmluZyBkZXZpY2UgcHJvYmUgYW5kIGludGVyZmFjZSBvcGVuL2NvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxODo0NC4zODIzNzU5NDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1NjQ5NTQwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTklVXCIsXG4gICAgXCJORVRfVkVORE9SX1NVTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5pdV9vcGVuXCIsXG4gICAgXCJuaXVfY2hhbmdlX210dVwiLFxuICAgIFwibml1X3BjaV9pbml0X29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBoYXJkd2FyZSByZWdpc3RlciB3cml0ZSBpbiB0aGUgU3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0IGRyaXZlciAobml1KS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgc3RhbmRhcmQgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIGJ5IHN5emthbGxlcidzIFBDSSBmdXp6ZXIgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIG9wZW4vY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTg6NDQuMzgyMzg3MTgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAyMTg1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmODViNDk1ZGU2NDViZDk2ZDE1YzcyYjI1ZWMyZjNjZTRmYTFiMWQ3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDI2IDE3OjE4OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY1xcbmluZGV4IDg4ZGYxNWU2ZGQ3NDY3Li4zNzA3OWE2ZDZlZTkyNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcXG5AQCAtNDY1MCw2ICs0NjUwLDcgQEAgc3RhdGljIHZvaWQgbml1X3R4Y19zZXRfaW1hc2soc3RydWN0IG5pdSAqbnAsIHU2NCBpbWFzaylcXG4gXFx0dmFsID0gbnI2NChUWENfSU5UX01BU0spO1xcbiBcXHR2YWwgXFx1MDAyNj0gflRYQ19JTlRfTUFTS19WQUwobnAtXFx1MDAzZXBvcnQpO1xcbiBcXHR2YWwgfD0gKGltYXNrIFxcdTAwM2NcXHUwMDNjIFRYQ19JTlRfTUFTS19WQUxfU0hJRlQobnAtXFx1MDAzZXBvcnQpKTtcXG4rXFx0bnc2NChUWENfSU5UX01BU0ssIHZhbCk7XFxuIFxcdG5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE4OjQ0Ljg4MzQzMTg0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMjA2Mzg4NTg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOSVVcIixcbiAgICBcIk5FVF9WRU5ET1JfU1VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibml1X29wZW5cIixcbiAgICBcIm5pdV9jaGFuZ2VfbXR1XCIsXG4gICAgXCJuaXVfcGNpX2luaXRfb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGhhcmR3YXJlIHJlZ2lzdGVyIHdyaXRlIGluIHRoZSBTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgZHJpdmVyIChuaXUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyJ3MgUENJIGZ1enplciBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCBpbnRlcmZhY2Ugb3Blbi9jb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmODViNDk1ZGU2NDViZDk2ZDE1YzcyYjI1ZWMyZjNjZTRmYTFiMWQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMTc6MTg6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcbmluZGV4IDg4ZGYxNWU2ZGQ3NDY3Li4zNzA3OWE2ZDZlZTkyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jXG5AQCAtNDY1MCw2ICs0NjUwLDcgQEAgc3RhdGljIHZvaWQgbml1X3R4Y19zZXRfaW1hc2soc3RydWN0IG5pdSAqbnAsIHU2NCBpbWFzaylcbiBcdHZhbCA9IG5yNjQoVFhDX0lOVF9NQVNLKTtcbiBcdHZhbCBcdTAwMjY9IH5UWENfSU5UX01BU0tfVkFMKG5wLVx1MDAzZXBvcnQpO1xuIFx0dmFsIHw9IChpbWFzayBcdTAwM2NcdTAwM2MgVFhDX0lOVF9NQVNLX1ZBTF9TSElGVChucC1cdTAwM2Vwb3J0KSk7XG4rXHRudzY0KFRYQ19JTlRfTUFTSywgdmFsKTtcbiBcdG5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTg6NDQuODgzNDMzOTQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5MzEwMjU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOSVUgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgdXBkYXRpbmcgYG5pdV90eGNfc2V0X2ltYXNrYC4gSSBjYW4gc2VlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2U6IHRoZXkndmUgYWRkZWQgYSBgbnc2NChUWENfSU5UX01BU0ssIHZhbCk7YCBjYWxsIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSBuZXcgbWFzayB2YWx1ZS4gVGhpcyBpcyBhIGJpdCBvZiBhIGNsYXNzaWMsIHJpZ2h0PyBNb2RpZnlpbmcgYSB2YWx1ZSBhbmQgdGhlbiAqbm90KiB3cml0aW5nIGl0IGJhY2sgaXMgYSByb29raWUgbWlzdGFrZSwgc28gaG9wZWZ1bGx5LCB0aGlzIGZpeGVzIHNvbWUga2luZCBvZiBpbnRlcnJ1cHQgbWFza2luZyBpc3N1ZSBpbiB0aGUgU3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0IE1BQyBkcml2ZXIuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiBjYW4gSSB0ZXN0IHRoaXMgZWFzaWx5PyBJIHdvbmRlciBpZiB0aGlzIGlzIHNvbWV0aGluZyBJIGNhbiB2ZXJpZnkgaW4gUUVNVT8gSSdtIHByZXR0eSBzdXJlIEkgaGF2ZSBhIHNldHVwIHRoYXQgY291bGQgaGFuZGxlIHRoYXQuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnYCB0byBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgYE5JVWAgaGFzLiBUaGF0J2xsIHRlbGwgbWUgaWYgSSBjYW4gZXZlbiBjb25maWd1cmUgaXQgZm9yIHRoZSBlbXVsYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIGFyZSBpbiBwbGFjZSBzbyBJIGNhbiBldmVuIGhvcGUgdG8gYnVpbGQgYW5kIHJ1biB0aGlzIHdpdGggUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE4OjQ5LjQ3NjUzODkxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTY2MjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTklVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnPTg3PWNvbmZpZyBMRE1WU1dcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnLTk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnOjEwMDpjb25maWcgTklVXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTg6NDkuNTQ2MjA3MzczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NzI3OTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFN1biBFdGhlcm5ldCBkcml2ZXJzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9gLiBUaGUgZmlsZSdzIHByb2JhYmx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIGxpdmVzLCBkZWZpbmluZyB0aGUgc2VsZWN0YWJsZSBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAxMDAgYXMgYSBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IHRoYXQncyB3aGVyZSB0aGUgbW9yZSBpbnRlcmVzdGluZyBvcHRpb25zIGFyZSBwcm9iYWJseSBncm91cGVkIG9yIGRlZmluZWQuIEhvcGVmdWxseSBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUga2V5IHNldHRpbmdzIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZHJpdmVycyBhcmUgY29uZmlndXJlZCBpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhbmQgaG93IHRoaXMgbWlnaHQgaW1wYWN0IGEgc3BlY2lmaWMgRXRoZXJuZXQgaW1wbGVtZW50YXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgd2hlcmUgdG8gZ28gbmV4dCwgaWYgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjgxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTg6NTIuNTQzNDg5MzY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0ICBmb3VuZCBpbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBvZiBhIHNlcnZpY2UgZG9tYWluLlxcbiAgOTY6XFx0XFx0ICBMaW51eCBicmlkZ2Uvc3dpdGNoIHNvZnR3YXJlIGNhbiB1c2UgdGhlc2UgaW50ZXJmYWNlcyBmb3JcXG4gIDk3OlxcdFxcdCAgZ3Vlc3QgZG9tYWluIG5ldHdvcmsgaW50ZXJjb25uZWN0aXZpdHkgb3IgZ3Vlc3QgZG9tYWluXFxuICA5ODpcXHRcXHQgIGNvbm5lY3Rpb24gdG8gYSBwaHlzaWNhbCBuZXR3b3JrIG9uIGEgc2VydmljZSBkb21haW4uXFxuICA5OTpcXHRcXG4gMTAwOlxcdGNvbmZpZyBOSVVcXG4gMTAxOlxcdFxcdHRyaXN0YXRlIFxcXCJTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gMTAyOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuIDEwMzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTA0OlxcdFxcdGhlbHBcXG4gMTA1OlxcdFxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIHVwb24gU3VuJ3NcXG4gMTA2OlxcdFxcdCAgTmVwdHVuZSBjaGlwc2V0LlxcbiAxMDc6XFx0XFxuIDEwODpcXHRlbmRpZiAjIE5FVF9WRU5ET1JfU1VOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE4OjUyLjU0MzU1NzIzOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjg4MTUwODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emFiaWxpdHkgb2YgdGhlIE5JVSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBOSVVgIGRyaXZlciwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IGlzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyBJdCBsb29rcyBsaWtlIGl0J3MgYSBkcml2ZXIgZm9yIHRoZSBTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQsIHdoaWNoIGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJwaHlzaWNhbCBoYXJkd2FyZS5cIiBUaGUgcXVlc3Rpb24gYmVjb21lczogY2FuIEkgZXZlbiByZWFjaCB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/XG5cbk15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBRRU1VIHByb2JhYmx5ICpkb2Vzbid0KiBlbXVsYXRlIGEgYG5pdWAgbmV0d29yayBjYXJkIGRpcmVjdGx5LiBJIG1lYW4sIGl0IGhhcyBvdGhlciBlbXVsYXRlZCBuZXR3b3JrIGludGVyZmFjZXMgbGlrZSBgbmUya19wY2lgLCBgZTEwMDBgLCBhbmQgc28gb24sIGJ1dCB0aG9zZSBhcmUgZ2VuZXJhbGx5IG9sZGVyIG9yIG1vcmUgY29tbW9uLiAxMEdiaXQgY2FyZHMgYXJlIG9mdGVuIGEgYml0IHRyaWNraWVyIHRvIGVtdWxhdGUsICp1bmxlc3MqIGl0J3Mgc29tZXRoaW5nIHJlbGF0aXZlbHkgc3RhbmRhcmQgbGlrZSB0aGUgaXhnYmUgb3IgZTEwMDBlLiBTbywgSSBuZWVkIHRvIHZlcmlmeS4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCBvZiB0aGUgUUVNVSBkb2NzLCBidXQgdGhlIGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoaXMgaXMgYSBwaHlzaWNhbCBjYXJkLlxuXG5XYWl0LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0aGF0IGlmIGEgZHJpdmVyIHJlcXVpcmVzIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VIGl0IG1pZ2h0IG5vdCBiZSB3b3J0aCBmdXp6aW5nLCBidXQgdGhlbiB0aGVyZSdzIHRoZSBQQ0kgZnV6emVyIGluIFN5emthbGxlciEgVGhlIGRyaXZlciBpcyBsaXN0ZWQgYXMgYSBQQ0kgZGV2aWNlLCBzbyBpdCBtaWdodCBiZSBmdXp6YWJsZS4gYHN5el9wY2lfdnBjaWAgb3Igc2ltaWxhciBjb3VsZCBiZSB1c2VkLlxuXG5TbyB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBjYWxsIG91dCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IG5lZWQgKnBoeXNpY2FsKiBQQ0llIGhhcmR3YXJlIGFzIHBvc3NpYmx5IG5vdCB3b3J0aCBmdXp6aW5nLiBPa2F5LCBpcyBgTklVYCBhIFNtYXJ0TklDIG9yIEdQVT8gTm9wZSwgaXQncyBhIDEwR2JpdCBFdGhlcm5ldCBjYXJkLiBCdXQgdGhlIGluc3RydWN0aW9ucyBtZW50aW9uIHRoYXQgc3l6a2FsbGVyICpjYW4qIGZ1enogKmFueSogUENJIGRyaXZlciBieSBlbXVsYXRpbmcgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBNTUlPL1BJTyByZWdpb25zLCB3aGljaCBtZWFucyB0aGF0IHRoZSBjYXJkIGlzIG5vdCBuZWVkZWQgdG8gZnV6eiB0aGUgY29kZSEgVGhhdCdzIGdvb2QuXG5cblNvLCB0aGUgbmV4dCB0aGluZyB0byBkZXRlcm1pbmUgaXMgd2hldGhlciBpdCBjYW4gYmUgZnV6emFibGUgYnkgc3l6a2FsbGVyLiBTaW5jZSBJIGNhbid0IGRpcmVjdGx5IGNoZWNrIHRoZSBTeXprYWxsZXIgZGVzY3JpcHRpb25zIHRvIHNlZSBpZiBgTklVYCBpcyBkaXJlY3RseSBsaXN0ZWQsIEknbGwgb3BlcmF0ZSB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IFBDSSBuZXR3b3JrIGRyaXZlcnMgKmFyZSogZnV6emFibGUsIGlmIHRoZXkgYXJlIFBDSSBkZXZpY2VzLlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIHJ1Yi4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBwYXRoIGlzICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb3IgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgKm5vdCogZW11bGF0ZWQgaW4gUUVNVS4gYE5JVWAgaXMgdmVuZG9yLXNwZWNpZmljIChTdW4gTmVwdHVuZSkuIEl0J3MgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gSXQgKmRvZXMqIHJlcXVpcmUgYSBwaHlzaWNhbCBQQ0llIGNhcmQuIFRoYXQgc291bmRzIGxpa2UgYSBuby1nbywgcmlnaHQ/XG5cbkJ1dCAqU3l6a2FsbGVyJ3MgUENJIGZ1enplciBjYW4gc3RpbGwqIGZ1enogdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBNTUlPL1BJTyByZWdpb25zLiBJdCBjYW4gdGVjaG5pY2FsbHkgZnV6eiBhbnkgUENJIGRyaXZlci4gU28sIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQgaXMgc3RpbGwgd29ydGggZnV6emluZy4gTm93LCBsZXQncyBzZWUgaWYgYSBmdW5jdGlvbiwgYG5pdV90eGNfc2V0X2ltYXNrYCwgaXMgcmVhY2hhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTMxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MDMuODMxNzEwNjQ2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzU2NTUwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuaXVfdHhjX3NldF9pbWFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTQ2MjU9c3RhdGljIHZvaWQgbml1X3R4Y19lbmFibGVfcG9ydChzdHJ1Y3Qgbml1ICpucCwgaW50IG9uKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTQ2NDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjQ2NDQ6c3RhdGljIHZvaWQgbml1X3R4Y19zZXRfaW1hc2soc3RydWN0IG5pdSAqbnAsIHU2NCBpbWFzaylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNDY0NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NTkzND1zdGF0aWMgaW50IG5pdV9pbml0X2h3KHN0cnVjdCBuaXUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTU5NDAtXFx0bml1X3R4Y19wb3J0X2RtYV9lbmFibGUobnAsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo1OTQxOlxcdG5pdV90eGNfc2V0X2ltYXNrKG5wLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNTk0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MDMuOTM5MjgxMjIzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1NDI0Mzc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTklDIEluaXRpYWxpemF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgTklDIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGlzIGNydWNpYWwgZnVuY3Rpb24sIGBuaXVfaW5pdF9od2AsIGlzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGdldHRpbmcgdGhpbmdzIGdvaW5nLiBJIHNlZSB0aGF0IGBuaXVfaW5pdF9od2AgZ2V0cyBjYWxsZWQgZnJvbSBgbml1X29wZW5gLCB3aGljaCBpcyB0aGUgbmV0d29yayBkZXZpY2UncyBvcGVuIGZ1bmN0aW9uLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogYG5pdV9vcGVuYCBpbiBhIHNjZW5hcmlvIHRoYXQgbWF0dGVycyB0byBtZT9cblxuTm93LCBhc3N1bWluZyB0aGUgUENJIGRldmljZSBwcm9iaW5nIHN1Y2NlZWRzLCB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggaXMgdGhlIGRlc2lyZWQgb3V0Y29tZS4gQnV0IGlmIEkgd2FudCB0byAqdHJpZ2dlciogdGhlIHByb2Nlc3MsIGNvbW1hbmRzIGxpa2UgYGlwIGxpbmsgc2V0IGRldiBldGhYIHVwYCB3aWxsIGtpY2sgb2ZmIGBuaXVfb3BlbmAuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIHdpbGwgdGhlIFBDSSBmdXp6ZXIgYmUgYWJsZSB0byBzdWNjZXNzZnVsbHkgcHJvYmUgdGhlIFBDSSBkZXZpY2U/IFR5cGljYWxseSwgdGhlIFBDSSBmdXp6ZXIgY2FuIHBhc3MgdGhlIHByb2JlIGZ1bmN0aW9uIGlmIGl0IGNhbiBwcm92aWRlIHRoZSBjb3JyZWN0IE1NSU8gcmVhZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbml1X3BjaV9wcm9iZWAgdG8gc2VlIHdoYXQga2luZCBvZiBNTUlPIGludGVyYWN0aW9ucyBpdCBleHBlY3RzLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MDcuOTkzNTI3Njk3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjgyMzk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuaXVfcGNpX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9ODM1Nj1zdGF0aWMgdm9pZCBuaXVfcGNpX3ZwZF92YWxpZGF0ZShzdHJ1Y3Qgbml1ICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy04NDAyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo4NDAzOnN0YXRpYyBpbnQgbml1X3BjaV9wcm9iZV9zcHJvbShzdHJ1Y3Qgbml1ICpucClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtODQwNC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9OTMxND1zdGF0aWMgaW50IG5pdV9nZXRfaW52YXJpYW50cyhzdHJ1Y3Qgbml1ICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05MzU5LVxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjkzNjA6XFx0XFx0XFx0ZXJyID0gbml1X3BjaV9wcm9iZV9zcHJvbShucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTkzNjEtXFx0XFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MDguMDY2MzY2MTE0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDkwMzUyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbml1YCBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gVGhlIGNvZGUgbWVudGlvbnMgYG5pdV9wY2lfcHJvYmVgLCB3aGljaCAqc3Ryb25nbHkqIHN1Z2dlc3RzIGl0J3MgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbi4gVGhhdCBtYWtlcyBzZW5zZTsgdXN1YWxseSwgeW91J2QgZXhwZWN0IGEgUENJIGRyaXZlciB0byBoYXZlIGEgcHJvYmUgZnVuY3Rpb24gdG8gaWRlbnRpZnkgYW5kIGluaXRpYWxpemUgdGhlIGRldmljZS4gU28sIGxldCdzIHN0YXJ0IHRoZXJlLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBsb2NhdGUgdGhhdCBgbml1X3BjaV9wcm9iZWAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gVW5kZXJzdGFuZGluZyB3aGF0IGhhcHBlbnMgZHVyaW5nIHRoZSBwcm9iZSB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaG93IHRoZSBoYXJkd2FyZSBpcyBpbml0aWFsbHkgc2V0IHVwIGFuZCBjb25maWd1cmVkLiBJdCdzIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkZXZpY2UncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxOToxMC45NzU0MDU3NTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTI2ODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwucHJvYmUuKj1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz05OTkxPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuaXVfcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05OTkzLVxcdC5pZF90YWJsZVxcdD0gbml1X3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjk5OTQ6XFx0LnByb2JlXFx0XFx0PSBuaXVfcGNpX2luaXRfb25lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05OTk1LVxcdC5yZW1vdmVcXHRcXHQ9IG5pdV9wY2lfcmVtb3ZlX29uZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz0xMDIyMj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBuaXVfb2ZfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTEwMjI2LVxcdH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjEwMjI3OlxcdC5wcm9iZVxcdFxcdD0gbml1X29mX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy0xMDIyOC1cXHQucmVtb3ZlXFx0XFx0PSBuaXVfb2ZfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxOToxMS4wMzYzMzk1MjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5NTEwNDMyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyBmb3Igbml1X3BjaV9pbml0X29uZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuaXVfcGNpX2luaXRfb25lYCwgd2hpY2gsIGZyb20gd2hhdCBJIGdhdGhlciwgaXMgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIGBuaXVgIGRyaXZlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBhIHN0YW5kYXJkIG5ldHdvcmsgZHJpdmVyP1wiLiBZZXMsIGl0IGFwcGVhcnMgdG8gYmUuXG5cbk5vdywgdGhlIGluc3RydWN0aW9ucyBJIGhhdmUgbGF5IG91dCBzb21lIGNvbnN0cmFpbnRzLiBUaGV5IGhpZ2hsaWdodCBkcml2ZXJzIGZvciB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCAqcmVxdWlyZSogcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGJ5IHN0YW5kYXJkIFFFTVUuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb246IElzIGBuaXVgIGEgU21hcnROSUM/IE5vLCBpdCdzIHRoYXQgb2xkIFN1biBOZXB0dW5lIDEwR2JpdCBFdGhlcm5ldCBjYXJkLiBCdXQgdGhlIGtleSBpcyBcInJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi4gRG9lcyB0aGlzIGJsYW5rZXQgYXBwbHkgdG8gYW55IHBoeXNpY2FsIG5ldHdvcmsgY2FyZCB0aGF0IFFFTVUgZG9lc24ndCBlbXVsYXRlIHBlcmZlY3RseT8gWWVzLCB0aGF0J3MgdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIHJ1bGUuIElmIGl0IHJlcXVpcmVzICphY3R1YWwqIGhhcmR3YXJlLCBhbmQgUUVNVSdzIG5vdCB1cCB0byB0aGUgdGFzaywgdGhlbiBpdCBmYWxscyB1bmRlciB0aGF0IG5vLWZ1enppbmcgY2F0ZWdvcnkuXG5cbk15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgc3l6a2FsbGVyIGlzIGFscmVhZHkgdGVzdGluZyB0aGlzIGRyaXZlciwgd2hpY2ggd291bGQgYmUgYW4gaW5kaWNhdG9yIG9mIGl0IGJlaW5nIHJlYWNoYWJsZS4gVGhlIGNvbW1pdCBtZXNzYWdlIHNob3dzIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAuIEF0IGZpcnN0IGdsYW5jZSwgbXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gd2FzLCBcIlN5emthbGxlciBmb3VuZCBhIGJ1ZyFcIi4gQnV0IHdhaXQuLi4gaXQncyBqdXN0IGEgZHVtbXkgY29tbWl0IGdlbmVyYXRlZCBieSBzeXprYWxsZXIncyB0ZXN0IGluZnJhc3RydWN0dXJlLiBJdCBtZWFucyBzb21lb25lIHN1Ym1pdHRlZCB0aGlzIHBhdGNoIHRvIFN5emthbGxlciBmb3IgdGVzdGluZywgc28gaXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHN5emthbGxlciBjYW4gcmVhY2ggaXQuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGdvIGJhY2sgdG8gdGhlIHJ1bGUuIEkgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgYmFzZWQgb24gdGhpcyBydWxlOlxuXG5cIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4uLi5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5BbHJpZ2h0LCBpcyBgbml1YCBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcj8gTm90IGluIHRoZSBjb250ZXh0IG9mIHRoZSBydWxlJ3MgZXhhbXBsZXMsIGl0J3MganVzdCBhbiBvbGQgRXRoZXJuZXQgY2FyZC4gRG9lcyBpdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGJ5IFFFTVU/IFllcywgYmVjYXVzZSBpdCdzIGEgcGh5c2ljYWwgRXRoZXJuZXQgY2FyZCwgYW5kIGl0IGxvb2tzIGxpa2UgUUVNVSBsaWtlbHkgd291bGRuJ3QgZW11bGF0ZSB0aGlzIGNhcmQuIEJ1dCB0aGUgcXVlc3Rpb24gaXM6IGNhbiBzeXprYWxsZXIncyBQQ0kgZnV6emVyIHJlYWNoIGl0PyBUaGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgY2FuIGluZGVlZCByZWFjaCBQQ0kgcHJvYmUgZnVuY3Rpb25zLCBhbmQgaXQgbWF5IGJlIGFibGUgdG8gcmVhY2ggb3BlbiBmdW5jdGlvbnMgaWYgdGhlIHByb2JlIHN1Y2NlZWRzLlxuXG5UaGUgcHJvYmxlbSB3aXRoIG1hbnkgbmV0d29yayBjYXJkcyBpcyB0aGF0IHRoZXkgaGF2ZSByZXF1aXJlbWVudHMgdGhhdCBhcmUgbW9yZSBjb21wbGV4LiBUaGV5IGhhdmUgRE1BIHJlcXVpcmVtZW50cywgdGhleSByZXF1aXJlIGZpcm13YXJlLCBvciB0aGV5IG1pZ2h0IGhhdmUgY29tcGxleCBNTUlPIGhhbmRzaGFrZXMgdGhhdCBjYW5ub3QgYmUgZWFzaWx5IGd1ZXNzZWQuXG5cblNvLCBpbiB0aGUgZW5kLCBpdCBib2lscyBkb3duIHRvOiBpcyBgbml1YCBhIGRyaXZlciB0aGF0ICpyZXF1aXJlcyogcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJvcGVybHkgZW11bGF0ZWQgYnkgUUVNVT8gWWVzLCB0aGF0IGFwcGVhcnMgdG8gYmUgdGhlIGNhc2UuIFRoZXJlZm9yZSwgZm9sbG93aW5nIHRoZSBydWxlLCBteSBjb25jbHVzaW9uIGxlYW5zIHRvd2FyZHMgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdGhvdWdoIHRvIG1ha2UgYSBmaW5hbCBjYWxsIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDM1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE5OjIxLjk4NzM4Njg3NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTA4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk2MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5NjAwOlxcdFxcbjk2MDE6XFx0XFx0QlVHX09OKCFwIHx8IHAtXFx1MDAzZXBvcnRzW3BvcnRdICE9IG5wKTtcXG45NjAyOlxcdFxcbjk2MDM6XFx0XFx0bmV0aWZfcHJpbnRrKG5wLCBwcm9iZSwgS0VSTl9ERUJVRywgbnAtXFx1MDAzZWRldixcXG45NjA0OlxcdFxcdFxcdCAgICAgXFxcIiVzKCkgcG9ydFsldV1cXFxcblxcXCIsIF9fZnVuY19fLCBwb3J0KTtcXG45NjA1OlxcdFxcbjk2MDY6XFx0XFx0c3ByaW50Zihwb3J0X25hbWUsIFxcXCJwb3J0JWRcXFwiLCBwb3J0KTtcXG45NjA3OlxcdFxcbjk2MDg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bml1X3BhcmVudF9sb2NrKTtcXG45NjA5OlxcdFxcbjk2MTA6XFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNnAtXFx1MDAzZXBsYXRfZGV2LVxcdTAwM2VkZXYua29iaiwgcG9ydF9uYW1lKTtcXG45NjExOlxcdFxcbjk2MTI6XFx0XFx0cC1cXHUwMDNlcG9ydHNbcG9ydF0gPSBOVUxMO1xcbjk2MTM6XFx0XFx0bnAtXFx1MDAzZXBhcmVudCA9IE5VTEw7XFxuOTYxNDpcXHRcXG45NjE1OlxcdFxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZwLVxcdTAwM2VyZWZjbnQpKSB7XFxuOTYxNjpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2cC1cXHUwMDNlbGlzdCk7XFxuOTYxNzpcXHRcXHRcXHRwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwLVxcdTAwM2VwbGF0X2Rldik7XFxuOTYxODpcXHRcXHR9XFxuOTYxOTpcXHRcXG45NjIwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bml1X3BhcmVudF9sb2NrKTtcXG45NjIxOlxcdH1cXG45NjIyOlxcdFxcbjk2MjM6XFx0c3RhdGljIHZvaWQgKm5pdV9wY2lfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG45NjI0OlxcdFxcdFxcdFxcdFxcdCAgICB1NjQgKmhhbmRsZSwgZ2ZwX3QgZmxhZylcXG45NjI1OlxcdHtcXG45NjI2OlxcdFxcdGRtYV9hZGRyX3QgZGg7XFxuOTYyNzpcXHRcXHR2b2lkICpyZXQ7XFxuOTYyODpcXHRcXG45NjI5OlxcdFxcdHJldCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIFxcdTAwMjZkaCwgZmxhZyk7XFxuOTYzMDpcXHRcXHRpZiAocmV0KVxcbjk2MzE6XFx0XFx0XFx0KmhhbmRsZSA9IGRoO1xcbjk2MzI6XFx0XFx0cmV0dXJuIHJldDtcXG45NjMzOlxcdH1cXG45NjM0OlxcdFxcbjk2MzU6XFx0c3RhdGljIHZvaWQgbml1X3BjaV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuOTYzNjpcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmNwdV9hZGRyLCB1NjQgaGFuZGxlKVxcbjk2Mzc6XFx0e1xcbjk2Mzg6XFx0XFx0ZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBjcHVfYWRkciwgaGFuZGxlKTtcXG45NjM5OlxcdH1cXG45NjQwOlxcdFxcbjk2NDE6XFx0c3RhdGljIHU2NCBuaXVfcGNpX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuOTY0MjpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLFxcbjk2NDM6XFx0XFx0XFx0XFx0ICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbilcXG45NjQ0OlxcdHtcXG45NjQ1OlxcdFxcdHJldHVybiBkbWFfbWFwX3BhZ2UoZGV2LCBwYWdlLCBvZmZzZXQsIHNpemUsIGRpcmVjdGlvbik7XFxuOTY0NjpcXHR9XFxuOTY0NzpcXHRcXG45NjQ4OlxcdHN0YXRpYyB2b2lkIG5pdV9wY2lfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfYWRkcmVzcyxcXG45NjQ5OlxcdFxcdFxcdFxcdCAgICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxcbjk2NTA6XFx0e1xcbjk2NTE6XFx0XFx0ZG1hX3VubWFwX3BhZ2UoZGV2LCBkbWFfYWRkcmVzcywgc2l6ZSwgZGlyZWN0aW9uKTtcXG45NjUyOlxcdH1cXG45NjUzOlxcdFxcbjk2NTQ6XFx0c3RhdGljIHU2NCBuaXVfcGNpX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG45NjU1OlxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBzaXplLFxcbjk2NTY6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxcbjk2NTc6XFx0e1xcbjk2NTg6XFx0XFx0cmV0dXJuIGRtYV9tYXBfc2luZ2xlKGRldiwgY3B1X2FkZHIsIHNpemUsIGRpcmVjdGlvbik7XFxuOTY1OTpcXHR9XFxuOTY2MDpcXHRcXG45NjYxOlxcdHN0YXRpYyB2b2lkIG5pdV9wY2lfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9hZGRyZXNzLFxcbjk2NjI6XFx0XFx0XFx0XFx0XFx0IHNpemVfdCBzaXplLFxcbjk2NjM6XFx0XFx0XFx0XFx0XFx0IGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbilcXG45NjY0OlxcdHtcXG45NjY1OlxcdFxcdGRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkcmVzcywgc2l6ZSwgZGlyZWN0aW9uKTtcXG45NjY2OlxcdH1cXG45NjY3OlxcdFxcbjk2Njg6XFx0c3RhdGljIGludCBuaXVfcGNpX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCB1NjQgYWRkcilcXG45NjY5OlxcdHtcXG45NjcwOlxcdFxcdHJldHVybiBkbWFfbWFwcGluZ19lcnJvcihkZXYsIGFkZHIpO1xcbjk2NzE6XFx0fVxcbjk2NzI6XFx0XFxuOTY3MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5pdV9vcHMgbml1X3BjaV9vcHMgPSB7XFxuOTY3NDpcXHRcXHQuYWxsb2NfY29oZXJlbnRcXHQ9IG5pdV9wY2lfYWxsb2NfY29oZXJlbnQsXFxuOTY3NTpcXHRcXHQuZnJlZV9jb2hlcmVudFxcdD0gbml1X3BjaV9mcmVlX2NvaGVyZW50LFxcbjk2NzY6XFx0XFx0Lm1hcF9wYWdlXFx0PSBuaXVfcGNpX21hcF9wYWdlLFxcbjk2Nzc6XFx0XFx0LnVubWFwX3BhZ2VcXHQ9IG5pdV9wY2lfdW5tYXBfcGFnZSxcXG45Njc4OlxcdFxcdC5tYXBfc2luZ2xlXFx0PSBuaXVfcGNpX21hcF9zaW5nbGUsXFxuOTY3OTpcXHRcXHQudW5tYXBfc2luZ2xlXFx0PSBuaXVfcGNpX3VubWFwX3NpbmdsZSxcXG45NjgwOlxcdFxcdC5tYXBwaW5nX2Vycm9yXFx0PSBuaXVfcGNpX21hcHBpbmdfZXJyb3IsXFxuOTY4MTpcXHR9O1xcbjk2ODI6XFx0XFxuOTY4MzpcXHRzdGF0aWMgdm9pZCBuaXVfZHJpdmVyX3ZlcnNpb24odm9pZClcXG45Njg0OlxcdHtcXG45Njg1OlxcdFxcdHN0YXRpYyBpbnQgbml1X3ZlcnNpb25fcHJpbnRlZDtcXG45Njg2OlxcdFxcbjk2ODc6XFx0XFx0aWYgKG5pdV92ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKVxcbjk2ODg6XFx0XFx0XFx0cHJfaW5mbyhcXFwiJXNcXFwiLCB2ZXJzaW9uKTtcXG45Njg5OlxcdH1cXG45NjkwOlxcdFxcbjk2OTE6XFx0c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuaXVfYWxsb2NfYW5kX2luaXQoc3RydWN0IGRldmljZSAqZ2VuX2RldixcXG45NjkyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuOTY5MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLFxcbjk2OTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgbml1X29wcyAqb3BzLCB1OCBwb3J0KVxcbjk2OTU6XFx0e1xcbjk2OTY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG45Njk3OlxcdFxcdHN0cnVjdCBuaXUgKm5wO1xcbjk2OTg6XFx0XFxuOTY5OTpcXHRcXHRkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IG5pdSksIE5JVV9OVU1fVFhDSEFOKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MjEuOTg3NzQwMTY2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTQ1NzM5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBuaXVfcGNpX2luaXRfb25lYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIFBDSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24g4oCTIHNwZWNpZmljYWxseSwgYG5pdV9wY2lfaW5pdF9vbmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2tpcCB0aGUgZmx1ZmYgYW5kIHNlZSBob3cgdGhpcyBkcml2ZXIgaGFuZGxlcyB0aGUgZGV2aWNlIGNvbWluZyBvbmxpbmUuIEknbSBsb29raW5nIGZvciB0aGUgY29yZSBzdGVwczogcmVzb3VyY2UgYWxsb2NhdGlvbiwgcmVnaXN0ZXIgYWNjZXNzIGluaXRpYWxpemF0aW9uLCBhbnkgZGV2aWNlLXNwZWNpZmljIHNldHVw4oCmIHRoYXQgc29ydCBvZiB0aGluZy4gSSBleHBlY3QgdG8gc2VlIHRoZSBzdGFuZGFyZCBQQ0kgcHJvYmUgcHJvY2VzcyB3aXRoIGFsbCB0aGUgc3RhbmRhcmQgUENJIGNhbGxzLCBub3RoaW5nIHRvbyBmYW5jeSAoeWV0KS4gSSdtIGFudGljaXBhdGluZyB0aGUgdXN1YWwgc3RlcHM6IG1hcHBpbmcgdGhlIEJBUnMsIG1heWJlIHNvbWUgaW50ZXJydXB0IGhhbmRsaW5nIHNldHVwLCBwb3NzaWJseSBzb21lIERNQSBlbmdpbmUgY29uZmlndXJhdGlvbiBpZiB0aGlzIE5JQyBpcyBvZiB0aGF0IHR5cGUuIEkgYW0gY3VyaW91cyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB2ZW5kb3Itc3BlY2lmaWMgcGVjdWxpYXJpdGllcyB0aGlzIGRyaXZlciBuZWVkcyB0byBoYW5kbGUuIEknbGwgYmUgc2NydXRpbml6aW5nIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHRoZXNlIHN0YWdlcyDigJMgYSByb2J1c3QgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgaXMgYSBzaWduIG9mIGEgd2VsbC13cml0dGVuIGRyaXZlci4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUsIGxvb2tpbmcgZm9yIHRoZSBjcml0aWNhbCBwYXRoLCB0aGUgY29yZSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nIGNvbnRpbmdlbmNpZXMuIEknbSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSB0aGluZ3MgY291bGQgZ28gd3JvbmcsIHNvIEkgY2FuIHNlZSB3aGF0IHRoZSBhdXRob3IncyBhbnRpY2lwYXRlZCBmYWlsdXJlIG1vZGVzIGFyZSBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgcG93ZXIgbWFuYWdlbWVudC1yZWxhdGVkIGluaXRpYWxpemF0aW9uIGlmIGFwcGxpY2FibGUgLSBsb29raW5nIGZvciBhbnl0aGluZyBkZWFsaW5nIHdpdGggY2xvY2sgZ2F0aW5nIG9yIHZvbHRhZ2Ugc2V0dGluZ3MuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIChvciBwb3RlbnRpYWwgaXNzdWVzKSBhd2FpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MjUuODgyMzE2OTA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNjg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTcwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjk3MDA6XFx0XFx0aWYgKCFkZXYpXFxuOTcwMTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG45NzAyOlxcdFxcbjk3MDM6XFx0XFx0U0VUX05FVERFVl9ERVYoZGV2LCBnZW5fZGV2KTtcXG45NzA0OlxcdFxcbjk3MDU6XFx0XFx0bnAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjk3MDY6XFx0XFx0bnAtXFx1MDAzZWRldiA9IGRldjtcXG45NzA3OlxcdFxcdG5wLVxcdTAwM2VwZGV2ID0gcGRldjtcXG45NzA4OlxcdFxcdG5wLVxcdTAwM2VvcCA9IG9wO1xcbjk3MDk6XFx0XFx0bnAtXFx1MDAzZWRldmljZSA9IGdlbl9kZXY7XFxuOTcxMDpcXHRcXHRucC1cXHUwMDNlb3BzID0gb3BzO1xcbjk3MTE6XFx0XFxuOTcxMjpcXHRcXHRucC1cXHUwMDNlbXNnX2VuYWJsZSA9IG5pdV9kZWJ1ZztcXG45NzEzOlxcdFxcbjk3MTQ6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm5wLVxcdTAwM2Vsb2NrKTtcXG45NzE1OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2bnAtXFx1MDAzZXJlc2V0X3Rhc2ssIG5pdV9yZXNldF90YXNrKTtcXG45NzE2OlxcdFxcbjk3MTc6XFx0XFx0bnAtXFx1MDAzZXBvcnQgPSBwb3J0O1xcbjk3MTg6XFx0XFxuOTcxOTpcXHRcXHRyZXR1cm4gZGV2O1xcbjk3MjA6XFx0fVxcbjk3MjE6XFx0XFxuOTcyMjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5pdV9uZXRkZXZfb3BzID0ge1xcbjk3MjM6XFx0XFx0Lm5kb19vcGVuXFx0XFx0PSBuaXVfb3BlbixcXG45NzI0OlxcdFxcdC5uZG9fc3RvcFxcdFxcdD0gbml1X2Nsb3NlLFxcbjk3MjU6XFx0XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBuaXVfc3RhcnRfeG1pdCxcXG45NzI2OlxcdFxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IG5pdV9nZXRfc3RhdHMsXFxuOTcyNzpcXHRcXHQubmRvX3NldF9yeF9tb2RlXFx0PSBuaXVfc2V0X3J4X21vZGUsXFxuOTcyODpcXHRcXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbjk3Mjk6XFx0XFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IG5pdV9zZXRfbWFjX2FkZHIsXFxuOTczMDpcXHRcXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gbml1X2lvY3RsLFxcbjk3MzE6XFx0XFx0Lm5kb190eF90aW1lb3V0XFx0XFx0PSBuaXVfdHhfdGltZW91dCxcXG45NzMyOlxcdFxcdC5uZG9fY2hhbmdlX210dVxcdFxcdD0gbml1X2NoYW5nZV9tdHUsXFxuOTczMzpcXHR9O1xcbjk3MzQ6XFx0XFxuOTczNTpcXHRzdGF0aWMgdm9pZCBuaXVfYXNzaWduX25ldGRldl9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG45NzM2OlxcdHtcXG45NzM3OlxcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZuaXVfbmV0ZGV2X29wcztcXG45NzM4OlxcdFxcdGRldi1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2bml1X2V0aHRvb2xfb3BzO1xcbjk3Mzk6XFx0XFx0ZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IE5JVV9UWF9USU1FT1VUO1xcbjk3NDA6XFx0fVxcbjk3NDE6XFx0XFxuOTc0MjpcXHRzdGF0aWMgdm9pZCBuaXVfZGV2aWNlX2Fubm91bmNlKHN0cnVjdCBuaXUgKm5wKVxcbjk3NDM6XFx0e1xcbjk3NDQ6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5wLVxcdTAwM2VkZXY7XFxuOTc0NTpcXHRcXG45NzQ2OlxcdFxcdHByX2luZm8oXFxcIiVzOiBOSVUgRXRoZXJuZXQgJXBNXFxcXG5cXFwiLCBkZXYtXFx1MDAzZW5hbWUsIGRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbjk3NDc6XFx0XFxuOTc0ODpcXHRcXHRpZiAobnAtXFx1MDAzZXBhcmVudC1cXHUwMDNlcGxhdF90eXBlID09IFBMQVRfVFlQRV9BVENBX0NQMzIyMCkge1xcbjk3NDk6XFx0XFx0XFx0cHJfaW5mbyhcXFwiJXM6IFBvcnQgdHlwZVslc10gbW9kZVslczolc10gWENWUlslc10gcGh5WyVzXVxcXFxuXFxcIixcXG45NzUwOlxcdFxcdFxcdFxcdFxcdGRldi1cXHUwMDNlbmFtZSxcXG45NzUxOlxcdFxcdFxcdFxcdFxcdChucC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOSVVfRkxBR1NfWE1BQyA/IFxcXCJYTUFDXFxcIiA6IFxcXCJCTUFDXFxcIiksXFxuOTc1MjpcXHRcXHRcXHRcXHRcXHQobnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTklVX0ZMQUdTXzEwRyA/IFxcXCIxMEdcXFwiIDogXFxcIjFHXFxcIiksXFxuOTc1MzpcXHRcXHRcXHRcXHRcXHQobnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTklVX0ZMQUdTX0ZJQkVSID8gXFxcIlJHTUlJIEZJQkVSXFxcIiA6IFxcXCJTRVJERVNcXFwiKSxcXG45NzU0OlxcdFxcdFxcdFxcdFxcdChucC1cXHUwMDNlbWFjX3hjdnIgPT0gTUFDX1hDVlJfTUlJID8gXFxcIk1JSVxcXCIgOlxcbjk3NTU6XFx0XFx0XFx0XFx0XFx0IChucC1cXHUwMDNlbWFjX3hjdnIgPT0gTUFDX1hDVlJfUENTID8gXFxcIlBDU1xcXCIgOiBcXFwiWFBDU1xcXCIpKSxcXG45NzU2OlxcdFxcdFxcdFxcdFxcdG5wLVxcdTAwM2V2cGQucGh5X3R5cGUpO1xcbjk3NTc6XFx0XFx0fSBlbHNlIHtcXG45NzU4OlxcdFxcdFxcdHByX2luZm8oXFxcIiVzOiBQb3J0IHR5cGVbJXNdIG1vZGVbJXM6JXNdIFhDVlJbJXNdIHBoeVslc11cXFxcblxcXCIsXFxuOTc1OTpcXHRcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZW5hbWUsXFxuOTc2MDpcXHRcXHRcXHRcXHRcXHQobnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTklVX0ZMQUdTX1hNQUMgPyBcXFwiWE1BQ1xcXCIgOiBcXFwiQk1BQ1xcXCIpLFxcbjk3NjE6XFx0XFx0XFx0XFx0XFx0KG5wLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5JVV9GTEFHU18xMEcgPyBcXFwiMTBHXFxcIiA6IFxcXCIxR1xcXCIpLFxcbjk3NjI6XFx0XFx0XFx0XFx0XFx0KG5wLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5JVV9GTEFHU19GSUJFUiA/IFxcXCJGSUJFUlxcXCIgOlxcbjk3NjM6XFx0XFx0XFx0XFx0XFx0IChucC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOSVVfRkxBR1NfWENWUl9TRVJERVMgPyBcXFwiU0VSREVTXFxcIiA6XFxuOTc2NDpcXHRcXHRcXHRcXHRcXHQgIFxcXCJDT1BQRVJcXFwiKSksXFxuOTc2NTpcXHRcXHRcXHRcXHRcXHQobnAtXFx1MDAzZW1hY194Y3ZyID09IE1BQ19YQ1ZSX01JSSA/IFxcXCJNSUlcXFwiIDpcXG45NzY2OlxcdFxcdFxcdFxcdFxcdCAobnAtXFx1MDAzZW1hY194Y3ZyID09IE1BQ19YQ1ZSX1BDUyA/IFxcXCJQQ1NcXFwiIDogXFxcIlhQQ1NcXFwiKSksXFxuOTc2NzpcXHRcXHRcXHRcXHRcXHRucC1cXHUwMDNldnBkLnBoeV90eXBlKTtcXG45NzY4OlxcdFxcdH1cXG45NzY5OlxcdH1cXG45NzcwOlxcdFxcbjk3NzE6XFx0c3RhdGljIHZvaWQgbml1X3NldF9iYXNpY19mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjk3NzI6XFx0e1xcbjk3NzM6XFx0XFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU0gfCBORVRJRl9GX1JYSEFTSDtcXG45Nzc0OlxcdFxcdGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8IE5FVElGX0ZfUlhDU1VNO1xcbjk3NzU6XFx0fVxcbjk3NzY6XFx0XFxuOTc3NzpcXHRzdGF0aWMgaW50IG5pdV9wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuOTc3ODpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG45Nzc5OlxcdHtcXG45NzgwOlxcdFxcdHVuaW9uIG5pdV9wYXJlbnRfaWQgcGFyZW50X2lkO1xcbjk3ODE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG45NzgyOlxcdFxcdHN0cnVjdCBuaXUgKm5wO1xcbjk3ODM6XFx0XFx0aW50IGVycjtcXG45Nzg0OlxcdFxcbjk3ODU6XFx0XFx0bml1X2RyaXZlcl92ZXJzaW9uKCk7XFxuOTc4NjpcXHRcXG45Nzg3OlxcdFxcdGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpO1xcbjk3ODg6XFx0XFx0aWYgKGVycikge1xcbjk3ODk6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuOTc5MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjk3OTE6XFx0XFx0fVxcbjk3OTI6XFx0XFxuOTc5MzpcXHRcXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgXFx1MDAyNiBJT1JFU09VUkNFX01FTSkgfHxcXG45Nzk0OlxcdFxcdCAgICAhKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAyKSBcXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSkge1xcbjk3OTU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiQ2Fubm90IGZpbmQgcHJvcGVyIFBDSSBkZXZpY2UgYmFzZSBhZGRyZXNzZXMsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG45Nzk2OlxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuOTc5NzpcXHRcXHRcXHRnb3RvIGVycl9vdXRfZGlzYWJsZV9wZGV2O1xcbjk3OTg6XFx0XFx0fVxcbjk3OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE5OjI1Ljg4MjY1NTYzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcxMzUwMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYG5pdV9wY2lfaW5pdF9vbmVgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgbml1X3BjaV9pbml0X29uZWAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoZSBuYW1lIGluc3RhbnRseSwgaXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBOSUMgZHJpdmVyIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSB0aGUgUENJIGluaXRpYWxpemF0aW9uIHBhdGggZm9yIHRoZSBOSVUgKE5ldHdvcmsgSW50ZXJmYWNlIFVuaXQpLiBLbm93aW5nIGl0J3MgUENJLWZvY3VzZWQgYWxyZWFkeSBnaXZlcyBtZSBjb250ZXh0IOKAkyBJJ20gYW50aWNpcGF0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIHByb2JhYmx5IHNvbWUgZGV2aWNlLXNwZWNpZmljIHNldHVwIGJhc2VkIG9uIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBoZXJlOyBpbmNvcnJlY3Qgc2VxdWVuY2UgZHVyaW5nIGluaXQgY2FuIGxlYWQgdG8gdW5wcmVkaWN0YWJsZSByZXN1bHRzIGluIHRoZSBsb25nIHJ1bi4gTGV0J3Mgc2VlIGhvdyB0aGlzIHRoaW5nIGFjdHVhbGx5IHRpY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MjkuMTU0MDA5MTA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNDcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTgwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjk4MDA6XFx0XFx0ZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTU9EVUxFX05BTUUpO1xcbjk4MDE6XFx0XFx0aWYgKGVycikge1xcbjk4MDI6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuOTgwMzpcXHRcXHRcXHRnb3RvIGVycl9vdXRfZGlzYWJsZV9wZGV2O1xcbjk4MDQ6XFx0XFx0fVxcbjk4MDU6XFx0XFxuOTgwNjpcXHRcXHRpZiAoIXBjaV9pc19wY2llKHBkZXYpKSB7XFxuOTgwNzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJDYW5ub3QgZmluZCBQQ0kgRXhwcmVzcyBjYXBhYmlsaXR5LCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuOTgwODpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjk4MDk6XFx0XFx0XFx0Z290byBlcnJfb3V0X2ZyZWVfcmVzO1xcbjk4MTA6XFx0XFx0fVxcbjk4MTE6XFx0XFxuOTgxMjpcXHRcXHRkZXYgPSBuaXVfYWxsb2NfYW5kX2luaXQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGRldiwgTlVMTCxcXG45ODEzOlxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bml1X3BjaV9vcHMsIFBDSV9GVU5DKHBkZXYtXFx1MDAzZWRldmZuKSk7XFxuOTgxNDpcXHRcXHRpZiAoIWRldikge1xcbjk4MTU6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG45ODE2OlxcdFxcdFxcdGdvdG8gZXJyX291dF9mcmVlX3JlcztcXG45ODE3OlxcdFxcdH1cXG45ODE4OlxcdFxcdG5wID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG45ODE5OlxcdFxcbjk4MjA6XFx0XFx0bWVtc2V0KFxcdTAwMjZwYXJlbnRfaWQsIDAsIHNpemVvZihwYXJlbnRfaWQpKTtcXG45ODIxOlxcdFxcdHBhcmVudF9pZC5wY2kuZG9tYWluID0gcGNpX2RvbWFpbl9ucihwZGV2LVxcdTAwM2VidXMpO1xcbjk4MjI6XFx0XFx0cGFyZW50X2lkLnBjaS5idXMgPSBwZGV2LVxcdTAwM2VidXMtXFx1MDAzZW51bWJlcjtcXG45ODIzOlxcdFxcdHBhcmVudF9pZC5wY2kuZGV2aWNlID0gUENJX1NMT1QocGRldi1cXHUwMDNlZGV2Zm4pO1xcbjk4MjQ6XFx0XFxuOTgyNTpcXHRcXHRucC1cXHUwMDNlcGFyZW50ID0gbml1X2dldF9wYXJlbnQobnAsIFxcdTAwMjZwYXJlbnRfaWQsXFxuOTgyNjpcXHRcXHRcXHRcXHRcXHQgICAgUExBVF9UWVBFX0FUTEFTKTtcXG45ODI3OlxcdFxcdGlmICghbnAtXFx1MDAzZXBhcmVudCkge1xcbjk4Mjg6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG45ODI5OlxcdFxcdFxcdGdvdG8gZXJyX291dF9mcmVlX2RldjtcXG45ODMwOlxcdFxcdH1cXG45ODMxOlxcdFxcbjk4MzI6XFx0XFx0cGNpZV9jYXBhYmlsaXR5X2NsZWFyX2FuZF9zZXRfd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNUTCxcXG45ODMzOlxcdFxcdFxcdFBDSV9FWFBfREVWQ1RMX05PU05PT1BfRU4sXFxuOTgzNDpcXHRcXHRcXHRQQ0lfRVhQX0RFVkNUTF9DRVJFIHwgUENJX0VYUF9ERVZDVExfTkZFUkUgfFxcbjk4MzU6XFx0XFx0XFx0UENJX0VYUF9ERVZDVExfRkVSRSB8IFBDSV9FWFBfREVWQ1RMX1VSUkUgfFxcbjk4MzY6XFx0XFx0XFx0UENJX0VYUF9ERVZDVExfUkVMQVhfRU4pO1xcbjk4Mzc6XFx0XFxuOTgzODpcXHRcXHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIERNQV9CSVRfTUFTSyg0NCkpO1xcbjk4Mzk6XFx0XFx0aWYgKCFlcnIpXFxuOTg0MDpcXHRcXHRcXHRkZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTtcXG45ODQxOlxcdFxcdGlmIChlcnIpIHtcXG45ODQyOlxcdFxcdFxcdGVyciA9IGRtYV9zZXRfbWFzayhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBETUFfQklUX01BU0soMzIpKTtcXG45ODQzOlxcdFxcdFxcdGlmIChlcnIpIHtcXG45ODQ0OlxcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmdcXFxcblxcXCIpO1xcbjk4NDU6XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0X3JlbGVhc2VfcGFyZW50O1xcbjk4NDY6XFx0XFx0XFx0fVxcbjk4NDc6XFx0XFx0fVxcbjk4NDg6XFx0XFxuOTg0OTpcXHRcXHRuaXVfc2V0X2Jhc2ljX2ZlYXR1cmVzKGRldik7XFxuOTg1MDpcXHRcXG45ODUxOlxcdFxcdGRldi1cXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfVU5JQ0FTVF9GTFQ7XFxuOTg1MjpcXHRcXG45ODUzOlxcdFxcdG5wLVxcdTAwM2VyZWdzID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIDApO1xcbjk4NTQ6XFx0XFx0aWYgKCFucC1cXHUwMDNlcmVncykge1xcbjk4NTU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiQ2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuOTg1NjpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjk4NTc6XFx0XFx0XFx0Z290byBlcnJfb3V0X3JlbGVhc2VfcGFyZW50O1xcbjk4NTg6XFx0XFx0fVxcbjk4NTk6XFx0XFxuOTg2MDpcXHRcXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcXG45ODYxOlxcdFxcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbjk4NjI6XFx0XFxuOTg2MzpcXHRcXHRkZXYtXFx1MDAzZWlycSA9IHBkZXYtXFx1MDAzZWlycTtcXG45ODY0OlxcdFxcbjk4NjU6XFx0XFx0LyogTVRVIHJhbmdlOiA2OCAtIDkyMTYgKi9cXG45ODY2OlxcdFxcdGRldi1cXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xcbjk4Njc6XFx0XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gTklVX01BWF9NVFU7XFxuOTg2ODpcXHRcXG45ODY5OlxcdFxcdG5pdV9hc3NpZ25fbmV0ZGV2X29wcyhkZXYpO1xcbjk4NzA6XFx0XFxuOTg3MTpcXHRcXHRlcnIgPSBuaXVfZ2V0X2ludmFyaWFudHMobnApO1xcbjk4NzI6XFx0XFx0aWYgKGVycikge1xcbjk4NzM6XFx0XFx0XFx0aWYgKGVyciAhPSAtRU5PREVWKVxcbjk4NzQ6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiUHJvYmxlbSBmZXRjaGluZyBpbnZhcmlhbnRzIG9mIGNoaXAsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG45ODc1OlxcdFxcdFxcdGdvdG8gZXJyX291dF9pb3VubWFwO1xcbjk4NzY6XFx0XFx0fVxcbjk4Nzc6XFx0XFxuOTg3ODpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcXG45ODc5OlxcdFxcdGlmIChlcnIpIHtcXG45ODgwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuOTg4MTpcXHRcXHRcXHRnb3RvIGVycl9vdXRfaW91bm1hcDtcXG45ODgyOlxcdFxcdH1cXG45ODgzOlxcdFxcbjk4ODQ6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7XFxuOTg4NTpcXHRcXG45ODg2OlxcdFxcdG5pdV9kZXZpY2VfYW5ub3VuY2UobnApO1xcbjk4ODc6XFx0XFxuOTg4ODpcXHRcXHRyZXR1cm4gMDtcXG45ODg5OlxcdFxcbjk4OTA6XFx0ZXJyX291dF9pb3VubWFwOlxcbjk4OTE6XFx0XFx0aWYgKG5wLVxcdTAwM2VyZWdzKSB7XFxuOTg5MjpcXHRcXHRcXHRpb3VubWFwKG5wLVxcdTAwM2VyZWdzKTtcXG45ODkzOlxcdFxcdFxcdG5wLVxcdTAwM2VyZWdzID0gTlVMTDtcXG45ODk0OlxcdFxcdH1cXG45ODk1OlxcdFxcbjk4OTY6XFx0ZXJyX291dF9yZWxlYXNlX3BhcmVudDpcXG45ODk3OlxcdFxcdG5pdV9wdXRfcGFyZW50KG5wKTtcXG45ODk4OlxcdFxcbjk4OTk6XFx0ZXJyX291dF9mcmVlX2RldjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MjkuMTU0MzQ2MjM4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjM3NDM0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgbml1X2dldF9pbnZhcmlhbnRzYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRoZSBkZWJ1Z2dlcidzIGhpdCBhIGNhbGwgdG8gYG5pdV9nZXRfaW52YXJpYW50c2AuIFRpbWUgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3Mgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGFjY29tcGxpc2guIEdpdmVuIHRoZSBuYW1lLCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIGRlcml2ZSBvciByZXRyaWV2ZSBpbnZhcmlhbnRzIHJlbGF0ZWQgdG8gdGhpcyBzcGVjaWZpYyBOSVUgKE5ldHdvcmsgSW50ZXJmYWNlIFVuaXQpIGNvbnRleHQuIFBlcmhhcHMgaXQncyBxdWVyeWluZyBoYXJkd2FyZSByZWdpc3RlcnMsIGFuYWx5emluZyBkYXRhIHN0cnVjdHVyZXMsIG9yIHJlbHlpbmcgb24gc29tZSBwcmUtY2FsY3VsYXRlZCBzdGF0ZS5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBkZWVwIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEYXRhIFNvdXJjZXM6KiogV2hhdCBzb3VyY2VzIG9mIGluZm9ybWF0aW9uIGFyZSBiZWluZyB0YXBwZWQ/IEhhcmR3YXJlIHJlZ2lzdGVycywgY29uZmlndXJhdGlvbiBmaWxlcywgaW50ZXJuYWwgc3RhdGUsIG5ldHdvcmsgdHJhZmZpYywgZXRjLj9cbiogICAqKkludmFyaWFudHMgRGVmaW5lZDoqKiBXaGF0IGNvbnN0aXR1dGVzIGFuIFwiaW52YXJpYW50XCIgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBvcGVyYXRpb25hbCBwYXJhbWV0ZXJzIChNVFUsIHNwZWVkKSwgaGFyZHdhcmUgc3RhdHVzIChsaW5rIHVwL2Rvd24sIGVycm9yIGNvdW50cyksIG9yIHNvbWUgaGlnaC1sZXZlbCBzeXN0ZW0gcHJvcGVydHk/IElzIGl0IGxvb2tpbmcgZm9yIGNlcnRhaW4gcGF0dGVybnMsIGJvdW5kcywgb3IgcmVsYXRpb25zaGlwcz9cbiogICAqKkRlcml2YXRpb24gTG9naWM6KiogSG93IGFyZSB0aGVzZSBpbnZhcmlhbnRzIGJlaW5nIGNhbGN1bGF0ZWQgb3IgcmV0cmlldmVkPyBJcyBpdCBhIGRpcmVjdCBsb29rdXAsIGEgc2VyaWVzIG9mIGNhbGN1bGF0aW9ucywgb3IgYSBzdGF0ZSBtYWNoaW5lPyBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuXG4qICAgKipFcnJvciBIYW5kbGluZy9FZGdlIENhc2VzOioqIEhvdyBkb2VzIHRoZSBmdW5jdGlvbiBoYW5kbGUgdW5leHBlY3RlZCBzaXR1YXRpb25zPyBXaGF0IGFyZSB0aGUgZmFpbHVyZSBtb2RlcywgYW5kIGhvdyBhcmUgdGhleSByZXBvcnRlZD8gV2hhdCBraW5kIG9mIGVycm9yLWNoZWNraW5nIGlzIHByZXNlbnQ/XG4qICAgKipQZXJmb3JtYW5jZToqKiBHaXZlbiB3aGVyZSB3ZSBhcmUgaW4gdGhlIGNhbGwgc3RhY2ssIHdoYXQncyB0aGUgY29tcHV0YXRpb25hbCBjb21wbGV4aXR5IG9mIHRoaXMgZnVuY3Rpb24/IEFtIEkgbGlrZWx5IHRvIGVuY291bnRlciBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaGVyZT9cblxuTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZXN0YWJsaXNoIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IFwiaW52YXJpYW50c1wiIHRoaXMgZnVuY3Rpb24gaXMgZGVhbGluZyB3aXRoLiBUaGUgc3BlY2lmaWNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBtaWdodCBiZSBsZXNzIGltcG9ydGFudCBpbml0aWFsbHksIGJ1dCBJJ2xsIG5lZWQgdG8gcmVjb2duaXplIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBmbG93LiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBhbmQgd29yayBiYWNrd2FyZCBmcm9tIHRoZXJlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTU1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxOTozMy42NzgwOTM2MjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MzE0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTMxNDpcXHRzdGF0aWMgaW50IG5pdV9nZXRfaW52YXJpYW50cyhzdHJ1Y3Qgbml1ICpucClcXG45MzE1OlxcdHtcXG45MzE2OlxcdFxcdGludCBlcnIsIGhhdmVfcHJvcHM7XFxuOTMxNzpcXHRcXHR1MzIgb2Zmc2V0O1xcbjkzMTg6XFx0XFxuOTMxOTpcXHRcXHRlcnIgPSBuaXVfZ2V0X29mX3Byb3BzKG5wKTtcXG45MzIwOlxcdFxcdGlmIChlcnIgPT0gLUVOT0RFVilcXG45MzIxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuOTMyMjpcXHRcXG45MzIzOlxcdFxcdGhhdmVfcHJvcHMgPSAhZXJyO1xcbjkzMjQ6XFx0XFxuOTMyNTpcXHRcXHRlcnIgPSBuaXVfaW5pdF9tYWNfaXBwX3Bjc19iYXNlKG5wKTtcXG45MzI2OlxcdFxcdGlmIChlcnIpXFxuOTMyNzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjkzMjg6XFx0XFxuOTMyOTpcXHRcXHRpZiAoaGF2ZV9wcm9wcykge1xcbjkzMzA6XFx0XFx0XFx0ZXJyID0gbml1X2dldF9hbmRfdmFsaWRhdGVfcG9ydChucCk7XFxuOTMzMTpcXHRcXHRcXHRpZiAoZXJyKVxcbjkzMzI6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG45MzMzOlxcdFxcbjkzMzQ6XFx0XFx0fSBlbHNlICB7XFxuOTMzNTpcXHRcXHRcXHRpZiAobnAtXFx1MDAzZXBhcmVudC1cXHUwMDNlcGxhdF90eXBlID09IFBMQVRfVFlQRV9OSVUpXFxuOTMzNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MzM3OlxcdFxcbjkzMzg6XFx0XFx0XFx0bnc2NChFU1BDX1BJT19FTiwgRVNQQ19QSU9fRU5fRU5BQkxFKTtcXG45MzM5OlxcdFxcdFxcdG9mZnNldCA9IG5pdV9wY2lfdnBkX29mZnNldChucCk7XFxuOTM0MDpcXHRcXHRcXHRuZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC1cXHUwMDNlZGV2LFxcbjkzNDE6XFx0XFx0XFx0XFx0ICAgICBcXFwiJXMoKSBWUEQgb2Zmc2V0IFslMDh4XVxcXFxuXFxcIiwgX19mdW5jX18sIG9mZnNldCk7XFxuOTM0MjpcXHRcXHRcXHRpZiAob2Zmc2V0KSB7XFxuOTM0MzpcXHRcXHRcXHRcXHRlcnIgPSBuaXVfcGNpX3ZwZF9mZXRjaChucCwgb2Zmc2V0KTtcXG45MzQ0OlxcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjkzNDU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG45MzQ2OlxcdFxcdFxcdH1cXG45MzQ3OlxcdFxcdFxcdG53NjQoRVNQQ19QSU9fRU4sIDApO1xcbjkzNDg6XFx0XFxuOTM0OTpcXHRcXHRcXHRpZiAobnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTklVX0ZMQUdTX1ZQRF9WQUxJRCkge1xcbjkzNTA6XFx0XFx0XFx0XFx0bml1X3BjaV92cGRfdmFsaWRhdGUobnApO1xcbjkzNTE6XFx0XFx0XFx0XFx0ZXJyID0gbml1X2dldF9hbmRfdmFsaWRhdGVfcG9ydChucCk7XFxuOTM1MjpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbjkzNTM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG45MzU0OlxcdFxcdFxcdH1cXG45MzU1OlxcdFxcbjkzNTY6XFx0XFx0XFx0aWYgKCEobnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTklVX0ZMQUdTX1ZQRF9WQUxJRCkpIHtcXG45MzU3OlxcdFxcdFxcdFxcdGVyciA9IG5pdV9nZXRfYW5kX3ZhbGlkYXRlX3BvcnQobnApO1xcbjkzNTg6XFx0XFx0XFx0XFx0aWYgKGVycilcXG45MzU5OlxcdFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuOTM2MDpcXHRcXHRcXHRcXHRlcnIgPSBuaXVfcGNpX3Byb2JlX3Nwcm9tKG5wKTtcXG45MzYxOlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuOTM2MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjkzNjM6XFx0XFx0XFx0fVxcbjkzNjQ6XFx0XFx0fVxcbjkzNjU6XFx0XFxuOTM2NjpcXHRcXHRlcnIgPSBuaXVfcHJvYmVfcG9ydHMobnApO1xcbjkzNjc6XFx0XFx0aWYgKGVycilcXG45MzY4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuOTM2OTpcXHRcXG45MzcwOlxcdFxcdG5pdV9sZGdfaW5pdChucCk7XFxuOTM3MTpcXHRcXG45MzcyOlxcdFxcdG5pdV9jbGFzc2lmaWVyX3N3c3RhdGVfaW5pdChucCk7XFxuOTM3MzpcXHRcXHRuaXVfbGlua19jb25maWdfaW5pdChucCk7XFxuOTM3NDpcXHRcXG45Mzc1OlxcdFxcdGVyciA9IG5pdV9kZXRlcm1pbmVfcGh5X2Rpc3Bvc2l0aW9uKG5wKTtcXG45Mzc2OlxcdFxcdGlmICghZXJyKVxcbjkzNzc6XFx0XFx0XFx0ZXJyID0gbml1X2luaXRfbGluayhucCk7XFxuOTM3ODpcXHRcXG45Mzc5OlxcdFxcdHJldHVybiBlcnI7XFxuOTM4MDpcXHR9XFxuOTM4MTpcXHRcXG45MzgyOlxcdHN0YXRpYyBMSVNUX0hFQUQobml1X3BhcmVudF9saXN0KTtcXG45MzgzOlxcdHN0YXRpYyBERUZJTkVfTVVURVgobml1X3BhcmVudF9sb2NrKTtcXG45Mzg0OlxcdHN0YXRpYyBpbnQgbml1X3BhcmVudF9pbmRleDtcXG45Mzg1OlxcdFxcbjkzODY6XFx0c3RhdGljIHNzaXplX3Qgc2hvd19wb3J0X3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuOTM4NzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuOTM4ODpcXHR7XFxuOTM4OTpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpO1xcbjkzOTA6XFx0XFx0c3RydWN0IG5pdV9wYXJlbnQgKnAgPSBkZXZfZ2V0X3BsYXRkYXRhKFxcdTAwMjZwbGF0X2Rldi1cXHUwMDNlZGV2KTtcXG45MzkxOlxcdFxcdHUzMiBwb3J0X3BoeSA9IHAtXFx1MDAzZXBvcnRfcGh5O1xcbjkzOTI6XFx0XFx0Y2hhciAqb3JpZ19idWYgPSBidWY7XFxuOTM5MzpcXHRcXHRpbnQgaTtcXG45Mzk0OlxcdFxcbjkzOTU6XFx0XFx0aWYgKHBvcnRfcGh5ID09IFBPUlRfUEhZX1VOS05PV04gfHxcXG45Mzk2OlxcdFxcdCAgICBwb3J0X3BoeSA9PSBQT1JUX1BIWV9JTlZBTElEKVxcbjkzOTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuOTM5ODpcXHRcXG45Mzk5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwLVxcdTAwM2VudW1fcG9ydHM7IGkrKykge1xcbjk0MDA6XFx0XFx0XFx0Y29uc3QgY2hhciAqdHlwZV9zdHI7XFxuOTQwMTpcXHRcXHRcXHRpbnQgdHlwZTtcXG45NDAyOlxcdFxcbjk0MDM6XFx0XFx0XFx0dHlwZSA9IHBoeV9kZWNvZGUocG9ydF9waHksIGkpO1xcbjk0MDQ6XFx0XFx0XFx0aWYgKHR5cGUgPT0gUE9SVF9UWVBFXzEwRylcXG45NDA1OlxcdFxcdFxcdFxcdHR5cGVfc3RyID0gXFxcIjEwR1xcXCI7XFxuOTQwNjpcXHRcXHRcXHRlbHNlXFxuOTQwNzpcXHRcXHRcXHRcXHR0eXBlX3N0ciA9IFxcXCIxR1xcXCI7XFxuOTQwODpcXHRcXHRcXHRidWYgKz0gc3ByaW50ZihidWYsXFxuOTQwOTpcXHRcXHRcXHRcXHQgICAgICAgKGkgPT0gMCkgPyBcXFwiJXNcXFwiIDogXFxcIiAlc1xcXCIsXFxuOTQxMDpcXHRcXHRcXHRcXHQgICAgICAgdHlwZV9zdHIpO1xcbjk0MTE6XFx0XFx0fVxcbjk0MTI6XFx0XFx0YnVmICs9IHNwcmludGYoYnVmLCBcXFwiXFxcXG5cXFwiKTtcXG45NDEzOlxcdFxcdHJldHVybiBidWYgLSBvcmlnX2J1ZjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MzMuNjc4NDIzMDg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzExOTg2NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgRGVjaXNpb246IG5pdSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCdzIGEgbWlzc2luZyB3cml0ZSBvcGVyYXRpb24gKGBudzY0YCkgaW4gYG5pdV90eGNfc2V0X2ltYXNrYCwgcGFydCBvZiBhIHN0YW5kYXJkIG5ldHdvcmsgZHJpdmVyLCBgbml1YC4gVGhlIGNvZGUgbW9kaWZpZXMgYSBoYXJkd2FyZSByZWdpc3Rlci4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGNyaXRlcmlhLCBpdCBtaWdodCBub3QgYmUgaWYgaXQncyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS5cblxuQnV0IGlzIGBuaXVgIGFueSBvZiB0aG9zZT8gTm8sIGl0J3MgYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIuIFNvIHRoYXQgZXhjbHVzaW9uIGRvZXNuJ3QgYXBwbHkgZGlyZWN0bHkuIEhvd2V2ZXIsIHRoZSBuZXh0IHBvaW50IGluIHRoZSBpbnN0cnVjdGlvbnMgc2F5cyBub3QgdG8gZnV6eiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLlxuXG5TbywgY2FuIHdlIHJlYWNoIGBuaXVfdHhjX3NldF9pbWFza2AgaW4gUUVNVT8gVGhpcyBpcyB3aGVyZSB0aGUgUENJIGZ1enplciBjb21lcyBpbi4gSXQgaW50ZXJjZXB0cyBQQ0kgY29uZmlnIHNwYWNlIGFuZCBNTUlPIHJlYWRzL3dyaXRlcy4gV2hlbiBgbml1X3R4Y19zZXRfaW1hc2tgIGNhbGxzIGBucjY0YCAocmVhZHEpLCB0aGUgZnV6emVyIHByb3ZpZGVzIGEgZnV6emVkIHZhbHVlLiBXaGVuIGl0IGNhbGxzIGBudzY0YCAod3JpdGVxKSwgdGhlIHdyaXRlIGdvZXMgdG8gdGhlIGZ1enplci4gTWVhbmluZyB0aGUgZnV6emVyICpjYW4qIGluZmx1ZW5jZSB0aGlzIGNvZGUuXG5cbk5vdywgY2FuIHdlIGFjdHVhbGx5ICp0cmlnZ2VyKiBgbml1X3R4Y19zZXRfaW1hc2tgIHZpYSBhIGZ1enplcj8gSXQncyBjYWxsZWQgZnJvbSBgbml1X2luaXRfaHdgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgbml1X29wZW5gLiBgbml1X29wZW5gIGlzIHRoZSBgbmRvX29wZW5gIGNhbGxiYWNrLiBTbywgY2FuIHdlIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZT8gSWYgYHJlZ2lzdGVyX25ldGRldmAgc3VjY2VlZHMsIHRoYXQgbGV0cyB1cyBkbyBhIGBpcCBsaW5rIHNldCBkZXYgZXRoWCB1cGAsIHdoaWNoIHRyaWdnZXJzIGBuaXVfb3BlbmAgYW5kIHRoZXJlZm9yZSB0aGUgdGFyZ2V0LlxuXG5gbml1X2dldF9pbnZhcmlhbnRzYCBpcyBjYWxsZWQgd2hlbiB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgcmVnaXN0ZXJlZC4gSXQgY2FsbHMgYG5pdV9wY2lfdnBkX2ZldGNoYCwgd2hpY2ggaXMgTU1JTy4gVGhlIGZ1enplciBjb250cm9scyB0aGUgTU1JTyByZWFkcywgc28gd2UgY2FuIG1ha2UgdGhpcyBzdWNjZWVkLiBGcm9tIHRoaXMgcG9pbnQsIGByZWdpc3Rlcl9uZXRkZXZgIGNhbiB0aGVuIHN1Y2NlZWQsIHdoaWNoIHRoZW4gc2V0cyB1cCB0aGUgcGF0aCB0aHJvdWdoIGBuaXVfb3BlbmAsIGFuZCBldmVudHVhbGx5IHRvIGBuaXVfdHhjX3NldF9pbWFza2AuXG5cblRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIFFFTVUgdmlhIHRoZSBQQ0kgZnV6emVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzLCBnaXZlbiB0aGUgY2FsbCBjaGFpbiwgYXJlIGBuaXVfb3BlbmAsIHNpbmNlIGl0IGlzIHRoZSBgbmRvX29wZW5gIGNhbGxiYWNrLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBmb3Igb3RoZXIgY2FsbGVycyBvZiBgbml1X3R4Y19zZXRfaW1hc2tgLCBidXQgdGhhdCBpcyBteSBrZXkgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDc2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6NDUuOTkwNDE1NzgxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM4MDgxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibml1X3R4Y19zZXRfaW1hc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz00NjI1PXN0YXRpYyB2b2lkIG5pdV90eGNfZW5hYmxlX3BvcnQoc3RydWN0IG5pdSAqbnAsIGludCBvbilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy00NjQzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo0NjQ0OnN0YXRpYyB2b2lkIG5pdV90eGNfc2V0X2ltYXNrKHN0cnVjdCBuaXUgKm5wLCB1NjQgaW1hc2spXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTQ2NDUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTU5MzQ9c3RhdGljIGludCBuaXVfaW5pdF9odyhzdHJ1Y3Qgbml1ICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy01OTQwLVxcdG5pdV90eGNfcG9ydF9kbWFfZW5hYmxlKG5wLCAxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NTk0MTpcXHRuaXVfdHhjX3NldF9pbWFzayhucCwgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTU5NDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE5OjQ2LjMxNDIzMTA3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjgxNTk4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBuaXVfaW5pdF9od2AgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aGUgY2x1ZSBpcyB0aGF0IHdlJ3JlIG9ubHkgc2VlaW5nIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20gYG5pdV9pbml0X2h3YC4gVGhhdCdzIGludGVyZXN0aW5nLCBidXQgbm90IHRlcnJpYmx5IHN1cnByaXNpbmcgZ2l2ZW4gdGhlIG5hbWluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIHRyYWNlIGJhY2sgZnJvbSBgbml1X2luaXRfaHdgLiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50ICphbGwqIHRoZSBjYWxsZXJzIG9mIGBuaXVfaW5pdF9od2AuIFRoYXQgd2lsbCBnaXZlIHVzIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZnJvbSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHNjb3BlLiBJcyBpdCBkdXJpbmcgZHJpdmVyIGluaXRpYWxpemF0aW9uPyBIYXJkd2FyZSBwcm9iZT8gT3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBuYXJyb3cgZG93biB0aGUgYXJlYSB0byBmb2N1cyBvbiBhbmQgaWxsdW1pbmF0ZSB0aGUgbGlrZWx5IHJlbGF0aW9uc2hpcHMgaW52b2x2ZWQgaGVyZS4gVGltZSB0byBnZXQgdG8gaXQhIExldCdzIGdldCB0byB0aG9zZSBjYWxsIGdyYXBocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxOTo1MC44ODIzOTQzMzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzc4MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5pdV9pbml0X2h3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NTkwNT1zdGF0aWMgdm9pZCBuaXVfZGlzYWJsZV9pcHAoc3RydWN0IG5pdSAqbnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNTkzMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NTkzNDpzdGF0aWMgaW50IG5pdV9pbml0X2h3KHN0cnVjdCBuaXUgKm5wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy01OTM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz02MDk4PXN0YXRpYyBpbnQgbml1X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy02MTIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo2MTIzOlxcdGVyciA9IG5pdV9pbml0X2h3KG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjEyNC1cXHRpZiAoIWVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTY0MzY9c3RhdGljIHZvaWQgbml1X25ldGlmX3N0YXJ0KHN0cnVjdCBuaXUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY0MzktXFx0ICogc28gbG9uZyBhcyBhbGwgY2FsbGVycyBhcmUgYXNzdXJlZCB0byBoYXZlIGZyZWUgdHggc2xvdHNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NjQ0MDpcXHQgKiAoc3VjaCBhcyBhZnRlciBuaXVfaW5pdF9odykuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY0NDEtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NjQ5OD1zdGF0aWMgdm9pZCBuaXVfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjUyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NjUyNzpcXHRlcnIgPSBuaXVfaW5pdF9odyhucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY1MjgtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz02NzY1PXN0YXRpYyBpbnQgbml1X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjc5Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6Njc5MzpcXHRlcnIgPSBuaXVfaW5pdF9odyhucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY3OTQtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz05OTYxPXN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgbml1X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZfZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05OTc1LVxcdG5ldGRldl9sb2NrKGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjk5NzY6XFx0ZXJyID0gbml1X2luaXRfaHcobnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05OTc3LVxcdGlmICghZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE5OjUwLjk1MjgyMDIxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTQ1MzI5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtleSBOSVUgRHJpdmVyIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGVzZSBOSVUgZHJpdmVyIGZ1bmN0aW9ucyBhcmUgc3RydWN0dXJlZC4gSXQgc2VlbXMgbGlrZSBgbml1X29wZW5gLCBgbml1X3Jlc2V0X3Rhc2tgLCBgbml1X2NoYW5nZV9tdHVgLCBhbmQgYG5pdV9yZXN1bWVgIGFsbCBldmVudHVhbGx5IGNhbGwgYG5pdV9pbml0X2h3YC4gVGhhdCdzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIGJ1dCB0aGUga2V5IGVudHJ5cG9pbnRzIGZvciBteSBhbmFseXNpcyBzZWVtIHRvIGJlIGBuaXVfb3BlbmAgYW5kIGBuaXVfY2hhbmdlX210dWAuIFRoZXNlIGZlZWwgbGlrZSBzb2xpZCBmb2N1cyBzeW1ib2xzLlxuXG5XYWl0IGEgbWludXRlLCBJIHRoaW5rIGBuaXVfb3BlbmAgaXMgc3RhdGljLiBEb2VzIHRoYXQgd29yayBmb3IgdGhpcyBhbmFseXNpcz8gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBydWxlIGlzIHRvIGZvY3VzIG9uIHRob3NlLCBhbmQgYXZvaWQgdGhlIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGlubGluZWQuXG5cbkhvd2V2ZXIsIGBuaXVfb3BlbmAgaXMgYXNzaWduZWQgdG8gYG5kb19vcGVuYCBpbiBgbml1X25ldGRldl9vcHNgLiBTbywgc2luY2UgaXQncyBub3QgYmVpbmcgaW5saW5lZCwgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQncyBnb29kLlxuXG5gbml1X2NoYW5nZV9tdHVgIHNob3VsZCBiZSB0aGUgc2FtZSwgc28gaXQncyBhbGwgZ29vZC5cblxuTm93LCBsZXQncyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBuaXVfb3BlbmAgaXNuJ3Qgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg5OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxOTo1NS4xNjczNTc2MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1MDkwNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibml1X29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz02MDkwPXN0YXRpYyB2b2lkIG5pdV9kaXNhYmxlX25hcGkoc3RydWN0IG5pdSAqbnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjA5Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NjA5ODpzdGF0aWMgaW50IG5pdV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTYwOTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTk3MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuaXVfbmV0ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6OTcyMzpcXHQubmRvX29wZW5cXHRcXHQ9IG5pdV9vcGVuLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05NzI0LVxcdC5uZG9fc3RvcFxcdFxcdD0gbml1X2Nsb3NlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxOTo1NS4yMzI4NzQ5NDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU0OTg5MDE3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5JVSBEcml2ZXIncyBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpbml0aWFsbHksIGl0IGFwcGVhcnMgdGhhdCB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIGFsbCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCdzIG5vdCBpZGVhbCBmb3IgZGlyZWN0IGV4YW1pbmF0aW9uLiBIb3dldmVyLCBvbiBjbG9zZXIgaW5zcGVjdGlvbiwgSSBzZWUgdGhhdCB0aGlzIGlzbid0IGEgbWFqb3IgaXNzdWUgc2luY2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmVuJ3QgaW5saW5lZCwgYXMgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgaW4gYSBzdHJ1Y3QuIFNvIEkndmUgZ290IHRvIGZpbmQgbm9uLXN0YXRpYyBzeW1ib2xzIHRvIHRhcmdldC5cblxuVGhlIGZ1bmN0aW9ucyBgbml1X29wZW5gIGFuZCBgbml1X2NoYW5nZV9tdHVgIGxvb2sgcHJvbWlzaW5nIGFzIGVudHJ5IHBvaW50cy4gQnV0IHdhaXQsIGxldCdzIGNpcmNsZSBiYWNrIHRvIGBuaXVfcGNpX2luaXRfb25lYC4gSXNuJ3QgdGhhdCB0aGUgcHJvYmUgZnVuY3Rpb24/IFllcywgaXQgaXMhIFJpZ2h0LCBnb3QgaXQuXG5cbk5vdywgSSByZW1lbWJlciB0aGUgYnVnIHJlcG9ydCBtZW50aW9uZWQgYG5pdV90eGNfc2V0X2ltYXNrYC4gVGhhdCdzIGNhbGxlZCBmcm9tIGBuaXVfaW5pdF9od2AuIEFuZCBhaGEhIGBuaXVfaW5pdF9od2AgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgbml1X29wZW5gLCBgbml1X2NoYW5nZV9tdHVgLCBgbml1X3Jlc3VtZWAsIGFuZCBgbml1X3Jlc2V0X3Rhc2tgLiBTbyBJIHN0aWxsIGZlZWwgdGhhdCBgbml1X29wZW5gIGFuZCBgbml1X2NoYW5nZV9tdHVgIGFyZSB0aGUgYmVzdCBzeW1ib2xzIHRvIGZvY3VzIG9uLCBhcyB0aGV5IGFyZSB0aGUgbW9zdCBkaXJlY3QgZW50cnkgcG9pbnRzIGZyb20gdGhlIHVzZXItc3BhY2UgcGVyc3BlY3RpdmUuXG5cbkFscmlnaHQsIGxldCdzIG5vdyBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkga25vdyBgTklVYCBkZXBlbmRzIG9uIGBQQ0lgLCBJIGFscmVhZHkgaWRlbnRpZmllZCB0aGF0LiBUaW1lIHRvIGRvdWJsZS1jaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWdgIHRvIGJlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MjA6MDEuNzgyNzY4MjI3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzM2NzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTklVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnPTg3PWNvbmZpZyBMRE1WU1dcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnLTk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnOjEwMDpjb25maWcgTklVXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MjA6MDEuODUwMTQzNzk3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTA0ODQ3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFN1biBtaWNyb3N5c3RlbXMnIGRyaXZlciBkaXJlY3RvcnkuIE15IGZvY3VzIGlzIGxpa2VseSBhcm91bmQgbGluZSAxMDAgb2YgdGhlIGBLY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZmluZWQgaGVyZS4gSSBzdXNwZWN0IHRoaXMgd2lsbCBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgdGhlIGBDT05GSUdfYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0byBzZWUgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQsIHRoZWlyIGRlcGVuZGVuY2llcyBvbiBvdGhlciBkcml2ZXJzIG9yIGhhcmR3YXJlLCBhbmQgYW55IGNvbmRpdGlvbmFsIGJ1aWxkIHNjZW5hcmlvcy4gSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNvbXBvbmVudHMuIEknbGwgbmVlZCB0byByZWNvZ25pemUgdGhpcyBpcyBsaWtlbHkgYSB0YXJnZXQtc3BlY2lmaWMgZmlsZSwgc28gSSBuZWVkIHRvIHBsYWNlIHRoaXMgZmlsZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgb3ZlcmFsbCBuZXR3b3JrIHN0YWNrLiBJJ2xsIGxpa2VseSBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogdGhlIGJhc2UgZHJpdmVyIHNlbGVjdGlvbiwgUEhZIGNvbmZpZ3VyYXRpb24sIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyB0aGF0IGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcy4gVGhlbiwgYmFzZWQgb24gd2hhdCBJIHNlZSBoZXJlLCBJIGNhbiBmb3JtIGEgbWVudGFsIG1hcCBvZiBob3cgdGhpcyBkcml2ZXIgaXMgY29udHJvbGxlZCBhbmQgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzMDksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoyMDowNS44NDA2MzMzMTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0ICBmb3VuZCBpbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBvZiBhIHNlcnZpY2UgZG9tYWluLlxcbiAgOTY6XFx0XFx0ICBMaW51eCBicmlkZ2Uvc3dpdGNoIHNvZnR3YXJlIGNhbiB1c2UgdGhlc2UgaW50ZXJmYWNlcyBmb3JcXG4gIDk3OlxcdFxcdCAgZ3Vlc3QgZG9tYWluIG5ldHdvcmsgaW50ZXJjb25uZWN0aXZpdHkgb3IgZ3Vlc3QgZG9tYWluXFxuICA5ODpcXHRcXHQgIGNvbm5lY3Rpb24gdG8gYSBwaHlzaWNhbCBuZXR3b3JrIG9uIGEgc2VydmljZSBkb21haW4uXFxuICA5OTpcXHRcXG4gMTAwOlxcdGNvbmZpZyBOSVVcXG4gMTAxOlxcdFxcdHRyaXN0YXRlIFxcXCJTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gMTAyOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuIDEwMzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTA0OlxcdFxcdGhlbHBcXG4gMTA1OlxcdFxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIHVwb24gU3VuJ3NcXG4gMTA2OlxcdFxcdCAgTmVwdHVuZSBjaGlwc2V0LlxcbiAxMDc6XFx0XFxuIDEwODpcXHRlbmRpZiAjIE5FVF9WRU5ET1JfU1VOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjIwOjA1Ljg0MDcxMTcwOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTIyNTY4ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gTGFieXJpbnRoKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHdlJ3JlIGRlYWxpbmcgd2l0aCBgTklVYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGBOSVVgIGlzICp0aGUqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJ3JlIGZvY3VzaW5nIG9uLiBCdXQgd2FpdCBhIHNlY29uZCwgdGhhdCBmZWVscyB0b28gc2ltcGxpc3RpYy4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIHNlZWluZyB0aGUgd2hvbGUgcGljdHVyZS4gTGV0J3MgdHJhY2UgaXQgYmFjay4gQWhhISBSaWdodCwgYE5FVF9WRU5ET1JfU1VOYC4uLiB0aGF0J3MgdGhlIHBhcmVudCBjb25maWcsIGlzbid0IGl0PyBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkga25vdyBteSBuZXR3b3JraW5nIHRyZWVzLCBhbmQgYE5JVWAgdW5kb3VidGVkbHkgZmFsbHMgdW5kZXIgdGhhdCB1bWJyZWxsYS4gTm93LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGNvbm5lY3Rpb24uIExldCdzIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2YgYE5FVF9WRU5ET1JfU1VOYCBhbmQgbWFrZSBzdXJlIGl0IGFsaWducyB3aXRoIHdoYXQgSSBleHBlY3QuIEkgbmVlZCB0byBzZWUgdGhlIHJlbGF0aW9uc2hpcCBjbGVhcmx5IGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc5OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MjA6MTIuOTYzMjg0MzY3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU5MTIxMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfU1VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9TVU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZy03LVxcdGJvb2wgXFxcIlN1biBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoyMDoxMy4wODkyMDUwNTNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0MjUxNTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgU3VuIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uIGJldHRlci4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcsIGxldCdzIGp1bXAgcmlnaHQgaW50byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWdgIGFyb3VuZCBsaW5lIDYuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgc2V0dGluZ3MgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBncmFzcGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyBwdXQgdG9nZXRoZXIgYW5kIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTM3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MjA6MTYuMDMxNzI0MDcxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgU3VuIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfU1VOXFxuICAgNzpcXHRcXHRib29sIFxcXCJTdW4gZGV2aWNlc1xcXCJcXG4gICA4OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBTVU4zIHx8IFNCVVMgfHwgUENJIHx8IFNVTl9MRE9NU1xcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTQ6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxNTpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgU3VuIG5ldHdvcmsgaW50ZXJmYWNlcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZVxcbiAgMTY6XFx0XFx0ICBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBORVRfVkVORE9SX1NVTlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgSEFQUFlNRUFMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjIwOjE2LjAzMTg2NjEwMloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgyMTUzMzAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOSVUgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgTkVUX1ZFTkRPUl9TVU5gIGRlZmF1bHRzIHRvIFwieVwiIGFuZCBkZXBlbmRzIG9uIGBQQ0lgLCBzbyBlbmFibGluZyBgTklVYCBhbmQgYE5FVF9WRU5ET1JfU1VOYCBzaG91bGQgYmUgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIGBQQ0lgIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZC4gU28sIGBOSVVgIGFuZCBgTkVUX1ZFTkRPUl9TVU5gIGl0IGlzLlxuXG5CdXQsIGEgbmFnZ2luZyBkb3VidCBjcmVlcHMgaW46IGlzIGBuaXVgIG9uZSBvZiB0aG9zZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHRoYXQncyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudD8gVGhlIGluc3RydWN0aW9ucyB3YXJuIGFib3V0IGNvZGUgaW4gXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc1wiIHRoYXQgcmVseSBvbiByZWFsIGhhcmR3YXJlLiBJIGhhdmUgdG8gYmUgY2FyZWZ1bCBoZXJlLiBgbml1YCBpcyBhIDEwR2JpdCBFdGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIG9sZCBTdW4gTmVwdHVuZSBjYXJkLiBJcyBpdCBhIFNtYXJ0TklDPyBOby4gUENJZSBzd2l0Y2g/IE5vLiBHUFU/IERlZmluaXRlbHkgbm90LlxuXG5UaGUgY29uY2VybiBpcyB0aGF0IGl0ICpyZXF1aXJlcyogcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gQnV0IHdhaXQsIGRvZXMgaXQgKmFjdHVhbGx5Kj8gTm93IEkgcmVjYWxsIHRoYXQgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyICpjYW4qIGZ1enogaXQuIFRoYXQncyB0aGUgY3JpdGljYWwgZGlmZmVyZW5jZS4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgZXhjbHVkZSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXJzIGZyb20gdGhlIHdhcm5pbmcuIFN0YW5kYXJkIEV0aGVybmV0IGRyaXZlcnMgYXJlIGNvbW1vbmx5IGZ1enplZCBieSB0aGUgUENJIGZ1enplciwgYW5kIGJ1Z3MgYXJlIGZvdW5kIHRoZXJlIGFsbCB0aGUgdGltZSBpbiBkcml2ZXJzIGxpa2UgYGlnYmAsIGBlMTAwMGVgLCBgcjgxNjlgLCBgdGczYCwgZXRjLiBJdCBzZWVtcyB0aGF0ICp0aG9zZSogZHJpdmVycywgbGlrZSB0aGUgYE5JVWAgZHJpdmVyLCBhcmUgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcuIFRoZSBzdGF0ZW1lbnQgaXMgbGltaXRlZCB0byB0aG9zZSBjb21wbGljYXRlZCBkcml2ZXJzIHdpdGggZmlybXdhcmUgb3IgY29tcGxleCBjb250cm9sIHBhdGhzLlxuXG5TdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXJzIGFyZSBtdWNoIHNpbXBsZXIsIGFuZCB0aGUgcHJvYmUvb3BlbiBmdW5jdGlvbnMgY2FuIG9mdGVuIGJlIHJlYWNoZWQgYnkgc3l6a2FsbGVyJ3MgUENJIGZ1enplci4gU28sIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBwYXRjaCBpdHNlbGYuIEFoLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBmaXggZm9yIGEgbWlzc2luZyB3cml0ZSB0byBgVFhDX0lOVF9NQVNLYC4gTm90aGluZyB0byByYWlzZSBhbiBhbGFybSwgc28gdGhlIHBhdGNoIGlzIGZpbmUuXG5cblRoZSBpbXBvcnRhbnQgc3ltYm9scyB0byBrZWVwIGluIG1pbmQgYXJlIGBuaXVfb3BlbmAsIGBuaXVfY2hhbmdlX210dWAsIGFuZCBgbml1X3BjaV9pbml0X29uZWAuXG5cbkFuZCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnYC4gWWVzLCB0aGUgYE5JVWAgY29uZmlnIGRlcGVuZHMgb24gYFBDSWAgYW5kIHNlbGVjdHMgYENSQzMyYC4gTm8gb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIHByZXNlbnQuXG5cbk5vdywgdGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCB0YXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU3MCwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoyMDoyNi44NTM0MDQ0NjNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzkwODQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTklVXCIsXG4gICAgXCJORVRfVkVORE9SX1NVTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5pdV9vcGVuXCIsXG4gICAgXCJuaXVfY2hhbmdlX210dVwiLFxuICAgIFwibml1X3BjaV9pbml0X29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBoYXJkd2FyZSByZWdpc3RlciB3cml0ZSBpbiB0aGUgU3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0IGRyaXZlciAobml1KS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgc3RhbmRhcmQgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIGJ5IHN5emthbGxlcidzIFBDSSBmdXp6ZXIgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIG9wZW4vY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOSVVcIixcbiAgICBcIk5FVF9WRU5ET1JfU1VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibml1X29wZW5cIixcbiAgICBcIm5pdV9jaGFuZ2VfbXR1XCIsXG4gICAgXCJuaXVfcGNpX2luaXRfb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGhhcmR3YXJlIHJlZ2lzdGVyIHdyaXRlIGluIHRoZSBTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgZHJpdmVyIChuaXUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyJ3MgUENJIGZ1enplciBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCBpbnRlcmZhY2Ugb3Blbi9jb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfvsz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 16:48:28 +0000 UTC FinishedAt: 2026-07-26 17:20:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NIU", "NET_VENDOR_SUN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NIU", "NET_VENDOR_SUN" ], "series_id": "e76369e3-12cc-41c6-a26d-26bdfc36ebfa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "niu_open", "niu_change_mtu", "niu_pci_init_one" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05JVSYjMzQ7LAogICAgJiMzNDtORVRfVkVORE9SX1NVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25pdV9vcGVuJiMzNDssCiAgICAmIzM0O25pdV9jaGFuZ2VfbXR1JiMzNDssCiAgICAmIzM0O25pdV9wY2lfaW5pdF9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGhhcmR3YXJlIHJlZ2lzdGVyIHdyaXRlIGluIHRoZSBTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgZHJpdmVyIChuaXUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIG9wZW4vY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY4NWI0OTVkZTY0NWJkOTZkMTVjNzJiMjVlYzJmM2NlNGZhMWIxZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxNzoxODo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcbmluZGV4IDg4ZGYxNWU2ZGQ3NDY3Li4zNzA3OWE2ZDZlZTkyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jXG5AQCAtNDY1MCw2ICYjNDM7NDY1MCw3IEBAIHN0YXRpYyB2b2lkIG5pdV90eGNfc2V0X2ltYXNrKHN0cnVjdCBuaXUgKm5wLCB1NjQgaW1hc2spXG4gXHR2YWwgPSBucjY0KFRYQ19JTlRfTUFTSyk7XG4gXHR2YWwgXHUwMDI2PSB+VFhDX0lOVF9NQVNLX1ZBTChucC1cdTAwM2Vwb3J0KTtcbiBcdHZhbCB8PSAoaW1hc2sgXHUwMDNjXHUwMDNjIFRYQ19JTlRfTUFTS19WQUxfU0hJRlQobnAtXHUwMDNlcG9ydCkpO1xuJiM0MztcdG53NjQoVFhDX0lOVF9NQVNLLCB2YWwpO1xuIFx0bml1X3VubG9ja19wYXJlbnQobnAsIGZsYWdzKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05JVSYjMzQ7LAogICAgJiMzNDtORVRfVkVORE9SX1NVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25pdV9vcGVuJiMzNDssCiAgICAmIzM0O25pdV9jaGFuZ2VfbXR1JiMzNDssCiAgICAmIzM0O25pdV9wY2lfaW5pdF9vbmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGhhcmR3YXJlIHJlZ2lzdGVyIHdyaXRlIGluIHRoZSBTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgZHJpdmVyIChuaXUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIG9wZW4vY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4NWI0OTVkZTY0NWJkOTZkMTVjNzJiMjVlYzJmM2NlNGZhMWIxZDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAyNiAxNzoxODo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYwppbmRleCA4OGRmMTVlNmRkNzQ2Ny4uMzcwNzlhNmQ2ZWU5MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMKQEAgLTQ2NTAsNiAmIzQzOzQ2NTAsNyBAQCBzdGF0aWMgdm9pZCBuaXVfdHhjX3NldF9pbWFzayhzdHJ1Y3Qgbml1ICpucCwgdTY0IGltYXNrKQogCXZhbCA9IG5yNjQoVFhDX0lOVF9NQVNLKTsKIAl2YWwgJmFtcDs9IH5UWENfSU5UX01BU0tfVkFMKG5wLSZndDtwb3J0KTsKIAl2YWwgfD0gKGltYXNrICZsdDsmbHQ7IFRYQ19JTlRfTUFTS19WQUxfU0hJRlQobnAtJmd0O3BvcnQpKTsKJiM0MzsJbnc2NChUWENfSU5UX01BU0ssIHZhbCk7CiAJbml1X3VubG9ja19wYXJlbnQobnAsIGZsYWdzKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5JVSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB1cGRhdGluZyBgbml1X3R4Y19zZXRfaW1hc2tgLiBJIGNhbiBzZWUgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZTogdGhleSYjMzk7dmUgYWRkZWQgYSBgbnc2NChUWENfSU5UX01BU0ssIHZhbCk7YCBjYWxsIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSBuZXcgbWFzayB2YWx1ZS4gVGhpcyBpcyBhIGJpdCBvZiBhIGNsYXNzaWMsIHJpZ2h0PyBNb2RpZnlpbmcgYSB2YWx1ZSBhbmQgdGhlbiAqbm90KiB3cml0aW5nIGl0IGJhY2sgaXMgYSByb29raWUgbWlzdGFrZSwgc28gaG9wZWZ1bGx5LCB0aGlzIGZpeGVzIHNvbWUga2luZCBvZiBpbnRlcnJ1cHQgbWFza2luZyBpc3N1ZSBpbiB0aGUgU3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0IE1BQyBkcml2ZXIuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogY2FuIEkgdGVzdCB0aGlzIGVhc2lseT8gSSB3b25kZXIgaWYgdGhpcyBpcyBzb21ldGhpbmcgSSBjYW4gdmVyaWZ5IGluIFFFTVU/IEkmIzM5O20gcHJldHR5IHN1cmUgSSBoYXZlIGEgc2V0dXAgdGhhdCBjb3VsZCBoYW5kbGUgdGhhdC4gVGltZSB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWdgIHRvIHNlZSB3aGF0IGRlcGVuZGVuY2llcyBgTklVYCBoYXMuIFRoYXQmIzM5O2xsIHRlbGwgbWUgaWYgSSBjYW4gZXZlbiBjb25maWd1cmUgaXQgZm9yIHRoZSBlbXVsYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIGFyZSBpbiBwbGFjZSBzbyBJIGNhbiBldmVuIGhvcGUgdG8gYnVpbGQgYW5kIHJ1biB0aGlzIHdpdGggUUVNVS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTklVJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWc9ODc9Y29uZmlnIExETVZTV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnLTk5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWc6MTAwOmNvbmZpZyBOSVVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnLTEwMS1cdHRyaXN0YXRlIFwmIzM0O1N1biBOZXB0dW5lIDEwR2JpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY4MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFN1biBFdGhlcm5ldCBkcml2ZXJzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9gLiBUaGUgZmlsZSYjMzk7cyBwcm9iYWJseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgY29uZmlndXJhdGlvbiBsaXZlcywgZGVmaW5pbmcgdGhlIHNlbGVjdGFibGUgZmVhdHVyZXMgYW5kIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDEwMCBhcyBhIHN0YXJ0aW5nIHBvaW50LiBJIHN1c3BlY3QgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbW9yZSBpbnRlcmVzdGluZyBvcHRpb25zIGFyZSBwcm9iYWJseSBncm91cGVkIG9yIGRlZmluZWQuIEhvcGVmdWxseSBpdCYjMzk7cyB3ZWxsLXN0cnVjdHVyZWQgYW5kIEkgY2FuIHF1aWNrbHkgZ3Jhc3AgdGhlIGtleSBzZXR0aW5ncyB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGRyaXZlcnMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYW5kIGhvdyB0aGlzIG1pZ2h0IGltcGFjdCBhIHNwZWNpZmljIEV0aGVybmV0IGltcGxlbWVudGF0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBmaWd1cmUgb3V0IHdoZXJlIHRvIGdvIG5leHQsIGlmIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA5NTpcdFx0ICBmb3VuZCBpbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBvZiBhIHNlcnZpY2UgZG9tYWluLlxuICA5NjpcdFx0ICBMaW51eCBicmlkZ2Uvc3dpdGNoIHNvZnR3YXJlIGNhbiB1c2UgdGhlc2UgaW50ZXJmYWNlcyBmb3JcbiAgOTc6XHRcdCAgZ3Vlc3QgZG9tYWluIG5ldHdvcmsgaW50ZXJjb25uZWN0aXZpdHkgb3IgZ3Vlc3QgZG9tYWluXG4gIDk4Olx0XHQgIGNvbm5lY3Rpb24gdG8gYSBwaHlzaWNhbCBuZXR3b3JrIG9uIGEgc2VydmljZSBkb21haW4uXG4gIDk5Olx0XG4gMTAwOlx0Y29uZmlnIE5JVVxuIDEwMTpcdFx0dHJpc3RhdGUgXCYjMzQ7U3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbiAxMDI6XHRcdGRlcGVuZHMgb24gUENJXG4gMTAzOlx0XHRzZWxlY3QgQ1JDMzJcbiAxMDQ6XHRcdGhlbHBcbiAxMDU6XHRcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIHVwb24gU3VuJiMzOTtzXG4gMTA2Olx0XHQgIE5lcHR1bmUgY2hpcHNldC5cbiAxMDc6XHRcbiAxMDg6XHRlbmRpZiAjIE5FVF9WRU5ET1JfU1VOXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzMQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDgwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enphYmlsaXR5IG9mIHRoZSBOSVUgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBOSVVgIGRyaXZlciwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IGlzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgZHJpdmVyIGZvciB0aGUgU3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0LCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7cGh5c2ljYWwgaGFyZHdhcmUuJiMzNDsgVGhlIHF1ZXN0aW9uIGJlY29tZXM6IGNhbiBJIGV2ZW4gcmVhY2ggdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPwoKTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IFFFTVUgcHJvYmFibHkgKmRvZXNuJiMzOTt0KiBlbXVsYXRlIGEgYG5pdWAgbmV0d29yayBjYXJkIGRpcmVjdGx5LiBJIG1lYW4sIGl0IGhhcyBvdGhlciBlbXVsYXRlZCBuZXR3b3JrIGludGVyZmFjZXMgbGlrZSBgbmUya19wY2lgLCBgZTEwMDBgLCBhbmQgc28gb24sIGJ1dCB0aG9zZSBhcmUgZ2VuZXJhbGx5IG9sZGVyIG9yIG1vcmUgY29tbW9uLiAxMEdiaXQgY2FyZHMgYXJlIG9mdGVuIGEgYml0IHRyaWNraWVyIHRvIGVtdWxhdGUsICp1bmxlc3MqIGl0JiMzOTtzIHNvbWV0aGluZyByZWxhdGl2ZWx5IHN0YW5kYXJkIGxpa2UgdGhlIGl4Z2JlIG9yIGUxMDAwZS4gU28sIEkgbmVlZCB0byB2ZXJpZnkuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoIG9mIHRoZSBRRU1VIGRvY3MsIGJ1dCB0aGUgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhpcyBpcyBhIHBoeXNpY2FsIGNhcmQuCgpXYWl0LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0aGF0IGlmIGEgZHJpdmVyIHJlcXVpcmVzIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VIGl0IG1pZ2h0IG5vdCBiZSB3b3J0aCBmdXp6aW5nLCBidXQgdGhlbiB0aGVyZSYjMzk7cyB0aGUgUENJIGZ1enplciBpbiBTeXprYWxsZXIhIFRoZSBkcml2ZXIgaXMgbGlzdGVkIGFzIGEgUENJIGRldmljZSwgc28gaXQgbWlnaHQgYmUgZnV6emFibGUuIGBzeXpfcGNpX3ZwY2lgIG9yIHNpbWlsYXIgY291bGQgYmUgdXNlZC4KClNvIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGNhbGwgb3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgbmVlZCAqcGh5c2ljYWwqIFBDSWUgaGFyZHdhcmUgYXMgcG9zc2libHkgbm90IHdvcnRoIGZ1enppbmcuIE9rYXksIGlzIGBOSVVgIGEgU21hcnROSUMgb3IgR1BVPyBOb3BlLCBpdCYjMzk7cyBhIDEwR2JpdCBFdGhlcm5ldCBjYXJkLiBCdXQgdGhlIGluc3RydWN0aW9ucyBtZW50aW9uIHRoYXQgc3l6a2FsbGVyICpjYW4qIGZ1enogKmFueSogUENJIGRyaXZlciBieSBlbXVsYXRpbmcgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBNTUlPL1BJTyByZWdpb25zLCB3aGljaCBtZWFucyB0aGF0IHRoZSBjYXJkIGlzIG5vdCBuZWVkZWQgdG8gZnV6eiB0aGUgY29kZSEgVGhhdCYjMzk7cyBnb29kLgoKU28sIHRoZSBuZXh0IHRoaW5nIHRvIGRldGVybWluZSBpcyB3aGV0aGVyIGl0IGNhbiBiZSBmdXp6YWJsZSBieSBzeXprYWxsZXIuIFNpbmNlIEkgY2FuJiMzOTt0IGRpcmVjdGx5IGNoZWNrIHRoZSBTeXprYWxsZXIgZGVzY3JpcHRpb25zIHRvIHNlZSBpZiBgTklVYCBpcyBkaXJlY3RseSBsaXN0ZWQsIEkmIzM5O2xsIG9wZXJhdGUgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCBQQ0kgbmV0d29yayBkcml2ZXJzICphcmUqIGZ1enphYmxlLCBpZiB0aGV5IGFyZSBQQ0kgZGV2aWNlcy4KCk9rYXksIGhlcmUmIzM5O3MgdGhlIHJ1Yi4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBwYXRoIGlzICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb3IgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgKm5vdCogZW11bGF0ZWQgaW4gUUVNVS4gYE5JVWAgaXMgdmVuZG9yLXNwZWNpZmljIChTdW4gTmVwdHVuZSkuIEl0JiMzOTtzICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEl0ICpkb2VzKiByZXF1aXJlIGEgcGh5c2ljYWwgUENJZSBjYXJkLiBUaGF0IHNvdW5kcyBsaWtlIGEgbm8tZ28sIHJpZ2h0PwoKQnV0ICpTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBjYW4gc3RpbGwqIGZ1enogdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBNTUlPL1BJTyByZWdpb25zLiBJdCBjYW4gdGVjaG5pY2FsbHkgZnV6eiBhbnkgUENJIGRyaXZlci4gU28sIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQgaXMgc3RpbGwgd29ydGggZnV6emluZy4gTm93LCBsZXQmIzM5O3Mgc2VlIGlmIGEgZnVuY3Rpb24sIGBuaXVfdHhjX3NldF9pbWFza2AsIGlzIHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuaXVfdHhjX3NldF9pbWFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NDYyNT1zdGF0aWMgdm9pZCBuaXVfdHhjX2VuYWJsZV9wb3J0KHN0cnVjdCBuaXUgKm5wLCBpbnQgb24pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTQ2NDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NDY0NDpzdGF0aWMgdm9pZCBuaXVfdHhjX3NldF9pbWFzayhzdHJ1Y3Qgbml1ICpucCwgdTY0IGltYXNrKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTQ2NDUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz01OTM0PXN0YXRpYyBpbnQgbml1X2luaXRfaHcoc3RydWN0IG5pdSAqbnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTU5NDAtXHRuaXVfdHhjX3BvcnRfZG1hX2VuYWJsZShucCwgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NTk0MTpcdG5pdV90eGNfc2V0X2ltYXNrKG5wLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy01OTQyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4ODQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5JQyBJbml0aWFsaXphdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgTklDIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGlzIGNydWNpYWwgZnVuY3Rpb24sIGBuaXVfaW5pdF9od2AsIGlzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGdldHRpbmcgdGhpbmdzIGdvaW5nLiBJIHNlZSB0aGF0IGBuaXVfaW5pdF9od2AgZ2V0cyBjYWxsZWQgZnJvbSBgbml1X29wZW5gLCB3aGljaCBpcyB0aGUgbmV0d29yayBkZXZpY2UmIzM5O3Mgb3BlbiBmdW5jdGlvbi4gTXkgZmlyc3QgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSAqcmVhY2gqIGBuaXVfb3BlbmAgaW4gYSBzY2VuYXJpbyB0aGF0IG1hdHRlcnMgdG8gbWU/CgpOb3csIGFzc3VtaW5nIHRoZSBQQ0kgZGV2aWNlIHByb2Jpbmcgc3VjY2VlZHMsIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyByZWdpc3RlcmVkLCB3aGljaCBpcyB0aGUgZGVzaXJlZCBvdXRjb21lLiBCdXQgaWYgSSB3YW50IHRvICp0cmlnZ2VyKiB0aGUgcHJvY2VzcywgY29tbWFuZHMgbGlrZSBgaXAgbGluayBzZXQgZGV2IGV0aFggdXBgIHdpbGwga2ljayBvZmYgYG5pdV9vcGVuYC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCB3aWxsIHRoZSBQQ0kgZnV6emVyIGJlIGFibGUgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIHRoZSBQQ0kgZGV2aWNlPyBUeXBpY2FsbHksIHRoZSBQQ0kgZnV6emVyIGNhbiBwYXNzIHRoZSBwcm9iZSBmdW5jdGlvbiBpZiBpdCBjYW4gcHJvdmlkZSB0aGUgY29ycmVjdCBNTUlPIHJlYWRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBuaXVfcGNpX3Byb2JlYCB0byBzZWUgd2hhdCBraW5kIG9mIE1NSU8gaW50ZXJhY3Rpb25zIGl0IGV4cGVjdHMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBlZmZlY3RpdmVseSB0YXJnZXQgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bml1X3BjaV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9ODM1Nj1zdGF0aWMgdm9pZCBuaXVfcGNpX3ZwZF92YWxpZGF0ZShzdHJ1Y3Qgbml1ICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtODQwMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo4NDAzOnN0YXRpYyBpbnQgbml1X3BjaV9wcm9iZV9zcHJvbShzdHJ1Y3Qgbml1ICpucClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy04NDA0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9OTMxND1zdGF0aWMgaW50IG5pdV9nZXRfaW52YXJpYW50cyhzdHJ1Y3Qgbml1ICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtOTM1OS1cdFx0XHRcdHJldHVybiBlcnI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6OTM2MDpcdFx0XHRlcnIgPSBuaXVfcGNpX3Byb2JlX3Nwcm9tKG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05MzYxLVx0XHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbml1YCBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gVGhlIGNvZGUgbWVudGlvbnMgYG5pdV9wY2lfcHJvYmVgLCB3aGljaCAqc3Ryb25nbHkqIHN1Z2dlc3RzIGl0JiMzOTtzIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24uIFRoYXQgbWFrZXMgc2Vuc2U7IHVzdWFsbHksIHlvdSYjMzk7ZCBleHBlY3QgYSBQQ0kgZHJpdmVyIHRvIGhhdmUgYSBwcm9iZSBmdW5jdGlvbiB0byBpZGVudGlmeSBhbmQgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLiBTbywgbGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBsb2NhdGUgdGhhdCBgbml1X3BjaV9wcm9iZWAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gVW5kZXJzdGFuZGluZyB3aGF0IGhhcHBlbnMgZHVyaW5nIHRoZSBwcm9iZSB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaG93IHRoZSBoYXJkd2FyZSBpcyBpbml0aWFsbHkgc2V0IHVwIGFuZCBjb25maWd1cmVkLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBlbnRyeSBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZGV2aWNlJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwucHJvYmUuKj0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTk5OTE9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5pdV9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05OTkzLVx0LmlkX3RhYmxlXHQ9IG5pdV9wY2lfdGJsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjk5OTQ6XHQucHJvYmVcdFx0PSBuaXVfcGNpX2luaXRfb25lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTk5OTUtXHQucmVtb3ZlXHRcdD0gbml1X3BjaV9yZW1vdmVfb25lLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz0xMDIyMj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBuaXVfb2ZfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy0xMDIyNi1cdH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6MTAyMjc6XHQucHJvYmVcdFx0PSBuaXVfb2ZfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtMTAyMjgtXHQucmVtb3ZlXHRcdD0gbml1X29mX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAzNQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDg0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciBuaXVfcGNpX2luaXRfb25lKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbml1X3BjaV9pbml0X29uZWAsIHdoaWNoLCBmcm9tIHdoYXQgSSBnYXRoZXIsIGlzIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBgbml1YCBkcml2ZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gYXNzZXNzIGlmIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtJcyB0aGlzIGEgc3RhbmRhcmQgbmV0d29yayBkcml2ZXI/JiMzNDsuIFllcywgaXQgYXBwZWFycyB0byBiZS4KCk5vdywgdGhlIGluc3RydWN0aW9ucyBJIGhhdmUgbGF5IG91dCBzb21lIGNvbnN0cmFpbnRzLiBUaGV5IGhpZ2hsaWdodCBkcml2ZXJzIGZvciB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCAqcmVxdWlyZSogcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGJ5IHN0YW5kYXJkIFFFTVUuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb246IElzIGBuaXVgIGEgU21hcnROSUM/IE5vLCBpdCYjMzk7cyB0aGF0IG9sZCBTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgY2FyZC4gQnV0IHRoZSBrZXkgaXMgJiMzNDtyZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VJiMzNDsuIERvZXMgdGhpcyBibGFua2V0IGFwcGx5IHRvIGFueSBwaHlzaWNhbCBuZXR3b3JrIGNhcmQgdGhhdCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgcGVyZmVjdGx5PyBZZXMsIHRoYXQmIzM5O3MgdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIHJ1bGUuIElmIGl0IHJlcXVpcmVzICphY3R1YWwqIGhhcmR3YXJlLCBhbmQgUUVNVSYjMzk7cyBub3QgdXAgdG8gdGhlIHRhc2ssIHRoZW4gaXQgZmFsbHMgdW5kZXIgdGhhdCBuby1mdXp6aW5nIGNhdGVnb3J5LgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBzeXprYWxsZXIgaXMgYWxyZWFkeSB0ZXN0aW5nIHRoaXMgZHJpdmVyLCB3aGljaCB3b3VsZCBiZSBhbiBpbmRpY2F0b3Igb2YgaXQgYmVpbmcgcmVhY2hhYmxlLiBUaGUgY29tbWl0IG1lc3NhZ2Ugc2hvd3MgYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLiBBdCBmaXJzdCBnbGFuY2UsIG15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIHdhcywgJiMzNDtTeXprYWxsZXIgZm91bmQgYSBidWchJiMzNDsuIEJ1dCB3YWl0Li4uIGl0JiMzOTtzIGp1c3QgYSBkdW1teSBjb21taXQgZ2VuZXJhdGVkIGJ5IHN5emthbGxlciYjMzk7cyB0ZXN0IGluZnJhc3RydWN0dXJlLiBJdCBtZWFucyBzb21lb25lIHN1Ym1pdHRlZCB0aGlzIHBhdGNoIHRvIFN5emthbGxlciBmb3IgdGVzdGluZywgc28gaXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHN5emthbGxlciBjYW4gcmVhY2ggaXQuCgpUaGVyZWZvcmUsIEkgbmVlZCB0byBnbyBiYWNrIHRvIHRoZSBydWxlLiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGJhc2VkIG9uIHRoaXMgcnVsZToKCiYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLi4uCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpBbHJpZ2h0LCBpcyBgbml1YCBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcj8gTm90IGluIHRoZSBjb250ZXh0IG9mIHRoZSBydWxlJiMzOTtzIGV4YW1wbGVzLCBpdCYjMzk7cyBqdXN0IGFuIG9sZCBFdGhlcm5ldCBjYXJkLiBEb2VzIGl0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgYnkgUUVNVT8gWWVzLCBiZWNhdXNlIGl0JiMzOTtzIGEgcGh5c2ljYWwgRXRoZXJuZXQgY2FyZCwgYW5kIGl0IGxvb2tzIGxpa2UgUUVNVSBsaWtlbHkgd291bGRuJiMzOTt0IGVtdWxhdGUgdGhpcyBjYXJkLiBCdXQgdGhlIHF1ZXN0aW9uIGlzOiBjYW4gc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgcmVhY2ggaXQ/IFRoZSBzeXprYWxsZXIgUENJIGZ1enplciBjYW4gaW5kZWVkIHJlYWNoIFBDSSBwcm9iZSBmdW5jdGlvbnMsIGFuZCBpdCBtYXkgYmUgYWJsZSB0byByZWFjaCBvcGVuIGZ1bmN0aW9ucyBpZiB0aGUgcHJvYmUgc3VjY2VlZHMuCgpUaGUgcHJvYmxlbSB3aXRoIG1hbnkgbmV0d29yayBjYXJkcyBpcyB0aGF0IHRoZXkgaGF2ZSByZXF1aXJlbWVudHMgdGhhdCBhcmUgbW9yZSBjb21wbGV4LiBUaGV5IGhhdmUgRE1BIHJlcXVpcmVtZW50cywgdGhleSByZXF1aXJlIGZpcm13YXJlLCBvciB0aGV5IG1pZ2h0IGhhdmUgY29tcGxleCBNTUlPIGhhbmRzaGFrZXMgdGhhdCBjYW5ub3QgYmUgZWFzaWx5IGd1ZXNzZWQuCgpTbywgaW4gdGhlIGVuZCwgaXQgYm9pbHMgZG93biB0bzogaXMgYG5pdWAgYSBkcml2ZXIgdGhhdCAqcmVxdWlyZXMqIHBoeXNpY2FsIGhhcmR3YXJlIHRoYXQgaXMgbm90IHByb3Blcmx5IGVtdWxhdGVkIGJ5IFFFTVU/IFllcywgdGhhdCBhcHBlYXJzIHRvIGJlIHRoZSBjYXNlLiBUaGVyZWZvcmUsIGZvbGxvd2luZyB0aGUgcnVsZSwgbXkgY29uY2x1c2lvbiBsZWFucyB0b3dhcmRzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRob3VnaCB0byBtYWtlIGEgZmluYWwgY2FsbCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5NjAwOlx0XG45NjAxOlx0XHRCVUdfT04oIXAgfHwgcC1cdTAwM2Vwb3J0c1twb3J0XSAhPSBucCk7XG45NjAyOlx0XG45NjAzOlx0XHRuZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC1cdTAwM2VkZXYsXG45NjA0Olx0XHRcdCAgICAgXCYjMzQ7JXMoKSBwb3J0WyV1XVxcblwmIzM0OywgX19mdW5jX18sIHBvcnQpO1xuOTYwNTpcdFxuOTYwNjpcdFx0c3ByaW50Zihwb3J0X25hbWUsIFwmIzM0O3BvcnQlZFwmIzM0OywgcG9ydCk7XG45NjA3Olx0XG45NjA4Olx0XHRtdXRleF9sb2NrKFx1MDAyNm5pdV9wYXJlbnRfbG9jayk7XG45NjA5Olx0XG45NjEwOlx0XHRzeXNmc19yZW1vdmVfbGluayhcdTAwMjZwLVx1MDAzZXBsYXRfZGV2LVx1MDAzZWRldi5rb2JqLCBwb3J0X25hbWUpO1xuOTYxMTpcdFxuOTYxMjpcdFx0cC1cdTAwM2Vwb3J0c1twb3J0XSA9IE5VTEw7XG45NjEzOlx0XHRucC1cdTAwM2VwYXJlbnQgPSBOVUxMO1xuOTYxNDpcdFxuOTYxNTpcdFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2cC1cdTAwM2VyZWZjbnQpKSB7XG45NjE2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnAtXHUwMDNlbGlzdCk7XG45NjE3Olx0XHRcdHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHAtXHUwMDNlcGxhdF9kZXYpO1xuOTYxODpcdFx0fVxuOTYxOTpcdFxuOTYyMDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pdV9wYXJlbnRfbG9jayk7XG45NjIxOlx0fVxuOTYyMjpcdFxuOTYyMzpcdHN0YXRpYyB2b2lkICpuaXVfcGNpX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXG45NjI0Olx0XHRcdFx0XHQgICAgdTY0ICpoYW5kbGUsIGdmcF90IGZsYWcpXG45NjI1Olx0e1xuOTYyNjpcdFx0ZG1hX2FkZHJfdCBkaDtcbjk2Mjc6XHRcdHZvaWQgKnJldDtcbjk2Mjg6XHRcbjk2Mjk6XHRcdHJldCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIFx1MDAyNmRoLCBmbGFnKTtcbjk2MzA6XHRcdGlmIChyZXQpXG45NjMxOlx0XHRcdCpoYW5kbGUgPSBkaDtcbjk2MzI6XHRcdHJldHVybiByZXQ7XG45NjMzOlx0fVxuOTYzNDpcdFxuOTYzNTpcdHN0YXRpYyB2b2lkIG5pdV9wY2lfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLFxuOTYzNjpcdFx0XHRcdFx0ICB2b2lkICpjcHVfYWRkciwgdTY0IGhhbmRsZSlcbjk2Mzc6XHR7XG45NjM4Olx0XHRkbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIGNwdV9hZGRyLCBoYW5kbGUpO1xuOTYzOTpcdH1cbjk2NDA6XHRcbjk2NDE6XHRzdGF0aWMgdTY0IG5pdV9wY2lfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbjk2NDI6XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLFxuOTY0MzpcdFx0XHRcdCAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pXG45NjQ0Olx0e1xuOTY0NTpcdFx0cmV0dXJuIGRtYV9tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTtcbjk2NDY6XHR9XG45NjQ3Olx0XG45NjQ4Olx0c3RhdGljIHZvaWQgbml1X3BjaV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9hZGRyZXNzLFxuOTY0OTpcdFx0XHRcdCAgICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxuOTY1MDpcdHtcbjk2NTE6XHRcdGRtYV91bm1hcF9wYWdlKGRldiwgZG1hX2FkZHJlc3MsIHNpemUsIGRpcmVjdGlvbik7XG45NjUyOlx0fVxuOTY1MzpcdFxuOTY1NDpcdHN0YXRpYyB1NjQgbml1X3BjaV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsXG45NjU1Olx0XHRcdFx0ICAgICAgc2l6ZV90IHNpemUsXG45NjU2Olx0XHRcdFx0ICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxuOTY1NzpcdHtcbjk2NTg6XHRcdHJldHVybiBkbWFfbWFwX3NpbmdsZShkZXYsIGNwdV9hZGRyLCBzaXplLCBkaXJlY3Rpb24pO1xuOTY1OTpcdH1cbjk2NjA6XHRcbjk2NjE6XHRzdGF0aWMgdm9pZCBuaXVfcGNpX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfYWRkcmVzcyxcbjk2NjI6XHRcdFx0XHRcdCBzaXplX3Qgc2l6ZSxcbjk2NjM6XHRcdFx0XHRcdCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pXG45NjY0Olx0e1xuOTY2NTpcdFx0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyZXNzLCBzaXplLCBkaXJlY3Rpb24pO1xuOTY2NjpcdH1cbjk2Njc6XHRcbjk2Njg6XHRzdGF0aWMgaW50IG5pdV9wY2lfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBhZGRyKVxuOTY2OTpcdHtcbjk2NzA6XHRcdHJldHVybiBkbWFfbWFwcGluZ19lcnJvcihkZXYsIGFkZHIpO1xuOTY3MTpcdH1cbjk2NzI6XHRcbjk2NzM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5pdV9vcHMgbml1X3BjaV9vcHMgPSB7XG45Njc0Olx0XHQuYWxsb2NfY29oZXJlbnRcdD0gbml1X3BjaV9hbGxvY19jb2hlcmVudCxcbjk2NzU6XHRcdC5mcmVlX2NvaGVyZW50XHQ9IG5pdV9wY2lfZnJlZV9jb2hlcmVudCxcbjk2NzY6XHRcdC5tYXBfcGFnZVx0PSBuaXVfcGNpX21hcF9wYWdlLFxuOTY3NzpcdFx0LnVubWFwX3BhZ2VcdD0gbml1X3BjaV91bm1hcF9wYWdlLFxuOTY3ODpcdFx0Lm1hcF9zaW5nbGVcdD0gbml1X3BjaV9tYXBfc2luZ2xlLFxuOTY3OTpcdFx0LnVubWFwX3NpbmdsZVx0PSBuaXVfcGNpX3VubWFwX3NpbmdsZSxcbjk2ODA6XHRcdC5tYXBwaW5nX2Vycm9yXHQ9IG5pdV9wY2lfbWFwcGluZ19lcnJvcixcbjk2ODE6XHR9O1xuOTY4MjpcdFxuOTY4MzpcdHN0YXRpYyB2b2lkIG5pdV9kcml2ZXJfdmVyc2lvbih2b2lkKVxuOTY4NDpcdHtcbjk2ODU6XHRcdHN0YXRpYyBpbnQgbml1X3ZlcnNpb25fcHJpbnRlZDtcbjk2ODY6XHRcbjk2ODc6XHRcdGlmIChuaXVfdmVyc2lvbl9wcmludGVkJiM0MzsmIzQzOyA9PSAwKVxuOTY4ODpcdFx0XHRwcl9pbmZvKFwmIzM0OyVzXCYjMzQ7LCB2ZXJzaW9uKTtcbjk2ODk6XHR9XG45NjkwOlx0XG45NjkxOlx0c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuaXVfYWxsb2NfYW5kX2luaXQoc3RydWN0IGRldmljZSAqZ2VuX2Rldixcbjk2OTI6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldixcbjk2OTM6XHRcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCxcbjk2OTQ6XHRcdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qgbml1X29wcyAqb3BzLCB1OCBwb3J0KVxuOTY5NTpcdHtcbjk2OTY6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG45Njk3Olx0XHRzdHJ1Y3Qgbml1ICpucDtcbjk2OTg6XHRcbjk2OTk6XHRcdGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3Qgbml1KSwgTklVX05VTV9UWENIQU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjE0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYG5pdV9wY2lfaW5pdF9vbmVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhpcyBQQ0kgZGV2aWNlIGluaXRpYWxpemF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIGBuaXVfcGNpX2luaXRfb25lYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNraXAgdGhlIGZsdWZmIGFuZCBzZWUgaG93IHRoaXMgZHJpdmVyIGhhbmRsZXMgdGhlIGRldmljZSBjb21pbmcgb25saW5lLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIHN0ZXBzOiByZXNvdXJjZSBhbGxvY2F0aW9uLCByZWdpc3RlciBhY2Nlc3MgaW5pdGlhbGl6YXRpb24sIGFueSBkZXZpY2Utc3BlY2lmaWMgc2V0dXDigKYgdGhhdCBzb3J0IG9mIHRoaW5nLiBJIGV4cGVjdCB0byBzZWUgdGhlIHN0YW5kYXJkIFBDSSBwcm9iZSBwcm9jZXNzIHdpdGggYWxsIHRoZSBzdGFuZGFyZCBQQ0kgY2FsbHMsIG5vdGhpbmcgdG9vIGZhbmN5ICh5ZXQpLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGUgdXN1YWwgc3RlcHM6IG1hcHBpbmcgdGhlIEJBUnMsIG1heWJlIHNvbWUgaW50ZXJydXB0IGhhbmRsaW5nIHNldHVwLCBwb3NzaWJseSBzb21lIERNQSBlbmdpbmUgY29uZmlndXJhdGlvbiBpZiB0aGlzIE5JQyBpcyBvZiB0aGF0IHR5cGUuIEkgYW0gY3VyaW91cyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB2ZW5kb3Itc3BlY2lmaWMgcGVjdWxpYXJpdGllcyB0aGlzIGRyaXZlciBuZWVkcyB0byBoYW5kbGUuIEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGVzZSBzdGFnZXMg4oCTIGEgcm9idXN0IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGlzIGEgc2lnbiBvZiBhIHdlbGwtd3JpdHRlbiBkcml2ZXIuIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSwgbG9va2luZyBmb3IgdGhlIGNyaXRpY2FsIHBhdGgsIHRoZSBjb3JlIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMsIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcgY29udGluZ2VuY2llcy4gSSYjMzk7bSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSB0aGluZ3MgY291bGQgZ28gd3JvbmcsIHNvIEkgY2FuIHNlZSB3aGF0IHRoZSBhdXRob3ImIzM5O3MgYW50aWNpcGF0ZWQgZmFpbHVyZSBtb2RlcyBhcmUgYW5kIGhvdyB0aGV5IGFyZSBoYW5kbGVkLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3dlciBtYW5hZ2VtZW50LXJlbGF0ZWQgaW5pdGlhbGl6YXRpb24gaWYgYXBwbGljYWJsZSAtIGxvb2tpbmcgZm9yIGFueXRoaW5nIGRlYWxpbmcgd2l0aCBjbG9jayBnYXRpbmcgb3Igdm9sdGFnZSBzZXR0aW5ncy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIChvciBwb3RlbnRpYWwgaXNzdWVzKSBhd2FpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs5NzAwOlx0XHRpZiAoIWRldilcbjk3MDE6XHRcdFx0cmV0dXJuIE5VTEw7XG45NzAyOlx0XG45NzAzOlx0XHRTRVRfTkVUREVWX0RFVihkZXYsIGdlbl9kZXYpO1xuOTcwNDpcdFxuOTcwNTpcdFx0bnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuOTcwNjpcdFx0bnAtXHUwMDNlZGV2ID0gZGV2O1xuOTcwNzpcdFx0bnAtXHUwMDNlcGRldiA9IHBkZXY7XG45NzA4Olx0XHRucC1cdTAwM2VvcCA9IG9wO1xuOTcwOTpcdFx0bnAtXHUwMDNlZGV2aWNlID0gZ2VuX2Rldjtcbjk3MTA6XHRcdG5wLVx1MDAzZW9wcyA9IG9wcztcbjk3MTE6XHRcbjk3MTI6XHRcdG5wLVx1MDAzZW1zZ19lbmFibGUgPSBuaXVfZGVidWc7XG45NzEzOlx0XG45NzE0Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZucC1cdTAwM2Vsb2NrKTtcbjk3MTU6XHRcdElOSVRfV09SSyhcdTAwMjZucC1cdTAwM2VyZXNldF90YXNrLCBuaXVfcmVzZXRfdGFzayk7XG45NzE2Olx0XG45NzE3Olx0XHRucC1cdTAwM2Vwb3J0ID0gcG9ydDtcbjk3MTg6XHRcbjk3MTk6XHRcdHJldHVybiBkZXY7XG45NzIwOlx0fVxuOTcyMTpcdFxuOTcyMjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbml1X25ldGRldl9vcHMgPSB7XG45NzIzOlx0XHQubmRvX29wZW5cdFx0PSBuaXVfb3Blbixcbjk3MjQ6XHRcdC5uZG9fc3RvcFx0XHQ9IG5pdV9jbG9zZSxcbjk3MjU6XHRcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IG5pdV9zdGFydF94bWl0LFxuOTcyNjpcdFx0Lm5kb19nZXRfc3RhdHM2NFx0PSBuaXVfZ2V0X3N0YXRzLFxuOTcyNzpcdFx0Lm5kb19zZXRfcnhfbW9kZVx0PSBuaXVfc2V0X3J4X21vZGUsXG45NzI4Olx0XHQubmRvX3ZhbGlkYXRlX2FkZHJcdD0gZXRoX3ZhbGlkYXRlX2FkZHIsXG45NzI5Olx0XHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBuaXVfc2V0X21hY19hZGRyLFxuOTczMDpcdFx0Lm5kb19ldGhfaW9jdGxcdFx0PSBuaXVfaW9jdGwsXG45NzMxOlx0XHQubmRvX3R4X3RpbWVvdXRcdFx0PSBuaXVfdHhfdGltZW91dCxcbjk3MzI6XHRcdC5uZG9fY2hhbmdlX210dVx0XHQ9IG5pdV9jaGFuZ2VfbXR1LFxuOTczMzpcdH07XG45NzM0Olx0XG45NzM1Olx0c3RhdGljIHZvaWQgbml1X2Fzc2lnbl9uZXRkZXZfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG45NzM2Olx0e1xuOTczNzpcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZuaXVfbmV0ZGV2X29wcztcbjk3Mzg6XHRcdGRldi1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNm5pdV9ldGh0b29sX29wcztcbjk3Mzk6XHRcdGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IE5JVV9UWF9USU1FT1VUO1xuOTc0MDpcdH1cbjk3NDE6XHRcbjk3NDI6XHRzdGF0aWMgdm9pZCBuaXVfZGV2aWNlX2Fubm91bmNlKHN0cnVjdCBuaXUgKm5wKVxuOTc0MzpcdHtcbjk3NDQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBucC1cdTAwM2VkZXY7XG45NzQ1Olx0XG45NzQ2Olx0XHRwcl9pbmZvKFwmIzM0OyVzOiBOSVUgRXRoZXJuZXQgJXBNXFxuXCYjMzQ7LCBkZXYtXHUwMDNlbmFtZSwgZGV2LVx1MDAzZWRldl9hZGRyKTtcbjk3NDc6XHRcbjk3NDg6XHRcdGlmIChucC1cdTAwM2VwYXJlbnQtXHUwMDNlcGxhdF90eXBlID09IFBMQVRfVFlQRV9BVENBX0NQMzIyMCkge1xuOTc0OTpcdFx0XHRwcl9pbmZvKFwmIzM0OyVzOiBQb3J0IHR5cGVbJXNdIG1vZGVbJXM6JXNdIFhDVlJbJXNdIHBoeVslc11cXG5cJiMzNDssXG45NzUwOlx0XHRcdFx0XHRkZXYtXHUwMDNlbmFtZSxcbjk3NTE6XHRcdFx0XHRcdChucC1cdTAwM2VmbGFncyBcdTAwMjYgTklVX0ZMQUdTX1hNQUMgPyBcJiMzNDtYTUFDXCYjMzQ7IDogXCYjMzQ7Qk1BQ1wmIzM0OyksXG45NzUyOlx0XHRcdFx0XHQobnAtXHUwMDNlZmxhZ3MgXHUwMDI2IE5JVV9GTEFHU18xMEcgPyBcJiMzNDsxMEdcJiMzNDsgOiBcJiMzNDsxR1wmIzM0OyksXG45NzUzOlx0XHRcdFx0XHQobnAtXHUwMDNlZmxhZ3MgXHUwMDI2IE5JVV9GTEFHU19GSUJFUiA/IFwmIzM0O1JHTUlJIEZJQkVSXCYjMzQ7IDogXCYjMzQ7U0VSREVTXCYjMzQ7KSxcbjk3NTQ6XHRcdFx0XHRcdChucC1cdTAwM2VtYWNfeGN2ciA9PSBNQUNfWENWUl9NSUkgPyBcJiMzNDtNSUlcJiMzNDsgOlxuOTc1NTpcdFx0XHRcdFx0IChucC1cdTAwM2VtYWNfeGN2ciA9PSBNQUNfWENWUl9QQ1MgPyBcJiMzNDtQQ1NcJiMzNDsgOiBcJiMzNDtYUENTXCYjMzQ7KSksXG45NzU2Olx0XHRcdFx0XHRucC1cdTAwM2V2cGQucGh5X3R5cGUpO1xuOTc1NzpcdFx0fSBlbHNlIHtcbjk3NTg6XHRcdFx0cHJfaW5mbyhcJiMzNDslczogUG9ydCB0eXBlWyVzXSBtb2RlWyVzOiVzXSBYQ1ZSWyVzXSBwaHlbJXNdXFxuXCYjMzQ7LFxuOTc1OTpcdFx0XHRcdFx0ZGV2LVx1MDAzZW5hbWUsXG45NzYwOlx0XHRcdFx0XHQobnAtXHUwMDNlZmxhZ3MgXHUwMDI2IE5JVV9GTEFHU19YTUFDID8gXCYjMzQ7WE1BQ1wmIzM0OyA6IFwmIzM0O0JNQUNcJiMzNDspLFxuOTc2MTpcdFx0XHRcdFx0KG5wLVx1MDAzZWZsYWdzIFx1MDAyNiBOSVVfRkxBR1NfMTBHID8gXCYjMzQ7MTBHXCYjMzQ7IDogXCYjMzQ7MUdcJiMzNDspLFxuOTc2MjpcdFx0XHRcdFx0KG5wLVx1MDAzZWZsYWdzIFx1MDAyNiBOSVVfRkxBR1NfRklCRVIgPyBcJiMzNDtGSUJFUlwmIzM0OyA6XG45NzYzOlx0XHRcdFx0XHQgKG5wLVx1MDAzZWZsYWdzIFx1MDAyNiBOSVVfRkxBR1NfWENWUl9TRVJERVMgPyBcJiMzNDtTRVJERVNcJiMzNDsgOlxuOTc2NDpcdFx0XHRcdFx0ICBcJiMzNDtDT1BQRVJcJiMzNDspKSxcbjk3NjU6XHRcdFx0XHRcdChucC1cdTAwM2VtYWNfeGN2ciA9PSBNQUNfWENWUl9NSUkgPyBcJiMzNDtNSUlcJiMzNDsgOlxuOTc2NjpcdFx0XHRcdFx0IChucC1cdTAwM2VtYWNfeGN2ciA9PSBNQUNfWENWUl9QQ1MgPyBcJiMzNDtQQ1NcJiMzNDsgOiBcJiMzNDtYUENTXCYjMzQ7KSksXG45NzY3Olx0XHRcdFx0XHRucC1cdTAwM2V2cGQucGh5X3R5cGUpO1xuOTc2ODpcdFx0fVxuOTc2OTpcdH1cbjk3NzA6XHRcbjk3NzE6XHRzdGF0aWMgdm9pZCBuaXVfc2V0X2Jhc2ljX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG45NzcyOlx0e1xuOTc3MzpcdFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhIQVNIO1xuOTc3NDpcdFx0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IGRldi1cdTAwM2Vod19mZWF0dXJlcyB8IE5FVElGX0ZfUlhDU1VNO1xuOTc3NTpcdH1cbjk3NzY6XHRcbjk3Nzc6XHRzdGF0aWMgaW50IG5pdV9wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG45Nzc4Olx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG45Nzc5Olx0e1xuOTc4MDpcdFx0dW5pb24gbml1X3BhcmVudF9pZCBwYXJlbnRfaWQ7XG45NzgxOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuOTc4MjpcdFx0c3RydWN0IG5pdSAqbnA7XG45NzgzOlx0XHRpbnQgZXJyO1xuOTc4NDpcdFxuOTc4NTpcdFx0bml1X2RyaXZlcl92ZXJzaW9uKCk7XG45Nzg2Olx0XG45Nzg3Olx0XHRlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTtcbjk3ODg6XHRcdGlmIChlcnIpIHtcbjk3ODk6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZ1xcblwmIzM0Oyk7XG45NzkwOlx0XHRcdHJldHVybiBlcnI7XG45NzkxOlx0XHR9XG45NzkyOlx0XG45NzkzOlx0XHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSB8fFxuOTc5NDpcdFx0ICAgICEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDIpIFx1MDAyNiBJT1JFU09VUkNFX01FTSkpIHtcbjk3OTU6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2Fubm90IGZpbmQgcHJvcGVyIFBDSSBkZXZpY2UgYmFzZSBhZGRyZXNzZXMsIGFib3J0aW5nXFxuXCYjMzQ7KTtcbjk3OTY6XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjk3OTc6XHRcdFx0Z290byBlcnJfb3V0X2Rpc2FibGVfcGRldjtcbjk3OTg6XHRcdH1cbjk3OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNDUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBuaXVfcGNpX2luaXRfb25lYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgbml1X3BjaV9pbml0X29uZWAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoZSBuYW1lIGluc3RhbnRseSwgaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgTklDIGRyaXZlciBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgdGhlIFBDSSBpbml0aWFsaXphdGlvbiBwYXRoIGZvciB0aGUgTklVIChOZXR3b3JrIEludGVyZmFjZSBVbml0KS4gS25vd2luZyBpdCYjMzk7cyBQQ0ktZm9jdXNlZCBhbHJlYWR5IGdpdmVzIG1lIGNvbnRleHQg4oCTIEkmIzM5O20gYW50aWNpcGF0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIHByb2JhYmx5IHNvbWUgZGV2aWNlLXNwZWNpZmljIHNldHVwIGJhc2VkIG9uIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaGVyZTsgaW5jb3JyZWN0IHNlcXVlbmNlIGR1cmluZyBpbml0IGNhbiBsZWFkIHRvIHVucHJlZGljdGFibGUgcmVzdWx0cyBpbiB0aGUgbG9uZyBydW4uIExldCYjMzk7cyBzZWUgaG93IHRoaXMgdGhpbmcgYWN0dWFsbHkgdGlja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTgwMDpcdFx0ZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTU9EVUxFX05BTUUpO1xuOTgwMTpcdFx0aWYgKGVycikge1xuOTgwMjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsIGFib3J0aW5nXFxuXCYjMzQ7KTtcbjk4MDM6XHRcdFx0Z290byBlcnJfb3V0X2Rpc2FibGVfcGRldjtcbjk4MDQ6XHRcdH1cbjk4MDU6XHRcbjk4MDY6XHRcdGlmICghcGNpX2lzX3BjaWUocGRldikpIHtcbjk4MDc6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2Fubm90IGZpbmQgUENJIEV4cHJlc3MgY2FwYWJpbGl0eSwgYWJvcnRpbmdcXG5cJiMzNDspO1xuOTgwODpcdFx0XHRlcnIgPSAtRU5PREVWO1xuOTgwOTpcdFx0XHRnb3RvIGVycl9vdXRfZnJlZV9yZXM7XG45ODEwOlx0XHR9XG45ODExOlx0XG45ODEyOlx0XHRkZXYgPSBuaXVfYWxsb2NfYW5kX2luaXQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBkZXYsIE5VTEwsXG45ODEzOlx0XHRcdFx0XHQgXHUwMDI2bml1X3BjaV9vcHMsIFBDSV9GVU5DKHBkZXYtXHUwMDNlZGV2Zm4pKTtcbjk4MTQ6XHRcdGlmICghZGV2KSB7XG45ODE1Olx0XHRcdGVyciA9IC1FTk9NRU07XG45ODE2Olx0XHRcdGdvdG8gZXJyX291dF9mcmVlX3Jlcztcbjk4MTc6XHRcdH1cbjk4MTg6XHRcdG5wID0gbmV0ZGV2X3ByaXYoZGV2KTtcbjk4MTk6XHRcbjk4MjA6XHRcdG1lbXNldChcdTAwMjZwYXJlbnRfaWQsIDAsIHNpemVvZihwYXJlbnRfaWQpKTtcbjk4MjE6XHRcdHBhcmVudF9pZC5wY2kuZG9tYWluID0gcGNpX2RvbWFpbl9ucihwZGV2LVx1MDAzZWJ1cyk7XG45ODIyOlx0XHRwYXJlbnRfaWQucGNpLmJ1cyA9IHBkZXYtXHUwMDNlYnVzLVx1MDAzZW51bWJlcjtcbjk4MjM6XHRcdHBhcmVudF9pZC5wY2kuZGV2aWNlID0gUENJX1NMT1QocGRldi1cdTAwM2VkZXZmbik7XG45ODI0Olx0XG45ODI1Olx0XHRucC1cdTAwM2VwYXJlbnQgPSBuaXVfZ2V0X3BhcmVudChucCwgXHUwMDI2cGFyZW50X2lkLFxuOTgyNjpcdFx0XHRcdFx0ICAgIFBMQVRfVFlQRV9BVExBUyk7XG45ODI3Olx0XHRpZiAoIW5wLVx1MDAzZXBhcmVudCkge1xuOTgyODpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuOTgyOTpcdFx0XHRnb3RvIGVycl9vdXRfZnJlZV9kZXY7XG45ODMwOlx0XHR9XG45ODMxOlx0XG45ODMyOlx0XHRwY2llX2NhcGFiaWxpdHlfY2xlYXJfYW5kX3NldF93b3JkKHBkZXYsIFBDSV9FWFBfREVWQ1RMLFxuOTgzMzpcdFx0XHRQQ0lfRVhQX0RFVkNUTF9OT1NOT09QX0VOLFxuOTgzNDpcdFx0XHRQQ0lfRVhQX0RFVkNUTF9DRVJFIHwgUENJX0VYUF9ERVZDVExfTkZFUkUgfFxuOTgzNTpcdFx0XHRQQ0lfRVhQX0RFVkNUTF9GRVJFIHwgUENJX0VYUF9ERVZDVExfVVJSRSB8XG45ODM2Olx0XHRcdFBDSV9FWFBfREVWQ1RMX1JFTEFYX0VOKTtcbjk4Mzc6XHRcbjk4Mzg6XHRcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIERNQV9CSVRfTUFTSyg0NCkpO1xuOTgzOTpcdFx0aWYgKCFlcnIpXG45ODQwOlx0XHRcdGRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7XG45ODQxOlx0XHRpZiAoZXJyKSB7XG45ODQyOlx0XHRcdGVyciA9IGRtYV9zZXRfbWFzayhcdTAwMjZwZGV2LVx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XG45ODQzOlx0XHRcdGlmIChlcnIpIHtcbjk4NDQ6XHRcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nXFxuXCYjMzQ7KTtcbjk4NDU6XHRcdFx0XHRnb3RvIGVycl9vdXRfcmVsZWFzZV9wYXJlbnQ7XG45ODQ2Olx0XHRcdH1cbjk4NDc6XHRcdH1cbjk4NDg6XHRcbjk4NDk6XHRcdG5pdV9zZXRfYmFzaWNfZmVhdHVyZXMoZGV2KTtcbjk4NTA6XHRcbjk4NTE6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9VTklDQVNUX0ZMVDtcbjk4NTI6XHRcbjk4NTM6XHRcdG5wLVx1MDAzZXJlZ3MgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCk7XG45ODU0Olx0XHRpZiAoIW5wLVx1MDAzZXJlZ3MpIHtcbjk4NTU6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzLCBhYm9ydGluZ1xcblwmIzM0Oyk7XG45ODU2Olx0XHRcdGVyciA9IC1FTk9NRU07XG45ODU3Olx0XHRcdGdvdG8gZXJyX291dF9yZWxlYXNlX3BhcmVudDtcbjk4NTg6XHRcdH1cbjk4NTk6XHRcbjk4NjA6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuOTg2MTpcdFx0cGNpX3NhdmVfc3RhdGUocGRldik7XG45ODYyOlx0XG45ODYzOlx0XHRkZXYtXHUwMDNlaXJxID0gcGRldi1cdTAwM2VpcnE7XG45ODY0Olx0XG45ODY1Olx0XHQvKiBNVFUgcmFuZ2U6IDY4IC0gOTIxNiAqL1xuOTg2NjpcdFx0ZGV2LVx1MDAzZW1pbl9tdHUgPSBFVEhfTUlOX01UVTtcbjk4Njc6XHRcdGRldi1cdTAwM2VtYXhfbXR1ID0gTklVX01BWF9NVFU7XG45ODY4Olx0XG45ODY5Olx0XHRuaXVfYXNzaWduX25ldGRldl9vcHMoZGV2KTtcbjk4NzA6XHRcbjk4NzE6XHRcdGVyciA9IG5pdV9nZXRfaW52YXJpYW50cyhucCk7XG45ODcyOlx0XHRpZiAoZXJyKSB7XG45ODczOlx0XHRcdGlmIChlcnIgIT0gLUVOT0RFVilcbjk4NzQ6XHRcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtQcm9ibGVtIGZldGNoaW5nIGludmFyaWFudHMgb2YgY2hpcCwgYWJvcnRpbmdcXG5cJiMzNDspO1xuOTg3NTpcdFx0XHRnb3RvIGVycl9vdXRfaW91bm1hcDtcbjk4NzY6XHRcdH1cbjk4Nzc6XHRcbjk4Nzg6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpO1xuOTg3OTpcdFx0aWYgKGVycikge1xuOTg4MDpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmdcXG5cJiMzNDspO1xuOTg4MTpcdFx0XHRnb3RvIGVycl9vdXRfaW91bm1hcDtcbjk4ODI6XHRcdH1cbjk4ODM6XHRcbjk4ODQ6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpO1xuOTg4NTpcdFxuOTg4NjpcdFx0bml1X2RldmljZV9hbm5vdW5jZShucCk7XG45ODg3Olx0XG45ODg4Olx0XHRyZXR1cm4gMDtcbjk4ODk6XHRcbjk4OTA6XHRlcnJfb3V0X2lvdW5tYXA6XG45ODkxOlx0XHRpZiAobnAtXHUwMDNlcmVncykge1xuOTg5MjpcdFx0XHRpb3VubWFwKG5wLVx1MDAzZXJlZ3MpO1xuOTg5MzpcdFx0XHRucC1cdTAwM2VyZWdzID0gTlVMTDtcbjk4OTQ6XHRcdH1cbjk4OTU6XHRcbjk4OTY6XHRlcnJfb3V0X3JlbGVhc2VfcGFyZW50OlxuOTg5NzpcdFx0bml1X3B1dF9wYXJlbnQobnApO1xuOTg5ODpcdFxuOTg5OTpcdGVycl9vdXRfZnJlZV9kZXY6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTU1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBuaXVfZ2V0X2ludmFyaWFudHNgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRoZSBkZWJ1Z2dlciYjMzk7cyBoaXQgYSBjYWxsIHRvIGBuaXVfZ2V0X2ludmFyaWFudHNgLiBUaW1lIHRvIGdldCBteSBiZWFyaW5ncyBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIHN5c3RlbS4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBhY2NvbXBsaXNoLiBHaXZlbiB0aGUgbmFtZSwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGlzIGlzIHdoZXJlIHRoZSBzeXN0ZW0gYXR0ZW1wdHMgdG8gZGVyaXZlIG9yIHJldHJpZXZlIGludmFyaWFudHMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIE5JVSAoTmV0d29yayBJbnRlcmZhY2UgVW5pdCkgY29udGV4dC4gUGVyaGFwcyBpdCYjMzk7cyBxdWVyeWluZyBoYXJkd2FyZSByZWdpc3RlcnMsIGFuYWx5emluZyBkYXRhIHN0cnVjdHVyZXMsIG9yIHJlbHlpbmcgb24gc29tZSBwcmUtY2FsY3VsYXRlZCBzdGF0ZS4KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqRGF0YSBTb3VyY2VzOioqIFdoYXQgc291cmNlcyBvZiBpbmZvcm1hdGlvbiBhcmUgYmVpbmcgdGFwcGVkPyBIYXJkd2FyZSByZWdpc3RlcnMsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGludGVybmFsIHN0YXRlLCBuZXR3b3JrIHRyYWZmaWMsIGV0Yy4/CiogICAqKkludmFyaWFudHMgRGVmaW5lZDoqKiBXaGF0IGNvbnN0aXR1dGVzIGFuICYjMzQ7aW52YXJpYW50JiMzNDsgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBvcGVyYXRpb25hbCBwYXJhbWV0ZXJzIChNVFUsIHNwZWVkKSwgaGFyZHdhcmUgc3RhdHVzIChsaW5rIHVwL2Rvd24sIGVycm9yIGNvdW50cyksIG9yIHNvbWUgaGlnaC1sZXZlbCBzeXN0ZW0gcHJvcGVydHk/IElzIGl0IGxvb2tpbmcgZm9yIGNlcnRhaW4gcGF0dGVybnMsIGJvdW5kcywgb3IgcmVsYXRpb25zaGlwcz8KKiAgICoqRGVyaXZhdGlvbiBMb2dpYzoqKiBIb3cgYXJlIHRoZXNlIGludmFyaWFudHMgYmVpbmcgY2FsY3VsYXRlZCBvciByZXRyaWV2ZWQ/IElzIGl0IGEgZGlyZWN0IGxvb2t1cCwgYSBzZXJpZXMgb2YgY2FsY3VsYXRpb25zLCBvciBhIHN0YXRlIG1hY2hpbmU/IEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuCiogICAqKkVycm9yIEhhbmRsaW5nL0VkZ2UgQ2FzZXM6KiogSG93IGRvZXMgdGhlIGZ1bmN0aW9uIGhhbmRsZSB1bmV4cGVjdGVkIHNpdHVhdGlvbnM/IFdoYXQgYXJlIHRoZSBmYWlsdXJlIG1vZGVzLCBhbmQgaG93IGFyZSB0aGV5IHJlcG9ydGVkPyBXaGF0IGtpbmQgb2YgZXJyb3ItY2hlY2tpbmcgaXMgcHJlc2VudD8KKiAgICoqUGVyZm9ybWFuY2U6KiogR2l2ZW4gd2hlcmUgd2UgYXJlIGluIHRoZSBjYWxsIHN0YWNrLCB3aGF0JiMzOTtzIHRoZSBjb21wdXRhdGlvbmFsIGNvbXBsZXhpdHkgb2YgdGhpcyBmdW5jdGlvbj8gQW0gSSBsaWtlbHkgdG8gZW5jb3VudGVyIGFueSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBoZXJlPwoKTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZXN0YWJsaXNoIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0ICYjMzQ7aW52YXJpYW50cyYjMzQ7IHRoaXMgZnVuY3Rpb24gaXMgZGVhbGluZyB3aXRoLiBUaGUgc3BlY2lmaWNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBtaWdodCBiZSBsZXNzIGltcG9ydGFudCBpbml0aWFsbHksIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIHJlY29nbml6ZSBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGFuZCB3b3JrIGJhY2t3YXJkIGZyb20gdGhlcmUuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7OTMxNDpcdHN0YXRpYyBpbnQgbml1X2dldF9pbnZhcmlhbnRzKHN0cnVjdCBuaXUgKm5wKVxuOTMxNTpcdHtcbjkzMTY6XHRcdGludCBlcnIsIGhhdmVfcHJvcHM7XG45MzE3Olx0XHR1MzIgb2Zmc2V0O1xuOTMxODpcdFxuOTMxOTpcdFx0ZXJyID0gbml1X2dldF9vZl9wcm9wcyhucCk7XG45MzIwOlx0XHRpZiAoZXJyID09IC1FTk9ERVYpXG45MzIxOlx0XHRcdHJldHVybiBlcnI7XG45MzIyOlx0XG45MzIzOlx0XHRoYXZlX3Byb3BzID0gIWVycjtcbjkzMjQ6XHRcbjkzMjU6XHRcdGVyciA9IG5pdV9pbml0X21hY19pcHBfcGNzX2Jhc2UobnApO1xuOTMyNjpcdFx0aWYgKGVycilcbjkzMjc6XHRcdFx0cmV0dXJuIGVycjtcbjkzMjg6XHRcbjkzMjk6XHRcdGlmIChoYXZlX3Byb3BzKSB7XG45MzMwOlx0XHRcdGVyciA9IG5pdV9nZXRfYW5kX3ZhbGlkYXRlX3BvcnQobnApO1xuOTMzMTpcdFx0XHRpZiAoZXJyKVxuOTMzMjpcdFx0XHRcdHJldHVybiBlcnI7XG45MzMzOlx0XG45MzM0Olx0XHR9IGVsc2UgIHtcbjkzMzU6XHRcdFx0aWYgKG5wLVx1MDAzZXBhcmVudC1cdTAwM2VwbGF0X3R5cGUgPT0gUExBVF9UWVBFX05JVSlcbjkzMzY6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjkzMzc6XHRcbjkzMzg6XHRcdFx0bnc2NChFU1BDX1BJT19FTiwgRVNQQ19QSU9fRU5fRU5BQkxFKTtcbjkzMzk6XHRcdFx0b2Zmc2V0ID0gbml1X3BjaV92cGRfb2Zmc2V0KG5wKTtcbjkzNDA6XHRcdFx0bmV0aWZfcHJpbnRrKG5wLCBwcm9iZSwgS0VSTl9ERUJVRywgbnAtXHUwMDNlZGV2LFxuOTM0MTpcdFx0XHRcdCAgICAgXCYjMzQ7JXMoKSBWUEQgb2Zmc2V0IFslMDh4XVxcblwmIzM0OywgX19mdW5jX18sIG9mZnNldCk7XG45MzQyOlx0XHRcdGlmIChvZmZzZXQpIHtcbjkzNDM6XHRcdFx0XHRlcnIgPSBuaXVfcGNpX3ZwZF9mZXRjaChucCwgb2Zmc2V0KTtcbjkzNDQ6XHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuOTM0NTpcdFx0XHRcdFx0cmV0dXJuIGVycjtcbjkzNDY6XHRcdFx0fVxuOTM0NzpcdFx0XHRudzY0KEVTUENfUElPX0VOLCAwKTtcbjkzNDg6XHRcbjkzNDk6XHRcdFx0aWYgKG5wLVx1MDAzZWZsYWdzIFx1MDAyNiBOSVVfRkxBR1NfVlBEX1ZBTElEKSB7XG45MzUwOlx0XHRcdFx0bml1X3BjaV92cGRfdmFsaWRhdGUobnApO1xuOTM1MTpcdFx0XHRcdGVyciA9IG5pdV9nZXRfYW5kX3ZhbGlkYXRlX3BvcnQobnApO1xuOTM1MjpcdFx0XHRcdGlmIChlcnIpXG45MzUzOlx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuOTM1NDpcdFx0XHR9XG45MzU1Olx0XG45MzU2Olx0XHRcdGlmICghKG5wLVx1MDAzZWZsYWdzIFx1MDAyNiBOSVVfRkxBR1NfVlBEX1ZBTElEKSkge1xuOTM1NzpcdFx0XHRcdGVyciA9IG5pdV9nZXRfYW5kX3ZhbGlkYXRlX3BvcnQobnApO1xuOTM1ODpcdFx0XHRcdGlmIChlcnIpXG45MzU5Olx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuOTM2MDpcdFx0XHRcdGVyciA9IG5pdV9wY2lfcHJvYmVfc3Byb20obnApO1xuOTM2MTpcdFx0XHRcdGlmIChlcnIpXG45MzYyOlx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuOTM2MzpcdFx0XHR9XG45MzY0Olx0XHR9XG45MzY1Olx0XG45MzY2Olx0XHRlcnIgPSBuaXVfcHJvYmVfcG9ydHMobnApO1xuOTM2NzpcdFx0aWYgKGVycilcbjkzNjg6XHRcdFx0cmV0dXJuIGVycjtcbjkzNjk6XHRcbjkzNzA6XHRcdG5pdV9sZGdfaW5pdChucCk7XG45MzcxOlx0XG45MzcyOlx0XHRuaXVfY2xhc3NpZmllcl9zd3N0YXRlX2luaXQobnApO1xuOTM3MzpcdFx0bml1X2xpbmtfY29uZmlnX2luaXQobnApO1xuOTM3NDpcdFxuOTM3NTpcdFx0ZXJyID0gbml1X2RldGVybWluZV9waHlfZGlzcG9zaXRpb24obnApO1xuOTM3NjpcdFx0aWYgKCFlcnIpXG45Mzc3Olx0XHRcdGVyciA9IG5pdV9pbml0X2xpbmsobnApO1xuOTM3ODpcdFxuOTM3OTpcdFx0cmV0dXJuIGVycjtcbjkzODA6XHR9XG45MzgxOlx0XG45MzgyOlx0c3RhdGljIExJU1RfSEVBRChuaXVfcGFyZW50X2xpc3QpO1xuOTM4MzpcdHN0YXRpYyBERUZJTkVfTVVURVgobml1X3BhcmVudF9sb2NrKTtcbjkzODQ6XHRzdGF0aWMgaW50IG5pdV9wYXJlbnRfaW5kZXg7XG45Mzg1Olx0XG45Mzg2Olx0c3RhdGljIHNzaXplX3Qgc2hvd19wb3J0X3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsXG45Mzg3Olx0XHRcdFx0ICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuOTM4ODpcdHtcbjkzODk6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7XG45MzkwOlx0XHRzdHJ1Y3Qgbml1X3BhcmVudCAqcCA9IGRldl9nZXRfcGxhdGRhdGEoXHUwMDI2cGxhdF9kZXYtXHUwMDNlZGV2KTtcbjkzOTE6XHRcdHUzMiBwb3J0X3BoeSA9IHAtXHUwMDNlcG9ydF9waHk7XG45MzkyOlx0XHRjaGFyICpvcmlnX2J1ZiA9IGJ1ZjtcbjkzOTM6XHRcdGludCBpO1xuOTM5NDpcdFxuOTM5NTpcdFx0aWYgKHBvcnRfcGh5ID09IFBPUlRfUEhZX1VOS05PV04gfHxcbjkzOTY6XHRcdCAgICBwb3J0X3BoeSA9PSBQT1JUX1BIWV9JTlZBTElEKVxuOTM5NzpcdFx0XHRyZXR1cm4gMDtcbjkzOTg6XHRcbjkzOTk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHAtXHUwMDNlbnVtX3BvcnRzOyBpJiM0MzsmIzQzOykge1xuOTQwMDpcdFx0XHRjb25zdCBjaGFyICp0eXBlX3N0cjtcbjk0MDE6XHRcdFx0aW50IHR5cGU7XG45NDAyOlx0XG45NDAzOlx0XHRcdHR5cGUgPSBwaHlfZGVjb2RlKHBvcnRfcGh5LCBpKTtcbjk0MDQ6XHRcdFx0aWYgKHR5cGUgPT0gUE9SVF9UWVBFXzEwRylcbjk0MDU6XHRcdFx0XHR0eXBlX3N0ciA9IFwmIzM0OzEwR1wmIzM0Oztcbjk0MDY6XHRcdFx0ZWxzZVxuOTQwNzpcdFx0XHRcdHR5cGVfc3RyID0gXCYjMzQ7MUdcJiMzNDs7XG45NDA4Olx0XHRcdGJ1ZiAmIzQzOz0gc3ByaW50ZihidWYsXG45NDA5Olx0XHRcdFx0ICAgICAgIChpID09IDApID8gXCYjMzQ7JXNcJiMzNDsgOiBcJiMzNDsgJXNcJiMzNDssXG45NDEwOlx0XHRcdFx0ICAgICAgIHR5cGVfc3RyKTtcbjk0MTE6XHRcdH1cbjk0MTI6XHRcdGJ1ZiAmIzQzOz0gc3ByaW50ZihidWYsIFwmIzM0O1xcblwmIzM0Oyk7XG45NDEzOlx0XHRyZXR1cm4gYnVmIC0gb3JpZ19idWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDc2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoIEZ1enppbmcgRGVjaXNpb246IG5pdSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQg4oCTIGl0JiMzOTtzIGEgbWlzc2luZyB3cml0ZSBvcGVyYXRpb24gKGBudzY0YCkgaW4gYG5pdV90eGNfc2V0X2ltYXNrYCwgcGFydCBvZiBhIHN0YW5kYXJkIG5ldHdvcmsgZHJpdmVyLCBgbml1YC4gVGhlIGNvZGUgbW9kaWZpZXMgYSBoYXJkd2FyZSByZWdpc3Rlci4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGNyaXRlcmlhLCBpdCBtaWdodCBub3QgYmUgaWYgaXQmIzM5O3MgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuCgpCdXQgaXMgYG5pdWAgYW55IG9mIHRob3NlPyBObywgaXQmIzM5O3MgYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIuIFNvIHRoYXQgZXhjbHVzaW9uIGRvZXNuJiMzOTt0IGFwcGx5IGRpcmVjdGx5LiBIb3dldmVyLCB0aGUgbmV4dCBwb2ludCBpbiB0aGUgaW5zdHJ1Y3Rpb25zIHNheXMgbm90IHRvIGZ1enogJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUmIzM0Oy4KClNvLCBjYW4gd2UgcmVhY2ggYG5pdV90eGNfc2V0X2ltYXNrYCBpbiBRRU1VPyBUaGlzIGlzIHdoZXJlIHRoZSBQQ0kgZnV6emVyIGNvbWVzIGluLiBJdCBpbnRlcmNlcHRzIFBDSSBjb25maWcgc3BhY2UgYW5kIE1NSU8gcmVhZHMvd3JpdGVzLiBXaGVuIGBuaXVfdHhjX3NldF9pbWFza2AgY2FsbHMgYG5yNjRgIChyZWFkcSksIHRoZSBmdXp6ZXIgcHJvdmlkZXMgYSBmdXp6ZWQgdmFsdWUuIFdoZW4gaXQgY2FsbHMgYG53NjRgICh3cml0ZXEpLCB0aGUgd3JpdGUgZ29lcyB0byB0aGUgZnV6emVyLiBNZWFuaW5nIHRoZSBmdXp6ZXIgKmNhbiogaW5mbHVlbmNlIHRoaXMgY29kZS4KCk5vdywgY2FuIHdlIGFjdHVhbGx5ICp0cmlnZ2VyKiBgbml1X3R4Y19zZXRfaW1hc2tgIHZpYSBhIGZ1enplcj8gSXQmIzM5O3MgY2FsbGVkIGZyb20gYG5pdV9pbml0X2h3YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYG5pdV9vcGVuYC4gYG5pdV9vcGVuYCBpcyB0aGUgYG5kb19vcGVuYCBjYWxsYmFjay4gU28sIGNhbiB3ZSByZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2U/IElmIGByZWdpc3Rlcl9uZXRkZXZgIHN1Y2NlZWRzLCB0aGF0IGxldHMgdXMgZG8gYSBgaXAgbGluayBzZXQgZGV2IGV0aFggdXBgLCB3aGljaCB0cmlnZ2VycyBgbml1X29wZW5gIGFuZCB0aGVyZWZvcmUgdGhlIHRhcmdldC4KCmBuaXVfZ2V0X2ludmFyaWFudHNgIGlzIGNhbGxlZCB3aGVuIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyByZWdpc3RlcmVkLiBJdCBjYWxscyBgbml1X3BjaV92cGRfZmV0Y2hgLCB3aGljaCBpcyBNTUlPLiBUaGUgZnV6emVyIGNvbnRyb2xzIHRoZSBNTUlPIHJlYWRzLCBzbyB3ZSBjYW4gbWFrZSB0aGlzIHN1Y2NlZWQuIEZyb20gdGhpcyBwb2ludCwgYHJlZ2lzdGVyX25ldGRldmAgY2FuIHRoZW4gc3VjY2VlZCwgd2hpY2ggdGhlbiBzZXRzIHVwIHRoZSBwYXRoIHRocm91Z2ggYG5pdV9vcGVuYCwgYW5kIGV2ZW50dWFsbHkgdG8gYG5pdV90eGNfc2V0X2ltYXNrYC4KClRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIFFFTVUgdmlhIHRoZSBQQ0kgZnV6emVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgc3ltYm9scywgZ2l2ZW4gdGhlIGNhbGwgY2hhaW4sIGFyZSBgbml1X29wZW5gLCBzaW5jZSBpdCBpcyB0aGUgYG5kb19vcGVuYCBjYWxsYmFjay4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgZm9yIG90aGVyIGNhbGxlcnMgb2YgYG5pdV90eGNfc2V0X2ltYXNrYCwgYnV0IHRoYXQgaXMgbXkga2V5IHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuaXVfdHhjX3NldF9pbWFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NDYyNT1zdGF0aWMgdm9pZCBuaXVfdHhjX2VuYWJsZV9wb3J0KHN0cnVjdCBuaXUgKm5wLCBpbnQgb24pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTQ2NDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NDY0NDpzdGF0aWMgdm9pZCBuaXVfdHhjX3NldF9pbWFzayhzdHJ1Y3Qgbml1ICpucCwgdTY0IGltYXNrKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTQ2NDUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz01OTM0PXN0YXRpYyBpbnQgbml1X2luaXRfaHcoc3RydWN0IG5pdSAqbnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTU5NDAtXHRuaXVfdHhjX3BvcnRfZG1hX2VuYWJsZShucCwgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NTk0MTpcdG5pdV90eGNfc2V0X2ltYXNrKG5wLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy01OTQyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkzNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgbml1X2luaXRfaHdgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRoZSBjbHVlIGlzIHRoYXQgd2UmIzM5O3JlIG9ubHkgc2VlaW5nIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20gYG5pdV9pbml0X2h3YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IG5vdCB0ZXJyaWJseSBzdXJwcmlzaW5nIGdpdmVuIHRoZSBuYW1pbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgdHJhY2UgYmFjayBmcm9tIGBuaXVfaW5pdF9od2AuIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgKmFsbCogdGhlIGNhbGxlcnMgb2YgYG5pdV9pbml0X2h3YC4gVGhhdCB3aWxsIGdpdmUgdXMgdGhlIGJyb2FkZXIgY29udGV4dC4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBmcm9tIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgc2NvcGUuIElzIGl0IGR1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24/IEhhcmR3YXJlIHByb2JlPyBPciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gS25vd2luZyB0aGUgY2FsbCBzaXRlcyB3aWxsIG5hcnJvdyBkb3duIHRoZSBhcmVhIHRvIGZvY3VzIG9uIGFuZCBpbGx1bWluYXRlIHRoZSBsaWtlbHkgcmVsYXRpb25zaGlwcyBpbnZvbHZlZCBoZXJlLiBUaW1lIHRvIGdldCB0byBpdCEgTGV0JiMzOTtzIGdldCB0byB0aG9zZSBjYWxsIGdyYXBocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bml1X2luaXRfaHcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTU5MDU9c3RhdGljIHZvaWQgbml1X2Rpc2FibGVfaXBwKHN0cnVjdCBuaXUgKm5wKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy01OTMzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjU5MzQ6c3RhdGljIGludCBuaXVfaW5pdF9odyhzdHJ1Y3Qgbml1ICpucClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy01OTM1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NjA5OD1zdGF0aWMgaW50IG5pdV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTYxMjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NjEyMzpcdGVyciA9IG5pdV9pbml0X2h3KG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy02MTI0LVx0aWYgKCFlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NjQzNj1zdGF0aWMgdm9pZCBuaXVfbmV0aWZfc3RhcnQoc3RydWN0IG5pdSAqbnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY0MzktXHQgKiBzbyBsb25nIGFzIGFsbCBjYWxsZXJzIGFyZSBhc3N1cmVkIHRvIGhhdmUgZnJlZSB0eCBzbG90c1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjY0NDA6XHQgKiAoc3VjaCBhcyBhZnRlciBuaXVfaW5pdF9odykuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjQ0MS1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz02NDk4PXN0YXRpYyB2b2lkIG5pdV9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjUyNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo2NTI3Olx0ZXJyID0gbml1X2luaXRfaHcobnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY1MjgtXHRpZiAoIWVycikge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz02NzY1PXN0YXRpYyBpbnQgbml1X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY3OTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6Njc5MzpcdGVyciA9IG5pdV9pbml0X2h3KG5wKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy02Nzk0LVx0aWYgKCFlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9OTk2MT1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIG5pdV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2X2QpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTk5NzUtXHRuZXRkZXZfbG9jayhkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjk5NzY6XHRlcnIgPSBuaXVfaW5pdF9odyhucCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtOTk3Ny1cdGlmICghZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODk5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXkgTklVIERyaXZlciBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBOSVUgZHJpdmVyIGZ1bmN0aW9ucyBhcmUgc3RydWN0dXJlZC4gSXQgc2VlbXMgbGlrZSBgbml1X29wZW5gLCBgbml1X3Jlc2V0X3Rhc2tgLCBgbml1X2NoYW5nZV9tdHVgLCBhbmQgYG5pdV9yZXN1bWVgIGFsbCBldmVudHVhbGx5IGNhbGwgYG5pdV9pbml0X2h3YC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLCBidXQgdGhlIGtleSBlbnRyeXBvaW50cyBmb3IgbXkgYW5hbHlzaXMgc2VlbSB0byBiZSBgbml1X29wZW5gIGFuZCBgbml1X2NoYW5nZV9tdHVgLiBUaGVzZSBmZWVsIGxpa2Ugc29saWQgZm9jdXMgc3ltYm9scy4KCldhaXQgYSBtaW51dGUsIEkgdGhpbmsgYG5pdV9vcGVuYCBpcyBzdGF0aWMuIERvZXMgdGhhdCB3b3JrIGZvciB0aGlzIGFuYWx5c2lzPyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJ1bGUgaXMgdG8gZm9jdXMgb24gdGhvc2UsIGFuZCBhdm9pZCB0aGUgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBhcmUgaW5saW5lZC4KCkhvd2V2ZXIsIGBuaXVfb3BlbmAgaXMgYXNzaWduZWQgdG8gYG5kb19vcGVuYCBpbiBgbml1X25ldGRldl9vcHNgLiBTbywgc2luY2UgaXQmIzM5O3Mgbm90IGJlaW5nIGlubGluZWQsIGl0IGhhcyBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLiBPa2F5LCB0aGF0JiMzOTtzIGdvb2QuCgpgbml1X2NoYW5nZV9tdHVgIHNob3VsZCBiZSB0aGUgc2FtZSwgc28gaXQmIzM5O3MgYWxsIGdvb2QuCgpOb3csIGxldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBuaXVfb3BlbmAgaXNuJiMzOTt0IHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bml1X29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTYwOTA9c3RhdGljIHZvaWQgbml1X2Rpc2FibGVfbmFwaShzdHJ1Y3Qgbml1ICpucClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjA5Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo2MDk4OnN0YXRpYyBpbnQgbml1X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy02MDk5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9OTcyMj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5pdV9uZXRkZXZfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjk3MjM6XHQubmRvX29wZW5cdFx0PSBuaXVfb3BlbixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05NzI0LVx0Lm5kb19zdG9wXHRcdD0gbml1X2Nsb3NlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYxMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5JVSBEcml2ZXImIzM5O3MgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpbml0aWFsbHksIGl0IGFwcGVhcnMgdGhhdCB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIGFsbCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIGRpcmVjdCBleGFtaW5hdGlvbi4gSG93ZXZlciwgb24gY2xvc2VyIGluc3BlY3Rpb24sIEkgc2VlIHRoYXQgdGhpcyBpc24mIzM5O3QgYSBtYWpvciBpc3N1ZSBzaW5jZSBzdGF0aWMgZnVuY3Rpb25zIGFyZW4mIzM5O3QgaW5saW5lZCwgYXMgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgaW4gYSBzdHJ1Y3QuIFNvIEkmIzM5O3ZlIGdvdCB0byBmaW5kIG5vbi1zdGF0aWMgc3ltYm9scyB0byB0YXJnZXQuCgpUaGUgZnVuY3Rpb25zIGBuaXVfb3BlbmAgYW5kIGBuaXVfY2hhbmdlX210dWAgbG9vayBwcm9taXNpbmcgYXMgZW50cnkgcG9pbnRzLiBCdXQgd2FpdCwgbGV0JiMzOTtzIGNpcmNsZSBiYWNrIHRvIGBuaXVfcGNpX2luaXRfb25lYC4gSXNuJiMzOTt0IHRoYXQgdGhlIHByb2JlIGZ1bmN0aW9uPyBZZXMsIGl0IGlzISBSaWdodCwgZ290IGl0LgoKTm93LCBJIHJlbWVtYmVyIHRoZSBidWcgcmVwb3J0IG1lbnRpb25lZCBgbml1X3R4Y19zZXRfaW1hc2tgLiBUaGF0JiMzOTtzIGNhbGxlZCBmcm9tIGBuaXVfaW5pdF9od2AuIEFuZCBhaGEhIGBuaXVfaW5pdF9od2AgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgbml1X29wZW5gLCBgbml1X2NoYW5nZV9tdHVgLCBgbml1X3Jlc3VtZWAsIGFuZCBgbml1X3Jlc2V0X3Rhc2tgLiBTbyBJIHN0aWxsIGZlZWwgdGhhdCBgbml1X29wZW5gIGFuZCBgbml1X2NoYW5nZV9tdHVgIGFyZSB0aGUgYmVzdCBzeW1ib2xzIHRvIGZvY3VzIG9uLCBhcyB0aGV5IGFyZSB0aGUgbW9zdCBkaXJlY3QgZW50cnkgcG9pbnRzIGZyb20gdGhlIHVzZXItc3BhY2UgcGVyc3BlY3RpdmUuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgbm93IGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBOSVVgIGRlcGVuZHMgb24gYFBDSWAsIEkgYWxyZWFkeSBpZGVudGlmaWVkIHRoYXQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZ2AgdG8gYmUgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5JVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnPTg3PWNvbmZpZyBMRE1WU1dcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZy05OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnOjEwMDpjb25maWcgTklVXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMwOQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBFdGhlcm5ldCBkcml2ZXIgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgU3VuIG1pY3Jvc3lzdGVtcyYjMzk7IGRyaXZlciBkaXJlY3RvcnkuIE15IGZvY3VzIGlzIGxpa2VseSBhcm91bmQgbGluZSAxMDAgb2YgdGhlIGBLY29uZmlnYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoaWdoLWxldmVsIHZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZWZpbmVkIGhlcmUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgaW52b2x2ZSB1bmRlcnN0YW5kaW5nIHRoZSBgQ09ORklHX2AgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkLCB0aGVpciBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZHJpdmVycyBvciBoYXJkd2FyZSwgYW5kIGFueSBjb25kaXRpb25hbCBidWlsZCBzY2VuYXJpb3MuIEkgd2FudCB0byBpZGVudGlmeSB0aGUgY29yZSBjb21wb25lbnRzLiBJJiMzOTtsbCBuZWVkIHRvIHJlY29nbml6ZSB0aGlzIGlzIGxpa2VseSBhIHRhcmdldC1zcGVjaWZpYyBmaWxlLCBzbyBJIG5lZWQgdG8gcGxhY2UgdGhpcyBmaWxlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBvdmVyYWxsIG5ldHdvcmsgc3RhY2suIEkmIzM5O2xsIGxpa2VseSBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogdGhlIGJhc2UgZHJpdmVyIHNlbGVjdGlvbiwgUEhZIGNvbmZpZ3VyYXRpb24sIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyB0aGF0IGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcy4gVGhlbiwgYmFzZWQgb24gd2hhdCBJIHNlZSBoZXJlLCBJIGNhbiBmb3JtIGEgbWVudGFsIG1hcCBvZiBob3cgdGhpcyBkcml2ZXIgaXMgY29udHJvbGxlZCBhbmQgY29uZmlndXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcdCAgZm91bmQgaW4gdGhlIG1hY2hpbmUgZGVzY3JpcHRpb24gb2YgYSBzZXJ2aWNlIGRvbWFpbi5cbiAgOTY6XHRcdCAgTGludXggYnJpZGdlL3N3aXRjaCBzb2Z0d2FyZSBjYW4gdXNlIHRoZXNlIGludGVyZmFjZXMgZm9yXG4gIDk3Olx0XHQgIGd1ZXN0IGRvbWFpbiBuZXR3b3JrIGludGVyY29ubmVjdGl2aXR5IG9yIGd1ZXN0IGRvbWFpblxuICA5ODpcdFx0ICBjb25uZWN0aW9uIHRvIGEgcGh5c2ljYWwgbmV0d29yayBvbiBhIHNlcnZpY2UgZG9tYWluLlxuICA5OTpcdFxuIDEwMDpcdGNvbmZpZyBOSVVcbiAxMDE6XHRcdHRyaXN0YXRlIFwmIzM0O1N1biBOZXB0dW5lIDEwR2JpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gMTAyOlx0XHRkZXBlbmRzIG9uIFBDSVxuIDEwMzpcdFx0c2VsZWN0IENSQzMyXG4gMTA0Olx0XHRoZWxwXG4gMTA1Olx0XHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjYXJkcyBiYXNlZCB1cG9uIFN1biYjMzk7c1xuIDEwNjpcdFx0ICBOZXB0dW5lIGNoaXBzZXQuXG4gMTA3Olx0XG4gMTA4Olx0ZW5kaWYgIyBORVRfVkVORE9SX1NVTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc5OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gTGFieXJpbnRoKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgTklVYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGBOSVVgIGlzICp0aGUqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJiMzOTtyZSBmb2N1c2luZyBvbi4gQnV0IHdhaXQgYSBzZWNvbmQsIHRoYXQgZmVlbHMgdG9vIHNpbXBsaXN0aWMuIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gc2VlaW5nIHRoZSB3aG9sZSBwaWN0dXJlLiBMZXQmIzM5O3MgdHJhY2UgaXQgYmFjay4gQWhhISBSaWdodCwgYE5FVF9WRU5ET1JfU1VOYC4uLiB0aGF0JiMzOTtzIHRoZSBwYXJlbnQgY29uZmlnLCBpc24mIzM5O3QgaXQ/IFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSSBrbm93IG15IG5ldHdvcmtpbmcgdHJlZXMsIGFuZCBgTklVYCB1bmRvdWJ0ZWRseSBmYWxscyB1bmRlciB0aGF0IHVtYnJlbGxhLiBOb3csIGJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgY29ubmVjdGlvbi4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2YgYE5FVF9WRU5ET1JfU1VOYCBhbmQgbWFrZSBzdXJlIGl0IGFsaWducyB3aXRoIHdoYXQgSSBleHBlY3QuIEkgbmVlZCB0byBzZWUgdGhlIHJlbGF0aW9uc2hpcCBjbGVhcmx5IGJlZm9yZSBwcm9jZWVkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZFTkRPUl9TVU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9TVU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnLTctXHRib29sIFwmIzM0O1N1biBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBTdW4gRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYmV0dGVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBqdW1wIHJpZ2h0IGludG8gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnYCBhcm91bmQgbGluZSA2LiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgc2V0dGluZ3MgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBncmFzcGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyBwdXQgdG9nZXRoZXIgYW5kIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDE3OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgU3VuIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE5FVF9WRU5ET1JfU1VOXG4gICA3Olx0XHRib29sIFwmIzM0O1N1biBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdGRlcGVuZHMgb24gU1VOMyB8fCBTQlVTIHx8IFBDSSB8fCBTVU5fTERPTVNcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXG4gIDEyOlx0XG4gIDEzOlx0XHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuICAxNDpcdFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXG4gIDE1Olx0XHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgU3VuIG5ldHdvcmsgaW50ZXJmYWNlcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZVxuICAxNjpcdFx0ICBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxNzpcdFxuICAxODpcdGlmIE5FVF9WRU5ET1JfU1VOXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEhBUFBZTUVBTFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU3MAoJCQkJCQkJb3V0cHV0OiAxMjYKCQkJCQkJCXRob3VnaHRzOiA3MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTklVIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgTkVUX1ZFTkRPUl9TVU5gIGRlZmF1bHRzIHRvICYjMzQ7eSYjMzQ7IGFuZCBkZXBlbmRzIG9uIGBQQ0lgLCBzbyBlbmFibGluZyBgTklVYCBhbmQgYE5FVF9WRU5ET1JfU1VOYCBzaG91bGQgYmUgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBgUENJYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQuIFNvLCBgTklVYCBhbmQgYE5FVF9WRU5ET1JfU1VOYCBpdCBpcy4KCkJ1dCwgYSBuYWdnaW5nIGRvdWJ0IGNyZWVwcyBpbjogaXMgYG5pdWAgb25lIG9mIHRob3NlIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgdGhhdCYjMzk7cyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudD8gVGhlIGluc3RydWN0aW9ucyB3YXJuIGFib3V0IGNvZGUgaW4gJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyYjMzQ7IHRoYXQgcmVseSBvbiByZWFsIGhhcmR3YXJlLiBJIGhhdmUgdG8gYmUgY2FyZWZ1bCBoZXJlLiBgbml1YCBpcyBhIDEwR2JpdCBFdGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIG9sZCBTdW4gTmVwdHVuZSBjYXJkLiBJcyBpdCBhIFNtYXJ0TklDPyBOby4gUENJZSBzd2l0Y2g/IE5vLiBHUFU/IERlZmluaXRlbHkgbm90LgoKVGhlIGNvbmNlcm4gaXMgdGhhdCBpdCAqcmVxdWlyZXMqIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUuIEJ1dCB3YWl0LCBkb2VzIGl0ICphY3R1YWxseSo/IE5vdyBJIHJlY2FsbCB0aGF0IHRoZSBzeXprYWxsZXIgUENJIGZ1enplciAqY2FuKiBmdXp6IGl0LiBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBkaWZmZXJlbmNlLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBleGNsdWRlIHN0YW5kYXJkIEV0aGVybmV0IGRyaXZlcnMgZnJvbSB0aGUgd2FybmluZy4gU3RhbmRhcmQgRXRoZXJuZXQgZHJpdmVycyBhcmUgY29tbW9ubHkgZnV6emVkIGJ5IHRoZSBQQ0kgZnV6emVyLCBhbmQgYnVncyBhcmUgZm91bmQgdGhlcmUgYWxsIHRoZSB0aW1lIGluIGRyaXZlcnMgbGlrZSBgaWdiYCwgYGUxMDAwZWAsIGByODE2OWAsIGB0ZzNgLCBldGMuIEl0IHNlZW1zIHRoYXQgKnRob3NlKiBkcml2ZXJzLCBsaWtlIHRoZSBgTklVYCBkcml2ZXIsIGFyZSB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy4gVGhlIHN0YXRlbWVudCBpcyBsaW1pdGVkIHRvIHRob3NlIGNvbXBsaWNhdGVkIGRyaXZlcnMgd2l0aCBmaXJtd2FyZSBvciBjb21wbGV4IGNvbnRyb2wgcGF0aHMuCgpTdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXJzIGFyZSBtdWNoIHNpbXBsZXIsIGFuZCB0aGUgcHJvYmUvb3BlbiBmdW5jdGlvbnMgY2FuIG9mdGVuIGJlIHJlYWNoZWQgYnkgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIuIFNvLCBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIGl0c2VsZi4gQWgsIHRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZpeCBmb3IgYSBtaXNzaW5nIHdyaXRlIHRvIGBUWENfSU5UX01BU0tgLiBOb3RoaW5nIHRvIHJhaXNlIGFuIGFsYXJtLCBzbyB0aGUgcGF0Y2ggaXMgZmluZS4KClRoZSBpbXBvcnRhbnQgc3ltYm9scyB0byBrZWVwIGluIG1pbmQgYXJlIGBuaXVfb3BlbmAsIGBuaXVfY2hhbmdlX210dWAsIGFuZCBgbml1X3BjaV9pbml0X29uZWAuCgpBbmQganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWdgLiBZZXMsIHRoZSBgTklVYCBjb25maWcgZGVwZW5kcyBvbiBgUENJYCBhbmQgc2VsZWN0cyBgQ1JDMzJgLiBObyBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgcHJlc2VudC4KCk5vdywgdGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCB0YXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TklVJiMzNDssCiAgICAmIzM0O05FVF9WRU5ET1JfU1VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bml1X29wZW4mIzM0OywKICAgICYjMzQ7bml1X2NoYW5nZV9tdHUmIzM0OywKICAgICYjMzQ7bml1X3BjaV9pbml0X29uZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1pc3NpbmcgaGFyZHdhcmUgcmVnaXN0ZXIgd3JpdGUgaW4gdGhlIFN1biBOZXB0dW5lIDEwR2JpdCBFdGhlcm5ldCBkcml2ZXIgKG5pdSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHN0YW5kYXJkIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBieSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCBpbnRlcmZhY2Ugb3Blbi9jb25maWd1cmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOSVUmIzM0OywKICAgICYjMzQ7TkVUX1ZFTkRPUl9TVU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuaXVfb3BlbiYjMzQ7LAogICAgJiMzNDtuaXVfY2hhbmdlX210dSYjMzQ7LAogICAgJiMzNDtuaXVfcGNpX2luaXRfb25lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBoYXJkd2FyZSByZWdpc3RlciB3cml0ZSBpbiB0aGUgU3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0IGRyaXZlciAobml1KS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgc3RhbmRhcmQgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIGJ5IHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGR1cmluZyBkZXZpY2UgcHJvYmUgYW5kIGludGVyZmFjZSBvcGVuL2NvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxODo0NC4zODIzNzU5NDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI1NjQ5NTQwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTklVXCIsXG4gICAgXCJORVRfVkVORE9SX1NVTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5pdV9vcGVuXCIsXG4gICAgXCJuaXVfY2hhbmdlX210dVwiLFxuICAgIFwibml1X3BjaV9pbml0X29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBoYXJkd2FyZSByZWdpc3RlciB3cml0ZSBpbiB0aGUgU3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0IGRyaXZlciAobml1KS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgc3RhbmRhcmQgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIGJ5IHN5emthbGxlcidzIFBDSSBmdXp6ZXIgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIG9wZW4vY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTg6NDQuMzgyMzg3MTgyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAyMTg1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmODViNDk1ZGU2NDViZDk2ZDE1YzcyYjI1ZWMyZjNjZTRmYTFiMWQ3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gSnVsIDI2IDE3OjE4OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY1xcbmluZGV4IDg4ZGYxNWU2ZGQ3NDY3Li4zNzA3OWE2ZDZlZTkyNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcXG5AQCAtNDY1MCw2ICs0NjUwLDcgQEAgc3RhdGljIHZvaWQgbml1X3R4Y19zZXRfaW1hc2soc3RydWN0IG5pdSAqbnAsIHU2NCBpbWFzaylcXG4gXFx0dmFsID0gbnI2NChUWENfSU5UX01BU0spO1xcbiBcXHR2YWwgXFx1MDAyNj0gflRYQ19JTlRfTUFTS19WQUwobnAtXFx1MDAzZXBvcnQpO1xcbiBcXHR2YWwgfD0gKGltYXNrIFxcdTAwM2NcXHUwMDNjIFRYQ19JTlRfTUFTS19WQUxfU0hJRlQobnAtXFx1MDAzZXBvcnQpKTtcXG4rXFx0bnc2NChUWENfSU5UX01BU0ssIHZhbCk7XFxuIFxcdG5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE4OjQ0Ljg4MzQzMTg0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMjA2Mzg4NTg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOSVVcIixcbiAgICBcIk5FVF9WRU5ET1JfU1VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibml1X29wZW5cIixcbiAgICBcIm5pdV9jaGFuZ2VfbXR1XCIsXG4gICAgXCJuaXVfcGNpX2luaXRfb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGhhcmR3YXJlIHJlZ2lzdGVyIHdyaXRlIGluIHRoZSBTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgZHJpdmVyIChuaXUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyJ3MgUENJIGZ1enplciBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCBpbnRlcmZhY2Ugb3Blbi9jb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmODViNDk1ZGU2NDViZDk2ZDE1YzcyYjI1ZWMyZjNjZTRmYTFiMWQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMTc6MTg6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcbmluZGV4IDg4ZGYxNWU2ZGQ3NDY3Li4zNzA3OWE2ZDZlZTkyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jXG5AQCAtNDY1MCw2ICs0NjUwLDcgQEAgc3RhdGljIHZvaWQgbml1X3R4Y19zZXRfaW1hc2soc3RydWN0IG5pdSAqbnAsIHU2NCBpbWFzaylcbiBcdHZhbCA9IG5yNjQoVFhDX0lOVF9NQVNLKTtcbiBcdHZhbCBcdTAwMjY9IH5UWENfSU5UX01BU0tfVkFMKG5wLVx1MDAzZXBvcnQpO1xuIFx0dmFsIHw9IChpbWFzayBcdTAwM2NcdTAwM2MgVFhDX0lOVF9NQVNLX1ZBTF9TSElGVChucC1cdTAwM2Vwb3J0KSk7XG4rXHRudzY0KFRYQ19JTlRfTUFTSywgdmFsKTtcbiBcdG5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTg6NDQuODgzNDMzOTQ3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5MzEwMjU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOSVUgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgdXBkYXRpbmcgYG5pdV90eGNfc2V0X2ltYXNrYC4gSSBjYW4gc2VlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2U6IHRoZXkndmUgYWRkZWQgYSBgbnc2NChUWENfSU5UX01BU0ssIHZhbCk7YCBjYWxsIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSBuZXcgbWFzayB2YWx1ZS4gVGhpcyBpcyBhIGJpdCBvZiBhIGNsYXNzaWMsIHJpZ2h0PyBNb2RpZnlpbmcgYSB2YWx1ZSBhbmQgdGhlbiAqbm90KiB3cml0aW5nIGl0IGJhY2sgaXMgYSByb29raWUgbWlzdGFrZSwgc28gaG9wZWZ1bGx5LCB0aGlzIGZpeGVzIHNvbWUga2luZCBvZiBpbnRlcnJ1cHQgbWFza2luZyBpc3N1ZSBpbiB0aGUgU3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0IE1BQyBkcml2ZXIuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiBjYW4gSSB0ZXN0IHRoaXMgZWFzaWx5PyBJIHdvbmRlciBpZiB0aGlzIGlzIHNvbWV0aGluZyBJIGNhbiB2ZXJpZnkgaW4gUUVNVT8gSSdtIHByZXR0eSBzdXJlIEkgaGF2ZSBhIHNldHVwIHRoYXQgY291bGQgaGFuZGxlIHRoYXQuIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnYCB0byBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgYE5JVWAgaGFzLiBUaGF0J2xsIHRlbGwgbWUgaWYgSSBjYW4gZXZlbiBjb25maWd1cmUgaXQgZm9yIHRoZSBlbXVsYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIGFyZSBpbiBwbGFjZSBzbyBJIGNhbiBldmVuIGhvcGUgdG8gYnVpbGQgYW5kIHJ1biB0aGlzIHdpdGggUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE4OjQ5LjQ3NjUzODkxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTY2MjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTklVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnPTg3PWNvbmZpZyBMRE1WU1dcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnLTk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnOjEwMDpjb25maWcgTklVXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTg6NDkuNTQ2MjA3MzczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NzI3OTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFN1biBFdGhlcm5ldCBkcml2ZXJzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9gLiBUaGUgZmlsZSdzIHByb2JhYmx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uIGxpdmVzLCBkZWZpbmluZyB0aGUgc2VsZWN0YWJsZSBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAxMDAgYXMgYSBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IHRoYXQncyB3aGVyZSB0aGUgbW9yZSBpbnRlcmVzdGluZyBvcHRpb25zIGFyZSBwcm9iYWJseSBncm91cGVkIG9yIGRlZmluZWQuIEhvcGVmdWxseSBpdCdzIHdlbGwtc3RydWN0dXJlZCBhbmQgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUga2V5IHNldHRpbmdzIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZHJpdmVycyBhcmUgY29uZmlndXJlZCBpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhbmQgaG93IHRoaXMgbWlnaHQgaW1wYWN0IGEgc3BlY2lmaWMgRXRoZXJuZXQgaW1wbGVtZW50YXRpb24uIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgd2hlcmUgdG8gZ28gbmV4dCwgaWYgbmVlZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjgxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTg6NTIuNTQzNDg5MzY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0ICBmb3VuZCBpbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBvZiBhIHNlcnZpY2UgZG9tYWluLlxcbiAgOTY6XFx0XFx0ICBMaW51eCBicmlkZ2Uvc3dpdGNoIHNvZnR3YXJlIGNhbiB1c2UgdGhlc2UgaW50ZXJmYWNlcyBmb3JcXG4gIDk3OlxcdFxcdCAgZ3Vlc3QgZG9tYWluIG5ldHdvcmsgaW50ZXJjb25uZWN0aXZpdHkgb3IgZ3Vlc3QgZG9tYWluXFxuICA5ODpcXHRcXHQgIGNvbm5lY3Rpb24gdG8gYSBwaHlzaWNhbCBuZXR3b3JrIG9uIGEgc2VydmljZSBkb21haW4uXFxuICA5OTpcXHRcXG4gMTAwOlxcdGNvbmZpZyBOSVVcXG4gMTAxOlxcdFxcdHRyaXN0YXRlIFxcXCJTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gMTAyOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuIDEwMzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTA0OlxcdFxcdGhlbHBcXG4gMTA1OlxcdFxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIHVwb24gU3VuJ3NcXG4gMTA2OlxcdFxcdCAgTmVwdHVuZSBjaGlwc2V0LlxcbiAxMDc6XFx0XFxuIDEwODpcXHRlbmRpZiAjIE5FVF9WRU5ET1JfU1VOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE4OjUyLjU0MzU1NzIzOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjg4MTUwODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emFiaWxpdHkgb2YgdGhlIE5JVSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBOSVVgIGRyaXZlciwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IGlzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyBJdCBsb29rcyBsaWtlIGl0J3MgYSBkcml2ZXIgZm9yIHRoZSBTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQsIHdoaWNoIGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJwaHlzaWNhbCBoYXJkd2FyZS5cIiBUaGUgcXVlc3Rpb24gYmVjb21lczogY2FuIEkgZXZlbiByZWFjaCB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/XG5cbk15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCBRRU1VIHByb2JhYmx5ICpkb2Vzbid0KiBlbXVsYXRlIGEgYG5pdWAgbmV0d29yayBjYXJkIGRpcmVjdGx5LiBJIG1lYW4sIGl0IGhhcyBvdGhlciBlbXVsYXRlZCBuZXR3b3JrIGludGVyZmFjZXMgbGlrZSBgbmUya19wY2lgLCBgZTEwMDBgLCBhbmQgc28gb24sIGJ1dCB0aG9zZSBhcmUgZ2VuZXJhbGx5IG9sZGVyIG9yIG1vcmUgY29tbW9uLiAxMEdiaXQgY2FyZHMgYXJlIG9mdGVuIGEgYml0IHRyaWNraWVyIHRvIGVtdWxhdGUsICp1bmxlc3MqIGl0J3Mgc29tZXRoaW5nIHJlbGF0aXZlbHkgc3RhbmRhcmQgbGlrZSB0aGUgaXhnYmUgb3IgZTEwMDBlLiBTbywgSSBuZWVkIHRvIHZlcmlmeS4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCBvZiB0aGUgUUVNVSBkb2NzLCBidXQgdGhlIGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoaXMgaXMgYSBwaHlzaWNhbCBjYXJkLlxuXG5XYWl0LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0aGF0IGlmIGEgZHJpdmVyIHJlcXVpcmVzIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VIGl0IG1pZ2h0IG5vdCBiZSB3b3J0aCBmdXp6aW5nLCBidXQgdGhlbiB0aGVyZSdzIHRoZSBQQ0kgZnV6emVyIGluIFN5emthbGxlciEgVGhlIGRyaXZlciBpcyBsaXN0ZWQgYXMgYSBQQ0kgZGV2aWNlLCBzbyBpdCBtaWdodCBiZSBmdXp6YWJsZS4gYHN5el9wY2lfdnBjaWAgb3Igc2ltaWxhciBjb3VsZCBiZSB1c2VkLlxuXG5TbyB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBjYWxsIG91dCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IG5lZWQgKnBoeXNpY2FsKiBQQ0llIGhhcmR3YXJlIGFzIHBvc3NpYmx5IG5vdCB3b3J0aCBmdXp6aW5nLiBPa2F5LCBpcyBgTklVYCBhIFNtYXJ0TklDIG9yIEdQVT8gTm9wZSwgaXQncyBhIDEwR2JpdCBFdGhlcm5ldCBjYXJkLiBCdXQgdGhlIGluc3RydWN0aW9ucyBtZW50aW9uIHRoYXQgc3l6a2FsbGVyICpjYW4qIGZ1enogKmFueSogUENJIGRyaXZlciBieSBlbXVsYXRpbmcgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBNTUlPL1BJTyByZWdpb25zLCB3aGljaCBtZWFucyB0aGF0IHRoZSBjYXJkIGlzIG5vdCBuZWVkZWQgdG8gZnV6eiB0aGUgY29kZSEgVGhhdCdzIGdvb2QuXG5cblNvLCB0aGUgbmV4dCB0aGluZyB0byBkZXRlcm1pbmUgaXMgd2hldGhlciBpdCBjYW4gYmUgZnV6emFibGUgYnkgc3l6a2FsbGVyLiBTaW5jZSBJIGNhbid0IGRpcmVjdGx5IGNoZWNrIHRoZSBTeXprYWxsZXIgZGVzY3JpcHRpb25zIHRvIHNlZSBpZiBgTklVYCBpcyBkaXJlY3RseSBsaXN0ZWQsIEknbGwgb3BlcmF0ZSB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IFBDSSBuZXR3b3JrIGRyaXZlcnMgKmFyZSogZnV6emFibGUsIGlmIHRoZXkgYXJlIFBDSSBkZXZpY2VzLlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIHJ1Yi4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBwYXRoIGlzICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb3IgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgKm5vdCogZW11bGF0ZWQgaW4gUUVNVS4gYE5JVWAgaXMgdmVuZG9yLXNwZWNpZmljIChTdW4gTmVwdHVuZSkuIEl0J3MgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gSXQgKmRvZXMqIHJlcXVpcmUgYSBwaHlzaWNhbCBQQ0llIGNhcmQuIFRoYXQgc291bmRzIGxpa2UgYSBuby1nbywgcmlnaHQ/XG5cbkJ1dCAqU3l6a2FsbGVyJ3MgUENJIGZ1enplciBjYW4gc3RpbGwqIGZ1enogdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGFuZCBNTUlPL1BJTyByZWdpb25zLiBJdCBjYW4gdGVjaG5pY2FsbHkgZnV6eiBhbnkgUENJIGRyaXZlci4gU28sIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQgaXMgc3RpbGwgd29ydGggZnV6emluZy4gTm93LCBsZXQncyBzZWUgaWYgYSBmdW5jdGlvbiwgYG5pdV90eGNfc2V0X2ltYXNrYCwgaXMgcmVhY2hhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTMxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MDMuODMxNzEwNjQ2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzU2NTUwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuaXVfdHhjX3NldF9pbWFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTQ2MjU9c3RhdGljIHZvaWQgbml1X3R4Y19lbmFibGVfcG9ydChzdHJ1Y3Qgbml1ICpucCwgaW50IG9uKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTQ2NDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjQ2NDQ6c3RhdGljIHZvaWQgbml1X3R4Y19zZXRfaW1hc2soc3RydWN0IG5pdSAqbnAsIHU2NCBpbWFzaylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNDY0NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NTkzND1zdGF0aWMgaW50IG5pdV9pbml0X2h3KHN0cnVjdCBuaXUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTU5NDAtXFx0bml1X3R4Y19wb3J0X2RtYV9lbmFibGUobnAsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo1OTQxOlxcdG5pdV90eGNfc2V0X2ltYXNrKG5wLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNTk0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MDMuOTM5MjgxMjIzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1NDI0Mzc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTklDIEluaXRpYWxpemF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgTklDIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGlzIGNydWNpYWwgZnVuY3Rpb24sIGBuaXVfaW5pdF9od2AsIGlzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIGdldHRpbmcgdGhpbmdzIGdvaW5nLiBJIHNlZSB0aGF0IGBuaXVfaW5pdF9od2AgZ2V0cyBjYWxsZWQgZnJvbSBgbml1X29wZW5gLCB3aGljaCBpcyB0aGUgbmV0d29yayBkZXZpY2UncyBvcGVuIGZ1bmN0aW9uLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5ICpyZWFjaCogYG5pdV9vcGVuYCBpbiBhIHNjZW5hcmlvIHRoYXQgbWF0dGVycyB0byBtZT9cblxuTm93LCBhc3N1bWluZyB0aGUgUENJIGRldmljZSBwcm9iaW5nIHN1Y2NlZWRzLCB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggaXMgdGhlIGRlc2lyZWQgb3V0Y29tZS4gQnV0IGlmIEkgd2FudCB0byAqdHJpZ2dlciogdGhlIHByb2Nlc3MsIGNvbW1hbmRzIGxpa2UgYGlwIGxpbmsgc2V0IGRldiBldGhYIHVwYCB3aWxsIGtpY2sgb2ZmIGBuaXVfb3BlbmAuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIHdpbGwgdGhlIFBDSSBmdXp6ZXIgYmUgYWJsZSB0byBzdWNjZXNzZnVsbHkgcHJvYmUgdGhlIFBDSSBkZXZpY2U/IFR5cGljYWxseSwgdGhlIFBDSSBmdXp6ZXIgY2FuIHBhc3MgdGhlIHByb2JlIGZ1bmN0aW9uIGlmIGl0IGNhbiBwcm92aWRlIHRoZSBjb3JyZWN0IE1NSU8gcmVhZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbml1X3BjaV9wcm9iZWAgdG8gc2VlIHdoYXQga2luZCBvZiBNTUlPIGludGVyYWN0aW9ucyBpdCBleHBlY3RzLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gZWZmZWN0aXZlbHkgdGFyZ2V0IHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MDcuOTkzNTI3Njk3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjgyMzk1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuaXVfcGNpX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9ODM1Nj1zdGF0aWMgdm9pZCBuaXVfcGNpX3ZwZF92YWxpZGF0ZShzdHJ1Y3Qgbml1ICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy04NDAyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo4NDAzOnN0YXRpYyBpbnQgbml1X3BjaV9wcm9iZV9zcHJvbShzdHJ1Y3Qgbml1ICpucClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtODQwNC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9OTMxND1zdGF0aWMgaW50IG5pdV9nZXRfaW52YXJpYW50cyhzdHJ1Y3Qgbml1ICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05MzU5LVxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjkzNjA6XFx0XFx0XFx0ZXJyID0gbml1X3BjaV9wcm9iZV9zcHJvbShucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTkzNjEtXFx0XFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MDguMDY2MzY2MTE0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MDkwMzUyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbml1YCBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gVGhlIGNvZGUgbWVudGlvbnMgYG5pdV9wY2lfcHJvYmVgLCB3aGljaCAqc3Ryb25nbHkqIHN1Z2dlc3RzIGl0J3MgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbi4gVGhhdCBtYWtlcyBzZW5zZTsgdXN1YWxseSwgeW91J2QgZXhwZWN0IGEgUENJIGRyaXZlciB0byBoYXZlIGEgcHJvYmUgZnVuY3Rpb24gdG8gaWRlbnRpZnkgYW5kIGluaXRpYWxpemUgdGhlIGRldmljZS4gU28sIGxldCdzIHN0YXJ0IHRoZXJlLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBsb2NhdGUgdGhhdCBgbml1X3BjaV9wcm9iZWAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gVW5kZXJzdGFuZGluZyB3aGF0IGhhcHBlbnMgZHVyaW5nIHRoZSBwcm9iZSB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaG93IHRoZSBoYXJkd2FyZSBpcyBpbml0aWFsbHkgc2V0IHVwIGFuZCBjb25maWd1cmVkLiBJdCdzIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkZXZpY2UncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxOToxMC45NzU0MDU3NTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTI2ODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwucHJvYmUuKj1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz05OTkxPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuaXVfcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05OTkzLVxcdC5pZF90YWJsZVxcdD0gbml1X3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjk5OTQ6XFx0LnByb2JlXFx0XFx0PSBuaXVfcGNpX2luaXRfb25lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05OTk1LVxcdC5yZW1vdmVcXHRcXHQ9IG5pdV9wY2lfcmVtb3ZlX29uZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz0xMDIyMj1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBuaXVfb2ZfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTEwMjI2LVxcdH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjEwMjI3OlxcdC5wcm9iZVxcdFxcdD0gbml1X29mX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy0xMDIyOC1cXHQucmVtb3ZlXFx0XFx0PSBuaXVfb2ZfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxOToxMS4wMzYzMzk1MjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5NTEwNDMyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyBmb3Igbml1X3BjaV9pbml0X29uZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuaXVfcGNpX2luaXRfb25lYCwgd2hpY2gsIGZyb20gd2hhdCBJIGdhdGhlciwgaXMgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIGBuaXVgIGRyaXZlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBhc3Nlc3MgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSXMgdGhpcyBhIHN0YW5kYXJkIG5ldHdvcmsgZHJpdmVyP1wiLiBZZXMsIGl0IGFwcGVhcnMgdG8gYmUuXG5cbk5vdywgdGhlIGluc3RydWN0aW9ucyBJIGhhdmUgbGF5IG91dCBzb21lIGNvbnN0cmFpbnRzLiBUaGV5IGhpZ2hsaWdodCBkcml2ZXJzIGZvciB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgdGhhdCAqcmVxdWlyZSogcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGJ5IHN0YW5kYXJkIFFFTVUuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb246IElzIGBuaXVgIGEgU21hcnROSUM/IE5vLCBpdCdzIHRoYXQgb2xkIFN1biBOZXB0dW5lIDEwR2JpdCBFdGhlcm5ldCBjYXJkLiBCdXQgdGhlIGtleSBpcyBcInJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi4gRG9lcyB0aGlzIGJsYW5rZXQgYXBwbHkgdG8gYW55IHBoeXNpY2FsIG5ldHdvcmsgY2FyZCB0aGF0IFFFTVUgZG9lc24ndCBlbXVsYXRlIHBlcmZlY3RseT8gWWVzLCB0aGF0J3MgdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIHJ1bGUuIElmIGl0IHJlcXVpcmVzICphY3R1YWwqIGhhcmR3YXJlLCBhbmQgUUVNVSdzIG5vdCB1cCB0byB0aGUgdGFzaywgdGhlbiBpdCBmYWxscyB1bmRlciB0aGF0IG5vLWZ1enppbmcgY2F0ZWdvcnkuXG5cbk15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgc3l6a2FsbGVyIGlzIGFscmVhZHkgdGVzdGluZyB0aGlzIGRyaXZlciwgd2hpY2ggd291bGQgYmUgYW4gaW5kaWNhdG9yIG9mIGl0IGJlaW5nIHJlYWNoYWJsZS4gVGhlIGNvbW1pdCBtZXNzYWdlIHNob3dzIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAuIEF0IGZpcnN0IGdsYW5jZSwgbXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gd2FzLCBcIlN5emthbGxlciBmb3VuZCBhIGJ1ZyFcIi4gQnV0IHdhaXQuLi4gaXQncyBqdXN0IGEgZHVtbXkgY29tbWl0IGdlbmVyYXRlZCBieSBzeXprYWxsZXIncyB0ZXN0IGluZnJhc3RydWN0dXJlLiBJdCBtZWFucyBzb21lb25lIHN1Ym1pdHRlZCB0aGlzIHBhdGNoIHRvIFN5emthbGxlciBmb3IgdGVzdGluZywgc28gaXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHN5emthbGxlciBjYW4gcmVhY2ggaXQuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGdvIGJhY2sgdG8gdGhlIHJ1bGUuIEkgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgYmFzZWQgb24gdGhpcyBydWxlOlxuXG5cIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4uLi5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5BbHJpZ2h0LCBpcyBgbml1YCBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcj8gTm90IGluIHRoZSBjb250ZXh0IG9mIHRoZSBydWxlJ3MgZXhhbXBsZXMsIGl0J3MganVzdCBhbiBvbGQgRXRoZXJuZXQgY2FyZC4gRG9lcyBpdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGJ5IFFFTVU/IFllcywgYmVjYXVzZSBpdCdzIGEgcGh5c2ljYWwgRXRoZXJuZXQgY2FyZCwgYW5kIGl0IGxvb2tzIGxpa2UgUUVNVSBsaWtlbHkgd291bGRuJ3QgZW11bGF0ZSB0aGlzIGNhcmQuIEJ1dCB0aGUgcXVlc3Rpb24gaXM6IGNhbiBzeXprYWxsZXIncyBQQ0kgZnV6emVyIHJlYWNoIGl0PyBUaGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgY2FuIGluZGVlZCByZWFjaCBQQ0kgcHJvYmUgZnVuY3Rpb25zLCBhbmQgaXQgbWF5IGJlIGFibGUgdG8gcmVhY2ggb3BlbiBmdW5jdGlvbnMgaWYgdGhlIHByb2JlIHN1Y2NlZWRzLlxuXG5UaGUgcHJvYmxlbSB3aXRoIG1hbnkgbmV0d29yayBjYXJkcyBpcyB0aGF0IHRoZXkgaGF2ZSByZXF1aXJlbWVudHMgdGhhdCBhcmUgbW9yZSBjb21wbGV4LiBUaGV5IGhhdmUgRE1BIHJlcXVpcmVtZW50cywgdGhleSByZXF1aXJlIGZpcm13YXJlLCBvciB0aGV5IG1pZ2h0IGhhdmUgY29tcGxleCBNTUlPIGhhbmRzaGFrZXMgdGhhdCBjYW5ub3QgYmUgZWFzaWx5IGd1ZXNzZWQuXG5cblNvLCBpbiB0aGUgZW5kLCBpdCBib2lscyBkb3duIHRvOiBpcyBgbml1YCBhIGRyaXZlciB0aGF0ICpyZXF1aXJlcyogcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpcyBub3QgcHJvcGVybHkgZW11bGF0ZWQgYnkgUUVNVT8gWWVzLCB0aGF0IGFwcGVhcnMgdG8gYmUgdGhlIGNhc2UuIFRoZXJlZm9yZSwgZm9sbG93aW5nIHRoZSBydWxlLCBteSBjb25jbHVzaW9uIGxlYW5zIHRvd2FyZHMgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdGhvdWdoIHRvIG1ha2UgYSBmaW5hbCBjYWxsIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDM1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE5OjIxLjk4NzM4Njg3NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTA4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk2MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI5NjAwOlxcdFxcbjk2MDE6XFx0XFx0QlVHX09OKCFwIHx8IHAtXFx1MDAzZXBvcnRzW3BvcnRdICE9IG5wKTtcXG45NjAyOlxcdFxcbjk2MDM6XFx0XFx0bmV0aWZfcHJpbnRrKG5wLCBwcm9iZSwgS0VSTl9ERUJVRywgbnAtXFx1MDAzZWRldixcXG45NjA0OlxcdFxcdFxcdCAgICAgXFxcIiVzKCkgcG9ydFsldV1cXFxcblxcXCIsIF9fZnVuY19fLCBwb3J0KTtcXG45NjA1OlxcdFxcbjk2MDY6XFx0XFx0c3ByaW50Zihwb3J0X25hbWUsIFxcXCJwb3J0JWRcXFwiLCBwb3J0KTtcXG45NjA3OlxcdFxcbjk2MDg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bml1X3BhcmVudF9sb2NrKTtcXG45NjA5OlxcdFxcbjk2MTA6XFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNnAtXFx1MDAzZXBsYXRfZGV2LVxcdTAwM2VkZXYua29iaiwgcG9ydF9uYW1lKTtcXG45NjExOlxcdFxcbjk2MTI6XFx0XFx0cC1cXHUwMDNlcG9ydHNbcG9ydF0gPSBOVUxMO1xcbjk2MTM6XFx0XFx0bnAtXFx1MDAzZXBhcmVudCA9IE5VTEw7XFxuOTYxNDpcXHRcXG45NjE1OlxcdFxcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZwLVxcdTAwM2VyZWZjbnQpKSB7XFxuOTYxNjpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2cC1cXHUwMDNlbGlzdCk7XFxuOTYxNzpcXHRcXHRcXHRwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwLVxcdTAwM2VwbGF0X2Rldik7XFxuOTYxODpcXHRcXHR9XFxuOTYxOTpcXHRcXG45NjIwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bml1X3BhcmVudF9sb2NrKTtcXG45NjIxOlxcdH1cXG45NjIyOlxcdFxcbjk2MjM6XFx0c3RhdGljIHZvaWQgKm5pdV9wY2lfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSxcXG45NjI0OlxcdFxcdFxcdFxcdFxcdCAgICB1NjQgKmhhbmRsZSwgZ2ZwX3QgZmxhZylcXG45NjI1OlxcdHtcXG45NjI2OlxcdFxcdGRtYV9hZGRyX3QgZGg7XFxuOTYyNzpcXHRcXHR2b2lkICpyZXQ7XFxuOTYyODpcXHRcXG45NjI5OlxcdFxcdHJldCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIFxcdTAwMjZkaCwgZmxhZyk7XFxuOTYzMDpcXHRcXHRpZiAocmV0KVxcbjk2MzE6XFx0XFx0XFx0KmhhbmRsZSA9IGRoO1xcbjk2MzI6XFx0XFx0cmV0dXJuIHJldDtcXG45NjMzOlxcdH1cXG45NjM0OlxcdFxcbjk2MzU6XFx0c3RhdGljIHZvaWQgbml1X3BjaV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsXFxuOTYzNjpcXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmNwdV9hZGRyLCB1NjQgaGFuZGxlKVxcbjk2Mzc6XFx0e1xcbjk2Mzg6XFx0XFx0ZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBjcHVfYWRkciwgaGFuZGxlKTtcXG45NjM5OlxcdH1cXG45NjQwOlxcdFxcbjk2NDE6XFx0c3RhdGljIHU2NCBuaXVfcGNpX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuOTY0MjpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLFxcbjk2NDM6XFx0XFx0XFx0XFx0ICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbilcXG45NjQ0OlxcdHtcXG45NjQ1OlxcdFxcdHJldHVybiBkbWFfbWFwX3BhZ2UoZGV2LCBwYWdlLCBvZmZzZXQsIHNpemUsIGRpcmVjdGlvbik7XFxuOTY0NjpcXHR9XFxuOTY0NzpcXHRcXG45NjQ4OlxcdHN0YXRpYyB2b2lkIG5pdV9wY2lfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfYWRkcmVzcyxcXG45NjQ5OlxcdFxcdFxcdFxcdCAgICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxcbjk2NTA6XFx0e1xcbjk2NTE6XFx0XFx0ZG1hX3VubWFwX3BhZ2UoZGV2LCBkbWFfYWRkcmVzcywgc2l6ZSwgZGlyZWN0aW9uKTtcXG45NjUyOlxcdH1cXG45NjUzOlxcdFxcbjk2NTQ6XFx0c3RhdGljIHU2NCBuaXVfcGNpX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkcixcXG45NjU1OlxcdFxcdFxcdFxcdCAgICAgIHNpemVfdCBzaXplLFxcbjk2NTY6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKVxcbjk2NTc6XFx0e1xcbjk2NTg6XFx0XFx0cmV0dXJuIGRtYV9tYXBfc2luZ2xlKGRldiwgY3B1X2FkZHIsIHNpemUsIGRpcmVjdGlvbik7XFxuOTY1OTpcXHR9XFxuOTY2MDpcXHRcXG45NjYxOlxcdHN0YXRpYyB2b2lkIG5pdV9wY2lfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9hZGRyZXNzLFxcbjk2NjI6XFx0XFx0XFx0XFx0XFx0IHNpemVfdCBzaXplLFxcbjk2NjM6XFx0XFx0XFx0XFx0XFx0IGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbilcXG45NjY0OlxcdHtcXG45NjY1OlxcdFxcdGRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkcmVzcywgc2l6ZSwgZGlyZWN0aW9uKTtcXG45NjY2OlxcdH1cXG45NjY3OlxcdFxcbjk2Njg6XFx0c3RhdGljIGludCBuaXVfcGNpX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCB1NjQgYWRkcilcXG45NjY5OlxcdHtcXG45NjcwOlxcdFxcdHJldHVybiBkbWFfbWFwcGluZ19lcnJvcihkZXYsIGFkZHIpO1xcbjk2NzE6XFx0fVxcbjk2NzI6XFx0XFxuOTY3MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5pdV9vcHMgbml1X3BjaV9vcHMgPSB7XFxuOTY3NDpcXHRcXHQuYWxsb2NfY29oZXJlbnRcXHQ9IG5pdV9wY2lfYWxsb2NfY29oZXJlbnQsXFxuOTY3NTpcXHRcXHQuZnJlZV9jb2hlcmVudFxcdD0gbml1X3BjaV9mcmVlX2NvaGVyZW50LFxcbjk2NzY6XFx0XFx0Lm1hcF9wYWdlXFx0PSBuaXVfcGNpX21hcF9wYWdlLFxcbjk2Nzc6XFx0XFx0LnVubWFwX3BhZ2VcXHQ9IG5pdV9wY2lfdW5tYXBfcGFnZSxcXG45Njc4OlxcdFxcdC5tYXBfc2luZ2xlXFx0PSBuaXVfcGNpX21hcF9zaW5nbGUsXFxuOTY3OTpcXHRcXHQudW5tYXBfc2luZ2xlXFx0PSBuaXVfcGNpX3VubWFwX3NpbmdsZSxcXG45NjgwOlxcdFxcdC5tYXBwaW5nX2Vycm9yXFx0PSBuaXVfcGNpX21hcHBpbmdfZXJyb3IsXFxuOTY4MTpcXHR9O1xcbjk2ODI6XFx0XFxuOTY4MzpcXHRzdGF0aWMgdm9pZCBuaXVfZHJpdmVyX3ZlcnNpb24odm9pZClcXG45Njg0OlxcdHtcXG45Njg1OlxcdFxcdHN0YXRpYyBpbnQgbml1X3ZlcnNpb25fcHJpbnRlZDtcXG45Njg2OlxcdFxcbjk2ODc6XFx0XFx0aWYgKG5pdV92ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKVxcbjk2ODg6XFx0XFx0XFx0cHJfaW5mbyhcXFwiJXNcXFwiLCB2ZXJzaW9uKTtcXG45Njg5OlxcdH1cXG45NjkwOlxcdFxcbjk2OTE6XFx0c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuaXVfYWxsb2NfYW5kX2luaXQoc3RydWN0IGRldmljZSAqZ2VuX2RldixcXG45NjkyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuOTY5MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLFxcbjk2OTQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgbml1X29wcyAqb3BzLCB1OCBwb3J0KVxcbjk2OTU6XFx0e1xcbjk2OTY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG45Njk3OlxcdFxcdHN0cnVjdCBuaXUgKm5wO1xcbjk2OTg6XFx0XFxuOTY5OTpcXHRcXHRkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IG5pdSksIE5JVV9OVU1fVFhDSEFOKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MjEuOTg3NzQwMTY2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTQ1NzM5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBuaXVfcGNpX2luaXRfb25lYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIFBDSSBkZXZpY2UgaW5pdGlhbGl6YXRpb24g4oCTIHNwZWNpZmljYWxseSwgYG5pdV9wY2lfaW5pdF9vbmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2tpcCB0aGUgZmx1ZmYgYW5kIHNlZSBob3cgdGhpcyBkcml2ZXIgaGFuZGxlcyB0aGUgZGV2aWNlIGNvbWluZyBvbmxpbmUuIEknbSBsb29raW5nIGZvciB0aGUgY29yZSBzdGVwczogcmVzb3VyY2UgYWxsb2NhdGlvbiwgcmVnaXN0ZXIgYWNjZXNzIGluaXRpYWxpemF0aW9uLCBhbnkgZGV2aWNlLXNwZWNpZmljIHNldHVw4oCmIHRoYXQgc29ydCBvZiB0aGluZy4gSSBleHBlY3QgdG8gc2VlIHRoZSBzdGFuZGFyZCBQQ0kgcHJvYmUgcHJvY2VzcyB3aXRoIGFsbCB0aGUgc3RhbmRhcmQgUENJIGNhbGxzLCBub3RoaW5nIHRvbyBmYW5jeSAoeWV0KS4gSSdtIGFudGljaXBhdGluZyB0aGUgdXN1YWwgc3RlcHM6IG1hcHBpbmcgdGhlIEJBUnMsIG1heWJlIHNvbWUgaW50ZXJydXB0IGhhbmRsaW5nIHNldHVwLCBwb3NzaWJseSBzb21lIERNQSBlbmdpbmUgY29uZmlndXJhdGlvbiBpZiB0aGlzIE5JQyBpcyBvZiB0aGF0IHR5cGUuIEkgYW0gY3VyaW91cyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSB2ZW5kb3Itc3BlY2lmaWMgcGVjdWxpYXJpdGllcyB0aGlzIGRyaXZlciBuZWVkcyB0byBoYW5kbGUuIEknbGwgYmUgc2NydXRpbml6aW5nIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHRoZXNlIHN0YWdlcyDigJMgYSByb2J1c3QgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgaXMgYSBzaWduIG9mIGEgd2VsbC13cml0dGVuIGRyaXZlci4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUsIGxvb2tpbmcgZm9yIHRoZSBjcml0aWNhbCBwYXRoLCB0aGUgY29yZSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nIGNvbnRpbmdlbmNpZXMuIEknbSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSB0aGluZ3MgY291bGQgZ28gd3JvbmcsIHNvIEkgY2FuIHNlZSB3aGF0IHRoZSBhdXRob3IncyBhbnRpY2lwYXRlZCBmYWlsdXJlIG1vZGVzIGFyZSBhbmQgaG93IHRoZXkgYXJlIGhhbmRsZWQuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgcG93ZXIgbWFuYWdlbWVudC1yZWxhdGVkIGluaXRpYWxpemF0aW9uIGlmIGFwcGxpY2FibGUgLSBsb29raW5nIGZvciBhbnl0aGluZyBkZWFsaW5nIHdpdGggY2xvY2sgZ2F0aW5nIG9yIHZvbHRhZ2Ugc2V0dGluZ3MuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgdHJlYXN1cmVzIChvciBwb3RlbnRpYWwgaXNzdWVzKSBhd2FpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MjUuODgyMzE2OTA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNjg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTcwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjk3MDA6XFx0XFx0aWYgKCFkZXYpXFxuOTcwMTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG45NzAyOlxcdFxcbjk3MDM6XFx0XFx0U0VUX05FVERFVl9ERVYoZGV2LCBnZW5fZGV2KTtcXG45NzA0OlxcdFxcbjk3MDU6XFx0XFx0bnAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjk3MDY6XFx0XFx0bnAtXFx1MDAzZWRldiA9IGRldjtcXG45NzA3OlxcdFxcdG5wLVxcdTAwM2VwZGV2ID0gcGRldjtcXG45NzA4OlxcdFxcdG5wLVxcdTAwM2VvcCA9IG9wO1xcbjk3MDk6XFx0XFx0bnAtXFx1MDAzZWRldmljZSA9IGdlbl9kZXY7XFxuOTcxMDpcXHRcXHRucC1cXHUwMDNlb3BzID0gb3BzO1xcbjk3MTE6XFx0XFxuOTcxMjpcXHRcXHRucC1cXHUwMDNlbXNnX2VuYWJsZSA9IG5pdV9kZWJ1ZztcXG45NzEzOlxcdFxcbjk3MTQ6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm5wLVxcdTAwM2Vsb2NrKTtcXG45NzE1OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2bnAtXFx1MDAzZXJlc2V0X3Rhc2ssIG5pdV9yZXNldF90YXNrKTtcXG45NzE2OlxcdFxcbjk3MTc6XFx0XFx0bnAtXFx1MDAzZXBvcnQgPSBwb3J0O1xcbjk3MTg6XFx0XFxuOTcxOTpcXHRcXHRyZXR1cm4gZGV2O1xcbjk3MjA6XFx0fVxcbjk3MjE6XFx0XFxuOTcyMjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5pdV9uZXRkZXZfb3BzID0ge1xcbjk3MjM6XFx0XFx0Lm5kb19vcGVuXFx0XFx0PSBuaXVfb3BlbixcXG45NzI0OlxcdFxcdC5uZG9fc3RvcFxcdFxcdD0gbml1X2Nsb3NlLFxcbjk3MjU6XFx0XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBuaXVfc3RhcnRfeG1pdCxcXG45NzI2OlxcdFxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IG5pdV9nZXRfc3RhdHMsXFxuOTcyNzpcXHRcXHQubmRvX3NldF9yeF9tb2RlXFx0PSBuaXVfc2V0X3J4X21vZGUsXFxuOTcyODpcXHRcXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbjk3Mjk6XFx0XFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IG5pdV9zZXRfbWFjX2FkZHIsXFxuOTczMDpcXHRcXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gbml1X2lvY3RsLFxcbjk3MzE6XFx0XFx0Lm5kb190eF90aW1lb3V0XFx0XFx0PSBuaXVfdHhfdGltZW91dCxcXG45NzMyOlxcdFxcdC5uZG9fY2hhbmdlX210dVxcdFxcdD0gbml1X2NoYW5nZV9tdHUsXFxuOTczMzpcXHR9O1xcbjk3MzQ6XFx0XFxuOTczNTpcXHRzdGF0aWMgdm9pZCBuaXVfYXNzaWduX25ldGRldl9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG45NzM2OlxcdHtcXG45NzM3OlxcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZuaXVfbmV0ZGV2X29wcztcXG45NzM4OlxcdFxcdGRldi1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2bml1X2V0aHRvb2xfb3BzO1xcbjk3Mzk6XFx0XFx0ZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IE5JVV9UWF9USU1FT1VUO1xcbjk3NDA6XFx0fVxcbjk3NDE6XFx0XFxuOTc0MjpcXHRzdGF0aWMgdm9pZCBuaXVfZGV2aWNlX2Fubm91bmNlKHN0cnVjdCBuaXUgKm5wKVxcbjk3NDM6XFx0e1xcbjk3NDQ6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5wLVxcdTAwM2VkZXY7XFxuOTc0NTpcXHRcXG45NzQ2OlxcdFxcdHByX2luZm8oXFxcIiVzOiBOSVUgRXRoZXJuZXQgJXBNXFxcXG5cXFwiLCBkZXYtXFx1MDAzZW5hbWUsIGRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbjk3NDc6XFx0XFxuOTc0ODpcXHRcXHRpZiAobnAtXFx1MDAzZXBhcmVudC1cXHUwMDNlcGxhdF90eXBlID09IFBMQVRfVFlQRV9BVENBX0NQMzIyMCkge1xcbjk3NDk6XFx0XFx0XFx0cHJfaW5mbyhcXFwiJXM6IFBvcnQgdHlwZVslc10gbW9kZVslczolc10gWENWUlslc10gcGh5WyVzXVxcXFxuXFxcIixcXG45NzUwOlxcdFxcdFxcdFxcdFxcdGRldi1cXHUwMDNlbmFtZSxcXG45NzUxOlxcdFxcdFxcdFxcdFxcdChucC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOSVVfRkxBR1NfWE1BQyA/IFxcXCJYTUFDXFxcIiA6IFxcXCJCTUFDXFxcIiksXFxuOTc1MjpcXHRcXHRcXHRcXHRcXHQobnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTklVX0ZMQUdTXzEwRyA/IFxcXCIxMEdcXFwiIDogXFxcIjFHXFxcIiksXFxuOTc1MzpcXHRcXHRcXHRcXHRcXHQobnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTklVX0ZMQUdTX0ZJQkVSID8gXFxcIlJHTUlJIEZJQkVSXFxcIiA6IFxcXCJTRVJERVNcXFwiKSxcXG45NzU0OlxcdFxcdFxcdFxcdFxcdChucC1cXHUwMDNlbWFjX3hjdnIgPT0gTUFDX1hDVlJfTUlJID8gXFxcIk1JSVxcXCIgOlxcbjk3NTU6XFx0XFx0XFx0XFx0XFx0IChucC1cXHUwMDNlbWFjX3hjdnIgPT0gTUFDX1hDVlJfUENTID8gXFxcIlBDU1xcXCIgOiBcXFwiWFBDU1xcXCIpKSxcXG45NzU2OlxcdFxcdFxcdFxcdFxcdG5wLVxcdTAwM2V2cGQucGh5X3R5cGUpO1xcbjk3NTc6XFx0XFx0fSBlbHNlIHtcXG45NzU4OlxcdFxcdFxcdHByX2luZm8oXFxcIiVzOiBQb3J0IHR5cGVbJXNdIG1vZGVbJXM6JXNdIFhDVlJbJXNdIHBoeVslc11cXFxcblxcXCIsXFxuOTc1OTpcXHRcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZW5hbWUsXFxuOTc2MDpcXHRcXHRcXHRcXHRcXHQobnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTklVX0ZMQUdTX1hNQUMgPyBcXFwiWE1BQ1xcXCIgOiBcXFwiQk1BQ1xcXCIpLFxcbjk3NjE6XFx0XFx0XFx0XFx0XFx0KG5wLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5JVV9GTEFHU18xMEcgPyBcXFwiMTBHXFxcIiA6IFxcXCIxR1xcXCIpLFxcbjk3NjI6XFx0XFx0XFx0XFx0XFx0KG5wLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5JVV9GTEFHU19GSUJFUiA/IFxcXCJGSUJFUlxcXCIgOlxcbjk3NjM6XFx0XFx0XFx0XFx0XFx0IChucC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOSVVfRkxBR1NfWENWUl9TRVJERVMgPyBcXFwiU0VSREVTXFxcIiA6XFxuOTc2NDpcXHRcXHRcXHRcXHRcXHQgIFxcXCJDT1BQRVJcXFwiKSksXFxuOTc2NTpcXHRcXHRcXHRcXHRcXHQobnAtXFx1MDAzZW1hY194Y3ZyID09IE1BQ19YQ1ZSX01JSSA/IFxcXCJNSUlcXFwiIDpcXG45NzY2OlxcdFxcdFxcdFxcdFxcdCAobnAtXFx1MDAzZW1hY194Y3ZyID09IE1BQ19YQ1ZSX1BDUyA/IFxcXCJQQ1NcXFwiIDogXFxcIlhQQ1NcXFwiKSksXFxuOTc2NzpcXHRcXHRcXHRcXHRcXHRucC1cXHUwMDNldnBkLnBoeV90eXBlKTtcXG45NzY4OlxcdFxcdH1cXG45NzY5OlxcdH1cXG45NzcwOlxcdFxcbjk3NzE6XFx0c3RhdGljIHZvaWQgbml1X3NldF9iYXNpY19mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjk3NzI6XFx0e1xcbjk3NzM6XFx0XFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU0gfCBORVRJRl9GX1JYSEFTSDtcXG45Nzc0OlxcdFxcdGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8IE5FVElGX0ZfUlhDU1VNO1xcbjk3NzU6XFx0fVxcbjk3NzY6XFx0XFxuOTc3NzpcXHRzdGF0aWMgaW50IG5pdV9wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuOTc3ODpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG45Nzc5OlxcdHtcXG45NzgwOlxcdFxcdHVuaW9uIG5pdV9wYXJlbnRfaWQgcGFyZW50X2lkO1xcbjk3ODE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG45NzgyOlxcdFxcdHN0cnVjdCBuaXUgKm5wO1xcbjk3ODM6XFx0XFx0aW50IGVycjtcXG45Nzg0OlxcdFxcbjk3ODU6XFx0XFx0bml1X2RyaXZlcl92ZXJzaW9uKCk7XFxuOTc4NjpcXHRcXG45Nzg3OlxcdFxcdGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpO1xcbjk3ODg6XFx0XFx0aWYgKGVycikge1xcbjk3ODk6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuOTc5MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjk3OTE6XFx0XFx0fVxcbjk3OTI6XFx0XFxuOTc5MzpcXHRcXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgXFx1MDAyNiBJT1JFU09VUkNFX01FTSkgfHxcXG45Nzk0OlxcdFxcdCAgICAhKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAyKSBcXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSkge1xcbjk3OTU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiQ2Fubm90IGZpbmQgcHJvcGVyIFBDSSBkZXZpY2UgYmFzZSBhZGRyZXNzZXMsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG45Nzk2OlxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuOTc5NzpcXHRcXHRcXHRnb3RvIGVycl9vdXRfZGlzYWJsZV9wZGV2O1xcbjk3OTg6XFx0XFx0fVxcbjk3OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE5OjI1Ljg4MjY1NTYzNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjcxMzUwMTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBjb2RlLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYG5pdV9wY2lfaW5pdF9vbmVgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhpcyBgbml1X3BjaV9pbml0X29uZWAgZnVuY3Rpb24uIEkgcmVjb2duaXplIHRoZSBuYW1lIGluc3RhbnRseSwgaXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBOSUMgZHJpdmVyIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSB0aGUgUENJIGluaXRpYWxpemF0aW9uIHBhdGggZm9yIHRoZSBOSVUgKE5ldHdvcmsgSW50ZXJmYWNlIFVuaXQpLiBLbm93aW5nIGl0J3MgUENJLWZvY3VzZWQgYWxyZWFkeSBnaXZlcyBtZSBjb250ZXh0IOKAkyBJJ20gYW50aWNpcGF0aW5nIGludGVyYWN0aW9ucyB3aXRoIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIHByb2JhYmx5IHNvbWUgZGV2aWNlLXNwZWNpZmljIHNldHVwIGJhc2VkIG9uIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBoZXJlOyBpbmNvcnJlY3Qgc2VxdWVuY2UgZHVyaW5nIGluaXQgY2FuIGxlYWQgdG8gdW5wcmVkaWN0YWJsZSByZXN1bHRzIGluIHRoZSBsb25nIHJ1bi4gTGV0J3Mgc2VlIGhvdyB0aGlzIHRoaW5nIGFjdHVhbGx5IHRpY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MjkuMTU0MDA5MTA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNDcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTgwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjk4MDA6XFx0XFx0ZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTU9EVUxFX05BTUUpO1xcbjk4MDE6XFx0XFx0aWYgKGVycikge1xcbjk4MDI6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuOTgwMzpcXHRcXHRcXHRnb3RvIGVycl9vdXRfZGlzYWJsZV9wZGV2O1xcbjk4MDQ6XFx0XFx0fVxcbjk4MDU6XFx0XFxuOTgwNjpcXHRcXHRpZiAoIXBjaV9pc19wY2llKHBkZXYpKSB7XFxuOTgwNzpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJDYW5ub3QgZmluZCBQQ0kgRXhwcmVzcyBjYXBhYmlsaXR5LCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuOTgwODpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjk4MDk6XFx0XFx0XFx0Z290byBlcnJfb3V0X2ZyZWVfcmVzO1xcbjk4MTA6XFx0XFx0fVxcbjk4MTE6XFx0XFxuOTgxMjpcXHRcXHRkZXYgPSBuaXVfYWxsb2NfYW5kX2luaXQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGRldiwgTlVMTCxcXG45ODEzOlxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bml1X3BjaV9vcHMsIFBDSV9GVU5DKHBkZXYtXFx1MDAzZWRldmZuKSk7XFxuOTgxNDpcXHRcXHRpZiAoIWRldikge1xcbjk4MTU6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG45ODE2OlxcdFxcdFxcdGdvdG8gZXJyX291dF9mcmVlX3JlcztcXG45ODE3OlxcdFxcdH1cXG45ODE4OlxcdFxcdG5wID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG45ODE5OlxcdFxcbjk4MjA6XFx0XFx0bWVtc2V0KFxcdTAwMjZwYXJlbnRfaWQsIDAsIHNpemVvZihwYXJlbnRfaWQpKTtcXG45ODIxOlxcdFxcdHBhcmVudF9pZC5wY2kuZG9tYWluID0gcGNpX2RvbWFpbl9ucihwZGV2LVxcdTAwM2VidXMpO1xcbjk4MjI6XFx0XFx0cGFyZW50X2lkLnBjaS5idXMgPSBwZGV2LVxcdTAwM2VidXMtXFx1MDAzZW51bWJlcjtcXG45ODIzOlxcdFxcdHBhcmVudF9pZC5wY2kuZGV2aWNlID0gUENJX1NMT1QocGRldi1cXHUwMDNlZGV2Zm4pO1xcbjk4MjQ6XFx0XFxuOTgyNTpcXHRcXHRucC1cXHUwMDNlcGFyZW50ID0gbml1X2dldF9wYXJlbnQobnAsIFxcdTAwMjZwYXJlbnRfaWQsXFxuOTgyNjpcXHRcXHRcXHRcXHRcXHQgICAgUExBVF9UWVBFX0FUTEFTKTtcXG45ODI3OlxcdFxcdGlmICghbnAtXFx1MDAzZXBhcmVudCkge1xcbjk4Mjg6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG45ODI5OlxcdFxcdFxcdGdvdG8gZXJyX291dF9mcmVlX2RldjtcXG45ODMwOlxcdFxcdH1cXG45ODMxOlxcdFxcbjk4MzI6XFx0XFx0cGNpZV9jYXBhYmlsaXR5X2NsZWFyX2FuZF9zZXRfd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNUTCxcXG45ODMzOlxcdFxcdFxcdFBDSV9FWFBfREVWQ1RMX05PU05PT1BfRU4sXFxuOTgzNDpcXHRcXHRcXHRQQ0lfRVhQX0RFVkNUTF9DRVJFIHwgUENJX0VYUF9ERVZDVExfTkZFUkUgfFxcbjk4MzU6XFx0XFx0XFx0UENJX0VYUF9ERVZDVExfRkVSRSB8IFBDSV9FWFBfREVWQ1RMX1VSUkUgfFxcbjk4MzY6XFx0XFx0XFx0UENJX0VYUF9ERVZDVExfUkVMQVhfRU4pO1xcbjk4Mzc6XFx0XFxuOTgzODpcXHRcXHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIERNQV9CSVRfTUFTSyg0NCkpO1xcbjk4Mzk6XFx0XFx0aWYgKCFlcnIpXFxuOTg0MDpcXHRcXHRcXHRkZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTtcXG45ODQxOlxcdFxcdGlmIChlcnIpIHtcXG45ODQyOlxcdFxcdFxcdGVyciA9IGRtYV9zZXRfbWFzayhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBETUFfQklUX01BU0soMzIpKTtcXG45ODQzOlxcdFxcdFxcdGlmIChlcnIpIHtcXG45ODQ0OlxcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmdcXFxcblxcXCIpO1xcbjk4NDU6XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0X3JlbGVhc2VfcGFyZW50O1xcbjk4NDY6XFx0XFx0XFx0fVxcbjk4NDc6XFx0XFx0fVxcbjk4NDg6XFx0XFxuOTg0OTpcXHRcXHRuaXVfc2V0X2Jhc2ljX2ZlYXR1cmVzKGRldik7XFxuOTg1MDpcXHRcXG45ODUxOlxcdFxcdGRldi1cXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfVU5JQ0FTVF9GTFQ7XFxuOTg1MjpcXHRcXG45ODUzOlxcdFxcdG5wLVxcdTAwM2VyZWdzID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIDApO1xcbjk4NTQ6XFx0XFx0aWYgKCFucC1cXHUwMDNlcmVncykge1xcbjk4NTU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiQ2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuOTg1NjpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjk4NTc6XFx0XFx0XFx0Z290byBlcnJfb3V0X3JlbGVhc2VfcGFyZW50O1xcbjk4NTg6XFx0XFx0fVxcbjk4NTk6XFx0XFxuOTg2MDpcXHRcXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcXG45ODYxOlxcdFxcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbjk4NjI6XFx0XFxuOTg2MzpcXHRcXHRkZXYtXFx1MDAzZWlycSA9IHBkZXYtXFx1MDAzZWlycTtcXG45ODY0OlxcdFxcbjk4NjU6XFx0XFx0LyogTVRVIHJhbmdlOiA2OCAtIDkyMTYgKi9cXG45ODY2OlxcdFxcdGRldi1cXHUwMDNlbWluX210dSA9IEVUSF9NSU5fTVRVO1xcbjk4Njc6XFx0XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gTklVX01BWF9NVFU7XFxuOTg2ODpcXHRcXG45ODY5OlxcdFxcdG5pdV9hc3NpZ25fbmV0ZGV2X29wcyhkZXYpO1xcbjk4NzA6XFx0XFxuOTg3MTpcXHRcXHRlcnIgPSBuaXVfZ2V0X2ludmFyaWFudHMobnApO1xcbjk4NzI6XFx0XFx0aWYgKGVycikge1xcbjk4NzM6XFx0XFx0XFx0aWYgKGVyciAhPSAtRU5PREVWKVxcbjk4NzQ6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiUHJvYmxlbSBmZXRjaGluZyBpbnZhcmlhbnRzIG9mIGNoaXAsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG45ODc1OlxcdFxcdFxcdGdvdG8gZXJyX291dF9pb3VubWFwO1xcbjk4NzY6XFx0XFx0fVxcbjk4Nzc6XFx0XFxuOTg3ODpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcXG45ODc5OlxcdFxcdGlmIChlcnIpIHtcXG45ODgwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuOTg4MTpcXHRcXHRcXHRnb3RvIGVycl9vdXRfaW91bm1hcDtcXG45ODgyOlxcdFxcdH1cXG45ODgzOlxcdFxcbjk4ODQ6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7XFxuOTg4NTpcXHRcXG45ODg2OlxcdFxcdG5pdV9kZXZpY2VfYW5ub3VuY2UobnApO1xcbjk4ODc6XFx0XFxuOTg4ODpcXHRcXHRyZXR1cm4gMDtcXG45ODg5OlxcdFxcbjk4OTA6XFx0ZXJyX291dF9pb3VubWFwOlxcbjk4OTE6XFx0XFx0aWYgKG5wLVxcdTAwM2VyZWdzKSB7XFxuOTg5MjpcXHRcXHRcXHRpb3VubWFwKG5wLVxcdTAwM2VyZWdzKTtcXG45ODkzOlxcdFxcdFxcdG5wLVxcdTAwM2VyZWdzID0gTlVMTDtcXG45ODk0OlxcdFxcdH1cXG45ODk1OlxcdFxcbjk4OTY6XFx0ZXJyX291dF9yZWxlYXNlX3BhcmVudDpcXG45ODk3OlxcdFxcdG5pdV9wdXRfcGFyZW50KG5wKTtcXG45ODk4OlxcdFxcbjk4OTk6XFx0ZXJyX291dF9mcmVlX2RldjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MjkuMTU0MzQ2MjM4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjM3NDM0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgbml1X2dldF9pbnZhcmlhbnRzYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHRoZSBkZWJ1Z2dlcidzIGhpdCBhIGNhbGwgdG8gYG5pdV9nZXRfaW52YXJpYW50c2AuIFRpbWUgdG8gZ2V0IG15IGJlYXJpbmdzIGFuZCB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3Mgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGFjY29tcGxpc2guIEdpdmVuIHRoZSBuYW1lLCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIGRlcml2ZSBvciByZXRyaWV2ZSBpbnZhcmlhbnRzIHJlbGF0ZWQgdG8gdGhpcyBzcGVjaWZpYyBOSVUgKE5ldHdvcmsgSW50ZXJmYWNlIFVuaXQpIGNvbnRleHQuIFBlcmhhcHMgaXQncyBxdWVyeWluZyBoYXJkd2FyZSByZWdpc3RlcnMsIGFuYWx5emluZyBkYXRhIHN0cnVjdHVyZXMsIG9yIHJlbHlpbmcgb24gc29tZSBwcmUtY2FsY3VsYXRlZCBzdGF0ZS5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBmb3IgYSBkZWVwIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEYXRhIFNvdXJjZXM6KiogV2hhdCBzb3VyY2VzIG9mIGluZm9ybWF0aW9uIGFyZSBiZWluZyB0YXBwZWQ/IEhhcmR3YXJlIHJlZ2lzdGVycywgY29uZmlndXJhdGlvbiBmaWxlcywgaW50ZXJuYWwgc3RhdGUsIG5ldHdvcmsgdHJhZmZpYywgZXRjLj9cbiogICAqKkludmFyaWFudHMgRGVmaW5lZDoqKiBXaGF0IGNvbnN0aXR1dGVzIGFuIFwiaW52YXJpYW50XCIgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbj8gSXMgaXQgcmVsYXRlZCB0byBvcGVyYXRpb25hbCBwYXJhbWV0ZXJzIChNVFUsIHNwZWVkKSwgaGFyZHdhcmUgc3RhdHVzIChsaW5rIHVwL2Rvd24sIGVycm9yIGNvdW50cyksIG9yIHNvbWUgaGlnaC1sZXZlbCBzeXN0ZW0gcHJvcGVydHk/IElzIGl0IGxvb2tpbmcgZm9yIGNlcnRhaW4gcGF0dGVybnMsIGJvdW5kcywgb3IgcmVsYXRpb25zaGlwcz9cbiogICAqKkRlcml2YXRpb24gTG9naWM6KiogSG93IGFyZSB0aGVzZSBpbnZhcmlhbnRzIGJlaW5nIGNhbGN1bGF0ZWQgb3IgcmV0cmlldmVkPyBJcyBpdCBhIGRpcmVjdCBsb29rdXAsIGEgc2VyaWVzIG9mIGNhbGN1bGF0aW9ucywgb3IgYSBzdGF0ZSBtYWNoaW5lPyBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuXG4qICAgKipFcnJvciBIYW5kbGluZy9FZGdlIENhc2VzOioqIEhvdyBkb2VzIHRoZSBmdW5jdGlvbiBoYW5kbGUgdW5leHBlY3RlZCBzaXR1YXRpb25zPyBXaGF0IGFyZSB0aGUgZmFpbHVyZSBtb2RlcywgYW5kIGhvdyBhcmUgdGhleSByZXBvcnRlZD8gV2hhdCBraW5kIG9mIGVycm9yLWNoZWNraW5nIGlzIHByZXNlbnQ/XG4qICAgKipQZXJmb3JtYW5jZToqKiBHaXZlbiB3aGVyZSB3ZSBhcmUgaW4gdGhlIGNhbGwgc3RhY2ssIHdoYXQncyB0aGUgY29tcHV0YXRpb25hbCBjb21wbGV4aXR5IG9mIHRoaXMgZnVuY3Rpb24/IEFtIEkgbGlrZWx5IHRvIGVuY291bnRlciBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaGVyZT9cblxuTXkgcHJpbWFyeSBnb2FsIGhlcmUgaXMgdG8gZXN0YWJsaXNoIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IFwiaW52YXJpYW50c1wiIHRoaXMgZnVuY3Rpb24gaXMgZGVhbGluZyB3aXRoLiBUaGUgc3BlY2lmaWNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBtaWdodCBiZSBsZXNzIGltcG9ydGFudCBpbml0aWFsbHksIGJ1dCBJJ2xsIG5lZWQgdG8gcmVjb2duaXplIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBmbG93LiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBhbmQgd29yayBiYWNrd2FyZCBmcm9tIHRoZXJlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTU1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxOTozMy42NzgwOTM2MjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MzE0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiOTMxNDpcXHRzdGF0aWMgaW50IG5pdV9nZXRfaW52YXJpYW50cyhzdHJ1Y3Qgbml1ICpucClcXG45MzE1OlxcdHtcXG45MzE2OlxcdFxcdGludCBlcnIsIGhhdmVfcHJvcHM7XFxuOTMxNzpcXHRcXHR1MzIgb2Zmc2V0O1xcbjkzMTg6XFx0XFxuOTMxOTpcXHRcXHRlcnIgPSBuaXVfZ2V0X29mX3Byb3BzKG5wKTtcXG45MzIwOlxcdFxcdGlmIChlcnIgPT0gLUVOT0RFVilcXG45MzIxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuOTMyMjpcXHRcXG45MzIzOlxcdFxcdGhhdmVfcHJvcHMgPSAhZXJyO1xcbjkzMjQ6XFx0XFxuOTMyNTpcXHRcXHRlcnIgPSBuaXVfaW5pdF9tYWNfaXBwX3Bjc19iYXNlKG5wKTtcXG45MzI2OlxcdFxcdGlmIChlcnIpXFxuOTMyNzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjkzMjg6XFx0XFxuOTMyOTpcXHRcXHRpZiAoaGF2ZV9wcm9wcykge1xcbjkzMzA6XFx0XFx0XFx0ZXJyID0gbml1X2dldF9hbmRfdmFsaWRhdGVfcG9ydChucCk7XFxuOTMzMTpcXHRcXHRcXHRpZiAoZXJyKVxcbjkzMzI6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG45MzMzOlxcdFxcbjkzMzQ6XFx0XFx0fSBlbHNlICB7XFxuOTMzNTpcXHRcXHRcXHRpZiAobnAtXFx1MDAzZXBhcmVudC1cXHUwMDNlcGxhdF90eXBlID09IFBMQVRfVFlQRV9OSVUpXFxuOTMzNjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG45MzM3OlxcdFxcbjkzMzg6XFx0XFx0XFx0bnc2NChFU1BDX1BJT19FTiwgRVNQQ19QSU9fRU5fRU5BQkxFKTtcXG45MzM5OlxcdFxcdFxcdG9mZnNldCA9IG5pdV9wY2lfdnBkX29mZnNldChucCk7XFxuOTM0MDpcXHRcXHRcXHRuZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC1cXHUwMDNlZGV2LFxcbjkzNDE6XFx0XFx0XFx0XFx0ICAgICBcXFwiJXMoKSBWUEQgb2Zmc2V0IFslMDh4XVxcXFxuXFxcIiwgX19mdW5jX18sIG9mZnNldCk7XFxuOTM0MjpcXHRcXHRcXHRpZiAob2Zmc2V0KSB7XFxuOTM0MzpcXHRcXHRcXHRcXHRlcnIgPSBuaXVfcGNpX3ZwZF9mZXRjaChucCwgb2Zmc2V0KTtcXG45MzQ0OlxcdFxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjkzNDU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG45MzQ2OlxcdFxcdFxcdH1cXG45MzQ3OlxcdFxcdFxcdG53NjQoRVNQQ19QSU9fRU4sIDApO1xcbjkzNDg6XFx0XFxuOTM0OTpcXHRcXHRcXHRpZiAobnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTklVX0ZMQUdTX1ZQRF9WQUxJRCkge1xcbjkzNTA6XFx0XFx0XFx0XFx0bml1X3BjaV92cGRfdmFsaWRhdGUobnApO1xcbjkzNTE6XFx0XFx0XFx0XFx0ZXJyID0gbml1X2dldF9hbmRfdmFsaWRhdGVfcG9ydChucCk7XFxuOTM1MjpcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbjkzNTM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG45MzU0OlxcdFxcdFxcdH1cXG45MzU1OlxcdFxcbjkzNTY6XFx0XFx0XFx0aWYgKCEobnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTklVX0ZMQUdTX1ZQRF9WQUxJRCkpIHtcXG45MzU3OlxcdFxcdFxcdFxcdGVyciA9IG5pdV9nZXRfYW5kX3ZhbGlkYXRlX3BvcnQobnApO1xcbjkzNTg6XFx0XFx0XFx0XFx0aWYgKGVycilcXG45MzU5OlxcdFxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuOTM2MDpcXHRcXHRcXHRcXHRlcnIgPSBuaXVfcGNpX3Byb2JlX3Nwcm9tKG5wKTtcXG45MzYxOlxcdFxcdFxcdFxcdGlmIChlcnIpXFxuOTM2MjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjkzNjM6XFx0XFx0XFx0fVxcbjkzNjQ6XFx0XFx0fVxcbjkzNjU6XFx0XFxuOTM2NjpcXHRcXHRlcnIgPSBuaXVfcHJvYmVfcG9ydHMobnApO1xcbjkzNjc6XFx0XFx0aWYgKGVycilcXG45MzY4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuOTM2OTpcXHRcXG45MzcwOlxcdFxcdG5pdV9sZGdfaW5pdChucCk7XFxuOTM3MTpcXHRcXG45MzcyOlxcdFxcdG5pdV9jbGFzc2lmaWVyX3N3c3RhdGVfaW5pdChucCk7XFxuOTM3MzpcXHRcXHRuaXVfbGlua19jb25maWdfaW5pdChucCk7XFxuOTM3NDpcXHRcXG45Mzc1OlxcdFxcdGVyciA9IG5pdV9kZXRlcm1pbmVfcGh5X2Rpc3Bvc2l0aW9uKG5wKTtcXG45Mzc2OlxcdFxcdGlmICghZXJyKVxcbjkzNzc6XFx0XFx0XFx0ZXJyID0gbml1X2luaXRfbGluayhucCk7XFxuOTM3ODpcXHRcXG45Mzc5OlxcdFxcdHJldHVybiBlcnI7XFxuOTM4MDpcXHR9XFxuOTM4MTpcXHRcXG45MzgyOlxcdHN0YXRpYyBMSVNUX0hFQUQobml1X3BhcmVudF9saXN0KTtcXG45MzgzOlxcdHN0YXRpYyBERUZJTkVfTVVURVgobml1X3BhcmVudF9sb2NrKTtcXG45Mzg0OlxcdHN0YXRpYyBpbnQgbml1X3BhcmVudF9pbmRleDtcXG45Mzg1OlxcdFxcbjkzODY6XFx0c3RhdGljIHNzaXplX3Qgc2hvd19wb3J0X3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuOTM4NzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuOTM4ODpcXHR7XFxuOTM4OTpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpO1xcbjkzOTA6XFx0XFx0c3RydWN0IG5pdV9wYXJlbnQgKnAgPSBkZXZfZ2V0X3BsYXRkYXRhKFxcdTAwMjZwbGF0X2Rldi1cXHUwMDNlZGV2KTtcXG45MzkxOlxcdFxcdHUzMiBwb3J0X3BoeSA9IHAtXFx1MDAzZXBvcnRfcGh5O1xcbjkzOTI6XFx0XFx0Y2hhciAqb3JpZ19idWYgPSBidWY7XFxuOTM5MzpcXHRcXHRpbnQgaTtcXG45Mzk0OlxcdFxcbjkzOTU6XFx0XFx0aWYgKHBvcnRfcGh5ID09IFBPUlRfUEhZX1VOS05PV04gfHxcXG45Mzk2OlxcdFxcdCAgICBwb3J0X3BoeSA9PSBQT1JUX1BIWV9JTlZBTElEKVxcbjkzOTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuOTM5ODpcXHRcXG45Mzk5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwLVxcdTAwM2VudW1fcG9ydHM7IGkrKykge1xcbjk0MDA6XFx0XFx0XFx0Y29uc3QgY2hhciAqdHlwZV9zdHI7XFxuOTQwMTpcXHRcXHRcXHRpbnQgdHlwZTtcXG45NDAyOlxcdFxcbjk0MDM6XFx0XFx0XFx0dHlwZSA9IHBoeV9kZWNvZGUocG9ydF9waHksIGkpO1xcbjk0MDQ6XFx0XFx0XFx0aWYgKHR5cGUgPT0gUE9SVF9UWVBFXzEwRylcXG45NDA1OlxcdFxcdFxcdFxcdHR5cGVfc3RyID0gXFxcIjEwR1xcXCI7XFxuOTQwNjpcXHRcXHRcXHRlbHNlXFxuOTQwNzpcXHRcXHRcXHRcXHR0eXBlX3N0ciA9IFxcXCIxR1xcXCI7XFxuOTQwODpcXHRcXHRcXHRidWYgKz0gc3ByaW50ZihidWYsXFxuOTQwOTpcXHRcXHRcXHRcXHQgICAgICAgKGkgPT0gMCkgPyBcXFwiJXNcXFwiIDogXFxcIiAlc1xcXCIsXFxuOTQxMDpcXHRcXHRcXHRcXHQgICAgICAgdHlwZV9zdHIpO1xcbjk0MTE6XFx0XFx0fVxcbjk0MTI6XFx0XFx0YnVmICs9IHNwcmludGYoYnVmLCBcXFwiXFxcXG5cXFwiKTtcXG45NDEzOlxcdFxcdHJldHVybiBidWYgLSBvcmlnX2J1ZjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6MzMuNjc4NDIzMDg2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzExOTg2NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgRGVjaXNpb246IG5pdSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIOKAkyBpdCdzIGEgbWlzc2luZyB3cml0ZSBvcGVyYXRpb24gKGBudzY0YCkgaW4gYG5pdV90eGNfc2V0X2ltYXNrYCwgcGFydCBvZiBhIHN0YW5kYXJkIG5ldHdvcmsgZHJpdmVyLCBgbml1YC4gVGhlIGNvZGUgbW9kaWZpZXMgYSBoYXJkd2FyZSByZWdpc3Rlci4gVGhlIGluaXRpYWwgcXVlc3Rpb24gaXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGNyaXRlcmlhLCBpdCBtaWdodCBub3QgYmUgaWYgaXQncyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS5cblxuQnV0IGlzIGBuaXVgIGFueSBvZiB0aG9zZT8gTm8sIGl0J3MgYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIuIFNvIHRoYXQgZXhjbHVzaW9uIGRvZXNuJ3QgYXBwbHkgZGlyZWN0bHkuIEhvd2V2ZXIsIHRoZSBuZXh0IHBvaW50IGluIHRoZSBpbnN0cnVjdGlvbnMgc2F5cyBub3QgdG8gZnV6eiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLlxuXG5TbywgY2FuIHdlIHJlYWNoIGBuaXVfdHhjX3NldF9pbWFza2AgaW4gUUVNVT8gVGhpcyBpcyB3aGVyZSB0aGUgUENJIGZ1enplciBjb21lcyBpbi4gSXQgaW50ZXJjZXB0cyBQQ0kgY29uZmlnIHNwYWNlIGFuZCBNTUlPIHJlYWRzL3dyaXRlcy4gV2hlbiBgbml1X3R4Y19zZXRfaW1hc2tgIGNhbGxzIGBucjY0YCAocmVhZHEpLCB0aGUgZnV6emVyIHByb3ZpZGVzIGEgZnV6emVkIHZhbHVlLiBXaGVuIGl0IGNhbGxzIGBudzY0YCAod3JpdGVxKSwgdGhlIHdyaXRlIGdvZXMgdG8gdGhlIGZ1enplci4gTWVhbmluZyB0aGUgZnV6emVyICpjYW4qIGluZmx1ZW5jZSB0aGlzIGNvZGUuXG5cbk5vdywgY2FuIHdlIGFjdHVhbGx5ICp0cmlnZ2VyKiBgbml1X3R4Y19zZXRfaW1hc2tgIHZpYSBhIGZ1enplcj8gSXQncyBjYWxsZWQgZnJvbSBgbml1X2luaXRfaHdgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgbml1X29wZW5gLiBgbml1X29wZW5gIGlzIHRoZSBgbmRvX29wZW5gIGNhbGxiYWNrLiBTbywgY2FuIHdlIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZT8gSWYgYHJlZ2lzdGVyX25ldGRldmAgc3VjY2VlZHMsIHRoYXQgbGV0cyB1cyBkbyBhIGBpcCBsaW5rIHNldCBkZXYgZXRoWCB1cGAsIHdoaWNoIHRyaWdnZXJzIGBuaXVfb3BlbmAgYW5kIHRoZXJlZm9yZSB0aGUgdGFyZ2V0LlxuXG5gbml1X2dldF9pbnZhcmlhbnRzYCBpcyBjYWxsZWQgd2hlbiB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgcmVnaXN0ZXJlZC4gSXQgY2FsbHMgYG5pdV9wY2lfdnBkX2ZldGNoYCwgd2hpY2ggaXMgTU1JTy4gVGhlIGZ1enplciBjb250cm9scyB0aGUgTU1JTyByZWFkcywgc28gd2UgY2FuIG1ha2UgdGhpcyBzdWNjZWVkLiBGcm9tIHRoaXMgcG9pbnQsIGByZWdpc3Rlcl9uZXRkZXZgIGNhbiB0aGVuIHN1Y2NlZWQsIHdoaWNoIHRoZW4gc2V0cyB1cCB0aGUgcGF0aCB0aHJvdWdoIGBuaXVfb3BlbmAsIGFuZCBldmVudHVhbGx5IHRvIGBuaXVfdHhjX3NldF9pbWFza2AuXG5cblRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGluIFFFTVUgdmlhIHRoZSBQQ0kgZnV6emVyLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzLCBnaXZlbiB0aGUgY2FsbCBjaGFpbiwgYXJlIGBuaXVfb3BlbmAsIHNpbmNlIGl0IGlzIHRoZSBgbmRvX29wZW5gIGNhbGxiYWNrLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBmb3Igb3RoZXIgY2FsbGVycyBvZiBgbml1X3R4Y19zZXRfaW1hc2tgLCBidXQgdGhhdCBpcyBteSBrZXkgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDc2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MTk6NDUuOTkwNDE1NzgxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM4MDgxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibml1X3R4Y19zZXRfaW1hc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz00NjI1PXN0YXRpYyB2b2lkIG5pdV90eGNfZW5hYmxlX3BvcnQoc3RydWN0IG5pdSAqbnAsIGludCBvbilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy00NjQzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo0NjQ0OnN0YXRpYyB2b2lkIG5pdV90eGNfc2V0X2ltYXNrKHN0cnVjdCBuaXUgKm5wLCB1NjQgaW1hc2spXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTQ2NDUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTU5MzQ9c3RhdGljIGludCBuaXVfaW5pdF9odyhzdHJ1Y3Qgbml1ICpucClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy01OTQwLVxcdG5pdV90eGNfcG9ydF9kbWFfZW5hYmxlKG5wLCAxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NTk0MTpcXHRuaXVfdHhjX3NldF9pbWFzayhucCwgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTU5NDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE5OjQ2LjMxNDIzMTA3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjgxNTk4NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBuaXVfaW5pdF9od2AgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aGUgY2x1ZSBpcyB0aGF0IHdlJ3JlIG9ubHkgc2VlaW5nIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20gYG5pdV9pbml0X2h3YC4gVGhhdCdzIGludGVyZXN0aW5nLCBidXQgbm90IHRlcnJpYmx5IHN1cnByaXNpbmcgZ2l2ZW4gdGhlIG5hbWluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIHRyYWNlIGJhY2sgZnJvbSBgbml1X2luaXRfaHdgLiBUaGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50ICphbGwqIHRoZSBjYWxsZXJzIG9mIGBuaXVfaW5pdF9od2AuIFRoYXQgd2lsbCBnaXZlIHVzIHRoZSBicm9hZGVyIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZnJvbSB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHNjb3BlLiBJcyBpdCBkdXJpbmcgZHJpdmVyIGluaXRpYWxpemF0aW9uPyBIYXJkd2FyZSBwcm9iZT8gT3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBuYXJyb3cgZG93biB0aGUgYXJlYSB0byBmb2N1cyBvbiBhbmQgaWxsdW1pbmF0ZSB0aGUgbGlrZWx5IHJlbGF0aW9uc2hpcHMgaW52b2x2ZWQgaGVyZS4gVGltZSB0byBnZXQgdG8gaXQhIExldCdzIGdldCB0byB0aG9zZSBjYWxsIGdyYXBocy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxOTo1MC44ODIzOTQzMzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzc4MjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5pdV9pbml0X2h3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NTkwNT1zdGF0aWMgdm9pZCBuaXVfZGlzYWJsZV9pcHAoc3RydWN0IG5pdSAqbnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNTkzMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NTkzNDpzdGF0aWMgaW50IG5pdV9pbml0X2h3KHN0cnVjdCBuaXUgKm5wKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy01OTM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz02MDk4PXN0YXRpYyBpbnQgbml1X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy02MTIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYzo2MTIzOlxcdGVyciA9IG5pdV9pbml0X2h3KG5wKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjEyNC1cXHRpZiAoIWVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTY0MzY9c3RhdGljIHZvaWQgbml1X25ldGlmX3N0YXJ0KHN0cnVjdCBuaXUgKm5wKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY0MzktXFx0ICogc28gbG9uZyBhcyBhbGwgY2FsbGVycyBhcmUgYXNzdXJlZCB0byBoYXZlIGZyZWUgdHggc2xvdHNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NjQ0MDpcXHQgKiAoc3VjaCBhcyBhZnRlciBuaXVfaW5pdF9odykuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY0NDEtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM9NjQ5OD1zdGF0aWMgdm9pZCBuaXVfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjUyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NjUyNzpcXHRlcnIgPSBuaXVfaW5pdF9odyhucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY1MjgtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz02NzY1PXN0YXRpYyBpbnQgbml1X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjc5Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6Njc5MzpcXHRlcnIgPSBuaXVfaW5pdF9odyhucCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTY3OTQtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz05OTYxPXN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgbml1X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZfZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05OTc1LVxcdG5ldGRldl9sb2NrKGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jOjk5NzY6XFx0ZXJyID0gbml1X2luaXRfaHcobnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05OTc3LVxcdGlmICghZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjE5OjUwLjk1MjgyMDIxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTQ1MzI5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtleSBOSVUgRHJpdmVyIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGVzZSBOSVUgZHJpdmVyIGZ1bmN0aW9ucyBhcmUgc3RydWN0dXJlZC4gSXQgc2VlbXMgbGlrZSBgbml1X29wZW5gLCBgbml1X3Jlc2V0X3Rhc2tgLCBgbml1X2NoYW5nZV9tdHVgLCBhbmQgYG5pdV9yZXN1bWVgIGFsbCBldmVudHVhbGx5IGNhbGwgYG5pdV9pbml0X2h3YC4gVGhhdCdzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIGJ1dCB0aGUga2V5IGVudHJ5cG9pbnRzIGZvciBteSBhbmFseXNpcyBzZWVtIHRvIGJlIGBuaXVfb3BlbmAgYW5kIGBuaXVfY2hhbmdlX210dWAuIFRoZXNlIGZlZWwgbGlrZSBzb2xpZCBmb2N1cyBzeW1ib2xzLlxuXG5XYWl0IGEgbWludXRlLCBJIHRoaW5rIGBuaXVfb3BlbmAgaXMgc3RhdGljLiBEb2VzIHRoYXQgd29yayBmb3IgdGhpcyBhbmFseXNpcz8gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoZSBydWxlIGlzIHRvIGZvY3VzIG9uIHRob3NlLCBhbmQgYXZvaWQgdGhlIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGlubGluZWQuXG5cbkhvd2V2ZXIsIGBuaXVfb3BlbmAgaXMgYXNzaWduZWQgdG8gYG5kb19vcGVuYCBpbiBgbml1X25ldGRldl9vcHNgLiBTbywgc2luY2UgaXQncyBub3QgYmVpbmcgaW5saW5lZCwgaXQgaGFzIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIE9rYXksIHRoYXQncyBnb29kLlxuXG5gbml1X2NoYW5nZV9tdHVgIHNob3VsZCBiZSB0aGUgc2FtZSwgc28gaXQncyBhbGwgZ29vZC5cblxuTm93LCBsZXQncyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBuaXVfb3BlbmAgaXNuJ3Qgc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg5OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxOTo1NS4xNjczNTc2MVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU1MDkwNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibml1X29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYz02MDkwPXN0YXRpYyB2b2lkIG5pdV9kaXNhYmxlX25hcGkoc3RydWN0IG5pdSAqbnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMtNjA5Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6NjA5ODpzdGF0aWMgaW50IG5pdV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jLTYwOTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jPTk3MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuaXVfbmV0ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmM6OTcyMzpcXHQubmRvX29wZW5cXHRcXHQ9IG5pdV9vcGVuLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYy05NzI0LVxcdC5uZG9fc3RvcFxcdFxcdD0gbml1X2Nsb3NlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoxOTo1NS4yMzI4NzQ5NDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU0OTg5MDE3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5JVSBEcml2ZXIncyBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpbml0aWFsbHksIGl0IGFwcGVhcnMgdGhhdCB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIGFsbCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCdzIG5vdCBpZGVhbCBmb3IgZGlyZWN0IGV4YW1pbmF0aW9uLiBIb3dldmVyLCBvbiBjbG9zZXIgaW5zcGVjdGlvbiwgSSBzZWUgdGhhdCB0aGlzIGlzbid0IGEgbWFqb3IgaXNzdWUgc2luY2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmVuJ3QgaW5saW5lZCwgYXMgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgaW4gYSBzdHJ1Y3QuIFNvIEkndmUgZ290IHRvIGZpbmQgbm9uLXN0YXRpYyBzeW1ib2xzIHRvIHRhcmdldC5cblxuVGhlIGZ1bmN0aW9ucyBgbml1X29wZW5gIGFuZCBgbml1X2NoYW5nZV9tdHVgIGxvb2sgcHJvbWlzaW5nIGFzIGVudHJ5IHBvaW50cy4gQnV0IHdhaXQsIGxldCdzIGNpcmNsZSBiYWNrIHRvIGBuaXVfcGNpX2luaXRfb25lYC4gSXNuJ3QgdGhhdCB0aGUgcHJvYmUgZnVuY3Rpb24/IFllcywgaXQgaXMhIFJpZ2h0LCBnb3QgaXQuXG5cbk5vdywgSSByZW1lbWJlciB0aGUgYnVnIHJlcG9ydCBtZW50aW9uZWQgYG5pdV90eGNfc2V0X2ltYXNrYC4gVGhhdCdzIGNhbGxlZCBmcm9tIGBuaXVfaW5pdF9od2AuIEFuZCBhaGEhIGBuaXVfaW5pdF9od2AgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgbml1X29wZW5gLCBgbml1X2NoYW5nZV9tdHVgLCBgbml1X3Jlc3VtZWAsIGFuZCBgbml1X3Jlc2V0X3Rhc2tgLiBTbyBJIHN0aWxsIGZlZWwgdGhhdCBgbml1X29wZW5gIGFuZCBgbml1X2NoYW5nZV9tdHVgIGFyZSB0aGUgYmVzdCBzeW1ib2xzIHRvIGZvY3VzIG9uLCBhcyB0aGV5IGFyZSB0aGUgbW9zdCBkaXJlY3QgZW50cnkgcG9pbnRzIGZyb20gdGhlIHVzZXItc3BhY2UgcGVyc3BlY3RpdmUuXG5cbkFscmlnaHQsIGxldCdzIG5vdyBjb25maXJtIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkga25vdyBgTklVYCBkZXBlbmRzIG9uIGBQQ0lgLCBJIGFscmVhZHkgaWRlbnRpZmllZCB0aGF0LiBUaW1lIHRvIGRvdWJsZS1jaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWdgIHRvIGJlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MjA6MDEuNzgyNzY4MjI3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzM2NzUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTklVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnPTg3PWNvbmZpZyBMRE1WU1dcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnLTk5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnOjEwMDpjb25maWcgTklVXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MjA6MDEuODUwMTQzNzk3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTA0ODQ3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgRXRoZXJuZXQgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFN1biBtaWNyb3N5c3RlbXMnIGRyaXZlciBkaXJlY3RvcnkuIE15IGZvY3VzIGlzIGxpa2VseSBhcm91bmQgbGluZSAxMDAgb2YgdGhlIGBLY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZmluZWQgaGVyZS4gSSBzdXNwZWN0IHRoaXMgd2lsbCBpbnZvbHZlIHVuZGVyc3RhbmRpbmcgdGhlIGBDT05GSUdfYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0byBzZWUgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQsIHRoZWlyIGRlcGVuZGVuY2llcyBvbiBvdGhlciBkcml2ZXJzIG9yIGhhcmR3YXJlLCBhbmQgYW55IGNvbmRpdGlvbmFsIGJ1aWxkIHNjZW5hcmlvcy4gSSB3YW50IHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNvbXBvbmVudHMuIEknbGwgbmVlZCB0byByZWNvZ25pemUgdGhpcyBpcyBsaWtlbHkgYSB0YXJnZXQtc3BlY2lmaWMgZmlsZSwgc28gSSBuZWVkIHRvIHBsYWNlIHRoaXMgZmlsZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgb3ZlcmFsbCBuZXR3b3JrIHN0YWNrLiBJJ2xsIGxpa2VseSBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogdGhlIGJhc2UgZHJpdmVyIHNlbGVjdGlvbiwgUEhZIGNvbmZpZ3VyYXRpb24sIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyB0aGF0IGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcy4gVGhlbiwgYmFzZWQgb24gd2hhdCBJIHNlZSBoZXJlLCBJIGNhbiBmb3JtIGEgbWVudGFsIG1hcCBvZiBob3cgdGhpcyBkcml2ZXIgaXMgY29udHJvbGxlZCBhbmQgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzMDksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoyMDowNS44NDA2MzMzMTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0ICBmb3VuZCBpbiB0aGUgbWFjaGluZSBkZXNjcmlwdGlvbiBvZiBhIHNlcnZpY2UgZG9tYWluLlxcbiAgOTY6XFx0XFx0ICBMaW51eCBicmlkZ2Uvc3dpdGNoIHNvZnR3YXJlIGNhbiB1c2UgdGhlc2UgaW50ZXJmYWNlcyBmb3JcXG4gIDk3OlxcdFxcdCAgZ3Vlc3QgZG9tYWluIG5ldHdvcmsgaW50ZXJjb25uZWN0aXZpdHkgb3IgZ3Vlc3QgZG9tYWluXFxuICA5ODpcXHRcXHQgIGNvbm5lY3Rpb24gdG8gYSBwaHlzaWNhbCBuZXR3b3JrIG9uIGEgc2VydmljZSBkb21haW4uXFxuICA5OTpcXHRcXG4gMTAwOlxcdGNvbmZpZyBOSVVcXG4gMTAxOlxcdFxcdHRyaXN0YXRlIFxcXCJTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gMTAyOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuIDEwMzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gMTA0OlxcdFxcdGhlbHBcXG4gMTA1OlxcdFxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIHVwb24gU3VuJ3NcXG4gMTA2OlxcdFxcdCAgTmVwdHVuZSBjaGlwc2V0LlxcbiAxMDc6XFx0XFxuIDEwODpcXHRlbmRpZiAjIE5FVF9WRU5ET1JfU1VOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjIwOjA1Ljg0MDcxMTcwOVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTIyNTY4ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24gTGFieXJpbnRoKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHdlJ3JlIGRlYWxpbmcgd2l0aCBgTklVYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGBOSVVgIGlzICp0aGUqIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJ3JlIGZvY3VzaW5nIG9uLiBCdXQgd2FpdCBhIHNlY29uZCwgdGhhdCBmZWVscyB0b28gc2ltcGxpc3RpYy4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIHNlZWluZyB0aGUgd2hvbGUgcGljdHVyZS4gTGV0J3MgdHJhY2UgaXQgYmFjay4gQWhhISBSaWdodCwgYE5FVF9WRU5ET1JfU1VOYC4uLiB0aGF0J3MgdGhlIHBhcmVudCBjb25maWcsIGlzbid0IGl0PyBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkga25vdyBteSBuZXR3b3JraW5nIHRyZWVzLCBhbmQgYE5JVWAgdW5kb3VidGVkbHkgZmFsbHMgdW5kZXIgdGhhdCB1bWJyZWxsYS4gTm93LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGNvbm5lY3Rpb24uIExldCdzIGRlbHZlIGludG8gdGhlIGRldGFpbHMgb2YgYE5FVF9WRU5ET1JfU1VOYCBhbmQgbWFrZSBzdXJlIGl0IGFsaWducyB3aXRoIHdoYXQgSSBleHBlY3QuIEkgbmVlZCB0byBzZWUgdGhlIHJlbGF0aW9uc2hpcCBjbGVhcmx5IGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc5OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MjA6MTIuOTYzMjg0MzY3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU5MTIxMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfU1VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9TVU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZy03LVxcdGJvb2wgXFxcIlN1biBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoyMDoxMy4wODkyMDUwNTNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0MjUxNTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgU3VuIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uIGJldHRlci4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcsIGxldCdzIGp1bXAgcmlnaHQgaW50byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL0tjb25maWdgIGFyb3VuZCBsaW5lIDYuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgc2V0dGluZ3MgYW5kIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBncmFzcGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyBwdXQgdG9nZXRoZXIgYW5kIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTM3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTc6MjA6MTYuMDMxNzI0MDcxWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgU3VuIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfU1VOXFxuICAgNzpcXHRcXHRib29sIFxcXCJTdW4gZGV2aWNlc1xcXCJcXG4gICA4OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBTVU4zIHx8IFNCVVMgfHwgUENJIHx8IFNVTl9MRE9NU1xcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTQ6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxNTpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgU3VuIG5ldHdvcmsgaW50ZXJmYWNlcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZVxcbiAgMTY6XFx0XFx0ICBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBORVRfVkVORE9SX1NVTlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgSEFQUFlNRUFMXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDE3OjIwOjE2LjAzMTg2NjEwMloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgyMTUzMzAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOSVUgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgTkVUX1ZFTkRPUl9TVU5gIGRlZmF1bHRzIHRvIFwieVwiIGFuZCBkZXBlbmRzIG9uIGBQQ0lgLCBzbyBlbmFibGluZyBgTklVYCBhbmQgYE5FVF9WRU5ET1JfU1VOYCBzaG91bGQgYmUgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIGBQQ0lgIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZC4gU28sIGBOSVVgIGFuZCBgTkVUX1ZFTkRPUl9TVU5gIGl0IGlzLlxuXG5CdXQsIGEgbmFnZ2luZyBkb3VidCBjcmVlcHMgaW46IGlzIGBuaXVgIG9uZSBvZiB0aG9zZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIHRoYXQncyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudD8gVGhlIGluc3RydWN0aW9ucyB3YXJuIGFib3V0IGNvZGUgaW4gXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc1wiIHRoYXQgcmVseSBvbiByZWFsIGhhcmR3YXJlLiBJIGhhdmUgdG8gYmUgY2FyZWZ1bCBoZXJlLiBgbml1YCBpcyBhIDEwR2JpdCBFdGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIG9sZCBTdW4gTmVwdHVuZSBjYXJkLiBJcyBpdCBhIFNtYXJ0TklDPyBOby4gUENJZSBzd2l0Y2g/IE5vLiBHUFU/IERlZmluaXRlbHkgbm90LlxuXG5UaGUgY29uY2VybiBpcyB0aGF0IGl0ICpyZXF1aXJlcyogcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gQnV0IHdhaXQsIGRvZXMgaXQgKmFjdHVhbGx5Kj8gTm93IEkgcmVjYWxsIHRoYXQgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyICpjYW4qIGZ1enogaXQuIFRoYXQncyB0aGUgY3JpdGljYWwgZGlmZmVyZW5jZS4gVGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgZXhjbHVkZSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXJzIGZyb20gdGhlIHdhcm5pbmcuIFN0YW5kYXJkIEV0aGVybmV0IGRyaXZlcnMgYXJlIGNvbW1vbmx5IGZ1enplZCBieSB0aGUgUENJIGZ1enplciwgYW5kIGJ1Z3MgYXJlIGZvdW5kIHRoZXJlIGFsbCB0aGUgdGltZSBpbiBkcml2ZXJzIGxpa2UgYGlnYmAsIGBlMTAwMGVgLCBgcjgxNjlgLCBgdGczYCwgZXRjLiBJdCBzZWVtcyB0aGF0ICp0aG9zZSogZHJpdmVycywgbGlrZSB0aGUgYE5JVWAgZHJpdmVyLCBhcmUgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcuIFRoZSBzdGF0ZW1lbnQgaXMgbGltaXRlZCB0byB0aG9zZSBjb21wbGljYXRlZCBkcml2ZXJzIHdpdGggZmlybXdhcmUgb3IgY29tcGxleCBjb250cm9sIHBhdGhzLlxuXG5TdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXJzIGFyZSBtdWNoIHNpbXBsZXIsIGFuZCB0aGUgcHJvYmUvb3BlbiBmdW5jdGlvbnMgY2FuIG9mdGVuIGJlIHJlYWNoZWQgYnkgc3l6a2FsbGVyJ3MgUENJIGZ1enplci4gU28sIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBwYXRjaCBpdHNlbGYuIEFoLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBmaXggZm9yIGEgbWlzc2luZyB3cml0ZSB0byBgVFhDX0lOVF9NQVNLYC4gTm90aGluZyB0byByYWlzZSBhbiBhbGFybSwgc28gdGhlIHBhdGNoIGlzIGZpbmUuXG5cblRoZSBpbXBvcnRhbnQgc3ltYm9scyB0byBrZWVwIGluIG1pbmQgYXJlIGBuaXVfb3BlbmAsIGBuaXVfY2hhbmdlX210dWAsIGFuZCBgbml1X3BjaV9pbml0X29uZWAuXG5cbkFuZCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9LY29uZmlnYC4gWWVzLCB0aGUgYE5JVWAgY29uZmlnIGRlcGVuZHMgb24gYFBDSWAgYW5kIHNlbGVjdHMgYENSQzMyYC4gTm8gb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIHByZXNlbnQuXG5cbk5vdywgdGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCB0YXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU3MCwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxNzoyMDoyNi44NTM0MDQ0NjNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzkwODQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTklVXCIsXG4gICAgXCJORVRfVkVORE9SX1NVTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5pdV9vcGVuXCIsXG4gICAgXCJuaXVfY2hhbmdlX210dVwiLFxuICAgIFwibml1X3BjaV9pbml0X29uZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWlzc2luZyBoYXJkd2FyZSByZWdpc3RlciB3cml0ZSBpbiB0aGUgU3VuIE5lcHR1bmUgMTBHYml0IEV0aGVybmV0IGRyaXZlciAobml1KS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgc3RhbmRhcmQgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIGJ5IHN5emthbGxlcidzIFBDSSBmdXp6ZXIgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIG9wZW4vY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOSVVcIixcbiAgICBcIk5FVF9WRU5ET1JfU1VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibml1X29wZW5cIixcbiAgICBcIm5pdV9jaGFuZ2VfbXR1XCIsXG4gICAgXCJuaXVfcGNpX2luaXRfb25lXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtaXNzaW5nIGhhcmR3YXJlIHJlZ2lzdGVyIHdyaXRlIGluIHRoZSBTdW4gTmVwdHVuZSAxMEdiaXQgRXRoZXJuZXQgZHJpdmVyIChuaXUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBzdGFuZGFyZCBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgYnkgc3l6a2FsbGVyJ3MgUENJIGZ1enplciBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCBpbnRlcmZhY2Ugb3Blbi9jb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfvsz[1] Phase: Succeeded StartedAt: 2026-07-26 17:20:38 +0000 UTC FinishedAt: 2026-07-26 17:20:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 17:20:38 +0000 UTC FinishedAt: 2026-07-26 17:20:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2] Phase: Succeeded StartedAt: 2026-07-26 17:20:38 +0000 UTC FinishedAt: 2026-07-26 19:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-26 17:20:38 +0000 UTC FinishedAt: 2026-07-26 19:36:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-26 17:20:38 +0000 UTC FinishedAt: 2026-07-26 17:20:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-26 17:20:38 +0000 UTC FinishedAt: 2026-07-26 17:20:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdfvsz/series-workflowdfvsz-convert-artifact-128285106/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-26 17:20:48 +0000 UTC FinishedAt: 2026-07-26 17:54:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-26 17:20:48 +0000 UTC FinishedAt: 2026-07-26 17:54:21 +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:*4a42114a-76b9-4e1d-8742-e7f80b3fdfb2,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-workflowdfvsz/series-workflowdfvsz-convert-artifact-128285106/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": "fa781b4c-b4df-4918-ba75-1edf4c57cfcf", "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-workflowdfvsz/series-workflowdfvsz-build-action-2602683184/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-26 17:20:48 +0000 UTC FinishedAt: 2026-07-26 17:54:11 +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:*4a42114a-76b9-4e1d-8742-e7f80b3fdfb2,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-workflowdfvsz/series-workflowdfvsz-convert-artifact-128285106/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": "fa781b4c-b4df-4918-ba75-1edf4c57cfcf", "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-workflowdfvsz/series-workflowdfvsz-build-action-2602683184/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-26 17:54:21 +0000 UTC FinishedAt: 2026-07-26 17:54:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-26 17:54:21 +0000 UTC FinishedAt: 2026-07-26 17:54:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-26 17:54:21 +0000 UTC FinishedAt: 2026-07-26 17:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-26 17:54:21 +0000 UTC FinishedAt: 2026-07-26 17:54:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdfvsz/series-workflowdfvsz-convert-artifact-821843661/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-26 17:54:31 +0000 UTC FinishedAt: 2026-07-26 17:56:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-26 17:54:31 +0000 UTC FinishedAt: 2026-07-26 17:56:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fa781b4c-b4df-4918-ba75-1edf4c57cfcf,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-workflowdfvsz/series-workflowdfvsz-build-action-2602683184/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-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-26 17:56:38 +0000 UTC FinishedAt: 2026-07-26 17:56:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-26 17:56:38 +0000 UTC FinishedAt: 2026-07-26 17:56:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-26 17:56:38 +0000 UTC FinishedAt: 2026-07-26 18:45:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-26 17:56:38 +0000 UTC FinishedAt: 2026-07-26 18:45:15 +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:*4a42114a-76b9-4e1d-8742-e7f80b3fdfb2,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-workflowdfvsz/series-workflowdfvsz-convert-artifact-821843661/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": "813676b7-5b10-4a1d-a955-f7d86f4a67aa", "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-workflowdfvsz/series-workflowdfvsz-build-action-974357673/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-26 17:56:38 +0000 UTC FinishedAt: 2026-07-26 18:45:05 +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:*4a42114a-76b9-4e1d-8742-e7f80b3fdfb2,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-workflowdfvsz/series-workflowdfvsz-convert-artifact-821843661/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": "813676b7-5b10-4a1d-a955-f7d86f4a67aa", "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-workflowdfvsz/series-workflowdfvsz-build-action-974357673/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-26 18:45:15 +0000 UTC FinishedAt: 2026-07-26 18:45:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-26 18:45:15 +0000 UTC FinishedAt: 2026-07-26 18:45:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-26 18:45:15 +0000 UTC FinishedAt: 2026-07-26 18:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-26 18:45:15 +0000 UTC FinishedAt: 2026-07-26 18:47:10 +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:*813676b7-5b10-4a1d-a955-f7d86f4a67aa,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-workflowdfvsz/series-workflowdfvsz-build-action-974357673/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-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-26 18:47:20 +0000 UTC FinishedAt: 2026-07-26 19:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-26 18:47:20 +0000 UTC FinishedAt: 2026-07-26 19:36:12 +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":["niu_open","niu_change_mtu","niu_pci_init_one"],"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:*fa781b4c-b4df-4918-ba75-1edf4c57cfcf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*813676b7-5b10-4a1d-a955-f7d86f4a67aa,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-workflowdfvsz/series-workflowdfvsz-build-action-2602683184/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-workflowdfvsz/series-workflowdfvsz-build-action-974357673/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-26 18:47:20 +0000 UTC FinishedAt: 2026-07-26 18:47:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-26 18:47:20 +0000 UTC FinishedAt: 2026-07-26 18:47:30 +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":["niu_open","niu_change_mtu","niu_pci_init_one"],"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-workflowdfvsz/series-workflowdfvsz-convert-artifact-2428585394/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-26 18:47:20 +0000 UTC FinishedAt: 2026-07-26 18:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-26 18:47:20 +0000 UTC FinishedAt: 2026-07-26 18:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-26 18:47:20 +0000 UTC FinishedAt: 2026-07-26 18:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-26 18:47:41 +0000 UTC FinishedAt: 2026-07-26 19:36:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfvsz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["niu_open","niu_change_mtu","niu_pci_init_one"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NIU","NET_VENDOR_SUN"],"series_id":"e76369e3-12cc-41c6-a26d-26bdfc36ebfa","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-26 18:47:41 +0000 UTC FinishedAt: 2026-07-26 19:36:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fa781b4c-b4df-4918-ba75-1edf4c57cfcf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*813676b7-5b10-4a1d-a955-f7d86f4a67aa,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-workflowdfvsz/series-workflowdfvsz-build-action-2602683184/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-workflowdfvsz/series-workflowdfvsz-build-action-974357673/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-workflowdfvsz/series-workflowdfvsz-convert-artifact-2428585394/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,}