Name: series-workflowg7g65 Phase: Succeeded StartedAt: 2026-08-31 04:39:10 +0000 UTC FinishedAt: 2026-08-31 08:38:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[0] Phase: Succeeded StartedAt: 2026-08-31 04:39:10 +0000 UTC FinishedAt: 2026-08-31 04:57:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 04:39:10 +0000 UTC FinishedAt: 2026-08-31 04:57:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "DEBUG_FS", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "DEBUG_FS", "INET" ], "series_id": "6e3862e5-35e9-41d2-93cf-7a345fa2d91e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nsim_create", "nsim_drv_port_add" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnNpbV9jcmVhdGUmIzM0OywKICAgICYjMzQ7bnNpbV9kcnZfcG9ydF9hZGQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGRpc2FibGVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgZmxhZyBvbiBuZXRkZXZzaW0gVkYgZGV2aWNlcyAoY2xlYXJpbmcgYml0cyBpbiBod19mZWF0dXJlcyBhbmQgZmVhdHVyZXMpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGludHJvZHVjZSBwYWRkaW5nIGlzc3Vlcywgb3IgY2hhbmdlIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgYW5kIGh3X2ZlYXR1cmVzIGZsYWcgZnJvbSBuZXRkZXZzaW0gVkYgcG9ydHMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGluIG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoKSB0byBwcmV2ZW50IHBhY2tldHMgZnJvbSBiZWluZyBsb29wZWQgYmFjayB0byBhIFZGIHBvcnQgbGFja2luZyBxdWV1ZXMgYW5kIE5BUEkuIFRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgc2ltdWxhdGVkIG5ldGRldiBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgbmV0ZGV2c2ltIHBvcnQgc2V0dXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyOGE3YWVkMzViYTk3NTY1OGI3ZjVhMDczNDY5NzkyNGMwMzY3ZDg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDQ6NTY6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5pbmRleCBiNGE5OWYzY2VhYzYwLi43YmI3MmFlYTkwYTAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbkBAIC0xMTEzLDYgJiM0MzsxMTEzLDE0IEBAIHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbV92ZihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbiBcdGludCBlcnI7XG4gXG4gXHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm5zaW1fdmZfbmV0ZGV2X29wcztcbiYjNDM7XG4mIzQzO1x0LyogbnNpbV9zZXR1cCgpIG9mZmVycyBORVRJRl9GX0xPT1BCQUNLIHRvIGV2ZXJ5IHBvcnQsIGJ1dCBhIFZGIHBvcnRcbiYjNDM7XHQgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFuc1xuJiM0MztcdCAqIHJlY2VpdmluZyBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcbiYjNDM7XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcbiYjNDM7XG4gXHRydG5sX2xvY2soKTtcbiBcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShucy1cdTAwM2VuZXRkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNDo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fY3JlYXRlJiMzNDssCiAgICAmIzM0O25zaW1fZHJ2X3BvcnRfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIE5FVElGX0ZfTE9PUEJBQ0sgZmVhdHVyZSBhbmQgaHdfZmVhdHVyZXMgZmxhZyBmcm9tIG5ldGRldnNpbSBWRiBwb3J0cyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gbnNpbV9pbml0X25ldGRldnNpbV92ZigpIHRvIHByZXZlbnQgcGFja2V0cyBmcm9tIGJlaW5nIGxvb3BlZCBiYWNrIHRvIGEgVkYgcG9ydCBsYWNraW5nIHF1ZXVlcyBhbmQgTkFQSS4gVGhpcyBkaXJlY3RseSBtb2RpZmllcyBzaW11bGF0ZWQgbmV0ZGV2IGZlYXR1cmUgY29uZmlndXJhdGlvbiBhbmQgaXMgcmVhY2hhYmxlIHZpYSBuZXRkZXZzaW0gcG9ydCBzZXR1cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4YTdhZWQzNWJhOTc1NjU4YjdmNWEwNzM0Njk3OTI0YzAzNjdkODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwNDo1NjozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYwppbmRleCBiNGE5OWYzY2VhYzYwLi43YmI3MmFlYTkwYTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCkBAIC0xMTEzLDYgJiM0MzsxMTEzLDE0IEBAIHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbV92ZihzdHJ1Y3QgbmV0ZGV2c2ltICpucykKIAlpbnQgZXJyOwogCiAJbnMtJmd0O25ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bnNpbV92Zl9uZXRkZXZfb3BzOwomIzQzOwomIzQzOwkvKiBuc2ltX3NldHVwKCkgb2ZmZXJzIE5FVElGX0ZfTE9PUEJBQ0sgdG8gZXZlcnkgcG9ydCwgYnV0IGEgVkYgcG9ydAomIzQzOwkgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFucwomIzQzOwkgKiByZWNlaXZpbmcgaXQuCiYjNDM7CSAqLwomIzQzOwlucy0mZ3Q7bmV0ZGV2LSZndDtod19mZWF0dXJlcyAmYW1wOz0gfk5FVElGX0ZfTE9PUEJBQ0s7CiYjNDM7CW5zLSZndDtuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7PSB+TkVUSUZfRl9MT09QQkFDSzsKJiM0MzsKIAlydG5sX2xvY2soKTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtJmd0O25ldGRldik7CiAJcnRubF91bmxvY2soKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGRldnNpbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBicm9hZGVyIG5ldGRldnNpbSBjb250ZXh0LiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHNwZWNpZmljYWxseSBhbHRlcmluZyB0aGUgYG5zaW1faW5pdF9uZXRkZXZzaW1fdmZgIGZ1bmN0aW9uIHdpdGhpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jYC4gVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgYE5FVElGX0ZfTE9PUEJBQ0tgIGZlYXR1cmUgZnJvbSB0aGUgYGh3X2ZlYXR1cmVzYCBhbmQgYGZlYXR1cmVzYCBvZiB0aGUgbmV0d29yayBkZXZpY2UgKGBucy0mZ3Q7bmV0ZGV2YCkuCgpUaGUgY29tbWVudCBwcm92aWRlcyBnb29kIGNvbnRleHQ6IFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBwb3J0cywgdW5saWtlIHRoZWlyIHBhcmVudCBwb3J0cywgZG9uJiMzOTt0IGhhdmUgcXVldWVzIG9yIE5BUEksIHNvIGxvb3BpbmcgYSBmcmFtZSBiYWNrIHRvIGl0c2VsZiBkb2VzbiYjMzk7dCBtYWtlIHNlbnNlLiBJdOKAmXMgYSBnb29kIGNhdGNoIGJlY2F1c2Ugc2V0dGluZyBgTkVUSUZfRl9MT09QQkFDS2AgaXMgdXN1YWxseSBoYW5kbGVkIGluIGBuc2ltX3NldHVwKClgIGZvciBldmVyeSBwb3J0LCBidXQgdGhpcyBpcyBjbGVhcmx5IGFuIGV4Y2VwdGlvbiB3b3J0aCBoYW5kbGluZy4KCkkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYG5zaW1faW5pdF9uZXRkZXZzaW1fdmZgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgbmV0ZGV2c2ltLiBUaGlzIGRyaXZlciBpcyBvZnRlbiB1c2VkIGZvciBzaW11bGF0aW9uIGFuZCB0ZXN0aW5nLCBzbyBJJiMzOTtsbCBjaGVjayBpdHMgcmVhY2hhYmlsaXR5IHdpdGhpbiBjb21tb24gdGVzdCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkuIEl0JiMzOTtzIHR5cGljYWxseSBjb25maWd1cmVkIHZpYSBzeXNmcywgZGV2bGluaywgb3IgcnRuZXRsaW5rLCBwZXJoYXBzIGRlYnVnZnMuIEZpbmFsbHksIEkmIzM5O2xsIHJldmlldyB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBuZXRkZXZzaW0gdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgYW5kIGlmIHRoaXMgY2hhbmdlIGhhcyBhbnkgYnVpbGQtdGltZSBpbXBsaWNhdGlvbnMuIE92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIHRhcmdldGVkIGZpeCBmb3IgYSBsb2dpY2FsIGluY29uc2lzdGVuY3kgaW4gdGhlIFZGIHNldHVwIHdpdGhpbiBuZXRkZXZzaW0sIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSBwZXJmb3JtYW5jZSBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRERVZTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlLTItXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfTkVUREVWU0lNKSAmIzQzOz0gbmV0ZGV2c2ltLm9cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZS00LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgbmV0ZGV2c2ltIEtjb25maWcgYW5kIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXJ0aWN1bGFyIHN1YnN5c3RlbSwgdGhlIHNlbnNpYmxlIGZpcnN0IG1vdmUgaXMgdG8gZXhhbWluZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL0tjb25maWdgLCBhbmQgdGhlbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY2AuIFRoZSBLY29uZmlnIHdpbGwgb3V0bGluZSB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGlzLiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhpcyBzaW11bGF0ZWQgbmV0d29yayBkZXZpY2UgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSBmZWF0dXJlcyB0aGlzIHNpbXVsYXRlZCBkZXZpY2UgaGFzIGFuZCBob3cgdGhleSBhcmUgY29uZmlndXJlZC4KClRoZW4sIEkmIzM5O2xsIG1vdmUgb3ZlciB0byB0aGUgQyBmaWxlLCBgbmV0ZGV2LmNgLCB0byBncmFzcCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkLCBob3cgcGFja2V0cyBhcmUgaGFuZGxlZCAoaWYgYXQgYWxsKSwgdGhlIGRldmljZSBvcGVyYXRpb25zIHRoYXQgYXJlIGRlZmluZWQsIGFuZCBhbnkgaW50ZXJlc3Rpbmcgc2ltdWxhdGlvbiBhc3BlY3RzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLCB0aGUgY29udHJvbCBmbG93LCBhbmQgYW55IGludGVyYWN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgdGhpcyB3aWxsIGJlIG15IGZvY3VzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRlc2lnbiBvZiB0aGUgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlLiBCeSBsb29raW5nIGF0IHRoZXNlIHR3byBrZXkgZmlsZXMsIEkgc2hvdWxkIGdldCBhIHByZXR0eSBnb29kIGhhbmRsZSBvbiB3aGF0IGBuZXRkZXZzaW1gIGlzIGFsbCBhYm91dC4gVGhpcyB3aWxsIGdpdmUgbWUgd2hhdCBJIG5lZWQgZm9yIGEgZ29vZCBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRERVZTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDQ6Y29uZmlnIE5FVERFVlNJTVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDUtXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZToKCioqTmF2aWdhdGluZyB0aGUgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2MDQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IG9wdGlvbnMgYXJlIGluIHRoYXQgYXJlYSBvZiB0aGUgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxpa2VseSBsb29raW5nIGZvciBhIHNwZWNpZmljIGRyaXZlciBmZWF0dXJlIG9yIGEgYnJvYWRlciBuZXR3b3JrIHNldHRpbmcgdGhhdCYjMzk7cyBjYXVzaW5nIG1lIHNvbWUgY29uZnVzaW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBwcm9tcHRzLCBhbmQgaGVscCB0ZXh0IOKAkyBhbnl0aGluZyB0aGF0IGNsYXJpZmllcyB0aGUgaW50ZW50IGFuZCBmdW5jdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyb3VuZCB0aGF0IHNwZWNpZmljIGxpbmUuIEkgaG9wZSBpdCYjMzk7cyB3ZWxsLWNvbW1lbnRlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XG4gNjAxOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L0tjb25maWdcJiMzNDtcbiA2MDI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcJiMzNDtcbiA2MDM6XHRcbiA2MDQ6XHRjb25maWcgTkVUREVWU0lNXG4gNjA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiA2MDY6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbiA2MDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDYwODpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxuIDYwOTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxuIDYxMDpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gNjExOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNjEyOlx0XHRzZWxlY3QgTkVUX1NIQVBFUlxuIDYxMzpcdFx0aGVscFxuIDYxNDpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgYW5kIHNvZnR3YXJlIG1vZGVsIHRoYXQgY2FuXG4gNjE1Olx0XHQgIGJlIHVzZWQgdG8gdGVzdCB2YXJpb3VzIGNvbnRyb2wgcGF0aCBuZXR3b3JraW5nIEFQSXMsIGVzcGVjaWFsbHlcbiA2MTY6XHRcdCAgSFctb2ZmbG9hZCByZWxhdGVkLlxuIDYxNzpcdFxuIDYxODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gNjE5Olx0XHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cbiA2MjA6XHRcbiA2MjE6XHRjb25maWcgTkVUX0ZBSUxPVkVSXG4gNjIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtGYWlsb3ZlciBkcml2ZXJcJiMzNDtcbiA2MjM6XHRcdHNlbGVjdCBGQUlMT1ZFUlxuIDYyNDpcdFx0aGVscFxuIDYyNTpcdFx0ICBUaGlzIHByb3ZpZGVzIGFuIGF1dG9tYXRlZCBmYWlsb3ZlciBtZWNoYW5pc20gdmlhIEFQSXMgdG8gY3JlYXRlXG4gNjI2Olx0XHQgIGFuZCBkZXN0cm95IGEgZmFpbG92ZXIgbWFzdGVyIG5ldGRldiBhbmQgbWFuYWdlcyBhIHByaW1hcnkgYW5kXG4gNjI3Olx0XHQgIHN0YW5kYnkgc2xhdmUgbmV0ZGV2cyB0aGF0IGdldCByZWdpc3RlcmVkIHZpYSB0aGUgZ2VuZXJpYyBmYWlsb3ZlclxuIDYyODpcdFx0ICBpbmZyYXN0cnVjdHVyZS4gVGhpcyBjYW4gYmUgdXNlZCBieSBwYXJhdmlydHVhbCBkcml2ZXJzIHRvIGVuYWJsZVxuIDYyOTpcdFx0ICBhbiBhbHRlcm5hdGUgbG93IGxhdGVuY3kgZGF0YXBhdGguIEl0IGFsc28gZW5hYmxlcyBsaXZlIG1pZ3JhdGlvbiBvZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMDcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIGRldmljZSBkcml2ZXIgZGV2ZWxvcG1lbnQ6CgoqKkRlZXAgRGl2ZTogbmV0ZGV2c2ltIFZGIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIHplcm8gaW4gb24gYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgYW5kIHRha2UgYSBmcmVzaCBsb29rIGFyb3VuZCB0aGUgYG5zaW1faW5pdF9uZXRkZXZzaW1fdmZgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgc3BvdCB3aGVyZSB0aGUgdmlydHVhbCBmdW5jdGlvbiAoVkYpIGluaXRpYWxpemF0aW9uIGZvciB0aGUgbmV0ZGV2c2ltIGRyaXZlciBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVkYgaXMgc2V0IHVwIHdpdGhpbiB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSByZWNlbnQgY2hhbmdlcyB0byB0aGlzIGNvZGU/IEFueSByZWNlbnQgY29tbWl0cz8gV2hhdCBpcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBWRiBjb25maWd1cmF0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBxdWlja2x5IHNjYW5uaW5nIHRoZSBmdW5jdGlvbiBpdHNlbGYgYW5kIHRoZW4gdHJhY2UgYW55IHJlbGF0ZWQgZnVuY3Rpb24gY2FsbHMgdG8gc2VlIGhvdyB0aGUgVkYgaXMgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIGBuZXRkZXZzaW1gIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBldmVuIGJhc2ljIGRldmljZSByZWdpc3RyYXRpb24sIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSB1c3VhbCBjdWxwcml0cyBpbiB0aGVzZSBraW5kcyBvZiBzY2VuYXJpb3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdG5zaW1fYnBmX3VuaW5pdChucyk7XG4xMTAxOlx0ZXJyX3JxX2Rlc3Ryb3k6XG4xMTAyOlx0XHRuc2ltX3F1ZXVlX3VuaW5pdChucyk7XG4xMTAzOlx0ZXJyX3V0bl9kZXN0cm95OlxuMTEwNDpcdFx0cnRubF91bmxvY2soKTtcbjExMDU6XHRcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVx1MDAzZW5ldGRldik7XG4xMTA2Olx0ZXJyX3BoY19kZXN0cm95OlxuMTEwNzpcdFx0bW9ja19waGNfZGVzdHJveShucy1cdTAwM2VwaGMpO1xuMTEwODpcdFx0cmV0dXJuIGVycjtcbjExMDk6XHR9XG4xMTEwOlx0XG4xMTExOlx0c3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuMTExMjpcdHtcbjExMTM6XHRcdGludCBlcnI7XG4xMTE0Olx0XG4xMTE1Olx0XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm5zaW1fdmZfbmV0ZGV2X29wcztcbjExMTY6XHRcbjExMTc6XHRcdC8qIG5zaW1fc2V0dXAoKSBvZmZlcnMgTkVUSUZfRl9MT09QQkFDSyB0byBldmVyeSBwb3J0LCBidXQgYSBWRiBwb3J0XG4xMTE4Olx0XHQgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFuc1xuMTExOTpcdFx0ICogcmVjZWl2aW5nIGl0LlxuMTEyMDpcdFx0ICovXG4xMTIxOlx0XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcbjExMjI6XHRcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH5ORVRJRl9GX0xPT1BCQUNLO1xuMTEyMzpcdFxuMTEyNDpcdFx0cnRubF9sb2NrKCk7XG4xMTI1Olx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtXHUwMDNlbmV0ZGV2KTtcbjExMjY6XHRcdHJ0bmxfdW5sb2NrKCk7XG4xMTI3Olx0XHRyZXR1cm4gZXJyO1xuMTEyODpcdH1cbjExMjk6XHRcbjExMzA6XHRzdGF0aWMgdm9pZCBuc2ltX2V4aXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuMTEzMTpcdHtcbjExMzI6XHRcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVx1MDAzZW5ldGRldik7XG4xMTMzOlx0XHRtb2NrX3BoY19kZXN0cm95KG5zLVx1MDAzZXBoYyk7XG4xMTM0Olx0fVxuMTEzNTpcdFxuMTEzNjpcdHN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4xMTM3Olx0XHRcdFx0ICAgICAgc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQsXG4xMTM4Olx0XHRcdFx0ICAgICAgdTggcGVybV9hZGRyW0VUSF9BTEVOXSlcbjExMzk6XHR7XG4xMTQwOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuMTE0MTpcdFx0c3RydWN0IG5ldGRldnNpbSAqbnM7XG4xMTQyOlx0XHRpbnQgZXJyO1xuMTE0MzpcdFxuMTE0NDpcdFx0ZGV2ID0gYWxsb2NfbmV0ZGV2X21xKHNpemVvZigqbnMpLCBcJiMzNDtldGglZFwmIzM0OywgTkVUX05BTUVfVU5LTk9XTiwgbnNpbV9zZXR1cCxcbjExNDU6XHRcdFx0XHQgICAgICBuc2ltX2Rldi1cdTAwM2Vuc2ltX2J1c19kZXYtXHUwMDNlbnVtX3F1ZXVlcyk7XG4xMTQ2Olx0XHRpZiAoIWRldilcbjExNDc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4xMTQ4Olx0XG4xMTQ5Olx0XHRpZiAocGVybV9hZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTk1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0IHByb2Nlc3NlczoKCioqRGVsdmluZyBpbnRvIE5ldHdvcmsgRGV2aWNlIFNpbXVsYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IG9mIHRoaXMgc2ltdWxhdGlvbiwgcGFydGljdWxhcmx5IGhvdyB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGNyZWF0ZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0d28ga2V5IGZ1bmN0aW9uczogYG5zaW1faW5pdF9uZXRkZXZzaW1fdmZgIGFuZCBgbnNpbV9jcmVhdGVgLiBJIHdhbnQgdG8ga25vdywgdW5lcXVpdm9jYWxseSwgKndoZXJlKiBpbiB0aGUgY29kZSB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBiZWluZyBjYWxsZWQuIFRoYXQgd2lsbCBwcm92aWRlIHRoZSBjcml0aWNhbCBjb250ZXh0IEkgbmVlZCB0byBncmFzcCBob3cgdGhlIHNpbXVsYXRlZCBuZXR3b3JrIGRldmljZXMgYXJlIGludGVncmF0ZWQgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgb2YgdGhpcyBuZXR3b3JrIHNpbXVsYXRpb24uIEZpbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSB0aGUgZmlyc3QgZXNzZW50aWFsIHN0ZXAgaW4gdHJ1bHkgdW5kZXJzdGFuZGluZyB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnNpbV9pbml0X25ldGRldnNpbV92Znxuc2ltX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTM4MD1zdGF0aWMgaW50IF9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQzMy1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDM0Olx0bnNpbV9kZXZfcG9ydC1cdTAwM2VucyA9IG5zaW1fY3JlYXRlKG5zaW1fZGV2LCBuc2ltX2Rldl9wb3J0LCBwZXJtX2FkZHIpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0MzUtXHRpZiAoSVNfRVJSKG5zaW1fZGV2X3BvcnQtXHUwMDNlbnMpKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTQwNT1zdGF0aWMgaW50IG5zaW1fcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTQxNi1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzo0MTc6c3RhdGljIGludCBuc2ltX2NyZWF0ZV9wYWdlX3Bvb2woc3RydWN0IHBhZ2VfcG9vbCAqKnAsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy00MTgte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz00Mzg9c3RhdGljIGludCBuc2ltX2luaXRfbmFwaShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNDUyLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjQ1MzpcdFx0ZXJyID0gbnNpbV9jcmVhdGVfcGFnZV9wb29sKFx1MDAyNnJxLVx1MDAzZXBhZ2VfcG9vbCwgXHUwMDI2cnEtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNDU0LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz03NTE9bnNpbV9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNzY0LVx0XHRcdHJldHVybiAtRU5FVERPV047XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NzY1Olx0XHRyZXR1cm4gbnNpbV9jcmVhdGVfcGFnZV9wb29sKFx1MDAyNnFtZW0tXHUwMDNlcHAsIFx1MDAyNm5zLVx1MDAzZXJxW2lkeF0tXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNzY2LVx0fVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy03NzEtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NzcyOlx0ZXJyID0gbnNpbV9jcmVhdGVfcGFnZV9wb29sKFx1MDAyNnFtZW0tXHUwMDNlcnEtXHUwMDNlcGFnZV9wb29sLCBcdTAwMjZxbWVtLVx1MDAzZXJxLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTc3My1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTEwNDA9c3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTEwLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjExMTE6c3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExMTIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMTMwPXN0YXRpYyB2b2lkIG5zaW1fZXhpdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExMzUtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTEzNjpzdHJ1Y3QgbmV0ZGV2c2ltICpuc2ltX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExMzctXHRcdFx0ICAgICAgc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExNjMtXHRlbHNlXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTE2NDpcdFx0ZXJyID0gbnNpbV9pbml0X25ldGRldnNpbV92Zihucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE2NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTEwNz1zdHJ1Y3QgbmV0ZGV2c2ltIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTY1LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE2NjpzdHJ1Y3QgbmV0ZGV2c2ltICpuc2ltX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE2Ny1cdFx0XHQgICAgICBzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXRkZXZzaW0gQnVnZml4IGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBuc2ltX2NyZWF0ZSgpYCBpcyB0aGUgZW50cnkgcG9pbnQsIGNhbGxlZCB3aGVuIGNyZWF0aW5nIGEgcG9ydCB3aXRoaW4gdGhlIG5ldGRldnNpbSBkcml2ZXIuIFRoYXTigJlzIHVzdWFsbHkgZG9uZSB0aHJvdWdoIGBkZXZsaW5rYCBvciBkaXJlY3QgaW50ZXJhY3Rpb24gdmlhIHN5c2ZzLCByaWdodD8gTmV0ZGV2c2ltLCBvZiBjb3Vyc2UsIGlzIHRoYXQgYmVhdXRpZnVsIHZpcnR1YWwgbW9jayBkcml2ZXIgaW4gdGhlIExpbnV4IGtlcm5lbCDigJMgcGVyZmVjdCBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gTm8gcGh5c2ljYWwgaGFyZHdhcmUgbmVlZGVkLCBhIGRyZWFtIGNvbWUgdHJ1ZSEKClRoZSBjcml0aWNhbCBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKClgLiBJdCYjMzk7cyByZW1vdmluZyBgTkVUSUZfRl9MT09QQkFDS2AgZnJvbSB0aGUgYGh3X2ZlYXR1cmVzYCBhbmQgYGZlYXR1cmVzYCBsaXN0cy4gQWgsIHJpZ2h0LCBiZWNhdXNlIGBuc2ltX3NldHVwKClgICpzZXRzKiBsb29wYmFjaywgYnV0IGEgdmlydHVhbCBmdW5jdGlvbiAoVkYpIHBvcnQgaW4gbmV0ZGV2c2ltIGRvZXNuJiMzOTt0IGhhdmUgaXRzIG93biBxdWV1ZXMgb3IgTkFQSS4gTG9vcGluZyBiYWNrIGEgZnJhbWUgaGVyZSBpcyBhc2tpbmcgZm9yIHRyb3VibGUg4oCTIHByb2JhYmx5IGEgY3Jhc2ggb3Igc29tZSBuYXN0eSB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiB5b3UgdHJ5IHRvIHNlbmQgYSBmcmFtZSB3aXRoIGxvb3BiYWNrIGVuYWJsZWQgb24gYSBWRiBpbnRlcmZhY2UgaW4gbmV0ZGV2c2ltLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBidWdmaXguCgpUaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nICptb3JlKj8gQWJzb2x1dGVseS4gTmV0ZGV2c2ltIGlzIGFscmVhZHkgYSBwcmltZSB0YXJnZXQsIGFuZCB0aGlzIGZpeCBoaWdobGlnaHRzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24uIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIGBuc2ltX2NyZWF0ZWAgaXMgYW4gb2J2aW91cyBjaG9pY2Ugc2luY2UgaXQmIzM5O3MgdGhlIG1haW4gZW50cnkuIFRoZW4sIEkgc2hvdWxkIGxvb2sgYXQgYG5zaW1fZGV2X3BvcnRfYWRkYCAoYW5kIGl0cyBpbnRlcm5hbCBgX19uc2ltX2Rldl9wb3J0X2FkZGAgY291bnRlcnBhcnQpLCBhbmQgZGVmaW5pdGVseSBgbnNpbV9pbml0X25ldGRldnNpbV92ZmAgd2hpY2ggaXMgdGhlIHN0YXRpYyBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIHVwZGF0ZWQuIFNpbmNlIEkmIzM5O20gaW4gaGVyZSwgSSYjMzk7bGwgZ28gYmFjayBhbmQgY2hlY2sgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiBgZGV2LmNgIGFuZCBgbmV0ZGV2LmNgIGFzIHdlbGwuIExldOKAmXMgZ2V0IHRvIHdvcmshCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25zaW1fZGV2X3BvcnRfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz01NzM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjU3NDpfX25zaW1fZGV2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNTc1LVx0XHQgICAgdW5zaWduZWQgaW50IHBvcnRfaW5kZXgsIHU4IHBlcm1fYWRkcltFVEhfQUxFTl0pO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz01OTI9c3RhdGljIGludCBuc2ltX2Vzd19zd2l0Y2hkZXZfZW5hYmxlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTU5OC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5zaW1fZGV2X2dldF92ZnMobnNpbV9kZXYpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjU5OTpcdFx0ZXJyID0gX19uc2ltX2Rldl9wb3J0X2FkZChuc2ltX2RldiwgTlNJTV9ERVZfUE9SVF9UWVBFX1ZGLCBpLCBOVUxMKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02MDAtXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTM1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIG5zaW1fZGV2X2Rldmxpbmtfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMzc5LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjEzODA6c3RhdGljIGludCBfX25zaW1fZGV2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTM4MS1cdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHBvcnRfaW5kZXgsIHU4IHBlcm1fYWRkcltFVEhfQUxFTl0pXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE0ODA9c3RhdGljIHZvaWQgbnNpbV9kZXZfcG9ydF9kZWxfYWxsKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0ODgtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTQ4OTpzdGF0aWMgaW50IG5zaW1fZGV2X3BvcnRfYWRkX2FsbChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0OTAtXHRcdFx0XHQgdW5zaWduZWQgaW50IHBvcnRfY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0OTQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0X2NvdW50OyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE0OTU6XHRcdGVyciA9IF9fbnNpbV9kZXZfcG9ydF9hZGQobnNpbV9kZXYsIE5TSU1fREVWX1BPUlRfVFlQRV9QRiwgaSwgTlVMTCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQ5Ni1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTUwNj1zdGF0aWMgaW50IG5zaW1fZGV2X3JlbG9hZF9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU0Ni1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNTQ3Olx0ZXJyID0gbnNpbV9kZXZfcG9ydF9hZGRfYWxsKG5zaW1fZGV2LCBuc2ltX2J1c19kZXYtXHUwMDNlcG9ydF9jb3VudCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU0OC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE1NzM9aW50IG5zaW1fZHJ2X3Byb2JlKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2Rldilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTY1NS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNjU2Olx0ZXJyID0gbnNpbV9kZXZfcG9ydF9hZGRfYWxsKG5zaW1fZGV2LCBuc2ltX2J1c19kZXYtXHUwMDNlcG9ydF9jb3VudCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTY1Ny1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE3NTQ9aW50IG5zaW1fZHJ2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc2My1cdGVsc2VcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNzY0Olx0XHRlcnIgPSBfX25zaW1fZGV2X3BvcnRfYWRkKG5zaW1fZGV2LCB0eXBlLCBwb3J0X2luZGV4LCBwZXJtX2FkZHIpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE3NjUtXHRkZXZsX3VubG9jayhwcml2X3RvX2RldmxpbmsobnNpbV9kZXYpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM4OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbmV0ZGV2c2ltYCBGdW5jdGlvbiBTY29wZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBuZXRkZXZzaW1gLiBJIG5lZWQgdG8gc3RhcnQgYnkgY29uZmlybWluZyB0aGUgc2NvcGUgb2YgYG5zaW1fZHJ2X3BvcnRfYWRkYCBhbmQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYCB3aXRoaW4gdGhhdCBtb2R1bGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VycHJpc2luZyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgb3IgdW5pbnRlbmRlZCBnbG9iYWwgYWNjZXNzIGdvaW5nIG9uIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIGZvciBhIGNvbnRyb2xsZWQsIGludGVybmFsLXRvLXRoZS1kcml2ZXIgdXNhZ2UsIG9yIGlmIHRoZXJlJiMzOTtzIGEgYnJvYWRlciwgcGVyaGFwcyB1bmludGVuZGVkLCBleHBvc3VyZSB0byBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBvciBldmVuIHVzZXIgc3BhY2UgdGhhdCBuZWVkcyB0byBiZSBzY3J1dGluaXplZC4gVW5kZXJzdGFuZGluZyB0aGUgYWNjZXNzIHBhdGhzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBtb2R1bGUmIzM5O3Mgb3ZlcmFsbCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIGFuZCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBtYWludGVuYW5jZSBpc3N1ZXMuIFRoaXMgaXMgYSBzdGFuZGFyZCBwcm9jZWR1cmUgd2hlbiByZXZpZXdpbmcgYW55IG5ldHdvcmtpbmcgZHJpdmVyIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgbnNpbV98XnN0cnVjdCBuZXRkZXZzaW0gXFwqbnNpbV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jPTEwND1uc2ltX2JwZl9vZmZsb2FkKHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGJvb2wgb2xkcHJvZylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtMTE3LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jOjExODppbnQgbnNpbV9icGZfc2V0dXBfdGNfYmxvY2tfY2IoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtMTE5LVx0XHRcdCAgICAgICB2b2lkICp0eXBlX2RhdGEsIHZvaWQgKmNiX3ByaXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jLTE2Ni1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYzoxNjc6aW50IG5zaW1fYnBmX2Rpc2FibGVfdGMoc3RydWN0IG5ldGRldnNpbSAqbnMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtMTY4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmM9NTM0PXN0YXRpYyB2b2lkIG5zaW1fYnBmX21hcF9mcmVlKHN0cnVjdCBicGZfb2ZmbG9hZGVkX21hcCAqb2ZmbWFwKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy01NDctXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmM6NTQ4OmludCBuc2ltX2JwZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ZGV2X2JwZiAqYnBmKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jLTU0OS17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jLTU4MC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYzo1ODE6aW50IG5zaW1fYnBmX2Rldl9pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtNTgyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmM9NjA5PXZvaWQgbnNpbV9icGZfZGV2X2V4aXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtNjE1LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jOjYxNjppbnQgbnNpbV9icGZfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy02MTcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYz00OTE9c3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG5zaW1fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00OTYtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDk3OmludCBuc2ltX2J1c19pbml0KHZvaWQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDk4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTUwNj1zdGF0aWMgaW50IG5zaW1fZGV2X3JlbG9hZF9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU3Mi1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNTczOmludCBuc2ltX2Rydl9wcm9iZShzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU3NC17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE3NDI9X19uc2ltX2Rldl9wb3J0X2xvb2t1cChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNzUzLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE3NTQ6aW50IG5zaW1fZHJ2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNzU1LVx0XHQgICAgICB1bnNpZ25lZCBpbnQgcG9ydF9pbmRleCwgdTggcGVybV9hZGRyW0VUSF9BTEVOXSlcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc2OC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNzY5OmludCBuc2ltX2Rydl9wb3J0X2RlbChzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc3MC1cdFx0ICAgICAgdW5zaWduZWQgaW50IHBvcnRfaW5kZXgpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE3ODUtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTc4NjppbnQgbnNpbV9kcnZfY29uZmlndXJlX3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc4Ny1cdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3Zmcylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTgyMy1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODI0OmludCBuc2ltX2Rldl9pbml0KHZvaWQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTgyNS17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2hlYWx0aC5jPTE3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX2Rldl9oZWFsdGhfYnJlYWtfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaGVhbHRoLmMtMTc3LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2hlYWx0aC5jOjE3ODppbnQgbnNpbV9kZXZfaGVhbHRoX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldiwgc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaGVhbHRoLmMtMTc5LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaHdzdGF0cy5jPTM5OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5zaW1fZGV2X2h3c3RhdHNfZm9wcyBuc2ltX2Rldl9od3N0YXRzX2wzX2ZhaWxfZm9wcyA9XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2h3c3RhdHMuYy00MDMtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaHdzdGF0cy5jOjQwNDppbnQgbnNpbV9kZXZfaHdzdGF0c19pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaHdzdGF0cy5jLTQwNS17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTExMzA9c3RhdGljIHZvaWQgbnNpbV9leGl0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTEzNS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMTM2OnN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTEzNy1cdFx0XHQgICAgICBzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MTA3PXN0cnVjdCBuZXRkZXZzaW0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0xNjUtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MTY2OnN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTY3LVx0XHRcdCAgICAgIHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xNzU9dm9pZCBuc2ltX3VkcF90dW5uZWxzX2RlYnVnZnNfY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE3NjppbnQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE3Ny1cdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xNzg9dm9pZCBuc2ltX3VkcF90dW5uZWxzX2luZm9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTgwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoxODE6aW50IG5zaW1fYnBmX2Rldl9pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE4Mi12b2lkIG5zaW1fYnBmX2Rldl9leGl0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE4MzppbnQgbnNpbV9icGZfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTg0LXZvaWQgbnNpbV9icGZfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoxODU6aW50IG5zaW1fYnBmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICpicGYpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE4NjppbnQgbnNpbV9icGZfZGlzYWJsZV90YyhzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MTg3OmludCBuc2ltX2JwZl9zZXR1cF90Y19ibG9ja19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0xODgtXHRcdFx0ICAgICAgIHZvaWQgKnR5cGVfZGF0YSwgdm9pZCAqY2JfcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTI0MT1zdHJ1Y3QgbnNpbV9kZXZfaGVhbHRoIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjQ5LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjI1MDppbnQgbnNpbV9kZXZfaGVhbHRoX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldiwgc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTI1MS12b2lkIG5zaW1fZGV2X2hlYWx0aF9leGl0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0yNjE9c3RydWN0IG5zaW1fZGV2X2h3c3RhdHMge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0yNzEtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MjcyOmludCBuc2ltX2Rldl9od3N0YXRzX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjczLXZvaWQgbnNpbV9kZXZfaHdzdGF0c19leGl0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0yNzUtI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTQU1QTEUpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6Mjc2OmludCBuc2ltX2Rldl9wc2FtcGxlX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjc3LXZvaWQgbnNpbV9kZXZfcHNhbXBsZV9leGl0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0zODM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpuc2ltX2Rldl9uZXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMzg3LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjM4ODppbnQgbnNpbV9kZXZfaW5pdCh2b2lkKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0zODktdm9pZCBuc2ltX2Rldl9leGl0KHZvaWQpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjM5MDppbnQgbnNpbV9kcnZfcHJvYmUoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2KTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0zOTEtdm9pZCBuc2ltX2Rydl9yZW1vdmUoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2KTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDozOTI6aW50IG5zaW1fZHJ2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0zOTMtXHRcdCAgICAgIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTM5NC1cdFx0ICAgICAgdTggcGVybV9hZGRyW0VUSF9BTEVOXSk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6Mzk1OmludCBuc2ltX2Rydl9wb3J0X2RlbChzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMzk2LVx0XHQgICAgICBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTM5Ny1cdFx0ICAgICAgdW5zaWduZWQgaW50IHBvcnRfaW5kZXgpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjM5ODppbnQgbnNpbV9kcnZfY29uZmlndXJlX3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMzk5LVx0XHRcdCAgIHVuc2lnbmVkIGludCBudW1fdmZzKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDQ1PXN0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX21hY3NlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDUwLSNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTE6aW50IG5zaW1fcHNwX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1Mi12b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ2OD1uc2ltX3BzcF9oYW5kbGVfZXh0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0KSB7fVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NzAtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDcxOmludCBuc2ltX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ3Mi1cdFx0ICB2b2lkICp0eXBlX2RhdGEpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NzU9c3RydWN0IG5zaW1fYnVzX2RldiB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ4Ni1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0ODc6aW50IG5zaW1fYnVzX2luaXQodm9pZCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDg4LXZvaWQgbnNpbV9idXNfZXhpdCh2b2lkKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jPTE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX3BzYW1wbGVfZW5hYmxlX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzYW1wbGUuYy0xOTctXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jOjE5ODppbnQgbnNpbV9kZXZfcHNhbXBsZV9pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jLTE5OS17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTI2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX3BzcF9yZXJlZ19mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzMtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6Mjc0OmludCBuc2ltX3BzcF9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI3NS17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmM9MTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19yZXNldF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jLTEyNC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jOjEyNTppbnQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmMtMTI2LVx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDQ1CgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBORVRERVZTSU0gQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZCBmb3IgYE5FVERFVlNJTWAuIExvb2tpbmcgYXQgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLCBpdCBsb29rcyBsaWtlIEkgbmVlZCBgTkVUREVWU0lNYCBpdHNlbGYsIG5hdHVyYWxseSwgYnV0IGFsc28gYERFQlVHX0ZTYCBhbmQgYElORVRgLiBJIHNlZSBhIGNvdXBsZSBvZiBkZXBlbmRlbmNpZXMsIGBQU0FNUExFYCBhbmQgYFBUUF8xNTg4X0NMT0NLX01PQ0tgLCBidXQgdGhvc2UgY2FuIGJlIGRpc2FibGVkIHNpbmNlIEkgZG9uJiMzOTt0IG5lZWQgdGhlbSBmb3IgbXkgY3VycmVudCBuZWVkcy4gVGhlcmUgYXJlIHNvbWUgYHNlbGVjdGAgZGlyZWN0aXZlcywgYE5FVF9ERVZMSU5LYCwgYFBBR0VfUE9PTGAsIGFuZCBgTkVUX1NIQVBFUmAsIHdoaWNoIHNob3VsZCBiZSBmaW5lLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBsaXN0IGFnYWluc3QgYW55IG90aGVyIHJlbGV2YW50IGZpbGVzIG9yIGNvbmZpZ3VyYXRpb25zLiBKdXN0IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlLCBgREVCVUdfRlNgIGFuZCBgTkVUREVWU0lNYCBhcmUgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLgoKSSBzaG91bGQgbWFrZSBzdXJlIHRoZXNlIGZvY3VzIHN5bWJvbHMgYXJlIGNvbnNpZGVyZWQ6IGBuc2ltX2NyZWF0ZWAsIGBuc2ltX2Rydl9wb3J0X2FkZGAsIGFuZCBgbnNpbV9kcnZfcHJvYmVgLCBlc3BlY2lhbGx5IGluIGNvbnRleHQgb2YgdGhhdCBwYXRjaC4KCkFscmlnaHQsIG9uZSBmaW5hbCBzd2VlcC4gSSBuZWVkIHRvIG5vdGUgdGhhdCB0aGlzIHBhdGNoIGlzIHdvcnRod2hpbGUgdG8gZnV6eiwgYXMgaXQgaXMgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIGEgbmV0d29yayBkZXZpY2UgYW5kIHRodXMgcG90ZW50aWFsbHkgYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBuc2ltX2NyZWF0ZWAgYW5kIGBuc2ltX2Rydl9wb3J0X2FkZGAgc3BlY2lmaWNhbGx5LiBUaGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgSSBuZWVkIGFyZSBgTkVUREVWU0lNYCwgYERFQlVHX0ZTYCwgYW5kIGBJTkVUYC4KClRoZSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSBwYXRjaCBtb2RpZmllcyBgbnNpbV9pbml0X25ldGRldnNpbV92ZigpYCB3aGljaCBpcyBpbnZva2VkIHZpYSBgbnNpbV9jcmVhdGUoKWAgYW5kIGFmZmVjdHMgdGhlIG5ldGRldnNpbSBkZXZpY2UgY29uZmlndXJhdGlvbiBhbmQgbmV0d29yayBzdGFjayBwYWNrZXQgaGFuZGxpbmcgZm9yIHZpcnR1YWwgc2ltdWxhdGVkIG5ldGRldnMgYnkgcmVtb3ZpbmcgbG9vcGJhY2sgZmxhZ3MgZnJvbSBuZXRkZXZzaW0gVkYgcG9ydHMuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCByZWdhcmRpbmcgVkYgY29uZmlndXJhdGlvbiBhbmQgaG93IHNpbXVsYXRlZCBwYWNrZXRzIGFyZSBoYW5kbGVkIGluIFZGIGVudmlyb25tZW50cy4gSSB0aGluayBJJiMzOTttIGdvb2QgdG8gZ28uCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnNpbV9jcmVhdGUmIzM0OywKICAgICYjMzQ7bnNpbV9kcnZfcG9ydF9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgTkVUSUZfRl9MT09QQkFDSyBmZWF0dXJlIGFuZCBod19mZWF0dXJlcyBmbGFnIGZyb20gbmV0ZGV2c2ltIFZGIHBvcnRzIGR1cmluZyBpbml0aWFsaXphdGlvbiBpbiBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKCkgdG8gcHJldmVudCBwYWNrZXRzIGZyb20gYmVpbmcgbG9vcGVkIGJhY2sgdG8gYSBWRiBwb3J0IGxhY2tpbmcgcXVldWVzIGFuZCBOQVBJLiBUaGlzIGRpcmVjdGx5IG1vZGlmaWVzIHNpbXVsYXRlZCBuZXRkZXYgZmVhdHVyZSBjb25maWd1cmF0aW9uIGFuZCBpcyByZWFjaGFibGUgdmlhIG5ldGRldnNpbSBwb3J0IHNldHVwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fY3JlYXRlJiMzNDssCiAgICAmIzM0O25zaW1fZHJ2X3BvcnRfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIE5FVElGX0ZfTE9PUEJBQ0sgZmVhdHVyZSBhbmQgaHdfZmVhdHVyZXMgZmxhZyBmcm9tIG5ldGRldnNpbSBWRiBwb3J0cyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gbnNpbV9pbml0X25ldGRldnNpbV92ZigpIHRvIHByZXZlbnQgcGFja2V0cyBmcm9tIGJlaW5nIGxvb3BlZCBiYWNrIHRvIGEgVkYgcG9ydCBsYWNraW5nIHF1ZXVlcyBhbmQgTkFQSS4gVGhpcyBkaXJlY3RseSBtb2RpZmllcyBzaW11bGF0ZWQgbmV0ZGV2IGZlYXR1cmUgY29uZmlndXJhdGlvbiBhbmQgaXMgcmVhY2hhYmxlIHZpYSBuZXRkZXZzaW0gcG9ydCBzZXR1cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNDo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgZGlzYWJsZXMgdGhlIE5FVElGX0ZfTE9PUEJBQ0sgZmVhdHVyZSBmbGFnIG9uIG5ldGRldnNpbSBWRiBkZXZpY2VzIChjbGVhcmluZyBiaXRzIGluIGh3X2ZlYXR1cmVzIGFuZCBmZWF0dXJlcykuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgaW50cm9kdWNlIHBhZGRpbmcgaXNzdWVzLCBvciBjaGFuZ2UgYnVmZmVyIGxlbmd0aCBoYW5kbGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4YTdhZWQzNWJhOTc1NjU4YjdmNWEwNzM0Njk3OTI0YzAzNjdkODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwNDo1NjozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYwppbmRleCBiNGE5OWYzY2VhYzYwLi43YmI3MmFlYTkwYTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCkBAIC0xMTEzLDYgJiM0MzsxMTEzLDE0IEBAIHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbV92ZihzdHJ1Y3QgbmV0ZGV2c2ltICpucykKIAlpbnQgZXJyOwogCiAJbnMtJmd0O25ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bnNpbV92Zl9uZXRkZXZfb3BzOwomIzQzOwomIzQzOwkvKiBuc2ltX3NldHVwKCkgb2ZmZXJzIE5FVElGX0ZfTE9PUEJBQ0sgdG8gZXZlcnkgcG9ydCwgYnV0IGEgVkYgcG9ydAomIzQzOwkgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFucwomIzQzOwkgKiByZWNlaXZpbmcgaXQuCiYjNDM7CSAqLwomIzQzOwlucy0mZ3Q7bmV0ZGV2LSZndDtod19mZWF0dXJlcyAmYW1wOz0gfk5FVElGX0ZfTE9PUEJBQ0s7CiYjNDM7CW5zLSZndDtuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7PSB+TkVUSUZfRl9MT09QQkFDSzsKJiM0MzsKIAlydG5sX2xvY2soKTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtJmd0O25ldGRldik7CiAJcnRubF91bmxvY2soKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRkZXZzaW0gVmlydHVhbCBGdW5jdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jYC4gSXQgc2VlbXMgdGhleSYjMzk7cmUgbWFraW5nIGEgY2hhbmdlIHJlbGF0ZWQgdG8gdGhlIHZpcnR1YWwgZnVuY3Rpb24gKFZGKSBwb3J0IHdpdGhpbiB0aGUgbmV0ZGV2c2ltIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBoYW5kbGluZyB0aGUgYE5FVElGX0ZfTE9PUEJBQ0tgIGZlYXR1cmUuIFRoZSBkaWZmIGhpZ2hsaWdodHMgdGhhdCB0aGUgVkYgcG9ydCwgdW5saWtlIHRoZSBtYWluIG5ldGRldnNpbSBkZXZpY2UsIGRvZXNuJiMzOTt0IGFjdHVhbGx5IGhhdmUgcXVldWVzIG9yIE5BUEksIGFuZCB0aGVyZWZvcmUsIHNob3VsZG4mIzM5O3QgYmUgYWR2ZXJ0aXNpbmcgb3IgaW1wbGVtZW50aW5nIGxvb3BiYWNrIGZ1bmN0aW9uYWxpdHkuCgpUaGUga2V5IGxpbmVzIGFyZSB3aGVyZSB0aGUgY29kZSBpcyBjbGVhcmluZyB0aGUgYE5FVElGX0ZfTE9PUEJBQ0tgIGJpdCBmcm9tIGJvdGggYG5zLSZndDtuZXRkZXYtJmd0O2h3X2ZlYXR1cmVzYCBhbmQgYG5zLSZndDtuZXRkZXYtJmd0O2ZlYXR1cmVzYC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBlbmFibGluZyBsb29wYmFjayBvbiBhIFZGIHdvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciwgYXMgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGFjdHVhbGx5ICYjMzQ7bG9vcCYjMzQ7IGEgZnJhbWUgYmFjayB0byBpdHNlbGYgaW4gdGhpcyBjb250ZXh0LiBJdCB3b3VsZCBiZSByZWNlaXZlZCwgd2hpY2ggaXMgbm90IGRlc2lyZWQgZnVuY3Rpb25hbGl0eSwgYW5kIGNvdWxkIGNhdXNlIGNvbmZ1c2luZyBpc3N1ZXMuCgpUaGUgcGF0Y2ggc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBjb3JyZWN0LiBSZW1vdmluZyB0aGUgbG9vcGJhY2sgZmVhdHVyZSBwcmV2ZW50cyB1bmludGVuZGVkIGJlaGF2aW9yIHRoYXQgY291bGQgcmVzdWx0IGZyb20gdGhlIG1pc21hdGNoIGJldHdlZW4gdGhlIGFkdmVydGlzZWQgY2FwYWJpbGl0aWVzIGFuZCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBWRi4gSSYjMzk7ZCB3YW50IHRvIGNoZWNrLCBvZiBjb3Vyc2UsIHRoYXQgdGhpcyBpcyB0aGUgb25seSBwbGFjZSBsb29wYmFjayBpcyBiZWluZyBhZHZlcnRpc2VkIGZvciBhIFZGLCBidXQgdGhpcyBjaGFuZ2UgaXRzZWxmIGFwcGVhcnMgc291bmQgYW5kIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdG5zaW1fYnBmX3VuaW5pdChucyk7XG4xMTAxOlx0ZXJyX3JxX2Rlc3Ryb3k6XG4xMTAyOlx0XHRuc2ltX3F1ZXVlX3VuaW5pdChucyk7XG4xMTAzOlx0ZXJyX3V0bl9kZXN0cm95OlxuMTEwNDpcdFx0cnRubF91bmxvY2soKTtcbjExMDU6XHRcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVx1MDAzZW5ldGRldik7XG4xMTA2Olx0ZXJyX3BoY19kZXN0cm95OlxuMTEwNzpcdFx0bW9ja19waGNfZGVzdHJveShucy1cdTAwM2VwaGMpO1xuMTEwODpcdFx0cmV0dXJuIGVycjtcbjExMDk6XHR9XG4xMTEwOlx0XG4xMTExOlx0c3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuMTExMjpcdHtcbjExMTM6XHRcdGludCBlcnI7XG4xMTE0Olx0XG4xMTE1Olx0XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm5zaW1fdmZfbmV0ZGV2X29wcztcbjExMTY6XHRcbjExMTc6XHRcdC8qIG5zaW1fc2V0dXAoKSBvZmZlcnMgTkVUSUZfRl9MT09QQkFDSyB0byBldmVyeSBwb3J0LCBidXQgYSBWRiBwb3J0XG4xMTE4Olx0XHQgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFuc1xuMTExOTpcdFx0ICogcmVjZWl2aW5nIGl0LlxuMTEyMDpcdFx0ICovXG4xMTIxOlx0XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcbjExMjI6XHRcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH5ORVRJRl9GX0xPT1BCQUNLO1xuMTEyMzpcdFxuMTEyNDpcdFx0cnRubF9sb2NrKCk7XG4xMTI1Olx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtXHUwMDNlbmV0ZGV2KTtcbjExMjY6XHRcdHJ0bmxfdW5sb2NrKCk7XG4xMTI3Olx0XHRyZXR1cm4gZXJyO1xuMTEyODpcdH1cbjExMjk6XHRcbjExMzA6XHRzdGF0aWMgdm9pZCBuc2ltX2V4aXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuMTEzMTpcdHtcbjExMzI6XHRcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVx1MDAzZW5ldGRldik7XG4xMTMzOlx0XHRtb2NrX3BoY19kZXN0cm95KG5zLVx1MDAzZXBoYyk7XG4xMTM0Olx0fVxuMTEzNTpcdFxuMTEzNjpcdHN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4xMTM3Olx0XHRcdFx0ICAgICAgc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQsXG4xMTM4Olx0XHRcdFx0ICAgICAgdTggcGVybV9hZGRyW0VUSF9BTEVOXSlcbjExMzk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzgKCQkJCQkJCW91dHB1dDogMTA3CgkJCQkJCQl0aG91Z2h0czogMzkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGRldnNpbSBWRiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gdGhlIGBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKClgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIE5ldGRldnNpbSBWRiBwb3J0cy4gVGhlIGNvcmUgY2hhbmdlIGlzIHNpbXBsZTogaXQgKnJlbW92ZXMqIHRoZSBgTkVUSUZfRl9MT09QQkFDS2AgZmVhdHVyZSBmbGFnIGZyb20gYm90aCBgaHdfZmVhdHVyZXNgIGFuZCBgZmVhdHVyZXNgIGZvciB0aGVzZSBWRiBwb3J0cy4gVGhlIGxvZ2ljIGhlcmUgaXMgY2xlYXI6IFZGIHBvcnRzLCB1bmxpa2UgdGhlaXIgc3RhbmRhcmQgY291bnRlcnBhcnRzLCBsYWNrIHF1ZXVlcyBhbmQgTkFQSSBzdXBwb3J0LgoKSSByZW1lbWJlciBub3csIHRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgYmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBgbnNpbV9zZXR1cCgpYCBmdW5jdGlvbiB3YXMgZW5hYmxpbmcgYE5FVElGX0ZfTE9PUEJBQ0tgLiBJZiB0aGF0IGZsYWcgcmVtYWluZWQgYWN0aXZlIG9uIHRoZSBWRiwgYW55IGF0dGVtcHQgdG8gdXNlIGxvb3BiYWNrIG9uIGEgcG9ydCB3aXRob3V0IHRoZSBhcHByb3ByaWF0ZSBxdWV1ZWluZyBvciBOQVBJIGluZnJhc3RydWN0dXJlIHdhcyBhIHJlY2lwZSBmb3IgZGlzYXN0ZXIg4oCTIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gY3Jhc2hlcywgZGVyZWZlcmVuY2VzLCBvciBldmVuIHBhbmljcyByZWxhdGVkIHRvIHRoZSBxdWV1ZSBsb2dpYywgYXMgbXkgZXhwZXJpZW5jZSBzaG93cy4KCk5vdywgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSB1c3VhbCByaXNrIGFuYWx5c2lzOgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZS4gTm8gY2hhbmdlcyB0byB0aGUgc3RydWN0dXJlIGxheW91dCB0aGF0IG1pZ2h0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIGZpZWxkcy4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm90IGEgZmFjdG9yIGhlcmUuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGEgZGlyZWN0IGZsYWcgbWFuaXB1bGF0aW9uLgozLiAgQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBObyBjb25jZXJucy4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIHBhdGNoIG9ubHkgc2V0cyAvIGNsZWFycyBhIHNpbmdsZSBmZWF0dXJlIGZsYWcuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGNsZWFuLCBzdXJnaWNhbCByZW1vdmFsIG9mIGEgZmVhdHVyZSBiaXQuIE5vIG1lbW9yeSBpcyBiZWluZyBpbml0aWFsaXplZCwgYWxsb2NhdGVkLCBvciBtb2RpZmllZCBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgYW55IG5ldyByaXNrcy4gVGhpcyBwYXRjaCBpcyBsb3ctcmlzay4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIEtBU0FOL0tNU0FOIGltcGxpY2F0aW9ucy4gU3RhbmRhcmQgS0FTQU4gdGVzdGluZyBpcyBvYnZpb3VzbHkgYXBwbGljYWJsZSBhbmQgaW1wb3J0YW50IGZvciBuZXRkZXYgY29uZmlndXJhdGlvbiwgZmVhdHVyZSBmbGFncywgcGFja2V0IHBhdGhzLCBhbmQgaW50ZXJmYWNlIGxpZmVjeWNsZSwgYnV0IEtNU0FOLCB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3IsIGlzIG5vdC4gVGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBhIHNpbXBsZSBmbGFnOyB0aGVyZSBhcmUgbm8gbWVtb3J5IGJ1ZmZlcnMgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGJlaW5nIG1vZGlmaWVkLgoKTG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgY29ycmVjdCBmaXgsIGFzIGZhciBhcyBJIGNhbiBzZWUuIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3Mgc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGRpc2FibGVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgZmxhZyBvbiBuZXRkZXZzaW0gVkYgZGV2aWNlcyAoY2xlYXJpbmcgYml0cyBpbiBod19mZWF0dXJlcyBhbmQgZmVhdHVyZXMpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGludHJvZHVjZSBwYWRkaW5nIGlzc3Vlcywgb3IgY2hhbmdlIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBkaXNhYmxlcyB0aGUgTkVUSUZfRl9MT09QQkFDSyBmZWF0dXJlIGZsYWcgb24gbmV0ZGV2c2ltIFZGIGRldmljZXMgKGNsZWFyaW5nIGJpdHMgaW4gaHdfZmVhdHVyZXMgYW5kIGZlYXR1cmVzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBpbnRyb2R1Y2UgcGFkZGluZyBpc3N1ZXMsIG9yIGNoYW5nZSBidWZmZXIgbGVuZ3RoIGhhbmRsaW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTY6MzIuNjg4MTMwNjIyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MTc5MjA0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJERUJVR19GU1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5zaW1fY3JlYXRlXCIsXG4gICAgXCJuc2ltX2Rydl9wb3J0X2FkZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBkaXNhYmxlcyB0aGUgTkVUSUZfRl9MT09QQkFDSyBmZWF0dXJlIGZsYWcgb24gbmV0ZGV2c2ltIFZGIGRldmljZXMgKGNsZWFyaW5nIGJpdHMgaW4gaHdfZmVhdHVyZXMgYW5kIGZlYXR1cmVzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBpbnRyb2R1Y2UgcGFkZGluZyBpc3N1ZXMsIG9yIGNoYW5nZSBidWZmZXIgbGVuZ3RoIGhhbmRsaW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgYW5kIGh3X2ZlYXR1cmVzIGZsYWcgZnJvbSBuZXRkZXZzaW0gVkYgcG9ydHMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGluIG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoKSB0byBwcmV2ZW50IHBhY2tldHMgZnJvbSBiZWluZyBsb29wZWQgYmFjayB0byBhIFZGIHBvcnQgbGFja2luZyBxdWV1ZXMgYW5kIE5BUEkuIFRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgc2ltdWxhdGVkIG5ldGRldiBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgbmV0ZGV2c2ltIHBvcnQgc2V0dXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA0OjU2OjMyLjY4ODEzODMwMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5OTM3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjhhN2FlZDM1YmE5NzU2NThiN2Y1YTA3MzQ2OTc5MjRjMDM2N2Q4NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNDo1NjozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcXG5pbmRleCBiNGE5OWYzY2VhYzYwLi43YmI3MmFlYTkwYTAxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xcbkBAIC0xMTEzLDYgKzExMTMsMTQgQEAgc3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0bnMtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZuc2ltX3ZmX25ldGRldl9vcHM7XFxuK1xcbitcXHQvKiBuc2ltX3NldHVwKCkgb2ZmZXJzIE5FVElGX0ZfTE9PUEJBQ0sgdG8gZXZlcnkgcG9ydCwgYnV0IGEgVkYgcG9ydFxcbitcXHQgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFuc1xcbitcXHQgKiByZWNlaXZpbmcgaXQuXFxuK1xcdCAqL1xcbitcXHRucy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyBcXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcXG4rXFx0bnMtXFx1MDAzZW5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNj0gfk5FVElGX0ZfTE9PUEJBQ0s7XFxuK1xcbiBcXHRydG5sX2xvY2soKTtcXG4gXFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKG5zLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRydG5sX3VubG9jaygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1NjozMy4wOTg3MTQzNTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5ODU2MDI1MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiREVCVUdfRlNcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuc2ltX2NyZWF0ZVwiLFxuICAgIFwibnNpbV9kcnZfcG9ydF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgYW5kIGh3X2ZlYXR1cmVzIGZsYWcgZnJvbSBuZXRkZXZzaW0gVkYgcG9ydHMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGluIG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoKSB0byBwcmV2ZW50IHBhY2tldHMgZnJvbSBiZWluZyBsb29wZWQgYmFjayB0byBhIFZGIHBvcnQgbGFja2luZyBxdWV1ZXMgYW5kIE5BUEkuIFRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgc2ltdWxhdGVkIG5ldGRldiBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgbmV0ZGV2c2ltIHBvcnQgc2V0dXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI4YTdhZWQzNWJhOTc1NjU4YjdmNWEwNzM0Njk3OTI0YzAzNjdkODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNDo1NjozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuaW5kZXggYjRhOTlmM2NlYWM2MC4uN2JiNzJhZWE5MGEwMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5AQCAtMTExMyw2ICsxMTEzLDE0IEBAIHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbV92ZihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbiBcdGludCBlcnI7XG4gXG4gXHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm5zaW1fdmZfbmV0ZGV2X29wcztcbitcbitcdC8qIG5zaW1fc2V0dXAoKSBvZmZlcnMgTkVUSUZfRl9MT09QQkFDSyB0byBldmVyeSBwb3J0LCBidXQgYSBWRiBwb3J0XG4rXHQgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFuc1xuK1x0ICogcmVjZWl2aW5nIGl0LlxuK1x0ICovXG4rXHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcbitcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH5ORVRJRl9GX0xPT1BCQUNLO1xuK1xuIFx0cnRubF9sb2NrKCk7XG4gXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtXHUwMDNlbmV0ZGV2KTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1NjozMy4wOTg3MTU3NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTA0MjYxNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZGV2c2ltIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBicm9hZGVyIG5ldGRldnNpbSBjb250ZXh0LiBJdCBsb29rcyBsaWtlIGl0J3Mgc3BlY2lmaWNhbGx5IGFsdGVyaW5nIHRoZSBgbnNpbV9pbml0X25ldGRldnNpbV92ZmAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNgLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBgTkVUSUZfRl9MT09QQkFDS2AgZmVhdHVyZSBmcm9tIHRoZSBgaHdfZmVhdHVyZXNgIGFuZCBgZmVhdHVyZXNgIG9mIHRoZSBuZXR3b3JrIGRldmljZSAoYG5zLVx1MDAzZW5ldGRldmApLlxuXG5UaGUgY29tbWVudCBwcm92aWRlcyBnb29kIGNvbnRleHQ6IFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBwb3J0cywgdW5saWtlIHRoZWlyIHBhcmVudCBwb3J0cywgZG9uJ3QgaGF2ZSBxdWV1ZXMgb3IgTkFQSSwgc28gbG9vcGluZyBhIGZyYW1lIGJhY2sgdG8gaXRzZWxmIGRvZXNuJ3QgbWFrZSBzZW5zZS4gSXTigJlzIGEgZ29vZCBjYXRjaCBiZWNhdXNlIHNldHRpbmcgYE5FVElGX0ZfTE9PUEJBQ0tgIGlzIHVzdWFsbHkgaGFuZGxlZCBpbiBgbnNpbV9zZXR1cCgpYCBmb3IgZXZlcnkgcG9ydCwgYnV0IHRoaXMgaXMgY2xlYXJseSBhbiBleGNlcHRpb24gd29ydGggaGFuZGxpbmcuXG5cbkkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgbnNpbV9pbml0X25ldGRldnNpbV92ZmAgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiBuZXRkZXZzaW0uIFRoaXMgZHJpdmVyIGlzIG9mdGVuIHVzZWQgZm9yIHNpbXVsYXRpb24gYW5kIHRlc3RpbmcsIHNvIEknbGwgY2hlY2sgaXRzIHJlYWNoYWJpbGl0eSB3aXRoaW4gY29tbW9uIHRlc3QgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLiBJdCdzIHR5cGljYWxseSBjb25maWd1cmVkIHZpYSBzeXNmcywgZGV2bGluaywgb3IgcnRuZXRsaW5rLCBwZXJoYXBzIGRlYnVnZnMuIEZpbmFsbHksIEknbGwgcmV2aWV3IHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIG5ldGRldnNpbSB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgaWYgdGhpcyBjaGFuZ2UgaGFzIGFueSBidWlsZC10aW1lIGltcGxpY2F0aW9ucy4gT3ZlcmFsbCwgdGhpcyBsb29rcyBsaWtlIGEgdGFyZ2V0ZWQgZml4IGZvciBhIGxvZ2ljYWwgaW5jb25zaXN0ZW5jeSBpbiB0aGUgVkYgc2V0dXAgd2l0aGluIG5ldGRldnNpbSwgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTY6MzguMDAyOTgwMzM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjU0NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVERFVlNJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlLTItXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX05FVERFVlNJTSkgKz0gbmV0ZGV2c2ltLm9cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUtNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTY6MzguMDUzMjQwMTQzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzNTM0MjUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBuZXRkZXZzaW0gS2NvbmZpZyBhbmQgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gdG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGFydGljdWxhciBzdWJzeXN0ZW0sIHRoZSBzZW5zaWJsZSBmaXJzdCBtb3ZlIGlzIHRvIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9LY29uZmlnYCwgYW5kIHRoZW4gdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gd2l0aGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNgLiBUaGUgS2NvbmZpZyB3aWxsIG91dGxpbmUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZWZhdWx0IHNldHRpbmdzIHRoYXQgYXJlIHJlbGF0ZWQgdG8gdGhpcy4gSXQnbGwgZ2l2ZSBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhpcyBzaW11bGF0ZWQgbmV0d29yayBkZXZpY2UgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSBmZWF0dXJlcyB0aGlzIHNpbXVsYXRlZCBkZXZpY2UgaGFzIGFuZCBob3cgdGhleSBhcmUgY29uZmlndXJlZC5cblxuVGhlbiwgSSdsbCBtb3ZlIG92ZXIgdG8gdGhlIEMgZmlsZSwgYG5ldGRldi5jYCwgdG8gZ3Jhc3AgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkLCBob3cgcGFja2V0cyBhcmUgaGFuZGxlZCAoaWYgYXQgYWxsKSwgdGhlIGRldmljZSBvcGVyYXRpb25zIHRoYXQgYXJlIGRlZmluZWQsIGFuZCBhbnkgaW50ZXJlc3Rpbmcgc2ltdWxhdGlvbiBhc3BlY3RzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIHRoZSBjb250cm9sIGZsb3csIGFuZCBhbnkgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCB0aGlzIHdpbGwgYmUgbXkgZm9jdXMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZGVzaWduIG9mIHRoZSBzaW11bGF0ZWQgbmV0d29yayBkZXZpY2UuIEJ5IGxvb2tpbmcgYXQgdGhlc2UgdHdvIGtleSBmaWxlcywgSSBzaG91bGQgZ2V0IGEgcHJldHR5IGdvb2QgaGFuZGxlIG9uIHdoYXQgYG5ldGRldnNpbWAgaXMgYWxsIGFib3V0LiBUaGlzIHdpbGwgZ2l2ZSBtZSB3aGF0IEkgbmVlZCBmb3IgYSBnb29kIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo0MC4zODg1ODQ3NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MTY3MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRERVZTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz02MDI9c291cmNlIFxcXCJkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNDpjb25maWcgTkVUREVWU0lNXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDUtXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTY6NDAuNTEzNzYwMDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDU3Mjc2Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2MDQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IG9wdGlvbnMgYXJlIGluIHRoYXQgYXJlYSBvZiB0aGUgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlLi4uIEknbSBsaWtlbHkgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBkcml2ZXIgZmVhdHVyZSBvciBhIGJyb2FkZXIgbmV0d29yayBzZXR0aW5nIHRoYXQncyBjYXVzaW5nIG1lIHNvbWUgY29uZnVzaW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBkZWZpbmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgcHJvbXB0cywgYW5kIGhlbHAgdGV4dCDigJMgYW55dGhpbmcgdGhhdCBjbGFyaWZpZXMgdGhlIGludGVudCBhbmQgZnVuY3Rpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcm91bmQgdGhhdCBzcGVjaWZpYyBsaW5lLiBJIGhvcGUgaXQncyB3ZWxsLWNvbW1lbnRlZC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo0Mi45NzEwMzgyNTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRcXG4gNjAxOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvS2NvbmZpZ1xcXCJcXG4gNjAyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcXFwiXFxuIDYwMzpcXHRcXG4gNjA0OlxcdGNvbmZpZyBORVRERVZTSU1cXG4gNjA1OlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuIDYwNjpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIDYwNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNjA4OlxcdFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG4gNjA5OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5cXG4gNjEwOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiA2MTE6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiA2MTI6XFx0XFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4gNjEzOlxcdFxcdGhlbHBcXG4gNjE0OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIGFuZCBzb2Z0d2FyZSBtb2RlbCB0aGF0IGNhblxcbiA2MTU6XFx0XFx0ICBiZSB1c2VkIHRvIHRlc3QgdmFyaW91cyBjb250cm9sIHBhdGggbmV0d29ya2luZyBBUElzLCBlc3BlY2lhbGx5XFxuIDYxNjpcXHRcXHQgIEhXLW9mZmxvYWQgcmVsYXRlZC5cXG4gNjE3OlxcdFxcbiA2MTg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDYxOTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cXG4gNjIwOlxcdFxcbiA2MjE6XFx0Y29uZmlnIE5FVF9GQUlMT1ZFUlxcbiA2MjI6XFx0XFx0dHJpc3RhdGUgXFxcIkZhaWxvdmVyIGRyaXZlclxcXCJcXG4gNjIzOlxcdFxcdHNlbGVjdCBGQUlMT1ZFUlxcbiA2MjQ6XFx0XFx0aGVscFxcbiA2MjU6XFx0XFx0ICBUaGlzIHByb3ZpZGVzIGFuIGF1dG9tYXRlZCBmYWlsb3ZlciBtZWNoYW5pc20gdmlhIEFQSXMgdG8gY3JlYXRlXFxuIDYyNjpcXHRcXHQgIGFuZCBkZXN0cm95IGEgZmFpbG92ZXIgbWFzdGVyIG5ldGRldiBhbmQgbWFuYWdlcyBhIHByaW1hcnkgYW5kXFxuIDYyNzpcXHRcXHQgIHN0YW5kYnkgc2xhdmUgbmV0ZGV2cyB0aGF0IGdldCByZWdpc3RlcmVkIHZpYSB0aGUgZ2VuZXJpYyBmYWlsb3ZlclxcbiA2Mjg6XFx0XFx0ICBpbmZyYXN0cnVjdHVyZS4gVGhpcyBjYW4gYmUgdXNlZCBieSBwYXJhdmlydHVhbCBkcml2ZXJzIHRvIGVuYWJsZVxcbiA2Mjk6XFx0XFx0ICBhbiBhbHRlcm5hdGUgbG93IGxhdGVuY3kgZGF0YXBhdGguIEl0IGFsc28gZW5hYmxlcyBsaXZlIG1pZ3JhdGlvbiBvZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo0Mi45NzExMDgwNTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjA5NzY2MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIGRldmljZSBkcml2ZXIgZGV2ZWxvcG1lbnQ6XG5cbioqRGVlcCBEaXZlOiBuZXRkZXZzaW0gVkYgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGFuZCB0YWtlIGEgZnJlc2ggbG9vayBhcm91bmQgdGhlIGBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmYCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBsaWtlbHkgc3BvdCB3aGVyZSB0aGUgdmlydHVhbCBmdW5jdGlvbiAoVkYpIGluaXRpYWxpemF0aW9uIGZvciB0aGUgbmV0ZGV2c2ltIGRyaXZlciBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVkYgaXMgc2V0IHVwIHdpdGhpbiB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSByZWNlbnQgY2hhbmdlcyB0byB0aGlzIGNvZGU/IEFueSByZWNlbnQgY29tbWl0cz8gV2hhdCBpcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBWRiBjb25maWd1cmF0aW9uPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGZ1bmN0aW9uIGl0c2VsZiBhbmQgdGhlbiB0cmFjZSBhbnkgcmVsYXRlZCBmdW5jdGlvbiBjYWxscyB0byBzZWUgaG93IHRoZSBWRiBpcyBiZWluZyBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgYG5ldGRldnNpbWAgYXJjaGl0ZWN0dXJlLiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHJlc291cmNlIGFsbG9jYXRpb24sIGludGVycnVwdCBoYW5kbGluZywgb3IgZXZlbiBiYXNpYyBkZXZpY2UgcmVnaXN0cmF0aW9uLCBiZWNhdXNlIHRob3NlIGFyZSB0aGUgdXN1YWwgY3VscHJpdHMgaW4gdGhlc2Uga2luZHMgb2Ygc2NlbmFyaW9zLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo0Ny4xODA4NzYxODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0XFx0bnNpbV9icGZfdW5pbml0KG5zKTtcXG4xMTAxOlxcdGVycl9ycV9kZXN0cm95OlxcbjExMDI6XFx0XFx0bnNpbV9xdWV1ZV91bmluaXQobnMpO1xcbjExMDM6XFx0ZXJyX3V0bl9kZXN0cm95OlxcbjExMDQ6XFx0XFx0cnRubF91bmxvY2soKTtcXG4xMTA1OlxcdFxcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVxcdTAwM2VuZXRkZXYpO1xcbjExMDY6XFx0ZXJyX3BoY19kZXN0cm95OlxcbjExMDc6XFx0XFx0bW9ja19waGNfZGVzdHJveShucy1cXHUwMDNlcGhjKTtcXG4xMTA4OlxcdFxcdHJldHVybiBlcnI7XFxuMTEwOTpcXHR9XFxuMTExMDpcXHRcXG4xMTExOlxcdHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbV92ZihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4xMTEyOlxcdHtcXG4xMTEzOlxcdFxcdGludCBlcnI7XFxuMTExNDpcXHRcXG4xMTE1OlxcdFxcdG5zLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2bnNpbV92Zl9uZXRkZXZfb3BzO1xcbjExMTY6XFx0XFxuMTExNzpcXHRcXHQvKiBuc2ltX3NldHVwKCkgb2ZmZXJzIE5FVElGX0ZfTE9PUEJBQ0sgdG8gZXZlcnkgcG9ydCwgYnV0IGEgVkYgcG9ydFxcbjExMTg6XFx0XFx0ICogaGFzIG5laXRoZXIgcXVldWVzIG5vciBOQVBJLCBhbmQgbG9vcGluZyBhIGZyYW1lIGJhY2sgbWVhbnNcXG4xMTE5OlxcdFxcdCAqIHJlY2VpdmluZyBpdC5cXG4xMTIwOlxcdFxcdCAqL1xcbjExMjE6XFx0XFx0bnMtXFx1MDAzZW5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNj0gfk5FVElGX0ZfTE9PUEJBQ0s7XFxuMTEyMjpcXHRcXHRucy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcXG4xMTIzOlxcdFxcbjExMjQ6XFx0XFx0cnRubF9sb2NrKCk7XFxuMTEyNTpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtXFx1MDAzZW5ldGRldik7XFxuMTEyNjpcXHRcXHRydG5sX3VubG9jaygpO1xcbjExMjc6XFx0XFx0cmV0dXJuIGVycjtcXG4xMTI4OlxcdH1cXG4xMTI5OlxcdFxcbjExMzA6XFx0c3RhdGljIHZvaWQgbnNpbV9leGl0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4xMTMxOlxcdHtcXG4xMTMyOlxcdFxcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVxcdTAwM2VuZXRkZXYpO1xcbjExMzM6XFx0XFx0bW9ja19waGNfZGVzdHJveShucy1cXHUwMDNlcGhjKTtcXG4xMTM0OlxcdH1cXG4xMTM1OlxcdFxcbjExMzY6XFx0c3RydWN0IG5ldGRldnNpbSAqbnNpbV9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG4xMTM3OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0LFxcbjExMzg6XFx0XFx0XFx0XFx0ICAgICAgdTggcGVybV9hZGRyW0VUSF9BTEVOXSlcXG4xMTM5OlxcdHtcXG4xMTQwOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuMTE0MTpcXHRcXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucztcXG4xMTQyOlxcdFxcdGludCBlcnI7XFxuMTE0MzpcXHRcXG4xMTQ0OlxcdFxcdGRldiA9IGFsbG9jX25ldGRldl9tcShzaXplb2YoKm5zKSwgXFxcImV0aCVkXFxcIiwgTkVUX05BTUVfVU5LTk9XTiwgbnNpbV9zZXR1cCxcXG4xMTQ1OlxcdFxcdFxcdFxcdCAgICAgIG5zaW1fZGV2LVxcdTAwM2Vuc2ltX2J1c19kZXYtXFx1MDAzZW51bV9xdWV1ZXMpO1xcbjExNDY6XFx0XFx0aWYgKCFkZXYpXFxuMTE0NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4xMTQ4OlxcdFxcbjExNDk6XFx0XFx0aWYgKHBlcm1fYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTY6NDcuMTgwOTcxNTU0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NTUzNTY4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHQgcHJvY2Vzc2VzOlxuXG4qKkRlbHZpbmcgaW50byBOZXR3b3JrIERldmljZSBTaW11bGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgb2YgdGhpcyBzaW11bGF0aW9uLCBwYXJ0aWN1bGFybHkgaG93IHZpcnR1YWwgbmV0d29yayBkZXZpY2VzIGFyZSBpbml0aWFsaXplZCBhbmQgY3JlYXRlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHR3byBrZXkgZnVuY3Rpb25zOiBgbnNpbV9pbml0X25ldGRldnNpbV92ZmAgYW5kIGBuc2ltX2NyZWF0ZWAuIEkgd2FudCB0byBrbm93LCB1bmVxdWl2b2NhbGx5LCAqd2hlcmUqIGluIHRoZSBjb2RlIHRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZC4gVGhhdCB3aWxsIHByb3ZpZGUgdGhlIGNyaXRpY2FsIGNvbnRleHQgSSBuZWVkIHRvIGdyYXNwIGhvdyB0aGUgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBvZiB0aGlzIG5ldHdvcmsgc2ltdWxhdGlvbi4gRmluZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIHRoZSBmaXJzdCBlc3NlbnRpYWwgc3RlcCBpbiB0cnVseSB1bmRlcnN0YW5kaW5nIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTk1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo0OC44MzYzMzA3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkzMDExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmfG5zaW1fY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTM4MD1zdGF0aWMgaW50IF9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDMzLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDM0OlxcdG5zaW1fZGV2X3BvcnQtXFx1MDAzZW5zID0gbnNpbV9jcmVhdGUobnNpbV9kZXYsIG5zaW1fZGV2X3BvcnQsIHBlcm1fYWRkcik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0MzUtXFx0aWYgKElTX0VSUihuc2ltX2Rldl9wb3J0LVxcdTAwM2VucykpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz00MDU9c3RhdGljIGludCBuc2ltX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTQxNi1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NDE3OnN0YXRpYyBpbnQgbnNpbV9jcmVhdGVfcGFnZV9wb29sKHN0cnVjdCBwYWdlX3Bvb2wgKipwLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTQxOC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9NDM4PXN0YXRpYyBpbnQgbnNpbV9pbml0X25hcGkoc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNDUyLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzo0NTM6XFx0XFx0ZXJyID0gbnNpbV9jcmVhdGVfcGFnZV9wb29sKFxcdTAwMjZycS1cXHUwMDNlcGFnZV9wb29sLCBcXHUwMDI2cnEtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy00NTQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz03NTE9bnNpbV9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy03NjQtXFx0XFx0XFx0cmV0dXJuIC1FTkVURE9XTjtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NzY1OlxcdFxcdHJldHVybiBuc2ltX2NyZWF0ZV9wYWdlX3Bvb2woXFx1MDAyNnFtZW0tXFx1MDAzZXBwLCBcXHUwMDI2bnMtXFx1MDAzZXJxW2lkeF0tXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy03NjYtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTc3MS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NzcyOlxcdGVyciA9IG5zaW1fY3JlYXRlX3BhZ2VfcG9vbChcXHUwMDI2cW1lbS1cXHUwMDNlcnEtXFx1MDAzZXBhZ2VfcG9vbCwgXFx1MDAyNnFtZW0tXFx1MDAzZXJxLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNzczLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTA0MD1zdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTExMC1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTExMTpzdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExMTIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTExMzA9c3RhdGljIHZvaWQgbnNpbV9leGl0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTM1LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMTM2OnN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExMzctXFx0XFx0XFx0ICAgICAgc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE2My1cXHRlbHNlXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjExNjQ6XFx0XFx0ZXJyID0gbnNpbV9pbml0X25ldGRldnNpbV92Zihucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExNjUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xMDc9c3RydWN0IG5ldGRldnNpbSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTY1LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoxNjY6c3RydWN0IG5ldGRldnNpbSAqbnNpbV9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTY3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo0OC44ODAyNjU3MjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk4MjgzNzE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRkZXZzaW0gQnVnZml4IGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgbnNpbV9jcmVhdGUoKWAgaXMgdGhlIGVudHJ5IHBvaW50LCBjYWxsZWQgd2hlbiBjcmVhdGluZyBhIHBvcnQgd2l0aGluIHRoZSBuZXRkZXZzaW0gZHJpdmVyLiBUaGF04oCZcyB1c3VhbGx5IGRvbmUgdGhyb3VnaCBgZGV2bGlua2Agb3IgZGlyZWN0IGludGVyYWN0aW9uIHZpYSBzeXNmcywgcmlnaHQ/IE5ldGRldnNpbSwgb2YgY291cnNlLCBpcyB0aGF0IGJlYXV0aWZ1bCB2aXJ0dWFsIG1vY2sgZHJpdmVyIGluIHRoZSBMaW51eCBrZXJuZWwg4oCTIHBlcmZlY3QgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIE5vIHBoeXNpY2FsIGhhcmR3YXJlIG5lZWRlZCwgYSBkcmVhbSBjb21lIHRydWUhXG5cblRoZSBjcml0aWNhbCBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKClgLiBJdCdzIHJlbW92aW5nIGBORVRJRl9GX0xPT1BCQUNLYCBmcm9tIHRoZSBgaHdfZmVhdHVyZXNgIGFuZCBgZmVhdHVyZXNgIGxpc3RzLiBBaCwgcmlnaHQsIGJlY2F1c2UgYG5zaW1fc2V0dXAoKWAgKnNldHMqIGxvb3BiYWNrLCBidXQgYSB2aXJ0dWFsIGZ1bmN0aW9uIChWRikgcG9ydCBpbiBuZXRkZXZzaW0gZG9lc24ndCBoYXZlIGl0cyBvd24gcXVldWVzIG9yIE5BUEkuIExvb3BpbmcgYmFjayBhIGZyYW1lIGhlcmUgaXMgYXNraW5nIGZvciB0cm91YmxlIOKAkyBwcm9iYWJseSBhIGNyYXNoIG9yIHNvbWUgbmFzdHkgdW5kZWZpbmVkIGJlaGF2aW9yIHdoZW4geW91IHRyeSB0byBzZW5kIGEgZnJhbWUgd2l0aCBsb29wYmFjayBlbmFibGVkIG9uIGEgVkYgaW50ZXJmYWNlIGluIG5ldGRldnNpbS4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgYnVnZml4LlxuXG5UaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nICptb3JlKj8gQWJzb2x1dGVseS4gTmV0ZGV2c2ltIGlzIGFscmVhZHkgYSBwcmltZSB0YXJnZXQsIGFuZCB0aGlzIGZpeCBoaWdobGlnaHRzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24uIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIGBuc2ltX2NyZWF0ZWAgaXMgYW4gb2J2aW91cyBjaG9pY2Ugc2luY2UgaXQncyB0aGUgbWFpbiBlbnRyeS4gVGhlbiwgSSBzaG91bGQgbG9vayBhdCBgbnNpbV9kZXZfcG9ydF9hZGRgIChhbmQgaXRzIGludGVybmFsIGBfX25zaW1fZGV2X3BvcnRfYWRkYCBjb3VudGVycGFydCksIGFuZCBkZWZpbml0ZWx5IGBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmYCB3aGljaCBpcyB0aGUgc3RhdGljIGZ1bmN0aW9uIHRoYXQncyBiZWluZyB1cGRhdGVkLiBTaW5jZSBJJ20gaW4gaGVyZSwgSSdsbCBnbyBiYWNrIGFuZCBjaGVjayB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIGBkZXYuY2AgYW5kIGBuZXRkZXYuY2AgYXMgd2VsbC4gTGV04oCZcyBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6NjQ5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo1Mi44NjMxMDUyNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTk4OTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5zaW1fZGV2X3BvcnRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NTczPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6NTc0Ol9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNTc1LVxcdFxcdCAgICB1bnNpZ25lZCBpbnQgcG9ydF9pbmRleCwgdTggcGVybV9hZGRyW0VUSF9BTEVOXSk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NTkyPXN0YXRpYyBpbnQgbnNpbV9lc3dfc3dpdGNoZGV2X2VuYWJsZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTU5OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnNpbV9kZXZfZ2V0X3Zmcyhuc2ltX2Rldik7IGkrKykge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo1OTk6XFx0XFx0ZXJyID0gX19uc2ltX2Rldl9wb3J0X2FkZChuc2ltX2RldiwgTlNJTV9ERVZfUE9SVF9UWVBFX1ZGLCBpLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNjAwLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xMzUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgbnNpbV9kZXZfZGV2bGlua19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTM3OS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTM4MDpzdGF0aWMgaW50IF9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTM4MS1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IHBvcnRfaW5kZXgsIHU4IHBlcm1fYWRkcltFVEhfQUxFTl0pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTQ4MD1zdGF0aWMgdm9pZCBuc2ltX2Rldl9wb3J0X2RlbF9hbGwoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDg4LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDg5OnN0YXRpYyBpbnQgbnNpbV9kZXZfcG9ydF9hZGRfYWxsKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0OTAtXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBwb3J0X2NvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0OTQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBvcnRfY291bnQ7IGkrKykge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDk1OlxcdFxcdGVyciA9IF9fbnNpbV9kZXZfcG9ydF9hZGQobnNpbV9kZXYsIE5TSU1fREVWX1BPUlRfVFlQRV9QRiwgaSwgTlVMTCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0OTYtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xNTA2PXN0YXRpYyBpbnQgbnNpbV9kZXZfcmVsb2FkX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE1NDYtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE1NDc6XFx0ZXJyID0gbnNpbV9kZXZfcG9ydF9hZGRfYWxsKG5zaW1fZGV2LCBuc2ltX2J1c19kZXYtXFx1MDAzZXBvcnRfY291bnQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNTQ4LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTU3Mz1pbnQgbnNpbV9kcnZfcHJvYmUoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE2NTUtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE2NTY6XFx0ZXJyID0gbnNpbV9kZXZfcG9ydF9hZGRfYWxsKG5zaW1fZGV2LCBuc2ltX2J1c19kZXYtXFx1MDAzZXBvcnRfY291bnQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNjU3LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTc1ND1pbnQgbnNpbV9kcnZfcG9ydF9hZGQoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE3NjMtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNzY0OlxcdFxcdGVyciA9IF9fbnNpbV9kZXZfcG9ydF9hZGQobnNpbV9kZXYsIHR5cGUsIHBvcnRfaW5kZXgsIHBlcm1fYWRkcik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE3NjUtXFx0ZGV2bF91bmxvY2socHJpdl90b19kZXZsaW5rKG5zaW1fZGV2KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA0OjU2OjUyLjkwNjcxMDYzOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTUzNDU0NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYG5ldGRldnNpbWAgRnVuY3Rpb24gU2NvcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBuZXRkZXZzaW1gLiBJIG5lZWQgdG8gc3RhcnQgYnkgY29uZmlybWluZyB0aGUgc2NvcGUgb2YgYG5zaW1fZHJ2X3BvcnRfYWRkYCBhbmQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlbid0IGRlY2xhcmVkIGFzIGBzdGF0aWNgIHdpdGhpbiB0aGF0IG1vZHVsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBzdXJwcmlzaW5nIGV4dGVybmFsIGRlcGVuZGVuY2llcyBvciB1bmludGVuZGVkIGdsb2JhbCBhY2Nlc3MgZ29pbmcgb24gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIGEgY29udHJvbGxlZCwgaW50ZXJuYWwtdG8tdGhlLWRyaXZlciB1c2FnZSwgb3IgaWYgdGhlcmUncyBhIGJyb2FkZXIsIHBlcmhhcHMgdW5pbnRlbmRlZCwgZXhwb3N1cmUgdG8gb3RoZXIga2VybmVsIGNvbXBvbmVudHMgb3IgZXZlbiB1c2VyIHNwYWNlIHRoYXQgbmVlZHMgdG8gYmUgc2NydXRpbml6ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGFjY2VzcyBwYXRocyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbW9kdWxlJ3Mgb3ZlcmFsbCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIGFuZCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBtYWludGVuYW5jZSBpc3N1ZXMuIFRoaXMgaXMgYSBzdGFuZGFyZCBwcm9jZWR1cmUgd2hlbiByZXZpZXdpbmcgYW55IG5ldHdvcmtpbmcgZHJpdmVyIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzODgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo1OC44NjAxNjcyODVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjc4NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgbnNpbV98XnN0cnVjdCBuZXRkZXZzaW0gXFxcXCpuc2ltX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jPTEwND1uc2ltX2JwZl9vZmZsb2FkKHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGJvb2wgb2xkcHJvZylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy0xMTctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jOjExODppbnQgbnNpbV9icGZfc2V0dXBfdGNfYmxvY2tfY2IoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jLTExOS1cXHRcXHRcXHQgICAgICAgdm9pZCAqdHlwZV9kYXRhLCB2b2lkICpjYl9wcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jLTE2Ni1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmM6MTY3OmludCBuc2ltX2JwZl9kaXNhYmxlX3RjKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy0xNjgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jPTUzND1zdGF0aWMgdm9pZCBuc2ltX2JwZl9tYXBfZnJlZShzdHJ1Y3QgYnBmX29mZmxvYWRlZF9tYXAgKm9mZm1hcClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy01NDctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jOjU0ODppbnQgbnNpbV9icGYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZilcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtNTQ5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy01ODAtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jOjU4MTppbnQgbnNpbV9icGZfZGV2X2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldilcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtNTgyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYz02MDk9dm9pZCBuc2ltX2JwZl9kZXZfZXhpdChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jLTYxNS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmM6NjE2OmludCBuc2ltX2JwZl9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy02MTcte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTQ5MT1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbnNpbV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDk2LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo0OTc6aW50IG5zaW1fYnVzX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xNTA2PXN0YXRpYyBpbnQgbnNpbV9kZXZfcmVsb2FkX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE1NzItXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE1NzM6aW50IG5zaW1fZHJ2X3Byb2JlKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldilcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU3NC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTc0Mj1fX25zaW1fZGV2X3BvcnRfbG9va3VwKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc1My1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTc1NDppbnQgbnNpbV9kcnZfcG9ydF9hZGQoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNzU1LVxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LCB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE3NjgtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE3Njk6aW50IG5zaW1fZHJ2X3BvcnRfZGVsKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc3MC1cXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgcG9ydF9pbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNzg1LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNzg2OmludCBuc2ltX2Rydl9jb25maWd1cmVfdmZzKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc4Ny1cXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3ZmcylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODIzLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODI0OmludCBuc2ltX2Rldl9pbml0KHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4MjUte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2hlYWx0aC5jPTE3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX2Rldl9oZWFsdGhfYnJlYWtfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9oZWFsdGguYy0xNzctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2hlYWx0aC5jOjE3ODppbnQgbnNpbV9kZXZfaGVhbHRoX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldiwgc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2hlYWx0aC5jLTE3OS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaHdzdGF0cy5jPTM5OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5zaW1fZGV2X2h3c3RhdHNfZm9wcyBuc2ltX2Rldl9od3N0YXRzX2wzX2ZhaWxfZm9wcyA9XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaHdzdGF0cy5jLTQwMy1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaHdzdGF0cy5jOjQwNDppbnQgbnNpbV9kZXZfaHdzdGF0c19pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2h3c3RhdHMuYy00MDUte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTExMzA9c3RhdGljIHZvaWQgbnNpbV9leGl0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTM1LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMTM2OnN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExMzctXFx0XFx0XFx0ICAgICAgc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MTA3PXN0cnVjdCBuZXRkZXZzaW0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE2NS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MTY2OnN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE2Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xNzU9dm9pZCBuc2ltX3VkcF90dW5uZWxzX2RlYnVnZnNfY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoxNzY6aW50IG5zaW1fdWRwX3R1bm5lbHNfaW5mb19jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTc3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MTc4PXZvaWQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTgwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MTgxOmludCBuc2ltX2JwZl9kZXZfaW5pdChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTgyLXZvaWQgbnNpbV9icGZfZGV2X2V4aXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE4MzppbnQgbnNpbV9icGZfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE4NC12b2lkIG5zaW1fYnBmX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE4NTppbnQgbnNpbV9icGYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE4NjppbnQgbnNpbV9icGZfZGlzYWJsZV90YyhzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE4NzppbnQgbnNpbV9icGZfc2V0dXBfdGNfYmxvY2tfY2IoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE4OC1cXHRcXHRcXHQgICAgICAgdm9pZCAqdHlwZV9kYXRhLCB2b2lkICpjYl9wcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0yNDE9c3RydWN0IG5zaW1fZGV2X2hlYWx0aCB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjQ5LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoyNTA6aW50IG5zaW1fZGV2X2hlYWx0aF9pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjUxLXZvaWQgbnNpbV9kZXZfaGVhbHRoX2V4aXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MjYxPXN0cnVjdCBuc2ltX2Rldl9od3N0YXRzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0yNzEtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjI3MjppbnQgbnNpbV9kZXZfaHdzdGF0c19pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0yNzMtdm9pZCBuc2ltX2Rldl9od3N0YXRzX2V4aXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjc1LSNpZiBJU19FTkFCTEVEKENPTkZJR19QU0FNUExFKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoyNzY6aW50IG5zaW1fZGV2X3BzYW1wbGVfaW5pdChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjc3LXZvaWQgbnNpbV9kZXZfcHNhbXBsZV9leGl0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTM4Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKm5zaW1fZGV2X25ldChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTM4Ny1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6Mzg4OmludCBuc2ltX2Rldl9pbml0KHZvaWQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0zODktdm9pZCBuc2ltX2Rldl9leGl0KHZvaWQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDozOTA6aW50IG5zaW1fZHJ2X3Byb2JlKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2Rldik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTM5MS12b2lkIG5zaW1fZHJ2X3JlbW92ZShzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDozOTI6aW50IG5zaW1fZHJ2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMzkzLVxcdFxcdCAgICAgIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0zOTQtXFx0XFx0ICAgICAgdTggcGVybV9hZGRyW0VUSF9BTEVOXSk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjM5NTppbnQgbnNpbV9kcnZfcG9ydF9kZWwoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0zOTYtXFx0XFx0ICAgICAgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMzk3LVxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6Mzk4OmludCBuc2ltX2Rydl9jb25maWd1cmVfdmZzKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMzk5LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBudW1fdmZzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NDU9c3RhdGljIGlubGluZSB2b2lkIG5zaW1fbWFjc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1MTppbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1Mi12b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDY4PW5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpIHt9XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDcwLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NzE6aW50IG5zaW1fc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ3Mi1cXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDc1PXN0cnVjdCBuc2ltX2J1c19kZXYge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ4Ni1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDg3OmludCBuc2ltX2J1c19pbml0KHZvaWQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00ODgtdm9pZCBuc2ltX2J1c19leGl0KHZvaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzYW1wbGUuYz0xOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnNpbV9wc2FtcGxlX2VuYWJsZV9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzYW1wbGUuYy0xOTctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzYW1wbGUuYzoxOTg6aW50IG5zaW1fZGV2X3BzYW1wbGVfaW5pdChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc2FtcGxlLmMtMTk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0yNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnNpbV9wc3BfcmVyZWdfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzMtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI3NDppbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjc1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jPTExOD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX3VkcF90dW5uZWxzX2luZm9fcmVzZXRfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jLTEyNC1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYzoxMjU6aW50IG5zaW1fdWRwX3R1bm5lbHNfaW5mb19jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYy0xMjYtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA0OjU2OjU4LjkwMzg1MDgxMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTcyNzc0NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5FVERFVlNJTSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZCBmb3IgYE5FVERFVlNJTWAuIExvb2tpbmcgYXQgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLCBpdCBsb29rcyBsaWtlIEkgbmVlZCBgTkVUREVWU0lNYCBpdHNlbGYsIG5hdHVyYWxseSwgYnV0IGFsc28gYERFQlVHX0ZTYCBhbmQgYElORVRgLiBJIHNlZSBhIGNvdXBsZSBvZiBkZXBlbmRlbmNpZXMsIGBQU0FNUExFYCBhbmQgYFBUUF8xNTg4X0NMT0NLX01PQ0tgLCBidXQgdGhvc2UgY2FuIGJlIGRpc2FibGVkIHNpbmNlIEkgZG9uJ3QgbmVlZCB0aGVtIGZvciBteSBjdXJyZW50IG5lZWRzLiBUaGVyZSBhcmUgc29tZSBgc2VsZWN0YCBkaXJlY3RpdmVzLCBgTkVUX0RFVkxJTktgLCBgUEFHRV9QT09MYCwgYW5kIGBORVRfU0hBUEVSYCwgd2hpY2ggc2hvdWxkIGJlIGZpbmUuXG5cbk5vdywgbGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBsaXN0IGFnYWluc3QgYW55IG90aGVyIHJlbGV2YW50IGZpbGVzIG9yIGNvbmZpZ3VyYXRpb25zLiBKdXN0IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlLCBgREVCVUdfRlNgIGFuZCBgTkVUREVWU0lNYCBhcmUgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbkkgc2hvdWxkIG1ha2Ugc3VyZSB0aGVzZSBmb2N1cyBzeW1ib2xzIGFyZSBjb25zaWRlcmVkOiBgbnNpbV9jcmVhdGVgLCBgbnNpbV9kcnZfcG9ydF9hZGRgLCBhbmQgYG5zaW1fZHJ2X3Byb2JlYCwgZXNwZWNpYWxseSBpbiBjb250ZXh0IG9mIHRoYXQgcGF0Y2guXG5cbkFscmlnaHQsIG9uZSBmaW5hbCBzd2VlcC4gSSBuZWVkIHRvIG5vdGUgdGhhdCB0aGlzIHBhdGNoIGlzIHdvcnRod2hpbGUgdG8gZnV6eiwgYXMgaXQgaXMgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIGEgbmV0d29yayBkZXZpY2UgYW5kIHRodXMgcG90ZW50aWFsbHkgYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBJJ20gZm9jdXNpbmcgb24gYG5zaW1fY3JlYXRlYCBhbmQgYG5zaW1fZHJ2X3BvcnRfYWRkYCBzcGVjaWZpY2FsbHkuIFRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucyBJIG5lZWQgYXJlIGBORVRERVZTSU1gLCBgREVCVUdfRlNgLCBhbmQgYElORVRgLlxuXG5UaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGUgcGF0Y2ggbW9kaWZpZXMgYG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoKWAgd2hpY2ggaXMgaW52b2tlZCB2aWEgYG5zaW1fY3JlYXRlKClgIGFuZCBhZmZlY3RzIHRoZSBuZXRkZXZzaW0gZGV2aWNlIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgc3RhY2sgcGFja2V0IGhhbmRsaW5nIGZvciB2aXJ0dWFsIHNpbXVsYXRlZCBuZXRkZXZzIGJ5IHJlbW92aW5nIGxvb3BiYWNrIGZsYWdzIGZyb20gbmV0ZGV2c2ltIFZGIHBvcnRzLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgcmVnYXJkaW5nIFZGIGNvbmZpZ3VyYXRpb24gYW5kIGhvdyBzaW11bGF0ZWQgcGFja2V0cyBhcmUgaGFuZGxlZCBpbiBWRiBlbnZpcm9ubWVudHMuIEkgdGhpbmsgSSdtIGdvb2QgdG8gZ28uXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ0NSwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTc6MDIuODc2NjI3NzY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgxMDgzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiREVCVUdfRlNcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuc2ltX2NyZWF0ZVwiLFxuICAgIFwibnNpbV9kcnZfcG9ydF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgYW5kIGh3X2ZlYXR1cmVzIGZsYWcgZnJvbSBuZXRkZXZzaW0gVkYgcG9ydHMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGluIG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoKSB0byBwcmV2ZW50IHBhY2tldHMgZnJvbSBiZWluZyBsb29wZWQgYmFjayB0byBhIFZGIHBvcnQgbGFja2luZyBxdWV1ZXMgYW5kIE5BUEkuIFRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgc2ltdWxhdGVkIG5ldGRldiBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgbmV0ZGV2c2ltIHBvcnQgc2V0dXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJERUJVR19GU1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5zaW1fY3JlYXRlXCIsXG4gICAgXCJuc2ltX2Rydl9wb3J0X2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIE5FVElGX0ZfTE9PUEJBQ0sgZmVhdHVyZSBhbmQgaHdfZmVhdHVyZXMgZmxhZyBmcm9tIG5ldGRldnNpbSBWRiBwb3J0cyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gbnNpbV9pbml0X25ldGRldnNpbV92ZigpIHRvIHByZXZlbnQgcGFja2V0cyBmcm9tIGJlaW5nIGxvb3BlZCBiYWNrIHRvIGEgVkYgcG9ydCBsYWNraW5nIHF1ZXVlcyBhbmQgTkFQSS4gVGhpcyBkaXJlY3RseSBtb2RpZmllcyBzaW11bGF0ZWQgbmV0ZGV2IGZlYXR1cmUgY29uZmlndXJhdGlvbiBhbmQgaXMgcmVhY2hhYmxlIHZpYSBuZXRkZXZzaW0gcG9ydCBzZXR1cC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTc6MDIuOTU0NzQyNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTUxMjk4MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTc6MDIuOTU1MTU5NTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzE1MDg3NjE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBkaXNhYmxlcyB0aGUgTkVUSUZfRl9MT09QQkFDSyBmZWF0dXJlIGZsYWcgb24gbmV0ZGV2c2ltIFZGIGRldmljZXMgKGNsZWFyaW5nIGJpdHMgaW4gaHdfZmVhdHVyZXMgYW5kIGZlYXR1cmVzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBpbnRyb2R1Y2UgcGFkZGluZyBpc3N1ZXMsIG9yIGNoYW5nZSBidWZmZXIgbGVuZ3RoIGhhbmRsaW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyOGE3YWVkMzViYTk3NTY1OGI3ZjVhMDczNDY5NzkyNGMwMzY3ZDg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDQ6NTY6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbmluZGV4IGI0YTk5ZjNjZWFjNjAuLjdiYjcyYWVhOTBhMDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuQEAgLTExMTMsNiArMTExMywxNCBAQCBzdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoc3RydWN0IG5ldGRldnNpbSAqbnMpXG4gXHRpbnQgZXJyO1xuIFxuIFx0bnMtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZuc2ltX3ZmX25ldGRldl9vcHM7XG4rXG4rXHQvKiBuc2ltX3NldHVwKCkgb2ZmZXJzIE5FVElGX0ZfTE9PUEJBQ0sgdG8gZXZlcnkgcG9ydCwgYnV0IGEgVkYgcG9ydFxuK1x0ICogaGFzIG5laXRoZXIgcXVldWVzIG5vciBOQVBJLCBhbmQgbG9vcGluZyBhIGZyYW1lIGJhY2sgbWVhbnNcbitcdCAqIHJlY2VpdmluZyBpdC5cbitcdCAqL1xuK1x0bnMtXHUwMDNlbmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNj0gfk5FVElGX0ZfTE9PUEJBQ0s7XG4rXHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcbitcbiBcdHJ0bmxfbG9jaygpO1xuIFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKG5zLVx1MDAzZW5ldGRldik7XG4gXHRydG5sX3VubG9jaygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTc6MDIuOTU1MTYwNTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEzNjY2OTQzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRkZXZzaW0gVmlydHVhbCBGdW5jdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY2AuIEl0IHNlZW1zIHRoZXkncmUgbWFraW5nIGEgY2hhbmdlIHJlbGF0ZWQgdG8gdGhlIHZpcnR1YWwgZnVuY3Rpb24gKFZGKSBwb3J0IHdpdGhpbiB0aGUgbmV0ZGV2c2ltIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGhhbmRsaW5nIHRoZSBgTkVUSUZfRl9MT09QQkFDS2AgZmVhdHVyZS4gVGhlIGRpZmYgaGlnaGxpZ2h0cyB0aGF0IHRoZSBWRiBwb3J0LCB1bmxpa2UgdGhlIG1haW4gbmV0ZGV2c2ltIGRldmljZSwgZG9lc24ndCBhY3R1YWxseSBoYXZlIHF1ZXVlcyBvciBOQVBJLCBhbmQgdGhlcmVmb3JlLCBzaG91bGRuJ3QgYmUgYWR2ZXJ0aXNpbmcgb3IgaW1wbGVtZW50aW5nIGxvb3BiYWNrIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBrZXkgbGluZXMgYXJlIHdoZXJlIHRoZSBjb2RlIGlzIGNsZWFyaW5nIHRoZSBgTkVUSUZfRl9MT09QQkFDS2AgYml0IGZyb20gYm90aCBgbnMtXHUwMDNlbmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzYCBhbmQgYG5zLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlc2AuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgZW5hYmxpbmcgbG9vcGJhY2sgb24gYSBWRiB3b3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGFzIHRoZXJlJ3Mgbm8gd2F5IHRvIGFjdHVhbGx5IFwibG9vcFwiIGEgZnJhbWUgYmFjayB0byBpdHNlbGYgaW4gdGhpcyBjb250ZXh0LiBJdCB3b3VsZCBiZSByZWNlaXZlZCwgd2hpY2ggaXMgbm90IGRlc2lyZWQgZnVuY3Rpb25hbGl0eSwgYW5kIGNvdWxkIGNhdXNlIGNvbmZ1c2luZyBpc3N1ZXMuXG5cblRoZSBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgYW5kIGNvcnJlY3QuIFJlbW92aW5nIHRoZSBsb29wYmFjayBmZWF0dXJlIHByZXZlbnRzIHVuaW50ZW5kZWQgYmVoYXZpb3IgdGhhdCBjb3VsZCByZXN1bHQgZnJvbSB0aGUgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgYWR2ZXJ0aXNlZCBjYXBhYmlsaXRpZXMgYW5kIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFZGLiBJJ2Qgd2FudCB0byBjaGVjaywgb2YgY291cnNlLCB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgbG9vcGJhY2sgaXMgYmVpbmcgYWR2ZXJ0aXNlZCBmb3IgYSBWRiwgYnV0IHRoaXMgY2hhbmdlIGl0c2VsZiBhcHBlYXJzIHNvdW5kIGFuZCBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1NzoxNC4zMjE4NTY5MDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0XFx0bnNpbV9icGZfdW5pbml0KG5zKTtcXG4xMTAxOlxcdGVycl9ycV9kZXN0cm95OlxcbjExMDI6XFx0XFx0bnNpbV9xdWV1ZV91bmluaXQobnMpO1xcbjExMDM6XFx0ZXJyX3V0bl9kZXN0cm95OlxcbjExMDQ6XFx0XFx0cnRubF91bmxvY2soKTtcXG4xMTA1OlxcdFxcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVxcdTAwM2VuZXRkZXYpO1xcbjExMDY6XFx0ZXJyX3BoY19kZXN0cm95OlxcbjExMDc6XFx0XFx0bW9ja19waGNfZGVzdHJveShucy1cXHUwMDNlcGhjKTtcXG4xMTA4OlxcdFxcdHJldHVybiBlcnI7XFxuMTEwOTpcXHR9XFxuMTExMDpcXHRcXG4xMTExOlxcdHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbV92ZihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4xMTEyOlxcdHtcXG4xMTEzOlxcdFxcdGludCBlcnI7XFxuMTExNDpcXHRcXG4xMTE1OlxcdFxcdG5zLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2bnNpbV92Zl9uZXRkZXZfb3BzO1xcbjExMTY6XFx0XFxuMTExNzpcXHRcXHQvKiBuc2ltX3NldHVwKCkgb2ZmZXJzIE5FVElGX0ZfTE9PUEJBQ0sgdG8gZXZlcnkgcG9ydCwgYnV0IGEgVkYgcG9ydFxcbjExMTg6XFx0XFx0ICogaGFzIG5laXRoZXIgcXVldWVzIG5vciBOQVBJLCBhbmQgbG9vcGluZyBhIGZyYW1lIGJhY2sgbWVhbnNcXG4xMTE5OlxcdFxcdCAqIHJlY2VpdmluZyBpdC5cXG4xMTIwOlxcdFxcdCAqL1xcbjExMjE6XFx0XFx0bnMtXFx1MDAzZW5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNj0gfk5FVElGX0ZfTE9PUEJBQ0s7XFxuMTEyMjpcXHRcXHRucy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcXG4xMTIzOlxcdFxcbjExMjQ6XFx0XFx0cnRubF9sb2NrKCk7XFxuMTEyNTpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtXFx1MDAzZW5ldGRldik7XFxuMTEyNjpcXHRcXHRydG5sX3VubG9jaygpO1xcbjExMjc6XFx0XFx0cmV0dXJuIGVycjtcXG4xMTI4OlxcdH1cXG4xMTI5OlxcdFxcbjExMzA6XFx0c3RhdGljIHZvaWQgbnNpbV9leGl0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4xMTMxOlxcdHtcXG4xMTMyOlxcdFxcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVxcdTAwM2VuZXRkZXYpO1xcbjExMzM6XFx0XFx0bW9ja19waGNfZGVzdHJveShucy1cXHUwMDNlcGhjKTtcXG4xMTM0OlxcdH1cXG4xMTM1OlxcdFxcbjExMzY6XFx0c3RydWN0IG5ldGRldnNpbSAqbnNpbV9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG4xMTM3OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0LFxcbjExMzg6XFx0XFx0XFx0XFx0ICAgICAgdTggcGVybV9hZGRyW0VUSF9BTEVOXSlcXG4xMTM5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTc6MTQuMzIxOTQyMzc1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3ODQwNzE3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZGV2c2ltIFZGIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gdGhlIGBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKClgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIE5ldGRldnNpbSBWRiBwb3J0cy4gVGhlIGNvcmUgY2hhbmdlIGlzIHNpbXBsZTogaXQgKnJlbW92ZXMqIHRoZSBgTkVUSUZfRl9MT09QQkFDS2AgZmVhdHVyZSBmbGFnIGZyb20gYm90aCBgaHdfZmVhdHVyZXNgIGFuZCBgZmVhdHVyZXNgIGZvciB0aGVzZSBWRiBwb3J0cy4gVGhlIGxvZ2ljIGhlcmUgaXMgY2xlYXI6IFZGIHBvcnRzLCB1bmxpa2UgdGhlaXIgc3RhbmRhcmQgY291bnRlcnBhcnRzLCBsYWNrIHF1ZXVlcyBhbmQgTkFQSSBzdXBwb3J0LlxuXG5JIHJlbWVtYmVyIG5vdywgdGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBiZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGBuc2ltX3NldHVwKClgIGZ1bmN0aW9uIHdhcyBlbmFibGluZyBgTkVUSUZfRl9MT09QQkFDS2AuIElmIHRoYXQgZmxhZyByZW1haW5lZCBhY3RpdmUgb24gdGhlIFZGLCBhbnkgYXR0ZW1wdCB0byB1c2UgbG9vcGJhY2sgb24gYSBwb3J0IHdpdGhvdXQgdGhlIGFwcHJvcHJpYXRlIHF1ZXVlaW5nIG9yIE5BUEkgaW5mcmFzdHJ1Y3R1cmUgd2FzIGEgcmVjaXBlIGZvciBkaXNhc3RlciDigJMgcG90ZW50aWFsbHkgbGVhZGluZyB0byBjcmFzaGVzLCBkZXJlZmVyZW5jZXMsIG9yIGV2ZW4gcGFuaWNzIHJlbGF0ZWQgdG8gdGhlIHF1ZXVlIGxvZ2ljLCBhcyBteSBleHBlcmllbmNlIHNob3dzLlxuXG5Ob3csIGxldCdzIHJ1biB0aHJvdWdoIHRoZSB1c3VhbCByaXNrIGFuYWx5c2lzOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyBOb3BlLiBObyBjaGFuZ2VzIHRvIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0IHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm90IGEgZmFjdG9yIGhlcmUuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGEgZGlyZWN0IGZsYWcgbWFuaXB1bGF0aW9uLlxuMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8gY29uY2VybnMuXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgcGF0Y2ggb25seSBzZXRzIC8gY2xlYXJzIGEgc2luZ2xlIGZlYXR1cmUgZmxhZy5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSBjbGVhbiwgc3VyZ2ljYWwgcmVtb3ZhbCBvZiBhIGZlYXR1cmUgYml0LiBObyBtZW1vcnkgaXMgYmVpbmcgaW5pdGlhbGl6ZWQsIGFsbG9jYXRlZCwgb3IgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MuIFRoaXMgcGF0Y2ggaXMgbG93LXJpc2suXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBjb25zaWRlciB0aGUgS0FTQU4vS01TQU4gaW1wbGljYXRpb25zLiBTdGFuZGFyZCBLQVNBTiB0ZXN0aW5nIGlzIG9idmlvdXNseSBhcHBsaWNhYmxlIGFuZCBpbXBvcnRhbnQgZm9yIG5ldGRldiBjb25maWd1cmF0aW9uLCBmZWF0dXJlIGZsYWdzLCBwYWNrZXQgcGF0aHMsIGFuZCBpbnRlcmZhY2UgbGlmZWN5Y2xlLCBidXQgS01TQU4sIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3RvciwgaXMgbm90LiBUaGUgcGF0Y2ggb25seSB0b3VjaGVzIGEgc2ltcGxlIGZsYWc7IHRoZXJlIGFyZSBubyBtZW1vcnkgYnVmZmVycyBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgYmVpbmcgbW9kaWZpZWQuXG5cbkxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYW5kIGNvcnJlY3QgZml4LCBhcyBmYXIgYXMgSSBjYW4gc2VlLiBJJ20gc2F0aXNmaWVkLiBMZXQncyBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzgsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTc6MjAuMTA2MDE3MjY4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGRpc2FibGVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgZmxhZyBvbiBuZXRkZXZzaW0gVkYgZGV2aWNlcyAoY2xlYXJpbmcgYml0cyBpbiBod19mZWF0dXJlcyBhbmQgZmVhdHVyZXMpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGludHJvZHVjZSBwYWRkaW5nIGlzc3Vlcywgb3IgY2hhbmdlIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgZGlzYWJsZXMgdGhlIE5FVElGX0ZfTE9PUEJBQ0sgZmVhdHVyZSBmbGFnIG9uIG5ldGRldnNpbSBWRiBkZXZpY2VzIChjbGVhcmluZyBiaXRzIGluIGh3X2ZlYXR1cmVzIGFuZCBmZWF0dXJlcykuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgaW50cm9kdWNlIHBhZGRpbmcgaXNzdWVzLCBvciBjaGFuZ2UgYnVmZmVyIGxlbmd0aCBoYW5kbGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowg7g65[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 04:39:10 +0000 UTC FinishedAt: 2026-08-31 04:57:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "DEBUG_FS", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "a8455260b2e9c024d1872ac1c094793d55a7e537", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "DEBUG_FS", "INET" ], "series_id": "6e3862e5-35e9-41d2-93cf-7a345fa2d91e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nsim_create", "nsim_drv_port_add" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnNpbV9jcmVhdGUmIzM0OywKICAgICYjMzQ7bnNpbV9kcnZfcG9ydF9hZGQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGRpc2FibGVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgZmxhZyBvbiBuZXRkZXZzaW0gVkYgZGV2aWNlcyAoY2xlYXJpbmcgYml0cyBpbiBod19mZWF0dXJlcyBhbmQgZmVhdHVyZXMpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGludHJvZHVjZSBwYWRkaW5nIGlzc3Vlcywgb3IgY2hhbmdlIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgYW5kIGh3X2ZlYXR1cmVzIGZsYWcgZnJvbSBuZXRkZXZzaW0gVkYgcG9ydHMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGluIG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoKSB0byBwcmV2ZW50IHBhY2tldHMgZnJvbSBiZWluZyBsb29wZWQgYmFjayB0byBhIFZGIHBvcnQgbGFja2luZyBxdWV1ZXMgYW5kIE5BUEkuIFRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgc2ltdWxhdGVkIG5ldGRldiBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgbmV0ZGV2c2ltIHBvcnQgc2V0dXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyOGE3YWVkMzViYTk3NTY1OGI3ZjVhMDczNDY5NzkyNGMwMzY3ZDg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDQ6NTY6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5pbmRleCBiNGE5OWYzY2VhYzYwLi43YmI3MmFlYTkwYTAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbkBAIC0xMTEzLDYgJiM0MzsxMTEzLDE0IEBAIHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbV92ZihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbiBcdGludCBlcnI7XG4gXG4gXHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm5zaW1fdmZfbmV0ZGV2X29wcztcbiYjNDM7XG4mIzQzO1x0LyogbnNpbV9zZXR1cCgpIG9mZmVycyBORVRJRl9GX0xPT1BCQUNLIHRvIGV2ZXJ5IHBvcnQsIGJ1dCBhIFZGIHBvcnRcbiYjNDM7XHQgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFuc1xuJiM0MztcdCAqIHJlY2VpdmluZyBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcbiYjNDM7XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcbiYjNDM7XG4gXHRydG5sX2xvY2soKTtcbiBcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShucy1cdTAwM2VuZXRkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNDo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fY3JlYXRlJiMzNDssCiAgICAmIzM0O25zaW1fZHJ2X3BvcnRfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIE5FVElGX0ZfTE9PUEJBQ0sgZmVhdHVyZSBhbmQgaHdfZmVhdHVyZXMgZmxhZyBmcm9tIG5ldGRldnNpbSBWRiBwb3J0cyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gbnNpbV9pbml0X25ldGRldnNpbV92ZigpIHRvIHByZXZlbnQgcGFja2V0cyBmcm9tIGJlaW5nIGxvb3BlZCBiYWNrIHRvIGEgVkYgcG9ydCBsYWNraW5nIHF1ZXVlcyBhbmQgTkFQSS4gVGhpcyBkaXJlY3RseSBtb2RpZmllcyBzaW11bGF0ZWQgbmV0ZGV2IGZlYXR1cmUgY29uZmlndXJhdGlvbiBhbmQgaXMgcmVhY2hhYmxlIHZpYSBuZXRkZXZzaW0gcG9ydCBzZXR1cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4YTdhZWQzNWJhOTc1NjU4YjdmNWEwNzM0Njk3OTI0YzAzNjdkODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwNDo1NjozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYwppbmRleCBiNGE5OWYzY2VhYzYwLi43YmI3MmFlYTkwYTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCkBAIC0xMTEzLDYgJiM0MzsxMTEzLDE0IEBAIHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbV92ZihzdHJ1Y3QgbmV0ZGV2c2ltICpucykKIAlpbnQgZXJyOwogCiAJbnMtJmd0O25ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bnNpbV92Zl9uZXRkZXZfb3BzOwomIzQzOwomIzQzOwkvKiBuc2ltX3NldHVwKCkgb2ZmZXJzIE5FVElGX0ZfTE9PUEJBQ0sgdG8gZXZlcnkgcG9ydCwgYnV0IGEgVkYgcG9ydAomIzQzOwkgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFucwomIzQzOwkgKiByZWNlaXZpbmcgaXQuCiYjNDM7CSAqLwomIzQzOwlucy0mZ3Q7bmV0ZGV2LSZndDtod19mZWF0dXJlcyAmYW1wOz0gfk5FVElGX0ZfTE9PUEJBQ0s7CiYjNDM7CW5zLSZndDtuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7PSB+TkVUSUZfRl9MT09QQkFDSzsKJiM0MzsKIAlydG5sX2xvY2soKTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtJmd0O25ldGRldik7CiAJcnRubF91bmxvY2soKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGRldnNpbSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBicm9hZGVyIG5ldGRldnNpbSBjb250ZXh0LiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHNwZWNpZmljYWxseSBhbHRlcmluZyB0aGUgYG5zaW1faW5pdF9uZXRkZXZzaW1fdmZgIGZ1bmN0aW9uIHdpdGhpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jYC4gVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgYE5FVElGX0ZfTE9PUEJBQ0tgIGZlYXR1cmUgZnJvbSB0aGUgYGh3X2ZlYXR1cmVzYCBhbmQgYGZlYXR1cmVzYCBvZiB0aGUgbmV0d29yayBkZXZpY2UgKGBucy0mZ3Q7bmV0ZGV2YCkuCgpUaGUgY29tbWVudCBwcm92aWRlcyBnb29kIGNvbnRleHQ6IFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBwb3J0cywgdW5saWtlIHRoZWlyIHBhcmVudCBwb3J0cywgZG9uJiMzOTt0IGhhdmUgcXVldWVzIG9yIE5BUEksIHNvIGxvb3BpbmcgYSBmcmFtZSBiYWNrIHRvIGl0c2VsZiBkb2VzbiYjMzk7dCBtYWtlIHNlbnNlLiBJdOKAmXMgYSBnb29kIGNhdGNoIGJlY2F1c2Ugc2V0dGluZyBgTkVUSUZfRl9MT09QQkFDS2AgaXMgdXN1YWxseSBoYW5kbGVkIGluIGBuc2ltX3NldHVwKClgIGZvciBldmVyeSBwb3J0LCBidXQgdGhpcyBpcyBjbGVhcmx5IGFuIGV4Y2VwdGlvbiB3b3J0aCBoYW5kbGluZy4KCkkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjYWxsaW5nIGNvbnRleHQgb2YgYG5zaW1faW5pdF9uZXRkZXZzaW1fdmZgIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgbmV0ZGV2c2ltLiBUaGlzIGRyaXZlciBpcyBvZnRlbiB1c2VkIGZvciBzaW11bGF0aW9uIGFuZCB0ZXN0aW5nLCBzbyBJJiMzOTtsbCBjaGVjayBpdHMgcmVhY2hhYmlsaXR5IHdpdGhpbiBjb21tb24gdGVzdCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkuIEl0JiMzOTtzIHR5cGljYWxseSBjb25maWd1cmVkIHZpYSBzeXNmcywgZGV2bGluaywgb3IgcnRuZXRsaW5rLCBwZXJoYXBzIGRlYnVnZnMuIEZpbmFsbHksIEkmIzM5O2xsIHJldmlldyB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBuZXRkZXZzaW0gdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgYW5kIGlmIHRoaXMgY2hhbmdlIGhhcyBhbnkgYnVpbGQtdGltZSBpbXBsaWNhdGlvbnMuIE92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIHRhcmdldGVkIGZpeCBmb3IgYSBsb2dpY2FsIGluY29uc2lzdGVuY3kgaW4gdGhlIFZGIHNldHVwIHdpdGhpbiBuZXRkZXZzaW0sIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSBwZXJmb3JtYW5jZSBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRERVZTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlLTItXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGU6MzpvYmotJChDT05GSUdfTkVUREVWU0lNKSAmIzQzOz0gbmV0ZGV2c2ltLm9cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZS00LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgbmV0ZGV2c2ltIEtjb25maWcgYW5kIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXJ0aWN1bGFyIHN1YnN5c3RlbSwgdGhlIHNlbnNpYmxlIGZpcnN0IG1vdmUgaXMgdG8gZXhhbWluZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL0tjb25maWdgLCBhbmQgdGhlbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY2AuIFRoZSBLY29uZmlnIHdpbGwgb3V0bGluZSB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGlzLiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhpcyBzaW11bGF0ZWQgbmV0d29yayBkZXZpY2UgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSBmZWF0dXJlcyB0aGlzIHNpbXVsYXRlZCBkZXZpY2UgaGFzIGFuZCBob3cgdGhleSBhcmUgY29uZmlndXJlZC4KClRoZW4sIEkmIzM5O2xsIG1vdmUgb3ZlciB0byB0aGUgQyBmaWxlLCBgbmV0ZGV2LmNgLCB0byBncmFzcCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkLCBob3cgcGFja2V0cyBhcmUgaGFuZGxlZCAoaWYgYXQgYWxsKSwgdGhlIGRldmljZSBvcGVyYXRpb25zIHRoYXQgYXJlIGRlZmluZWQsIGFuZCBhbnkgaW50ZXJlc3Rpbmcgc2ltdWxhdGlvbiBhc3BlY3RzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkLCB0aGUgY29udHJvbCBmbG93LCBhbmQgYW55IGludGVyYWN0aW9uIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgdGhpcyB3aWxsIGJlIG15IGZvY3VzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRlc2lnbiBvZiB0aGUgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlLiBCeSBsb29raW5nIGF0IHRoZXNlIHR3byBrZXkgZmlsZXMsIEkgc2hvdWxkIGdldCBhIHByZXR0eSBnb29kIGhhbmRsZSBvbiB3aGF0IGBuZXRkZXZzaW1gIGlzIGFsbCBhYm91dC4gVGhpcyB3aWxsIGdpdmUgbWUgd2hhdCBJIG5lZWQgZm9yIGEgZ29vZCBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRERVZTSU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDQ6Y29uZmlnIE5FVERFVlNJTVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDUtXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZToKCioqTmF2aWdhdGluZyB0aGUgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2MDQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IG9wdGlvbnMgYXJlIGluIHRoYXQgYXJlYSBvZiB0aGUgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxpa2VseSBsb29raW5nIGZvciBhIHNwZWNpZmljIGRyaXZlciBmZWF0dXJlIG9yIGEgYnJvYWRlciBuZXR3b3JrIHNldHRpbmcgdGhhdCYjMzk7cyBjYXVzaW5nIG1lIHNvbWUgY29uZnVzaW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBwcm9tcHRzLCBhbmQgaGVscCB0ZXh0IOKAkyBhbnl0aGluZyB0aGF0IGNsYXJpZmllcyB0aGUgaW50ZW50IGFuZCBmdW5jdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyb3VuZCB0aGF0IHNwZWNpZmljIGxpbmUuIEkgaG9wZSBpdCYjMzk7cyB3ZWxsLWNvbW1lbnRlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XG4gNjAxOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L0tjb25maWdcJiMzNDtcbiA2MDI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcJiMzNDtcbiA2MDM6XHRcbiA2MDQ6XHRjb25maWcgTkVUREVWU0lNXG4gNjA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiA2MDY6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbiA2MDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDYwODpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxuIDYwOTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxuIDYxMDpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gNjExOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNjEyOlx0XHRzZWxlY3QgTkVUX1NIQVBFUlxuIDYxMzpcdFx0aGVscFxuIDYxNDpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgYW5kIHNvZnR3YXJlIG1vZGVsIHRoYXQgY2FuXG4gNjE1Olx0XHQgIGJlIHVzZWQgdG8gdGVzdCB2YXJpb3VzIGNvbnRyb2wgcGF0aCBuZXR3b3JraW5nIEFQSXMsIGVzcGVjaWFsbHlcbiA2MTY6XHRcdCAgSFctb2ZmbG9hZCByZWxhdGVkLlxuIDYxNzpcdFxuIDYxODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gNjE5Olx0XHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cbiA2MjA6XHRcbiA2MjE6XHRjb25maWcgTkVUX0ZBSUxPVkVSXG4gNjIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtGYWlsb3ZlciBkcml2ZXJcJiMzNDtcbiA2MjM6XHRcdHNlbGVjdCBGQUlMT1ZFUlxuIDYyNDpcdFx0aGVscFxuIDYyNTpcdFx0ICBUaGlzIHByb3ZpZGVzIGFuIGF1dG9tYXRlZCBmYWlsb3ZlciBtZWNoYW5pc20gdmlhIEFQSXMgdG8gY3JlYXRlXG4gNjI2Olx0XHQgIGFuZCBkZXN0cm95IGEgZmFpbG92ZXIgbWFzdGVyIG5ldGRldiBhbmQgbWFuYWdlcyBhIHByaW1hcnkgYW5kXG4gNjI3Olx0XHQgIHN0YW5kYnkgc2xhdmUgbmV0ZGV2cyB0aGF0IGdldCByZWdpc3RlcmVkIHZpYSB0aGUgZ2VuZXJpYyBmYWlsb3ZlclxuIDYyODpcdFx0ICBpbmZyYXN0cnVjdHVyZS4gVGhpcyBjYW4gYmUgdXNlZCBieSBwYXJhdmlydHVhbCBkcml2ZXJzIHRvIGVuYWJsZVxuIDYyOTpcdFx0ICBhbiBhbHRlcm5hdGUgbG93IGxhdGVuY3kgZGF0YXBhdGguIEl0IGFsc28gZW5hYmxlcyBsaXZlIG1pZ3JhdGlvbiBvZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMDcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIGRldmljZSBkcml2ZXIgZGV2ZWxvcG1lbnQ6CgoqKkRlZXAgRGl2ZTogbmV0ZGV2c2ltIFZGIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRvIHplcm8gaW4gb24gYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY2AuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgYW5kIHRha2UgYSBmcmVzaCBsb29rIGFyb3VuZCB0aGUgYG5zaW1faW5pdF9uZXRkZXZzaW1fdmZgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgc3BvdCB3aGVyZSB0aGUgdmlydHVhbCBmdW5jdGlvbiAoVkYpIGluaXRpYWxpemF0aW9uIGZvciB0aGUgbmV0ZGV2c2ltIGRyaXZlciBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVkYgaXMgc2V0IHVwIHdpdGhpbiB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSByZWNlbnQgY2hhbmdlcyB0byB0aGlzIGNvZGU/IEFueSByZWNlbnQgY29tbWl0cz8gV2hhdCBpcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBWRiBjb25maWd1cmF0aW9uPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBxdWlja2x5IHNjYW5uaW5nIHRoZSBmdW5jdGlvbiBpdHNlbGYgYW5kIHRoZW4gdHJhY2UgYW55IHJlbGF0ZWQgZnVuY3Rpb24gY2FsbHMgdG8gc2VlIGhvdyB0aGUgVkYgaXMgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIGBuZXRkZXZzaW1gIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBldmVuIGJhc2ljIGRldmljZSByZWdpc3RyYXRpb24sIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSB1c3VhbCBjdWxwcml0cyBpbiB0aGVzZSBraW5kcyBvZiBzY2VuYXJpb3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdG5zaW1fYnBmX3VuaW5pdChucyk7XG4xMTAxOlx0ZXJyX3JxX2Rlc3Ryb3k6XG4xMTAyOlx0XHRuc2ltX3F1ZXVlX3VuaW5pdChucyk7XG4xMTAzOlx0ZXJyX3V0bl9kZXN0cm95OlxuMTEwNDpcdFx0cnRubF91bmxvY2soKTtcbjExMDU6XHRcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVx1MDAzZW5ldGRldik7XG4xMTA2Olx0ZXJyX3BoY19kZXN0cm95OlxuMTEwNzpcdFx0bW9ja19waGNfZGVzdHJveShucy1cdTAwM2VwaGMpO1xuMTEwODpcdFx0cmV0dXJuIGVycjtcbjExMDk6XHR9XG4xMTEwOlx0XG4xMTExOlx0c3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuMTExMjpcdHtcbjExMTM6XHRcdGludCBlcnI7XG4xMTE0Olx0XG4xMTE1Olx0XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm5zaW1fdmZfbmV0ZGV2X29wcztcbjExMTY6XHRcbjExMTc6XHRcdC8qIG5zaW1fc2V0dXAoKSBvZmZlcnMgTkVUSUZfRl9MT09QQkFDSyB0byBldmVyeSBwb3J0LCBidXQgYSBWRiBwb3J0XG4xMTE4Olx0XHQgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFuc1xuMTExOTpcdFx0ICogcmVjZWl2aW5nIGl0LlxuMTEyMDpcdFx0ICovXG4xMTIxOlx0XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcbjExMjI6XHRcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH5ORVRJRl9GX0xPT1BCQUNLO1xuMTEyMzpcdFxuMTEyNDpcdFx0cnRubF9sb2NrKCk7XG4xMTI1Olx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtXHUwMDNlbmV0ZGV2KTtcbjExMjY6XHRcdHJ0bmxfdW5sb2NrKCk7XG4xMTI3Olx0XHRyZXR1cm4gZXJyO1xuMTEyODpcdH1cbjExMjk6XHRcbjExMzA6XHRzdGF0aWMgdm9pZCBuc2ltX2V4aXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuMTEzMTpcdHtcbjExMzI6XHRcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVx1MDAzZW5ldGRldik7XG4xMTMzOlx0XHRtb2NrX3BoY19kZXN0cm95KG5zLVx1MDAzZXBoYyk7XG4xMTM0Olx0fVxuMTEzNTpcdFxuMTEzNjpcdHN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4xMTM3Olx0XHRcdFx0ICAgICAgc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQsXG4xMTM4Olx0XHRcdFx0ICAgICAgdTggcGVybV9hZGRyW0VUSF9BTEVOXSlcbjExMzk6XHR7XG4xMTQwOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuMTE0MTpcdFx0c3RydWN0IG5ldGRldnNpbSAqbnM7XG4xMTQyOlx0XHRpbnQgZXJyO1xuMTE0MzpcdFxuMTE0NDpcdFx0ZGV2ID0gYWxsb2NfbmV0ZGV2X21xKHNpemVvZigqbnMpLCBcJiMzNDtldGglZFwmIzM0OywgTkVUX05BTUVfVU5LTk9XTiwgbnNpbV9zZXR1cCxcbjExNDU6XHRcdFx0XHQgICAgICBuc2ltX2Rldi1cdTAwM2Vuc2ltX2J1c19kZXYtXHUwMDNlbnVtX3F1ZXVlcyk7XG4xMTQ2Olx0XHRpZiAoIWRldilcbjExNDc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4xMTQ4Olx0XG4xMTQ5Olx0XHRpZiAocGVybV9hZGRyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTk1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0IHByb2Nlc3NlczoKCioqRGVsdmluZyBpbnRvIE5ldHdvcmsgRGV2aWNlIFNpbXVsYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IG9mIHRoaXMgc2ltdWxhdGlvbiwgcGFydGljdWxhcmx5IGhvdyB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGNyZWF0ZWQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0d28ga2V5IGZ1bmN0aW9uczogYG5zaW1faW5pdF9uZXRkZXZzaW1fdmZgIGFuZCBgbnNpbV9jcmVhdGVgLiBJIHdhbnQgdG8ga25vdywgdW5lcXVpdm9jYWxseSwgKndoZXJlKiBpbiB0aGUgY29kZSB0aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBiZWluZyBjYWxsZWQuIFRoYXQgd2lsbCBwcm92aWRlIHRoZSBjcml0aWNhbCBjb250ZXh0IEkgbmVlZCB0byBncmFzcCBob3cgdGhlIHNpbXVsYXRlZCBuZXR3b3JrIGRldmljZXMgYXJlIGludGVncmF0ZWQgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgb2YgdGhpcyBuZXR3b3JrIHNpbXVsYXRpb24uIEZpbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSB0aGUgZmlyc3QgZXNzZW50aWFsIHN0ZXAgaW4gdHJ1bHkgdW5kZXJzdGFuZGluZyB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnNpbV9pbml0X25ldGRldnNpbV92Znxuc2ltX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTM4MD1zdGF0aWMgaW50IF9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQzMy1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDM0Olx0bnNpbV9kZXZfcG9ydC1cdTAwM2VucyA9IG5zaW1fY3JlYXRlKG5zaW1fZGV2LCBuc2ltX2Rldl9wb3J0LCBwZXJtX2FkZHIpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0MzUtXHRpZiAoSVNfRVJSKG5zaW1fZGV2X3BvcnQtXHUwMDNlbnMpKSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTQwNT1zdGF0aWMgaW50IG5zaW1fcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTQxNi1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzo0MTc6c3RhdGljIGludCBuc2ltX2NyZWF0ZV9wYWdlX3Bvb2woc3RydWN0IHBhZ2VfcG9vbCAqKnAsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy00MTgte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz00Mzg9c3RhdGljIGludCBuc2ltX2luaXRfbmFwaShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNDUyLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjQ1MzpcdFx0ZXJyID0gbnNpbV9jcmVhdGVfcGFnZV9wb29sKFx1MDAyNnJxLVx1MDAzZXBhZ2VfcG9vbCwgXHUwMDI2cnEtXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNDU0LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz03NTE9bnNpbV9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNzY0LVx0XHRcdHJldHVybiAtRU5FVERPV047XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NzY1Olx0XHRyZXR1cm4gbnNpbV9jcmVhdGVfcGFnZV9wb29sKFx1MDAyNnFtZW0tXHUwMDNlcHAsIFx1MDAyNm5zLVx1MDAzZXJxW2lkeF0tXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNzY2LVx0fVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy03NzEtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NzcyOlx0ZXJyID0gbnNpbV9jcmVhdGVfcGFnZV9wb29sKFx1MDAyNnFtZW0tXHUwMDNlcnEtXHUwMDNlcGFnZV9wb29sLCBcdTAwMjZxbWVtLVx1MDAzZXJxLVx1MDAzZW5hcGkpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTc3My1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTEwNDA9c3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTEwLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjExMTE6c3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExMTIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMTMwPXN0YXRpYyB2b2lkIG5zaW1fZXhpdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExMzUtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTEzNjpzdHJ1Y3QgbmV0ZGV2c2ltICpuc2ltX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExMzctXHRcdFx0ICAgICAgc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExNjMtXHRlbHNlXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTE2NDpcdFx0ZXJyID0gbnNpbV9pbml0X25ldGRldnNpbV92Zihucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE2NS1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTEwNz1zdHJ1Y3QgbmV0ZGV2c2ltIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTY1LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE2NjpzdHJ1Y3QgbmV0ZGV2c2ltICpuc2ltX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE2Ny1cdFx0XHQgICAgICBzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXRkZXZzaW0gQnVnZml4IGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBuc2ltX2NyZWF0ZSgpYCBpcyB0aGUgZW50cnkgcG9pbnQsIGNhbGxlZCB3aGVuIGNyZWF0aW5nIGEgcG9ydCB3aXRoaW4gdGhlIG5ldGRldnNpbSBkcml2ZXIuIFRoYXTigJlzIHVzdWFsbHkgZG9uZSB0aHJvdWdoIGBkZXZsaW5rYCBvciBkaXJlY3QgaW50ZXJhY3Rpb24gdmlhIHN5c2ZzLCByaWdodD8gTmV0ZGV2c2ltLCBvZiBjb3Vyc2UsIGlzIHRoYXQgYmVhdXRpZnVsIHZpcnR1YWwgbW9jayBkcml2ZXIgaW4gdGhlIExpbnV4IGtlcm5lbCDigJMgcGVyZmVjdCBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gTm8gcGh5c2ljYWwgaGFyZHdhcmUgbmVlZGVkLCBhIGRyZWFtIGNvbWUgdHJ1ZSEKClRoZSBjcml0aWNhbCBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKClgLiBJdCYjMzk7cyByZW1vdmluZyBgTkVUSUZfRl9MT09QQkFDS2AgZnJvbSB0aGUgYGh3X2ZlYXR1cmVzYCBhbmQgYGZlYXR1cmVzYCBsaXN0cy4gQWgsIHJpZ2h0LCBiZWNhdXNlIGBuc2ltX3NldHVwKClgICpzZXRzKiBsb29wYmFjaywgYnV0IGEgdmlydHVhbCBmdW5jdGlvbiAoVkYpIHBvcnQgaW4gbmV0ZGV2c2ltIGRvZXNuJiMzOTt0IGhhdmUgaXRzIG93biBxdWV1ZXMgb3IgTkFQSS4gTG9vcGluZyBiYWNrIGEgZnJhbWUgaGVyZSBpcyBhc2tpbmcgZm9yIHRyb3VibGUg4oCTIHByb2JhYmx5IGEgY3Jhc2ggb3Igc29tZSBuYXN0eSB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiB5b3UgdHJ5IHRvIHNlbmQgYSBmcmFtZSB3aXRoIGxvb3BiYWNrIGVuYWJsZWQgb24gYSBWRiBpbnRlcmZhY2UgaW4gbmV0ZGV2c2ltLiBUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBidWdmaXguCgpUaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nICptb3JlKj8gQWJzb2x1dGVseS4gTmV0ZGV2c2ltIGlzIGFscmVhZHkgYSBwcmltZSB0YXJnZXQsIGFuZCB0aGlzIGZpeCBoaWdobGlnaHRzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24uIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIGBuc2ltX2NyZWF0ZWAgaXMgYW4gb2J2aW91cyBjaG9pY2Ugc2luY2UgaXQmIzM5O3MgdGhlIG1haW4gZW50cnkuIFRoZW4sIEkgc2hvdWxkIGxvb2sgYXQgYG5zaW1fZGV2X3BvcnRfYWRkYCAoYW5kIGl0cyBpbnRlcm5hbCBgX19uc2ltX2Rldl9wb3J0X2FkZGAgY291bnRlcnBhcnQpLCBhbmQgZGVmaW5pdGVseSBgbnNpbV9pbml0X25ldGRldnNpbV92ZmAgd2hpY2ggaXMgdGhlIHN0YXRpYyBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIHVwZGF0ZWQuIFNpbmNlIEkmIzM5O20gaW4gaGVyZSwgSSYjMzk7bGwgZ28gYmFjayBhbmQgY2hlY2sgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiBgZGV2LmNgIGFuZCBgbmV0ZGV2LmNgIGFzIHdlbGwuIExldOKAmXMgZ2V0IHRvIHdvcmshCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25zaW1fZGV2X3BvcnRfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz01NzM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjU3NDpfX25zaW1fZGV2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNTc1LVx0XHQgICAgdW5zaWduZWQgaW50IHBvcnRfaW5kZXgsIHU4IHBlcm1fYWRkcltFVEhfQUxFTl0pO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz01OTI9c3RhdGljIGludCBuc2ltX2Vzd19zd2l0Y2hkZXZfZW5hYmxlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTU5OC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5zaW1fZGV2X2dldF92ZnMobnNpbV9kZXYpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjU5OTpcdFx0ZXJyID0gX19uc2ltX2Rldl9wb3J0X2FkZChuc2ltX2RldiwgTlNJTV9ERVZfUE9SVF9UWVBFX1ZGLCBpLCBOVUxMKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02MDAtXHRcdGlmIChlcnIpIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTM1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIG5zaW1fZGV2X2Rldmxpbmtfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMzc5LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjEzODA6c3RhdGljIGludCBfX25zaW1fZGV2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTM4MS1cdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHBvcnRfaW5kZXgsIHU4IHBlcm1fYWRkcltFVEhfQUxFTl0pXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE0ODA9c3RhdGljIHZvaWQgbnNpbV9kZXZfcG9ydF9kZWxfYWxsKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0ODgtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTQ4OTpzdGF0aWMgaW50IG5zaW1fZGV2X3BvcnRfYWRkX2FsbChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0OTAtXHRcdFx0XHQgdW5zaWduZWQgaW50IHBvcnRfY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0OTQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwb3J0X2NvdW50OyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE0OTU6XHRcdGVyciA9IF9fbnNpbV9kZXZfcG9ydF9hZGQobnNpbV9kZXYsIE5TSU1fREVWX1BPUlRfVFlQRV9QRiwgaSwgTlVMTCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTQ5Ni1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTUwNj1zdGF0aWMgaW50IG5zaW1fZGV2X3JlbG9hZF9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU0Ni1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNTQ3Olx0ZXJyID0gbnNpbV9kZXZfcG9ydF9hZGRfYWxsKG5zaW1fZGV2LCBuc2ltX2J1c19kZXYtXHUwMDNlcG9ydF9jb3VudCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU0OC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE1NzM9aW50IG5zaW1fZHJ2X3Byb2JlKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2Rldilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTY1NS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNjU2Olx0ZXJyID0gbnNpbV9kZXZfcG9ydF9hZGRfYWxsKG5zaW1fZGV2LCBuc2ltX2J1c19kZXYtXHUwMDNlcG9ydF9jb3VudCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTY1Ny1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE3NTQ9aW50IG5zaW1fZHJ2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc2My1cdGVsc2VcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNzY0Olx0XHRlcnIgPSBfX25zaW1fZGV2X3BvcnRfYWRkKG5zaW1fZGV2LCB0eXBlLCBwb3J0X2luZGV4LCBwZXJtX2FkZHIpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE3NjUtXHRkZXZsX3VubG9jayhwcml2X3RvX2RldmxpbmsobnNpbV9kZXYpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM4OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbmV0ZGV2c2ltYCBGdW5jdGlvbiBTY29wZSoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBuZXRkZXZzaW1gLiBJIG5lZWQgdG8gc3RhcnQgYnkgY29uZmlybWluZyB0aGUgc2NvcGUgb2YgYG5zaW1fZHJ2X3BvcnRfYWRkYCBhbmQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYCB3aXRoaW4gdGhhdCBtb2R1bGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VycHJpc2luZyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgb3IgdW5pbnRlbmRlZCBnbG9iYWwgYWNjZXNzIGdvaW5nIG9uIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIGZvciBhIGNvbnRyb2xsZWQsIGludGVybmFsLXRvLXRoZS1kcml2ZXIgdXNhZ2UsIG9yIGlmIHRoZXJlJiMzOTtzIGEgYnJvYWRlciwgcGVyaGFwcyB1bmludGVuZGVkLCBleHBvc3VyZSB0byBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBvciBldmVuIHVzZXIgc3BhY2UgdGhhdCBuZWVkcyB0byBiZSBzY3J1dGluaXplZC4gVW5kZXJzdGFuZGluZyB0aGUgYWNjZXNzIHBhdGhzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBtb2R1bGUmIzM5O3Mgb3ZlcmFsbCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIGFuZCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBtYWludGVuYW5jZSBpc3N1ZXMuIFRoaXMgaXMgYSBzdGFuZGFyZCBwcm9jZWR1cmUgd2hlbiByZXZpZXdpbmcgYW55IG5ldHdvcmtpbmcgZHJpdmVyIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgbnNpbV98XnN0cnVjdCBuZXRkZXZzaW0gXFwqbnNpbV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jPTEwND1uc2ltX2JwZl9vZmZsb2FkKHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGJvb2wgb2xkcHJvZylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtMTE3LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jOjExODppbnQgbnNpbV9icGZfc2V0dXBfdGNfYmxvY2tfY2IoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtMTE5LVx0XHRcdCAgICAgICB2b2lkICp0eXBlX2RhdGEsIHZvaWQgKmNiX3ByaXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jLTE2Ni1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYzoxNjc6aW50IG5zaW1fYnBmX2Rpc2FibGVfdGMoc3RydWN0IG5ldGRldnNpbSAqbnMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtMTY4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmM9NTM0PXN0YXRpYyB2b2lkIG5zaW1fYnBmX21hcF9mcmVlKHN0cnVjdCBicGZfb2ZmbG9hZGVkX21hcCAqb2ZmbWFwKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy01NDctXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmM6NTQ4OmludCBuc2ltX2JwZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ZGV2X2JwZiAqYnBmKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jLTU0OS17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jLTU4MC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYzo1ODE6aW50IG5zaW1fYnBmX2Rldl9pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtNTgyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmM9NjA5PXZvaWQgbnNpbV9icGZfZGV2X2V4aXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtNjE1LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jOjYxNjppbnQgbnNpbV9icGZfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy02MTcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYz00OTE9c3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG5zaW1fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00OTYtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDk3OmludCBuc2ltX2J1c19pbml0KHZvaWQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDk4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTUwNj1zdGF0aWMgaW50IG5zaW1fZGV2X3JlbG9hZF9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldixcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU3Mi1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNTczOmludCBuc2ltX2Rydl9wcm9iZShzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU3NC17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE3NDI9X19uc2ltX2Rldl9wb3J0X2xvb2t1cChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNzUzLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE3NTQ6aW50IG5zaW1fZHJ2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNzU1LVx0XHQgICAgICB1bnNpZ25lZCBpbnQgcG9ydF9pbmRleCwgdTggcGVybV9hZGRyW0VUSF9BTEVOXSlcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc2OC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNzY5OmludCBuc2ltX2Rydl9wb3J0X2RlbChzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc3MC1cdFx0ICAgICAgdW5zaWduZWQgaW50IHBvcnRfaW5kZXgpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE3ODUtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTc4NjppbnQgbnNpbV9kcnZfY29uZmlndXJlX3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc4Ny1cdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3Zmcylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTgyMy1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODI0OmludCBuc2ltX2Rldl9pbml0KHZvaWQpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTgyNS17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2hlYWx0aC5jPTE3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX2Rldl9oZWFsdGhfYnJlYWtfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaGVhbHRoLmMtMTc3LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2hlYWx0aC5jOjE3ODppbnQgbnNpbV9kZXZfaGVhbHRoX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldiwgc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaGVhbHRoLmMtMTc5LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaHdzdGF0cy5jPTM5OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5zaW1fZGV2X2h3c3RhdHNfZm9wcyBuc2ltX2Rldl9od3N0YXRzX2wzX2ZhaWxfZm9wcyA9XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2h3c3RhdHMuYy00MDMtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaHdzdGF0cy5jOjQwNDppbnQgbnNpbV9kZXZfaHdzdGF0c19pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaHdzdGF0cy5jLTQwNS17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTExMzA9c3RhdGljIHZvaWQgbnNpbV9leGl0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTEzNS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMTM2OnN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTEzNy1cdFx0XHQgICAgICBzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MTA3PXN0cnVjdCBuZXRkZXZzaW0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0xNjUtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MTY2OnN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTY3LVx0XHRcdCAgICAgIHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xNzU9dm9pZCBuc2ltX3VkcF90dW5uZWxzX2RlYnVnZnNfY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE3NjppbnQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE3Ny1cdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xNzg9dm9pZCBuc2ltX3VkcF90dW5uZWxzX2luZm9fZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTgwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoxODE6aW50IG5zaW1fYnBmX2Rldl9pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE4Mi12b2lkIG5zaW1fYnBmX2Rldl9leGl0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE4MzppbnQgbnNpbV9icGZfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTg0LXZvaWQgbnNpbV9icGZfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoxODU6aW50IG5zaW1fYnBmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRkZXZfYnBmICpicGYpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE4NjppbnQgbnNpbV9icGZfZGlzYWJsZV90YyhzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MTg3OmludCBuc2ltX2JwZl9zZXR1cF90Y19ibG9ja19jYihlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0xODgtXHRcdFx0ICAgICAgIHZvaWQgKnR5cGVfZGF0YSwgdm9pZCAqY2JfcHJpdik7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTI0MT1zdHJ1Y3QgbnNpbV9kZXZfaGVhbHRoIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjQ5LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjI1MDppbnQgbnNpbV9kZXZfaGVhbHRoX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldiwgc3RydWN0IGRldmxpbmsgKmRldmxpbmspO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTI1MS12b2lkIG5zaW1fZGV2X2hlYWx0aF9leGl0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0yNjE9c3RydWN0IG5zaW1fZGV2X2h3c3RhdHMge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0yNzEtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MjcyOmludCBuc2ltX2Rldl9od3N0YXRzX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjczLXZvaWQgbnNpbV9kZXZfaHdzdGF0c19leGl0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0yNzUtI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTQU1QTEUpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6Mjc2OmludCBuc2ltX2Rldl9wc2FtcGxlX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjc3LXZvaWQgbnNpbV9kZXZfcHNhbXBsZV9leGl0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0zODM9c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpuc2ltX2Rldl9uZXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldilcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMzg3LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjM4ODppbnQgbnNpbV9kZXZfaW5pdCh2b2lkKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0zODktdm9pZCBuc2ltX2Rldl9leGl0KHZvaWQpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjM5MDppbnQgbnNpbV9kcnZfcHJvYmUoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2KTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0zOTEtdm9pZCBuc2ltX2Rydl9yZW1vdmUoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2KTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDozOTI6aW50IG5zaW1fZHJ2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0zOTMtXHRcdCAgICAgIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTM5NC1cdFx0ICAgICAgdTggcGVybV9hZGRyW0VUSF9BTEVOXSk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6Mzk1OmludCBuc2ltX2Rydl9wb3J0X2RlbChzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMzk2LVx0XHQgICAgICBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTM5Ny1cdFx0ICAgICAgdW5zaWduZWQgaW50IHBvcnRfaW5kZXgpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjM5ODppbnQgbnNpbV9kcnZfY29uZmlndXJlX3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMzk5LVx0XHRcdCAgIHVuc2lnbmVkIGludCBudW1fdmZzKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDQ1PXN0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX21hY3NlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDUwLSNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTE6aW50IG5zaW1fcHNwX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1Mi12b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ2OD1uc2ltX3BzcF9oYW5kbGVfZXh0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0KSB7fVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NzAtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDcxOmludCBuc2ltX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ3Mi1cdFx0ICB2b2lkICp0eXBlX2RhdGEpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NzU9c3RydWN0IG5zaW1fYnVzX2RldiB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ4Ni1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0ODc6aW50IG5zaW1fYnVzX2luaXQodm9pZCk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDg4LXZvaWQgbnNpbV9idXNfZXhpdCh2b2lkKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jPTE5MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX3BzYW1wbGVfZW5hYmxlX2ZvcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzYW1wbGUuYy0xOTctXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jOjE5ODppbnQgbnNpbV9kZXZfcHNhbXBsZV9pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNhbXBsZS5jLTE5OS17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTI2Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX3BzcF9yZXJlZ19mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzMtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6Mjc0OmludCBuc2ltX3BzcF9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI3NS17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmM9MTE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5zaW1fdWRwX3R1bm5lbHNfaW5mb19yZXNldF9mb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jLTEyNC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jOjEyNTppbnQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3VkcF90dW5uZWxzLmMtMTI2LVx0XHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDQ1CgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBORVRERVZTSU0gQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZCBmb3IgYE5FVERFVlNJTWAuIExvb2tpbmcgYXQgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLCBpdCBsb29rcyBsaWtlIEkgbmVlZCBgTkVUREVWU0lNYCBpdHNlbGYsIG5hdHVyYWxseSwgYnV0IGFsc28gYERFQlVHX0ZTYCBhbmQgYElORVRgLiBJIHNlZSBhIGNvdXBsZSBvZiBkZXBlbmRlbmNpZXMsIGBQU0FNUExFYCBhbmQgYFBUUF8xNTg4X0NMT0NLX01PQ0tgLCBidXQgdGhvc2UgY2FuIGJlIGRpc2FibGVkIHNpbmNlIEkgZG9uJiMzOTt0IG5lZWQgdGhlbSBmb3IgbXkgY3VycmVudCBuZWVkcy4gVGhlcmUgYXJlIHNvbWUgYHNlbGVjdGAgZGlyZWN0aXZlcywgYE5FVF9ERVZMSU5LYCwgYFBBR0VfUE9PTGAsIGFuZCBgTkVUX1NIQVBFUmAsIHdoaWNoIHNob3VsZCBiZSBmaW5lLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBsaXN0IGFnYWluc3QgYW55IG90aGVyIHJlbGV2YW50IGZpbGVzIG9yIGNvbmZpZ3VyYXRpb25zLiBKdXN0IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlLCBgREVCVUdfRlNgIGFuZCBgTkVUREVWU0lNYCBhcmUgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLgoKSSBzaG91bGQgbWFrZSBzdXJlIHRoZXNlIGZvY3VzIHN5bWJvbHMgYXJlIGNvbnNpZGVyZWQ6IGBuc2ltX2NyZWF0ZWAsIGBuc2ltX2Rydl9wb3J0X2FkZGAsIGFuZCBgbnNpbV9kcnZfcHJvYmVgLCBlc3BlY2lhbGx5IGluIGNvbnRleHQgb2YgdGhhdCBwYXRjaC4KCkFscmlnaHQsIG9uZSBmaW5hbCBzd2VlcC4gSSBuZWVkIHRvIG5vdGUgdGhhdCB0aGlzIHBhdGNoIGlzIHdvcnRod2hpbGUgdG8gZnV6eiwgYXMgaXQgaXMgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIGEgbmV0d29yayBkZXZpY2UgYW5kIHRodXMgcG90ZW50aWFsbHkgYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBuc2ltX2NyZWF0ZWAgYW5kIGBuc2ltX2Rydl9wb3J0X2FkZGAgc3BlY2lmaWNhbGx5LiBUaGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbnMgSSBuZWVkIGFyZSBgTkVUREVWU0lNYCwgYERFQlVHX0ZTYCwgYW5kIGBJTkVUYC4KClRoZSByZWFzb25pbmcgaXMgc29saWQ6IHRoZSBwYXRjaCBtb2RpZmllcyBgbnNpbV9pbml0X25ldGRldnNpbV92ZigpYCB3aGljaCBpcyBpbnZva2VkIHZpYSBgbnNpbV9jcmVhdGUoKWAgYW5kIGFmZmVjdHMgdGhlIG5ldGRldnNpbSBkZXZpY2UgY29uZmlndXJhdGlvbiBhbmQgbmV0d29yayBzdGFjayBwYWNrZXQgaGFuZGxpbmcgZm9yIHZpcnR1YWwgc2ltdWxhdGVkIG5ldGRldnMgYnkgcmVtb3ZpbmcgbG9vcGJhY2sgZmxhZ3MgZnJvbSBuZXRkZXZzaW0gVkYgcG9ydHMuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCByZWdhcmRpbmcgVkYgY29uZmlndXJhdGlvbiBhbmQgaG93IHNpbXVsYXRlZCBwYWNrZXRzIGFyZSBoYW5kbGVkIGluIFZGIGVudmlyb25tZW50cy4gSSB0aGluayBJJiMzOTttIGdvb2QgdG8gZ28uCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnNpbV9jcmVhdGUmIzM0OywKICAgICYjMzQ7bnNpbV9kcnZfcG9ydF9hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgTkVUSUZfRl9MT09QQkFDSyBmZWF0dXJlIGFuZCBod19mZWF0dXJlcyBmbGFnIGZyb20gbmV0ZGV2c2ltIFZGIHBvcnRzIGR1cmluZyBpbml0aWFsaXphdGlvbiBpbiBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKCkgdG8gcHJldmVudCBwYWNrZXRzIGZyb20gYmVpbmcgbG9vcGVkIGJhY2sgdG8gYSBWRiBwb3J0IGxhY2tpbmcgcXVldWVzIGFuZCBOQVBJLiBUaGlzIGRpcmVjdGx5IG1vZGlmaWVzIHNpbXVsYXRlZCBuZXRkZXYgZmVhdHVyZSBjb25maWd1cmF0aW9uIGFuZCBpcyByZWFjaGFibGUgdmlhIG5ldGRldnNpbSBwb3J0IHNldHVwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25zaW1fY3JlYXRlJiMzNDssCiAgICAmIzM0O25zaW1fZHJ2X3BvcnRfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIE5FVElGX0ZfTE9PUEJBQ0sgZmVhdHVyZSBhbmQgaHdfZmVhdHVyZXMgZmxhZyBmcm9tIG5ldGRldnNpbSBWRiBwb3J0cyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gbnNpbV9pbml0X25ldGRldnNpbV92ZigpIHRvIHByZXZlbnQgcGFja2V0cyBmcm9tIGJlaW5nIGxvb3BlZCBiYWNrIHRvIGEgVkYgcG9ydCBsYWNraW5nIHF1ZXVlcyBhbmQgTkFQSS4gVGhpcyBkaXJlY3RseSBtb2RpZmllcyBzaW11bGF0ZWQgbmV0ZGV2IGZlYXR1cmUgY29uZmlndXJhdGlvbiBhbmQgaXMgcmVhY2hhYmxlIHZpYSBuZXRkZXZzaW0gcG9ydCBzZXR1cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNDo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgZGlzYWJsZXMgdGhlIE5FVElGX0ZfTE9PUEJBQ0sgZmVhdHVyZSBmbGFnIG9uIG5ldGRldnNpbSBWRiBkZXZpY2VzIChjbGVhcmluZyBiaXRzIGluIGh3X2ZlYXR1cmVzIGFuZCBmZWF0dXJlcykuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgaW50cm9kdWNlIHBhZGRpbmcgaXNzdWVzLCBvciBjaGFuZ2UgYnVmZmVyIGxlbmd0aCBoYW5kbGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4YTdhZWQzNWJhOTc1NjU4YjdmNWEwNzM0Njk3OTI0YzAzNjdkODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwNDo1NjozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYwppbmRleCBiNGE5OWYzY2VhYzYwLi43YmI3MmFlYTkwYTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jCkBAIC0xMTEzLDYgJiM0MzsxMTEzLDE0IEBAIHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbV92ZihzdHJ1Y3QgbmV0ZGV2c2ltICpucykKIAlpbnQgZXJyOwogCiAJbnMtJmd0O25ldGRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7bnNpbV92Zl9uZXRkZXZfb3BzOwomIzQzOwomIzQzOwkvKiBuc2ltX3NldHVwKCkgb2ZmZXJzIE5FVElGX0ZfTE9PUEJBQ0sgdG8gZXZlcnkgcG9ydCwgYnV0IGEgVkYgcG9ydAomIzQzOwkgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFucwomIzQzOwkgKiByZWNlaXZpbmcgaXQuCiYjNDM7CSAqLwomIzQzOwlucy0mZ3Q7bmV0ZGV2LSZndDtod19mZWF0dXJlcyAmYW1wOz0gfk5FVElGX0ZfTE9PUEJBQ0s7CiYjNDM7CW5zLSZndDtuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7PSB+TkVUSUZfRl9MT09QQkFDSzsKJiM0MzsKIAlydG5sX2xvY2soKTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtJmd0O25ldGRldik7CiAJcnRubF91bmxvY2soKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRkZXZzaW0gVmlydHVhbCBGdW5jdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jYC4gSXQgc2VlbXMgdGhleSYjMzk7cmUgbWFraW5nIGEgY2hhbmdlIHJlbGF0ZWQgdG8gdGhlIHZpcnR1YWwgZnVuY3Rpb24gKFZGKSBwb3J0IHdpdGhpbiB0aGUgbmV0ZGV2c2ltIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBoYW5kbGluZyB0aGUgYE5FVElGX0ZfTE9PUEJBQ0tgIGZlYXR1cmUuIFRoZSBkaWZmIGhpZ2hsaWdodHMgdGhhdCB0aGUgVkYgcG9ydCwgdW5saWtlIHRoZSBtYWluIG5ldGRldnNpbSBkZXZpY2UsIGRvZXNuJiMzOTt0IGFjdHVhbGx5IGhhdmUgcXVldWVzIG9yIE5BUEksIGFuZCB0aGVyZWZvcmUsIHNob3VsZG4mIzM5O3QgYmUgYWR2ZXJ0aXNpbmcgb3IgaW1wbGVtZW50aW5nIGxvb3BiYWNrIGZ1bmN0aW9uYWxpdHkuCgpUaGUga2V5IGxpbmVzIGFyZSB3aGVyZSB0aGUgY29kZSBpcyBjbGVhcmluZyB0aGUgYE5FVElGX0ZfTE9PUEJBQ0tgIGJpdCBmcm9tIGJvdGggYG5zLSZndDtuZXRkZXYtJmd0O2h3X2ZlYXR1cmVzYCBhbmQgYG5zLSZndDtuZXRkZXYtJmd0O2ZlYXR1cmVzYC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBlbmFibGluZyBsb29wYmFjayBvbiBhIFZGIHdvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciwgYXMgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGFjdHVhbGx5ICYjMzQ7bG9vcCYjMzQ7IGEgZnJhbWUgYmFjayB0byBpdHNlbGYgaW4gdGhpcyBjb250ZXh0LiBJdCB3b3VsZCBiZSByZWNlaXZlZCwgd2hpY2ggaXMgbm90IGRlc2lyZWQgZnVuY3Rpb25hbGl0eSwgYW5kIGNvdWxkIGNhdXNlIGNvbmZ1c2luZyBpc3N1ZXMuCgpUaGUgcGF0Y2ggc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBjb3JyZWN0LiBSZW1vdmluZyB0aGUgbG9vcGJhY2sgZmVhdHVyZSBwcmV2ZW50cyB1bmludGVuZGVkIGJlaGF2aW9yIHRoYXQgY291bGQgcmVzdWx0IGZyb20gdGhlIG1pc21hdGNoIGJldHdlZW4gdGhlIGFkdmVydGlzZWQgY2FwYWJpbGl0aWVzIGFuZCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBWRi4gSSYjMzk7ZCB3YW50IHRvIGNoZWNrLCBvZiBjb3Vyc2UsIHRoYXQgdGhpcyBpcyB0aGUgb25seSBwbGFjZSBsb29wYmFjayBpcyBiZWluZyBhZHZlcnRpc2VkIGZvciBhIFZGLCBidXQgdGhpcyBjaGFuZ2UgaXRzZWxmIGFwcGVhcnMgc291bmQgYW5kIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDQ6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdG5zaW1fYnBmX3VuaW5pdChucyk7XG4xMTAxOlx0ZXJyX3JxX2Rlc3Ryb3k6XG4xMTAyOlx0XHRuc2ltX3F1ZXVlX3VuaW5pdChucyk7XG4xMTAzOlx0ZXJyX3V0bl9kZXN0cm95OlxuMTEwNDpcdFx0cnRubF91bmxvY2soKTtcbjExMDU6XHRcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVx1MDAzZW5ldGRldik7XG4xMTA2Olx0ZXJyX3BoY19kZXN0cm95OlxuMTEwNzpcdFx0bW9ja19waGNfZGVzdHJveShucy1cdTAwM2VwaGMpO1xuMTEwODpcdFx0cmV0dXJuIGVycjtcbjExMDk6XHR9XG4xMTEwOlx0XG4xMTExOlx0c3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuMTExMjpcdHtcbjExMTM6XHRcdGludCBlcnI7XG4xMTE0Olx0XG4xMTE1Olx0XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm5zaW1fdmZfbmV0ZGV2X29wcztcbjExMTY6XHRcbjExMTc6XHRcdC8qIG5zaW1fc2V0dXAoKSBvZmZlcnMgTkVUSUZfRl9MT09QQkFDSyB0byBldmVyeSBwb3J0LCBidXQgYSBWRiBwb3J0XG4xMTE4Olx0XHQgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFuc1xuMTExOTpcdFx0ICogcmVjZWl2aW5nIGl0LlxuMTEyMDpcdFx0ICovXG4xMTIxOlx0XHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcbjExMjI6XHRcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH5ORVRJRl9GX0xPT1BCQUNLO1xuMTEyMzpcdFxuMTEyNDpcdFx0cnRubF9sb2NrKCk7XG4xMTI1Olx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtXHUwMDNlbmV0ZGV2KTtcbjExMjY6XHRcdHJ0bmxfdW5sb2NrKCk7XG4xMTI3Olx0XHRyZXR1cm4gZXJyO1xuMTEyODpcdH1cbjExMjk6XHRcbjExMzA6XHRzdGF0aWMgdm9pZCBuc2ltX2V4aXRfbmV0ZGV2c2ltKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuMTEzMTpcdHtcbjExMzI6XHRcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVx1MDAzZW5ldGRldik7XG4xMTMzOlx0XHRtb2NrX3BoY19kZXN0cm95KG5zLVx1MDAzZXBoYyk7XG4xMTM0Olx0fVxuMTEzNTpcdFxuMTEzNjpcdHN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXG4xMTM3Olx0XHRcdFx0ICAgICAgc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQsXG4xMTM4Olx0XHRcdFx0ICAgICAgdTggcGVybV9hZGRyW0VUSF9BTEVOXSlcbjExMzk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA0OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzgKCQkJCQkJCW91dHB1dDogMTA3CgkJCQkJCQl0aG91Z2h0czogMzkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGRldnNpbSBWRiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gdGhlIGBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKClgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIE5ldGRldnNpbSBWRiBwb3J0cy4gVGhlIGNvcmUgY2hhbmdlIGlzIHNpbXBsZTogaXQgKnJlbW92ZXMqIHRoZSBgTkVUSUZfRl9MT09QQkFDS2AgZmVhdHVyZSBmbGFnIGZyb20gYm90aCBgaHdfZmVhdHVyZXNgIGFuZCBgZmVhdHVyZXNgIGZvciB0aGVzZSBWRiBwb3J0cy4gVGhlIGxvZ2ljIGhlcmUgaXMgY2xlYXI6IFZGIHBvcnRzLCB1bmxpa2UgdGhlaXIgc3RhbmRhcmQgY291bnRlcnBhcnRzLCBsYWNrIHF1ZXVlcyBhbmQgTkFQSSBzdXBwb3J0LgoKSSByZW1lbWJlciBub3csIHRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgYmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBgbnNpbV9zZXR1cCgpYCBmdW5jdGlvbiB3YXMgZW5hYmxpbmcgYE5FVElGX0ZfTE9PUEJBQ0tgLiBJZiB0aGF0IGZsYWcgcmVtYWluZWQgYWN0aXZlIG9uIHRoZSBWRiwgYW55IGF0dGVtcHQgdG8gdXNlIGxvb3BiYWNrIG9uIGEgcG9ydCB3aXRob3V0IHRoZSBhcHByb3ByaWF0ZSBxdWV1ZWluZyBvciBOQVBJIGluZnJhc3RydWN0dXJlIHdhcyBhIHJlY2lwZSBmb3IgZGlzYXN0ZXIg4oCTIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gY3Jhc2hlcywgZGVyZWZlcmVuY2VzLCBvciBldmVuIHBhbmljcyByZWxhdGVkIHRvIHRoZSBxdWV1ZSBsb2dpYywgYXMgbXkgZXhwZXJpZW5jZSBzaG93cy4KCk5vdywgbGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSB1c3VhbCByaXNrIGFuYWx5c2lzOgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZT8gTm9wZS4gTm8gY2hhbmdlcyB0byB0aGUgc3RydWN0dXJlIGxheW91dCB0aGF0IG1pZ2h0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIGZpZWxkcy4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm90IGEgZmFjdG9yIGhlcmUuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGEgZGlyZWN0IGZsYWcgbWFuaXB1bGF0aW9uLgozLiAgQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBObyBjb25jZXJucy4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIHBhdGNoIG9ubHkgc2V0cyAvIGNsZWFycyBhIHNpbmdsZSBmZWF0dXJlIGZsYWcuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGNsZWFuLCBzdXJnaWNhbCByZW1vdmFsIG9mIGEgZmVhdHVyZSBiaXQuIE5vIG1lbW9yeSBpcyBiZWluZyBpbml0aWFsaXplZCwgYWxsb2NhdGVkLCBvciBtb2RpZmllZCBpbiBhIHdheSB0aGF0IGludHJvZHVjZXMgYW55IG5ldyByaXNrcy4gVGhpcyBwYXRjaCBpcyBsb3ctcmlzay4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIEtBU0FOL0tNU0FOIGltcGxpY2F0aW9ucy4gU3RhbmRhcmQgS0FTQU4gdGVzdGluZyBpcyBvYnZpb3VzbHkgYXBwbGljYWJsZSBhbmQgaW1wb3J0YW50IGZvciBuZXRkZXYgY29uZmlndXJhdGlvbiwgZmVhdHVyZSBmbGFncywgcGFja2V0IHBhdGhzLCBhbmQgaW50ZXJmYWNlIGxpZmVjeWNsZSwgYnV0IEtNU0FOLCB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgZGV0ZWN0b3IsIGlzIG5vdC4gVGhlIHBhdGNoIG9ubHkgdG91Y2hlcyBhIHNpbXBsZSBmbGFnOyB0aGVyZSBhcmUgbm8gbWVtb3J5IGJ1ZmZlcnMgb3IgdXNlci1zcGFjZSBjb3B5IHBhdGhzIGJlaW5nIG1vZGlmaWVkLgoKTG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgY29ycmVjdCBmaXgsIGFzIGZhciBhcyBJIGNhbiBzZWUuIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3Mgc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNDo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IGRpc2FibGVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgZmxhZyBvbiBuZXRkZXZzaW0gVkYgZGV2aWNlcyAoY2xlYXJpbmcgYml0cyBpbiBod19mZWF0dXJlcyBhbmQgZmVhdHVyZXMpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGludHJvZHVjZSBwYWRkaW5nIGlzc3Vlcywgb3IgY2hhbmdlIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBkaXNhYmxlcyB0aGUgTkVUSUZfRl9MT09QQkFDSyBmZWF0dXJlIGZsYWcgb24gbmV0ZGV2c2ltIFZGIGRldmljZXMgKGNsZWFyaW5nIGJpdHMgaW4gaHdfZmVhdHVyZXMgYW5kIGZlYXR1cmVzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBpbnRyb2R1Y2UgcGFkZGluZyBpc3N1ZXMsIG9yIGNoYW5nZSBidWZmZXIgbGVuZ3RoIGhhbmRsaW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTY6MzIuNjg4MTMwNjIyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MTc5MjA0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJERUJVR19GU1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5zaW1fY3JlYXRlXCIsXG4gICAgXCJuc2ltX2Rydl9wb3J0X2FkZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBkaXNhYmxlcyB0aGUgTkVUSUZfRl9MT09QQkFDSyBmZWF0dXJlIGZsYWcgb24gbmV0ZGV2c2ltIFZGIGRldmljZXMgKGNsZWFyaW5nIGJpdHMgaW4gaHdfZmVhdHVyZXMgYW5kIGZlYXR1cmVzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBpbnRyb2R1Y2UgcGFkZGluZyBpc3N1ZXMsIG9yIGNoYW5nZSBidWZmZXIgbGVuZ3RoIGhhbmRsaW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgYW5kIGh3X2ZlYXR1cmVzIGZsYWcgZnJvbSBuZXRkZXZzaW0gVkYgcG9ydHMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGluIG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoKSB0byBwcmV2ZW50IHBhY2tldHMgZnJvbSBiZWluZyBsb29wZWQgYmFjayB0byBhIFZGIHBvcnQgbGFja2luZyBxdWV1ZXMgYW5kIE5BUEkuIFRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgc2ltdWxhdGVkIG5ldGRldiBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgbmV0ZGV2c2ltIHBvcnQgc2V0dXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA0OjU2OjMyLjY4ODEzODMwMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5OTM3NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjhhN2FlZDM1YmE5NzU2NThiN2Y1YTA3MzQ2OTc5MjRjMDM2N2Q4NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNDo1NjozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcXG5pbmRleCBiNGE5OWYzY2VhYzYwLi43YmI3MmFlYTkwYTAxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xcbkBAIC0xMTEzLDYgKzExMTMsMTQgQEAgc3RhdGljIGludCBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0bnMtXFx1MDAzZW5ldGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZuc2ltX3ZmX25ldGRldl9vcHM7XFxuK1xcbitcXHQvKiBuc2ltX3NldHVwKCkgb2ZmZXJzIE5FVElGX0ZfTE9PUEJBQ0sgdG8gZXZlcnkgcG9ydCwgYnV0IGEgVkYgcG9ydFxcbitcXHQgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFuc1xcbitcXHQgKiByZWNlaXZpbmcgaXQuXFxuK1xcdCAqL1xcbitcXHRucy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2Vod19mZWF0dXJlcyBcXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcXG4rXFx0bnMtXFx1MDAzZW5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNj0gfk5FVElGX0ZfTE9PUEJBQ0s7XFxuK1xcbiBcXHRydG5sX2xvY2soKTtcXG4gXFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKG5zLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRydG5sX3VubG9jaygpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1NjozMy4wOTg3MTQzNTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5ODU2MDI1MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiREVCVUdfRlNcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuc2ltX2NyZWF0ZVwiLFxuICAgIFwibnNpbV9kcnZfcG9ydF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgYW5kIGh3X2ZlYXR1cmVzIGZsYWcgZnJvbSBuZXRkZXZzaW0gVkYgcG9ydHMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGluIG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoKSB0byBwcmV2ZW50IHBhY2tldHMgZnJvbSBiZWluZyBsb29wZWQgYmFjayB0byBhIFZGIHBvcnQgbGFja2luZyBxdWV1ZXMgYW5kIE5BUEkuIFRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgc2ltdWxhdGVkIG5ldGRldiBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgbmV0ZGV2c2ltIHBvcnQgc2V0dXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI4YTdhZWQzNWJhOTc1NjU4YjdmNWEwNzM0Njk3OTI0YzAzNjdkODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNDo1NjozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuaW5kZXggYjRhOTlmM2NlYWM2MC4uN2JiNzJhZWE5MGEwMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXG5AQCAtMTExMyw2ICsxMTEzLDE0IEBAIHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbV92ZihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbiBcdGludCBlcnI7XG4gXG4gXHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNm5zaW1fdmZfbmV0ZGV2X29wcztcbitcbitcdC8qIG5zaW1fc2V0dXAoKSBvZmZlcnMgTkVUSUZfRl9MT09QQkFDSyB0byBldmVyeSBwb3J0LCBidXQgYSBWRiBwb3J0XG4rXHQgKiBoYXMgbmVpdGhlciBxdWV1ZXMgbm9yIE5BUEksIGFuZCBsb29waW5nIGEgZnJhbWUgYmFjayBtZWFuc1xuK1x0ICogcmVjZWl2aW5nIGl0LlxuK1x0ICovXG4rXHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcbitcdG5zLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjY9IH5ORVRJRl9GX0xPT1BCQUNLO1xuK1xuIFx0cnRubF9sb2NrKCk7XG4gXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtXHUwMDNlbmV0ZGV2KTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1NjozMy4wOTg3MTU3NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTA0MjYxNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZGV2c2ltIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBicm9hZGVyIG5ldGRldnNpbSBjb250ZXh0LiBJdCBsb29rcyBsaWtlIGl0J3Mgc3BlY2lmaWNhbGx5IGFsdGVyaW5nIHRoZSBgbnNpbV9pbml0X25ldGRldnNpbV92ZmAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNgLiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBgTkVUSUZfRl9MT09QQkFDS2AgZmVhdHVyZSBmcm9tIHRoZSBgaHdfZmVhdHVyZXNgIGFuZCBgZmVhdHVyZXNgIG9mIHRoZSBuZXR3b3JrIGRldmljZSAoYG5zLVx1MDAzZW5ldGRldmApLlxuXG5UaGUgY29tbWVudCBwcm92aWRlcyBnb29kIGNvbnRleHQ6IFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBwb3J0cywgdW5saWtlIHRoZWlyIHBhcmVudCBwb3J0cywgZG9uJ3QgaGF2ZSBxdWV1ZXMgb3IgTkFQSSwgc28gbG9vcGluZyBhIGZyYW1lIGJhY2sgdG8gaXRzZWxmIGRvZXNuJ3QgbWFrZSBzZW5zZS4gSXTigJlzIGEgZ29vZCBjYXRjaCBiZWNhdXNlIHNldHRpbmcgYE5FVElGX0ZfTE9PUEJBQ0tgIGlzIHVzdWFsbHkgaGFuZGxlZCBpbiBgbnNpbV9zZXR1cCgpYCBmb3IgZXZlcnkgcG9ydCwgYnV0IHRoaXMgaXMgY2xlYXJseSBhbiBleGNlcHRpb24gd29ydGggaGFuZGxpbmcuXG5cbkkgbmVlZCB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgbnNpbV9pbml0X25ldGRldnNpbV92ZmAgYW5kIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiBuZXRkZXZzaW0uIFRoaXMgZHJpdmVyIGlzIG9mdGVuIHVzZWQgZm9yIHNpbXVsYXRpb24gYW5kIHRlc3RpbmcsIHNvIEknbGwgY2hlY2sgaXRzIHJlYWNoYWJpbGl0eSB3aXRoaW4gY29tbW9uIHRlc3QgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLiBJdCdzIHR5cGljYWxseSBjb25maWd1cmVkIHZpYSBzeXNmcywgZGV2bGluaywgb3IgcnRuZXRsaW5rLCBwZXJoYXBzIGRlYnVnZnMuIEZpbmFsbHksIEknbGwgcmV2aWV3IHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIG5ldGRldnNpbSB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgaWYgdGhpcyBjaGFuZ2UgaGFzIGFueSBidWlsZC10aW1lIGltcGxpY2F0aW9ucy4gT3ZlcmFsbCwgdGhpcyBsb29rcyBsaWtlIGEgdGFyZ2V0ZWQgZml4IGZvciBhIGxvZ2ljYWwgaW5jb25zaXN0ZW5jeSBpbiB0aGUgVkYgc2V0dXAgd2l0aGluIG5ldGRldnNpbSwgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTY6MzguMDAyOTgwMzM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjU0NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVERFVlNJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlLTItXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX05FVERFVlNJTSkgKz0gbmV0ZGV2c2ltLm9cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUtNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTY6MzguMDUzMjQwMTQzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzNTM0MjUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBuZXRkZXZzaW0gS2NvbmZpZyBhbmQgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gdG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGFydGljdWxhciBzdWJzeXN0ZW0sIHRoZSBzZW5zaWJsZSBmaXJzdCBtb3ZlIGlzIHRvIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9LY29uZmlnYCwgYW5kIHRoZW4gdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gd2l0aGluIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNgLiBUaGUgS2NvbmZpZyB3aWxsIG91dGxpbmUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZWZhdWx0IHNldHRpbmdzIHRoYXQgYXJlIHJlbGF0ZWQgdG8gdGhpcy4gSXQnbGwgZ2l2ZSBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBob3cgdGhpcyBzaW11bGF0ZWQgbmV0d29yayBkZXZpY2UgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgY29uZmlndXJlZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSBmZWF0dXJlcyB0aGlzIHNpbXVsYXRlZCBkZXZpY2UgaGFzIGFuZCBob3cgdGhleSBhcmUgY29uZmlndXJlZC5cblxuVGhlbiwgSSdsbCBtb3ZlIG92ZXIgdG8gdGhlIEMgZmlsZSwgYG5ldGRldi5jYCwgdG8gZ3Jhc3AgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkLCBob3cgcGFja2V0cyBhcmUgaGFuZGxlZCAoaWYgYXQgYWxsKSwgdGhlIGRldmljZSBvcGVyYXRpb25zIHRoYXQgYXJlIGRlZmluZWQsIGFuZCBhbnkgaW50ZXJlc3Rpbmcgc2ltdWxhdGlvbiBhc3BlY3RzLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQsIHRoZSBjb250cm9sIGZsb3csIGFuZCBhbnkgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCB0aGlzIHdpbGwgYmUgbXkgZm9jdXMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZGVzaWduIG9mIHRoZSBzaW11bGF0ZWQgbmV0d29yayBkZXZpY2UuIEJ5IGxvb2tpbmcgYXQgdGhlc2UgdHdvIGtleSBmaWxlcywgSSBzaG91bGQgZ2V0IGEgcHJldHR5IGdvb2QgaGFuZGxlIG9uIHdoYXQgYG5ldGRldnNpbWAgaXMgYWxsIGFib3V0LiBUaGlzIHdpbGwgZ2l2ZSBtZSB3aGF0IEkgbmVlZCBmb3IgYSBnb29kIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo0MC4zODg1ODQ3NjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MTY3MDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRERVZTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz02MDI9c291cmNlIFxcXCJkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwMy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNDpjb25maWcgTkVUREVWU0lNXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDUtXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTY6NDAuNTEzNzYwMDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDU3Mjc2Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCB0aGlua2luZyBhYm91dCB0aGUgS2NvbmZpZyBmaWxlOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2MDQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IG9wdGlvbnMgYXJlIGluIHRoYXQgYXJlYSBvZiB0aGUgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlLi4uIEknbSBsaWtlbHkgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBkcml2ZXIgZmVhdHVyZSBvciBhIGJyb2FkZXIgbmV0d29yayBzZXR0aW5nIHRoYXQncyBjYXVzaW5nIG1lIHNvbWUgY29uZnVzaW9uLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBkZWZpbmVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgcHJvbXB0cywgYW5kIGhlbHAgdGV4dCDigJMgYW55dGhpbmcgdGhhdCBjbGFyaWZpZXMgdGhlIGludGVudCBhbmQgZnVuY3Rpb24gb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcm91bmQgdGhhdCBzcGVjaWZpYyBsaW5lLiBJIGhvcGUgaXQncyB3ZWxsLWNvbW1lbnRlZC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo0Mi45NzEwMzgyNTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRcXG4gNjAxOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvS2NvbmZpZ1xcXCJcXG4gNjAyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcXFwiXFxuIDYwMzpcXHRcXG4gNjA0OlxcdGNvbmZpZyBORVRERVZTSU1cXG4gNjA1OlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuIDYwNjpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIDYwNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNjA4OlxcdFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG4gNjA5OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5cXG4gNjEwOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiA2MTE6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiA2MTI6XFx0XFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4gNjEzOlxcdFxcdGhlbHBcXG4gNjE0OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIGFuZCBzb2Z0d2FyZSBtb2RlbCB0aGF0IGNhblxcbiA2MTU6XFx0XFx0ICBiZSB1c2VkIHRvIHRlc3QgdmFyaW91cyBjb250cm9sIHBhdGggbmV0d29ya2luZyBBUElzLCBlc3BlY2lhbGx5XFxuIDYxNjpcXHRcXHQgIEhXLW9mZmxvYWQgcmVsYXRlZC5cXG4gNjE3OlxcdFxcbiA2MTg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDYxOTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cXG4gNjIwOlxcdFxcbiA2MjE6XFx0Y29uZmlnIE5FVF9GQUlMT1ZFUlxcbiA2MjI6XFx0XFx0dHJpc3RhdGUgXFxcIkZhaWxvdmVyIGRyaXZlclxcXCJcXG4gNjIzOlxcdFxcdHNlbGVjdCBGQUlMT1ZFUlxcbiA2MjQ6XFx0XFx0aGVscFxcbiA2MjU6XFx0XFx0ICBUaGlzIHByb3ZpZGVzIGFuIGF1dG9tYXRlZCBmYWlsb3ZlciBtZWNoYW5pc20gdmlhIEFQSXMgdG8gY3JlYXRlXFxuIDYyNjpcXHRcXHQgIGFuZCBkZXN0cm95IGEgZmFpbG92ZXIgbWFzdGVyIG5ldGRldiBhbmQgbWFuYWdlcyBhIHByaW1hcnkgYW5kXFxuIDYyNzpcXHRcXHQgIHN0YW5kYnkgc2xhdmUgbmV0ZGV2cyB0aGF0IGdldCByZWdpc3RlcmVkIHZpYSB0aGUgZ2VuZXJpYyBmYWlsb3ZlclxcbiA2Mjg6XFx0XFx0ICBpbmZyYXN0cnVjdHVyZS4gVGhpcyBjYW4gYmUgdXNlZCBieSBwYXJhdmlydHVhbCBkcml2ZXJzIHRvIGVuYWJsZVxcbiA2Mjk6XFx0XFx0ICBhbiBhbHRlcm5hdGUgbG93IGxhdGVuY3kgZGF0YXBhdGguIEl0IGFsc28gZW5hYmxlcyBsaXZlIG1pZ3JhdGlvbiBvZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo0Mi45NzExMDgwNTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjA5NzY2MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIGRldmljZSBkcml2ZXIgZGV2ZWxvcG1lbnQ6XG5cbioqRGVlcCBEaXZlOiBuZXRkZXZzaW0gVkYgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5zdGluY3QgaXMgdGVsbGluZyBtZSB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBqb2cgbXkgbWVtb3J5IGFuZCB0YWtlIGEgZnJlc2ggbG9vayBhcm91bmQgdGhlIGBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmYCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBsaWtlbHkgc3BvdCB3aGVyZSB0aGUgdmlydHVhbCBmdW5jdGlvbiAoVkYpIGluaXRpYWxpemF0aW9uIGZvciB0aGUgbmV0ZGV2c2ltIGRyaXZlciBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVkYgaXMgc2V0IHVwIHdpdGhpbiB0aGUgc2ltdWxhdGlvbiBlbnZpcm9ubWVudC4gQXJlIHRoZXJlIGFueSByZWNlbnQgY2hhbmdlcyB0byB0aGlzIGNvZGU/IEFueSByZWNlbnQgY29tbWl0cz8gV2hhdCBpcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBWRiBjb25maWd1cmF0aW9uPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGZ1bmN0aW9uIGl0c2VsZiBhbmQgdGhlbiB0cmFjZSBhbnkgcmVsYXRlZCBmdW5jdGlvbiBjYWxscyB0byBzZWUgaG93IHRoZSBWRiBpcyBiZWluZyBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgYG5ldGRldnNpbWAgYXJjaGl0ZWN0dXJlLiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHJlc291cmNlIGFsbG9jYXRpb24sIGludGVycnVwdCBoYW5kbGluZywgb3IgZXZlbiBiYXNpYyBkZXZpY2UgcmVnaXN0cmF0aW9uLCBiZWNhdXNlIHRob3NlIGFyZSB0aGUgdXN1YWwgY3VscHJpdHMgaW4gdGhlc2Uga2luZHMgb2Ygc2NlbmFyaW9zLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTA3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo0Ny4xODA4NzYxODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0XFx0bnNpbV9icGZfdW5pbml0KG5zKTtcXG4xMTAxOlxcdGVycl9ycV9kZXN0cm95OlxcbjExMDI6XFx0XFx0bnNpbV9xdWV1ZV91bmluaXQobnMpO1xcbjExMDM6XFx0ZXJyX3V0bl9kZXN0cm95OlxcbjExMDQ6XFx0XFx0cnRubF91bmxvY2soKTtcXG4xMTA1OlxcdFxcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVxcdTAwM2VuZXRkZXYpO1xcbjExMDY6XFx0ZXJyX3BoY19kZXN0cm95OlxcbjExMDc6XFx0XFx0bW9ja19waGNfZGVzdHJveShucy1cXHUwMDNlcGhjKTtcXG4xMTA4OlxcdFxcdHJldHVybiBlcnI7XFxuMTEwOTpcXHR9XFxuMTExMDpcXHRcXG4xMTExOlxcdHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbV92ZihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4xMTEyOlxcdHtcXG4xMTEzOlxcdFxcdGludCBlcnI7XFxuMTExNDpcXHRcXG4xMTE1OlxcdFxcdG5zLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2bnNpbV92Zl9uZXRkZXZfb3BzO1xcbjExMTY6XFx0XFxuMTExNzpcXHRcXHQvKiBuc2ltX3NldHVwKCkgb2ZmZXJzIE5FVElGX0ZfTE9PUEJBQ0sgdG8gZXZlcnkgcG9ydCwgYnV0IGEgVkYgcG9ydFxcbjExMTg6XFx0XFx0ICogaGFzIG5laXRoZXIgcXVldWVzIG5vciBOQVBJLCBhbmQgbG9vcGluZyBhIGZyYW1lIGJhY2sgbWVhbnNcXG4xMTE5OlxcdFxcdCAqIHJlY2VpdmluZyBpdC5cXG4xMTIwOlxcdFxcdCAqL1xcbjExMjE6XFx0XFx0bnMtXFx1MDAzZW5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNj0gfk5FVElGX0ZfTE9PUEJBQ0s7XFxuMTEyMjpcXHRcXHRucy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcXG4xMTIzOlxcdFxcbjExMjQ6XFx0XFx0cnRubF9sb2NrKCk7XFxuMTEyNTpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtXFx1MDAzZW5ldGRldik7XFxuMTEyNjpcXHRcXHRydG5sX3VubG9jaygpO1xcbjExMjc6XFx0XFx0cmV0dXJuIGVycjtcXG4xMTI4OlxcdH1cXG4xMTI5OlxcdFxcbjExMzA6XFx0c3RhdGljIHZvaWQgbnNpbV9leGl0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4xMTMxOlxcdHtcXG4xMTMyOlxcdFxcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVxcdTAwM2VuZXRkZXYpO1xcbjExMzM6XFx0XFx0bW9ja19waGNfZGVzdHJveShucy1cXHUwMDNlcGhjKTtcXG4xMTM0OlxcdH1cXG4xMTM1OlxcdFxcbjExMzY6XFx0c3RydWN0IG5ldGRldnNpbSAqbnNpbV9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG4xMTM3OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0LFxcbjExMzg6XFx0XFx0XFx0XFx0ICAgICAgdTggcGVybV9hZGRyW0VUSF9BTEVOXSlcXG4xMTM5OlxcdHtcXG4xMTQwOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuMTE0MTpcXHRcXHRzdHJ1Y3QgbmV0ZGV2c2ltICpucztcXG4xMTQyOlxcdFxcdGludCBlcnI7XFxuMTE0MzpcXHRcXG4xMTQ0OlxcdFxcdGRldiA9IGFsbG9jX25ldGRldl9tcShzaXplb2YoKm5zKSwgXFxcImV0aCVkXFxcIiwgTkVUX05BTUVfVU5LTk9XTiwgbnNpbV9zZXR1cCxcXG4xMTQ1OlxcdFxcdFxcdFxcdCAgICAgIG5zaW1fZGV2LVxcdTAwM2Vuc2ltX2J1c19kZXYtXFx1MDAzZW51bV9xdWV1ZXMpO1xcbjExNDY6XFx0XFx0aWYgKCFkZXYpXFxuMTE0NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4xMTQ4OlxcdFxcbjExNDk6XFx0XFx0aWYgKHBlcm1fYWRkcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTY6NDcuMTgwOTcxNTU0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NTUzNTY4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHQgcHJvY2Vzc2VzOlxuXG4qKkRlbHZpbmcgaW50byBOZXR3b3JrIERldmljZSBTaW11bGF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgb2YgdGhpcyBzaW11bGF0aW9uLCBwYXJ0aWN1bGFybHkgaG93IHZpcnR1YWwgbmV0d29yayBkZXZpY2VzIGFyZSBpbml0aWFsaXplZCBhbmQgY3JlYXRlZC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHR3byBrZXkgZnVuY3Rpb25zOiBgbnNpbV9pbml0X25ldGRldnNpbV92ZmAgYW5kIGBuc2ltX2NyZWF0ZWAuIEkgd2FudCB0byBrbm93LCB1bmVxdWl2b2NhbGx5LCAqd2hlcmUqIGluIHRoZSBjb2RlIHRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIGJlaW5nIGNhbGxlZC4gVGhhdCB3aWxsIHByb3ZpZGUgdGhlIGNyaXRpY2FsIGNvbnRleHQgSSBuZWVkIHRvIGdyYXNwIGhvdyB0aGUgc2ltdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBvZiB0aGlzIG5ldHdvcmsgc2ltdWxhdGlvbi4gRmluZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIHRoZSBmaXJzdCBlc3NlbnRpYWwgc3RlcCBpbiB0cnVseSB1bmRlcnN0YW5kaW5nIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTk1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo0OC44MzYzMzA3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkzMDExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmfG5zaW1fY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTM4MD1zdGF0aWMgaW50IF9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDMzLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDM0OlxcdG5zaW1fZGV2X3BvcnQtXFx1MDAzZW5zID0gbnNpbV9jcmVhdGUobnNpbV9kZXYsIG5zaW1fZGV2X3BvcnQsIHBlcm1fYWRkcik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0MzUtXFx0aWYgKElTX0VSUihuc2ltX2Rldl9wb3J0LVxcdTAwM2VucykpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz00MDU9c3RhdGljIGludCBuc2ltX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTQxNi1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NDE3OnN0YXRpYyBpbnQgbnNpbV9jcmVhdGVfcGFnZV9wb29sKHN0cnVjdCBwYWdlX3Bvb2wgKipwLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTQxOC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9NDM4PXN0YXRpYyBpbnQgbnNpbV9pbml0X25hcGkoc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNDUyLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzo0NTM6XFx0XFx0ZXJyID0gbnNpbV9jcmVhdGVfcGFnZV9wb29sKFxcdTAwMjZycS1cXHUwMDNlcGFnZV9wb29sLCBcXHUwMDI2cnEtXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy00NTQtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz03NTE9bnNpbV9xdWV1ZV9tZW1fYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy03NjQtXFx0XFx0XFx0cmV0dXJuIC1FTkVURE9XTjtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NzY1OlxcdFxcdHJldHVybiBuc2ltX2NyZWF0ZV9wYWdlX3Bvb2woXFx1MDAyNnFtZW0tXFx1MDAzZXBwLCBcXHUwMDI2bnMtXFx1MDAzZXJxW2lkeF0tXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy03NjYtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTc3MS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6NzcyOlxcdGVyciA9IG5zaW1fY3JlYXRlX3BhZ2VfcG9vbChcXHUwMDI2cW1lbS1cXHUwMDNlcnEtXFx1MDAzZXBhZ2VfcG9vbCwgXFx1MDAyNnFtZW0tXFx1MDAzZXJxLVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtNzczLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTA0MD1zdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTExMC1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTExMTpzdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExMTIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTExMzA9c3RhdGljIHZvaWQgbnNpbV9leGl0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTM1LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMTM2OnN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExMzctXFx0XFx0XFx0ICAgICAgc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE2My1cXHRlbHNlXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjExNjQ6XFx0XFx0ZXJyID0gbnNpbV9pbml0X25ldGRldnNpbV92Zihucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExNjUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xMDc9c3RydWN0IG5ldGRldnNpbSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTY1LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoxNjY6c3RydWN0IG5ldGRldnNpbSAqbnNpbV9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTY3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo0OC44ODAyNjU3MjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk4MjgzNzE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRkZXZzaW0gQnVnZml4IGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgbnNpbV9jcmVhdGUoKWAgaXMgdGhlIGVudHJ5IHBvaW50LCBjYWxsZWQgd2hlbiBjcmVhdGluZyBhIHBvcnQgd2l0aGluIHRoZSBuZXRkZXZzaW0gZHJpdmVyLiBUaGF04oCZcyB1c3VhbGx5IGRvbmUgdGhyb3VnaCBgZGV2bGlua2Agb3IgZGlyZWN0IGludGVyYWN0aW9uIHZpYSBzeXNmcywgcmlnaHQ/IE5ldGRldnNpbSwgb2YgY291cnNlLCBpcyB0aGF0IGJlYXV0aWZ1bCB2aXJ0dWFsIG1vY2sgZHJpdmVyIGluIHRoZSBMaW51eCBrZXJuZWwg4oCTIHBlcmZlY3QgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIE5vIHBoeXNpY2FsIGhhcmR3YXJlIG5lZWRlZCwgYSBkcmVhbSBjb21lIHRydWUhXG5cblRoZSBjcml0aWNhbCBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKClgLiBJdCdzIHJlbW92aW5nIGBORVRJRl9GX0xPT1BCQUNLYCBmcm9tIHRoZSBgaHdfZmVhdHVyZXNgIGFuZCBgZmVhdHVyZXNgIGxpc3RzLiBBaCwgcmlnaHQsIGJlY2F1c2UgYG5zaW1fc2V0dXAoKWAgKnNldHMqIGxvb3BiYWNrLCBidXQgYSB2aXJ0dWFsIGZ1bmN0aW9uIChWRikgcG9ydCBpbiBuZXRkZXZzaW0gZG9lc24ndCBoYXZlIGl0cyBvd24gcXVldWVzIG9yIE5BUEkuIExvb3BpbmcgYmFjayBhIGZyYW1lIGhlcmUgaXMgYXNraW5nIGZvciB0cm91YmxlIOKAkyBwcm9iYWJseSBhIGNyYXNoIG9yIHNvbWUgbmFzdHkgdW5kZWZpbmVkIGJlaGF2aW9yIHdoZW4geW91IHRyeSB0byBzZW5kIGEgZnJhbWUgd2l0aCBsb29wYmFjayBlbmFibGVkIG9uIGEgVkYgaW50ZXJmYWNlIGluIG5ldGRldnNpbS4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgYnVnZml4LlxuXG5UaGUgYmlnIHF1ZXN0aW9uIG5vdyBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nICptb3JlKj8gQWJzb2x1dGVseS4gTmV0ZGV2c2ltIGlzIGFscmVhZHkgYSBwcmltZSB0YXJnZXQsIGFuZCB0aGlzIGZpeCBoaWdobGlnaHRzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24uIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQuIGBuc2ltX2NyZWF0ZWAgaXMgYW4gb2J2aW91cyBjaG9pY2Ugc2luY2UgaXQncyB0aGUgbWFpbiBlbnRyeS4gVGhlbiwgSSBzaG91bGQgbG9vayBhdCBgbnNpbV9kZXZfcG9ydF9hZGRgIChhbmQgaXRzIGludGVybmFsIGBfX25zaW1fZGV2X3BvcnRfYWRkYCBjb3VudGVycGFydCksIGFuZCBkZWZpbml0ZWx5IGBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmYCB3aGljaCBpcyB0aGUgc3RhdGljIGZ1bmN0aW9uIHRoYXQncyBiZWluZyB1cGRhdGVkLiBTaW5jZSBJJ20gaW4gaGVyZSwgSSdsbCBnbyBiYWNrIGFuZCBjaGVjayB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIGBkZXYuY2AgYW5kIGBuZXRkZXYuY2AgYXMgd2VsbC4gTGV04oCZcyBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6NjQ5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo1Mi44NjMxMDUyNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTk4OTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5zaW1fZGV2X3BvcnRfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NTczPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6NTc0Ol9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNTc1LVxcdFxcdCAgICB1bnNpZ25lZCBpbnQgcG9ydF9pbmRleCwgdTggcGVybV9hZGRyW0VUSF9BTEVOXSk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NTkyPXN0YXRpYyBpbnQgbnNpbV9lc3dfc3dpdGNoZGV2X2VuYWJsZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTU5OC1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnNpbV9kZXZfZ2V0X3Zmcyhuc2ltX2Rldik7IGkrKykge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo1OTk6XFx0XFx0ZXJyID0gX19uc2ltX2Rldl9wb3J0X2FkZChuc2ltX2RldiwgTlNJTV9ERVZfUE9SVF9UWVBFX1ZGLCBpLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNjAwLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xMzUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgbnNpbV9kZXZfZGV2bGlua19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTM3OS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTM4MDpzdGF0aWMgaW50IF9fbnNpbV9kZXZfcG9ydF9hZGQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTM4MS1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IHBvcnRfaW5kZXgsIHU4IHBlcm1fYWRkcltFVEhfQUxFTl0pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTQ4MD1zdGF0aWMgdm9pZCBuc2ltX2Rldl9wb3J0X2RlbF9hbGwoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNDg4LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDg5OnN0YXRpYyBpbnQgbnNpbV9kZXZfcG9ydF9hZGRfYWxsKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0OTAtXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBwb3J0X2NvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0OTQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBvcnRfY291bnQ7IGkrKykge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNDk1OlxcdFxcdGVyciA9IF9fbnNpbV9kZXZfcG9ydF9hZGQobnNpbV9kZXYsIE5TSU1fREVWX1BPUlRfVFlQRV9QRiwgaSwgTlVMTCk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE0OTYtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xNTA2PXN0YXRpYyBpbnQgbnNpbV9kZXZfcmVsb2FkX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE1NDYtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE1NDc6XFx0ZXJyID0gbnNpbV9kZXZfcG9ydF9hZGRfYWxsKG5zaW1fZGV2LCBuc2ltX2J1c19kZXYtXFx1MDAzZXBvcnRfY291bnQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNTQ4LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTU3Mz1pbnQgbnNpbV9kcnZfcHJvYmUoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE2NTUtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE2NTY6XFx0ZXJyID0gbnNpbV9kZXZfcG9ydF9hZGRfYWxsKG5zaW1fZGV2LCBuc2ltX2J1c19kZXYtXFx1MDAzZXBvcnRfY291bnQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNjU3LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTc1ND1pbnQgbnNpbV9kcnZfcG9ydF9hZGQoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE3NjMtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNzY0OlxcdFxcdGVyciA9IF9fbnNpbV9kZXZfcG9ydF9hZGQobnNpbV9kZXYsIHR5cGUsIHBvcnRfaW5kZXgsIHBlcm1fYWRkcik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE3NjUtXFx0ZGV2bF91bmxvY2socHJpdl90b19kZXZsaW5rKG5zaW1fZGV2KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA0OjU2OjUyLjkwNjcxMDYzOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTUzNDU0NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYG5ldGRldnNpbWAgRnVuY3Rpb24gU2NvcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBuZXRkZXZzaW1gLiBJIG5lZWQgdG8gc3RhcnQgYnkgY29uZmlybWluZyB0aGUgc2NvcGUgb2YgYG5zaW1fZHJ2X3BvcnRfYWRkYCBhbmQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgYXJlbid0IGRlY2xhcmVkIGFzIGBzdGF0aWNgIHdpdGhpbiB0aGF0IG1vZHVsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBzdXJwcmlzaW5nIGV4dGVybmFsIGRlcGVuZGVuY2llcyBvciB1bmludGVuZGVkIGdsb2JhbCBhY2Nlc3MgZ29pbmcgb24gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIGEgY29udHJvbGxlZCwgaW50ZXJuYWwtdG8tdGhlLWRyaXZlciB1c2FnZSwgb3IgaWYgdGhlcmUncyBhIGJyb2FkZXIsIHBlcmhhcHMgdW5pbnRlbmRlZCwgZXhwb3N1cmUgdG8gb3RoZXIga2VybmVsIGNvbXBvbmVudHMgb3IgZXZlbiB1c2VyIHNwYWNlIHRoYXQgbmVlZHMgdG8gYmUgc2NydXRpbml6ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGFjY2VzcyBwYXRocyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbW9kdWxlJ3Mgb3ZlcmFsbCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIGFuZCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciBtYWludGVuYW5jZSBpc3N1ZXMuIFRoaXMgaXMgYSBzdGFuZGFyZCBwcm9jZWR1cmUgd2hlbiByZXZpZXdpbmcgYW55IG5ldHdvcmtpbmcgZHJpdmVyIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzODgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1Njo1OC44NjAxNjcyODVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjc4NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgbnNpbV98XnN0cnVjdCBuZXRkZXZzaW0gXFxcXCpuc2ltX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jPTEwND1uc2ltX2JwZl9vZmZsb2FkKHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGJvb2wgb2xkcHJvZylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy0xMTctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jOjExODppbnQgbnNpbV9icGZfc2V0dXBfdGNfYmxvY2tfY2IoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jLTExOS1cXHRcXHRcXHQgICAgICAgdm9pZCAqdHlwZV9kYXRhLCB2b2lkICpjYl9wcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jLTE2Ni1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmM6MTY3OmludCBuc2ltX2JwZl9kaXNhYmxlX3RjKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy0xNjgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jPTUzND1zdGF0aWMgdm9pZCBuc2ltX2JwZl9tYXBfZnJlZShzdHJ1Y3QgYnBmX29mZmxvYWRlZF9tYXAgKm9mZm1hcClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy01NDctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jOjU0ODppbnQgbnNpbV9icGYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZilcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtNTQ5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy01ODAtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jOjU4MTppbnQgbnNpbV9icGZfZGV2X2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldilcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmMtNTgyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYz02MDk9dm9pZCBuc2ltX2JwZl9kZXZfZXhpdChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2JwZi5jLTYxNS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnBmLmM6NjE2OmludCBuc2ltX2JwZl9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9icGYuYy02MTcte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTQ5MT1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbnNpbV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDk2LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo0OTc6aW50IG5zaW1fYnVzX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xNTA2PXN0YXRpYyBpbnQgbnNpbV9kZXZfcmVsb2FkX2NyZWF0ZShzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE1NzItXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE1NzM6aW50IG5zaW1fZHJ2X3Byb2JlKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldilcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTU3NC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTc0Mj1fX25zaW1fZGV2X3BvcnRfbG9va3VwKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc1My1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTc1NDppbnQgbnNpbV9kcnZfcG9ydF9hZGQoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LCBlbnVtIG5zaW1fZGV2X3BvcnRfdHlwZSB0eXBlLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNzU1LVxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LCB1OCBwZXJtX2FkZHJbRVRIX0FMRU5dKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE3NjgtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE3Njk6aW50IG5zaW1fZHJ2X3BvcnRfZGVsKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldiwgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc3MC1cXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgcG9ydF9pbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xNzg1LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxNzg2OmludCBuc2ltX2Rydl9jb25maWd1cmVfdmZzKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTc4Ny1cXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3ZmcylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODIzLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODI0OmludCBuc2ltX2Rldl9pbml0KHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4MjUte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2hlYWx0aC5jPTE3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX2Rldl9oZWFsdGhfYnJlYWtfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9oZWFsdGguYy0xNzctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2hlYWx0aC5jOjE3ODppbnQgbnNpbV9kZXZfaGVhbHRoX2luaXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldiwgc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2hlYWx0aC5jLTE3OS17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaHdzdGF0cy5jPTM5OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5zaW1fZGV2X2h3c3RhdHNfZm9wcyBuc2ltX2Rldl9od3N0YXRzX2wzX2ZhaWxfZm9wcyA9XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaHdzdGF0cy5jLTQwMy1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vaHdzdGF0cy5jOjQwNDppbnQgbnNpbV9kZXZfaHdzdGF0c19pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2h3c3RhdHMuYy00MDUte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTExMzA9c3RhdGljIHZvaWQgbnNpbV9leGl0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTM1LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMTM2OnN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExMzctXFx0XFx0XFx0ICAgICAgc3RydWN0IG5zaW1fZGV2X3BvcnQgKm5zaW1fZGV2X3BvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MTA3PXN0cnVjdCBuZXRkZXZzaW0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE2NS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MTY2OnN0cnVjdCBuZXRkZXZzaW0gKm5zaW1fY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE2Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbnNpbV9kZXZfcG9ydCAqbnNpbV9kZXZfcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0xNzU9dm9pZCBuc2ltX3VkcF90dW5uZWxzX2RlYnVnZnNfY3JlYXRlKHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoxNzY6aW50IG5zaW1fdWRwX3R1bm5lbHNfaW5mb19jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTc3LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MTc4PXZvaWQgbnNpbV91ZHBfdHVubmVsc19pbmZvX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTgwLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6MTgxOmludCBuc2ltX2JwZl9kZXZfaW5pdChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMTgyLXZvaWQgbnNpbV9icGZfZGV2X2V4aXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE4MzppbnQgbnNpbV9icGZfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE4NC12b2lkIG5zaW1fYnBmX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE4NTppbnQgbnNpbV9icGYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9icGYgKmJwZik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE4NjppbnQgbnNpbV9icGZfZGlzYWJsZV90YyhzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjE4NzppbnQgbnNpbV9icGZfc2V0dXBfdGNfYmxvY2tfY2IoZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTE4OC1cXHRcXHRcXHQgICAgICAgdm9pZCAqdHlwZV9kYXRhLCB2b2lkICpjYl9wcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0yNDE9c3RydWN0IG5zaW1fZGV2X2hlYWx0aCB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjQ5LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoyNTA6aW50IG5zaW1fZGV2X2hlYWx0aF9pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYsIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjUxLXZvaWQgbnNpbV9kZXZfaGVhbHRoX2V4aXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9MjYxPXN0cnVjdCBuc2ltX2Rldl9od3N0YXRzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0yNzEtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjI3MjppbnQgbnNpbV9kZXZfaHdzdGF0c19pbml0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0yNzMtdm9pZCBuc2ltX2Rldl9od3N0YXRzX2V4aXQoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2Rldik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjc1LSNpZiBJU19FTkFCTEVEKENPTkZJR19QU0FNUExFKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDoyNzY6aW50IG5zaW1fZGV2X3BzYW1wbGVfaW5pdChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMjc3LXZvaWQgbnNpbV9kZXZfcHNhbXBsZV9leGl0KHN0cnVjdCBuc2ltX2RldiAqbnNpbV9kZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTM4Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKm5zaW1fZGV2X25ldChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTM4Ny1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6Mzg4OmludCBuc2ltX2Rldl9pbml0KHZvaWQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0zODktdm9pZCBuc2ltX2Rldl9leGl0KHZvaWQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDozOTA6aW50IG5zaW1fZHJ2X3Byb2JlKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2Rldik7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTM5MS12b2lkIG5zaW1fZHJ2X3JlbW92ZShzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDozOTI6aW50IG5zaW1fZHJ2X3BvcnRfYWRkKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMzkzLVxcdFxcdCAgICAgIGVudW0gbnNpbV9kZXZfcG9ydF90eXBlIHR5cGUsIHVuc2lnbmVkIGludCBwb3J0X2luZGV4LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0zOTQtXFx0XFx0ICAgICAgdTggcGVybV9hZGRyW0VUSF9BTEVOXSk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjM5NTppbnQgbnNpbV9kcnZfcG9ydF9kZWwoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC0zOTYtXFx0XFx0ICAgICAgZW51bSBuc2ltX2Rldl9wb3J0X3R5cGUgdHlwZSxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMzk3LVxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBwb3J0X2luZGV4KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6Mzk4OmludCBuc2ltX2Rydl9jb25maWd1cmVfdmZzKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtMzk5LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBudW1fdmZzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NDU9c3RhdGljIGlubGluZSB2b2lkIG5zaW1fbWFjc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1MTppbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1Mi12b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDY4PW5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpIHt9XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDcwLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NzE6aW50IG5zaW1fc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ3Mi1cXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDc1PXN0cnVjdCBuc2ltX2J1c19kZXYge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ4Ni1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDg3OmludCBuc2ltX2J1c19pbml0KHZvaWQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00ODgtdm9pZCBuc2ltX2J1c19leGl0KHZvaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzYW1wbGUuYz0xOTE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnNpbV9wc2FtcGxlX2VuYWJsZV9mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzYW1wbGUuYy0xOTctXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzYW1wbGUuYzoxOTg6aW50IG5zaW1fZGV2X3BzYW1wbGVfaW5pdChzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc2FtcGxlLmMtMTk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0yNjc9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnNpbV9wc3BfcmVyZWdfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzMtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI3NDppbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjc1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jPTExOD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuc2ltX3VkcF90dW5uZWxzX2luZm9fcmVzZXRfZm9wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS91ZHBfdHVubmVscy5jLTEyNC1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYzoxMjU6aW50IG5zaW1fdWRwX3R1bm5lbHNfaW5mb19jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vdWRwX3R1bm5lbHMuYy0xMjYtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA0OjU2OjU4LjkwMzg1MDgxMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTcyNzc0NjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IE5FVERFVlNJTSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZCBmb3IgYE5FVERFVlNJTWAuIExvb2tpbmcgYXQgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLCBpdCBsb29rcyBsaWtlIEkgbmVlZCBgTkVUREVWU0lNYCBpdHNlbGYsIG5hdHVyYWxseSwgYnV0IGFsc28gYERFQlVHX0ZTYCBhbmQgYElORVRgLiBJIHNlZSBhIGNvdXBsZSBvZiBkZXBlbmRlbmNpZXMsIGBQU0FNUExFYCBhbmQgYFBUUF8xNTg4X0NMT0NLX01PQ0tgLCBidXQgdGhvc2UgY2FuIGJlIGRpc2FibGVkIHNpbmNlIEkgZG9uJ3QgbmVlZCB0aGVtIGZvciBteSBjdXJyZW50IG5lZWRzLiBUaGVyZSBhcmUgc29tZSBgc2VsZWN0YCBkaXJlY3RpdmVzLCBgTkVUX0RFVkxJTktgLCBgUEFHRV9QT09MYCwgYW5kIGBORVRfU0hBUEVSYCwgd2hpY2ggc2hvdWxkIGJlIGZpbmUuXG5cbk5vdywgbGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBsaXN0IGFnYWluc3QgYW55IG90aGVyIHJlbGV2YW50IGZpbGVzIG9yIGNvbmZpZ3VyYXRpb25zLiBKdXN0IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlLCBgREVCVUdfRlNgIGFuZCBgTkVUREVWU0lNYCBhcmUgd2hhdCBJJ20gbG9va2luZyBmb3IuXG5cbkkgc2hvdWxkIG1ha2Ugc3VyZSB0aGVzZSBmb2N1cyBzeW1ib2xzIGFyZSBjb25zaWRlcmVkOiBgbnNpbV9jcmVhdGVgLCBgbnNpbV9kcnZfcG9ydF9hZGRgLCBhbmQgYG5zaW1fZHJ2X3Byb2JlYCwgZXNwZWNpYWxseSBpbiBjb250ZXh0IG9mIHRoYXQgcGF0Y2guXG5cbkFscmlnaHQsIG9uZSBmaW5hbCBzd2VlcC4gSSBuZWVkIHRvIG5vdGUgdGhhdCB0aGlzIHBhdGNoIGlzIHdvcnRod2hpbGUgdG8gZnV6eiwgYXMgaXQgaXMgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIGEgbmV0d29yayBkZXZpY2UgYW5kIHRodXMgcG90ZW50aWFsbHkgYSBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBJJ20gZm9jdXNpbmcgb24gYG5zaW1fY3JlYXRlYCBhbmQgYG5zaW1fZHJ2X3BvcnRfYWRkYCBzcGVjaWZpY2FsbHkuIFRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucyBJIG5lZWQgYXJlIGBORVRERVZTSU1gLCBgREVCVUdfRlNgLCBhbmQgYElORVRgLlxuXG5UaGUgcmVhc29uaW5nIGlzIHNvbGlkOiB0aGUgcGF0Y2ggbW9kaWZpZXMgYG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoKWAgd2hpY2ggaXMgaW52b2tlZCB2aWEgYG5zaW1fY3JlYXRlKClgIGFuZCBhZmZlY3RzIHRoZSBuZXRkZXZzaW0gZGV2aWNlIGNvbmZpZ3VyYXRpb24gYW5kIG5ldHdvcmsgc3RhY2sgcGFja2V0IGhhbmRsaW5nIGZvciB2aXJ0dWFsIHNpbXVsYXRlZCBuZXRkZXZzIGJ5IHJlbW92aW5nIGxvb3BiYWNrIGZsYWdzIGZyb20gbmV0ZGV2c2ltIFZGIHBvcnRzLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgcmVnYXJkaW5nIFZGIGNvbmZpZ3VyYXRpb24gYW5kIGhvdyBzaW11bGF0ZWQgcGFja2V0cyBhcmUgaGFuZGxlZCBpbiBWRiBlbnZpcm9ubWVudHMuIEkgdGhpbmsgSSdtIGdvb2QgdG8gZ28uXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ0NSwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTc6MDIuODc2NjI3NzY2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgxMDgzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiREVCVUdfRlNcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuc2ltX2NyZWF0ZVwiLFxuICAgIFwibnNpbV9kcnZfcG9ydF9hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgYW5kIGh3X2ZlYXR1cmVzIGZsYWcgZnJvbSBuZXRkZXZzaW0gVkYgcG9ydHMgZHVyaW5nIGluaXRpYWxpemF0aW9uIGluIG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoKSB0byBwcmV2ZW50IHBhY2tldHMgZnJvbSBiZWluZyBsb29wZWQgYmFjayB0byBhIFZGIHBvcnQgbGFja2luZyBxdWV1ZXMgYW5kIE5BUEkuIFRoaXMgZGlyZWN0bHkgbW9kaWZpZXMgc2ltdWxhdGVkIG5ldGRldiBmZWF0dXJlIGNvbmZpZ3VyYXRpb24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgbmV0ZGV2c2ltIHBvcnQgc2V0dXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJERUJVR19GU1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5zaW1fY3JlYXRlXCIsXG4gICAgXCJuc2ltX2Rydl9wb3J0X2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIE5FVElGX0ZfTE9PUEJBQ0sgZmVhdHVyZSBhbmQgaHdfZmVhdHVyZXMgZmxhZyBmcm9tIG5ldGRldnNpbSBWRiBwb3J0cyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaW4gbnNpbV9pbml0X25ldGRldnNpbV92ZigpIHRvIHByZXZlbnQgcGFja2V0cyBmcm9tIGJlaW5nIGxvb3BlZCBiYWNrIHRvIGEgVkYgcG9ydCBsYWNraW5nIHF1ZXVlcyBhbmQgTkFQSS4gVGhpcyBkaXJlY3RseSBtb2RpZmllcyBzaW11bGF0ZWQgbmV0ZGV2IGZlYXR1cmUgY29uZmlndXJhdGlvbiBhbmQgaXMgcmVhY2hhYmxlIHZpYSBuZXRkZXZzaW0gcG9ydCBzZXR1cC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTc6MDIuOTU0NzQyNDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTUxMjk4MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTc6MDIuOTU1MTU5NTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzE1MDg3NjE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBkaXNhYmxlcyB0aGUgTkVUSUZfRl9MT09QQkFDSyBmZWF0dXJlIGZsYWcgb24gbmV0ZGV2c2ltIFZGIGRldmljZXMgKGNsZWFyaW5nIGJpdHMgaW4gaHdfZmVhdHVyZXMgYW5kIGZlYXR1cmVzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbmV3IG1lbW9yeSwgbW9kaWZ5IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBpbnRyb2R1Y2UgcGFkZGluZyBpc3N1ZXMsIG9yIGNoYW5nZSBidWZmZXIgbGVuZ3RoIGhhbmRsaW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyOGE3YWVkMzViYTk3NTY1OGI3ZjVhMDczNDY5NzkyNGMwMzY3ZDg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDQ6NTY6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbmluZGV4IGI0YTk5ZjNjZWFjNjAuLjdiYjcyYWVhOTBhMDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmNcbisrKyBiL2RyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY1xuQEAgLTExMTMsNiArMTExMywxNCBAQCBzdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW1fdmYoc3RydWN0IG5ldGRldnNpbSAqbnMpXG4gXHRpbnQgZXJyO1xuIFxuIFx0bnMtXHUwMDNlbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZuc2ltX3ZmX25ldGRldl9vcHM7XG4rXG4rXHQvKiBuc2ltX3NldHVwKCkgb2ZmZXJzIE5FVElGX0ZfTE9PUEJBQ0sgdG8gZXZlcnkgcG9ydCwgYnV0IGEgVkYgcG9ydFxuK1x0ICogaGFzIG5laXRoZXIgcXVldWVzIG5vciBOQVBJLCBhbmQgbG9vcGluZyBhIGZyYW1lIGJhY2sgbWVhbnNcbitcdCAqIHJlY2VpdmluZyBpdC5cbitcdCAqL1xuK1x0bnMtXHUwMDNlbmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIFx1MDAyNj0gfk5FVElGX0ZfTE9PUEJBQ0s7XG4rXHRucy1cdTAwM2VuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcbitcbiBcdHJ0bmxfbG9jaygpO1xuIFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKG5zLVx1MDAzZW5ldGRldik7XG4gXHRydG5sX3VubG9jaygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTc6MDIuOTU1MTYwNTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEzNjY2OTQzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRkZXZzaW0gVmlydHVhbCBGdW5jdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuY2AuIEl0IHNlZW1zIHRoZXkncmUgbWFraW5nIGEgY2hhbmdlIHJlbGF0ZWQgdG8gdGhlIHZpcnR1YWwgZnVuY3Rpb24gKFZGKSBwb3J0IHdpdGhpbiB0aGUgbmV0ZGV2c2ltIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGhhbmRsaW5nIHRoZSBgTkVUSUZfRl9MT09QQkFDS2AgZmVhdHVyZS4gVGhlIGRpZmYgaGlnaGxpZ2h0cyB0aGF0IHRoZSBWRiBwb3J0LCB1bmxpa2UgdGhlIG1haW4gbmV0ZGV2c2ltIGRldmljZSwgZG9lc24ndCBhY3R1YWxseSBoYXZlIHF1ZXVlcyBvciBOQVBJLCBhbmQgdGhlcmVmb3JlLCBzaG91bGRuJ3QgYmUgYWR2ZXJ0aXNpbmcgb3IgaW1wbGVtZW50aW5nIGxvb3BiYWNrIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBrZXkgbGluZXMgYXJlIHdoZXJlIHRoZSBjb2RlIGlzIGNsZWFyaW5nIHRoZSBgTkVUSUZfRl9MT09QQkFDS2AgYml0IGZyb20gYm90aCBgbnMtXHUwMDNlbmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzYCBhbmQgYG5zLVx1MDAzZW5ldGRldi1cdTAwM2VmZWF0dXJlc2AuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgZW5hYmxpbmcgbG9vcGJhY2sgb24gYSBWRiB3b3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGFzIHRoZXJlJ3Mgbm8gd2F5IHRvIGFjdHVhbGx5IFwibG9vcFwiIGEgZnJhbWUgYmFjayB0byBpdHNlbGYgaW4gdGhpcyBjb250ZXh0LiBJdCB3b3VsZCBiZSByZWNlaXZlZCwgd2hpY2ggaXMgbm90IGRlc2lyZWQgZnVuY3Rpb25hbGl0eSwgYW5kIGNvdWxkIGNhdXNlIGNvbmZ1c2luZyBpc3N1ZXMuXG5cblRoZSBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgYW5kIGNvcnJlY3QuIFJlbW92aW5nIHRoZSBsb29wYmFjayBmZWF0dXJlIHByZXZlbnRzIHVuaW50ZW5kZWQgYmVoYXZpb3IgdGhhdCBjb3VsZCByZXN1bHQgZnJvbSB0aGUgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgYWR2ZXJ0aXNlZCBjYXBhYmlsaXRpZXMgYW5kIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFZGLiBJJ2Qgd2FudCB0byBjaGVjaywgb2YgY291cnNlLCB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgbG9vcGJhY2sgaXMgYmVpbmcgYWR2ZXJ0aXNlZCBmb3IgYSBWRiwgYnV0IHRoaXMgY2hhbmdlIGl0c2VsZiBhcHBlYXJzIHNvdW5kIGFuZCBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNDo1NzoxNC4zMjE4NTY5MDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0XFx0bnNpbV9icGZfdW5pbml0KG5zKTtcXG4xMTAxOlxcdGVycl9ycV9kZXN0cm95OlxcbjExMDI6XFx0XFx0bnNpbV9xdWV1ZV91bmluaXQobnMpO1xcbjExMDM6XFx0ZXJyX3V0bl9kZXN0cm95OlxcbjExMDQ6XFx0XFx0cnRubF91bmxvY2soKTtcXG4xMTA1OlxcdFxcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVxcdTAwM2VuZXRkZXYpO1xcbjExMDY6XFx0ZXJyX3BoY19kZXN0cm95OlxcbjExMDc6XFx0XFx0bW9ja19waGNfZGVzdHJveShucy1cXHUwMDNlcGhjKTtcXG4xMTA4OlxcdFxcdHJldHVybiBlcnI7XFxuMTEwOTpcXHR9XFxuMTExMDpcXHRcXG4xMTExOlxcdHN0YXRpYyBpbnQgbnNpbV9pbml0X25ldGRldnNpbV92ZihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4xMTEyOlxcdHtcXG4xMTEzOlxcdFxcdGludCBlcnI7XFxuMTExNDpcXHRcXG4xMTE1OlxcdFxcdG5zLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2bnNpbV92Zl9uZXRkZXZfb3BzO1xcbjExMTY6XFx0XFxuMTExNzpcXHRcXHQvKiBuc2ltX3NldHVwKCkgb2ZmZXJzIE5FVElGX0ZfTE9PUEJBQ0sgdG8gZXZlcnkgcG9ydCwgYnV0IGEgVkYgcG9ydFxcbjExMTg6XFx0XFx0ICogaGFzIG5laXRoZXIgcXVldWVzIG5vciBOQVBJLCBhbmQgbG9vcGluZyBhIGZyYW1lIGJhY2sgbWVhbnNcXG4xMTE5OlxcdFxcdCAqIHJlY2VpdmluZyBpdC5cXG4xMTIwOlxcdFxcdCAqL1xcbjExMjE6XFx0XFx0bnMtXFx1MDAzZW5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgXFx1MDAyNj0gfk5FVElGX0ZfTE9PUEJBQ0s7XFxuMTEyMjpcXHRcXHRucy1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2PSB+TkVUSUZfRl9MT09QQkFDSztcXG4xMTIzOlxcdFxcbjExMjQ6XFx0XFx0cnRubF9sb2NrKCk7XFxuMTEyNTpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UobnMtXFx1MDAzZW5ldGRldik7XFxuMTEyNjpcXHRcXHRydG5sX3VubG9jaygpO1xcbjExMjc6XFx0XFx0cmV0dXJuIGVycjtcXG4xMTI4OlxcdH1cXG4xMTI5OlxcdFxcbjExMzA6XFx0c3RhdGljIHZvaWQgbnNpbV9leGl0X25ldGRldnNpbShzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG4xMTMxOlxcdHtcXG4xMTMyOlxcdFxcdG5zaW1fdWRwX3R1bm5lbHNfaW5mb19kZXN0cm95KG5zLVxcdTAwM2VuZXRkZXYpO1xcbjExMzM6XFx0XFx0bW9ja19waGNfZGVzdHJveShucy1cXHUwMDNlcGhjKTtcXG4xMTM0OlxcdH1cXG4xMTM1OlxcdFxcbjExMzY6XFx0c3RydWN0IG5ldGRldnNpbSAqbnNpbV9jcmVhdGUoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldixcXG4xMTM3OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuc2ltX2Rldl9wb3J0ICpuc2ltX2Rldl9wb3J0LFxcbjExMzg6XFx0XFx0XFx0XFx0ICAgICAgdTggcGVybV9hZGRyW0VUSF9BTEVOXSlcXG4xMTM5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTc6MTQuMzIxOTQyMzc1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3ODQwNzE3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZGV2c2ltIFZGIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gdGhlIGBuc2ltX2luaXRfbmV0ZGV2c2ltX3ZmKClgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIE5ldGRldnNpbSBWRiBwb3J0cy4gVGhlIGNvcmUgY2hhbmdlIGlzIHNpbXBsZTogaXQgKnJlbW92ZXMqIHRoZSBgTkVUSUZfRl9MT09QQkFDS2AgZmVhdHVyZSBmbGFnIGZyb20gYm90aCBgaHdfZmVhdHVyZXNgIGFuZCBgZmVhdHVyZXNgIGZvciB0aGVzZSBWRiBwb3J0cy4gVGhlIGxvZ2ljIGhlcmUgaXMgY2xlYXI6IFZGIHBvcnRzLCB1bmxpa2UgdGhlaXIgc3RhbmRhcmQgY291bnRlcnBhcnRzLCBsYWNrIHF1ZXVlcyBhbmQgTkFQSSBzdXBwb3J0LlxuXG5JIHJlbWVtYmVyIG5vdywgdGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBiZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGBuc2ltX3NldHVwKClgIGZ1bmN0aW9uIHdhcyBlbmFibGluZyBgTkVUSUZfRl9MT09QQkFDS2AuIElmIHRoYXQgZmxhZyByZW1haW5lZCBhY3RpdmUgb24gdGhlIFZGLCBhbnkgYXR0ZW1wdCB0byB1c2UgbG9vcGJhY2sgb24gYSBwb3J0IHdpdGhvdXQgdGhlIGFwcHJvcHJpYXRlIHF1ZXVlaW5nIG9yIE5BUEkgaW5mcmFzdHJ1Y3R1cmUgd2FzIGEgcmVjaXBlIGZvciBkaXNhc3RlciDigJMgcG90ZW50aWFsbHkgbGVhZGluZyB0byBjcmFzaGVzLCBkZXJlZmVyZW5jZXMsIG9yIGV2ZW4gcGFuaWNzIHJlbGF0ZWQgdG8gdGhlIHF1ZXVlIGxvZ2ljLCBhcyBteSBleHBlcmllbmNlIHNob3dzLlxuXG5Ob3csIGxldCdzIHJ1biB0aHJvdWdoIHRoZSB1c3VhbCByaXNrIGFuYWx5c2lzOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlPyBOb3BlLiBObyBjaGFuZ2VzIHRvIHRoZSBzdHJ1Y3R1cmUgbGF5b3V0IHRoYXQgbWlnaHQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZmllbGRzLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm90IGEgZmFjdG9yIGhlcmUuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGEgZGlyZWN0IGZsYWcgbWFuaXB1bGF0aW9uLlxuMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8gY29uY2VybnMuXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgcGF0Y2ggb25seSBzZXRzIC8gY2xlYXJzIGEgc2luZ2xlIGZlYXR1cmUgZmxhZy5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSBjbGVhbiwgc3VyZ2ljYWwgcmVtb3ZhbCBvZiBhIGZlYXR1cmUgYml0LiBObyBtZW1vcnkgaXMgYmVpbmcgaW5pdGlhbGl6ZWQsIGFsbG9jYXRlZCwgb3IgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCBpbnRyb2R1Y2VzIGFueSBuZXcgcmlza3MuIFRoaXMgcGF0Y2ggaXMgbG93LXJpc2suXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBjb25zaWRlciB0aGUgS0FTQU4vS01TQU4gaW1wbGljYXRpb25zLiBTdGFuZGFyZCBLQVNBTiB0ZXN0aW5nIGlzIG9idmlvdXNseSBhcHBsaWNhYmxlIGFuZCBpbXBvcnRhbnQgZm9yIG5ldGRldiBjb25maWd1cmF0aW9uLCBmZWF0dXJlIGZsYWdzLCBwYWNrZXQgcGF0aHMsIGFuZCBpbnRlcmZhY2UgbGlmZWN5Y2xlLCBidXQgS01TQU4sIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeSBkZXRlY3RvciwgaXMgbm90LiBUaGUgcGF0Y2ggb25seSB0b3VjaGVzIGEgc2ltcGxlIGZsYWc7IHRoZXJlIGFyZSBubyBtZW1vcnkgYnVmZmVycyBvciB1c2VyLXNwYWNlIGNvcHkgcGF0aHMgYmVpbmcgbW9kaWZpZWQuXG5cbkxvb2tzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYW5kIGNvcnJlY3QgZml4LCBhcyBmYXIgYXMgSSBjYW4gc2VlLiBJJ20gc2F0aXNmaWVkLiBMZXQncyBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzgsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDQ6NTc6MjAuMTA2MDE3MjY4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGRpc2FibGVzIHRoZSBORVRJRl9GX0xPT1BCQUNLIGZlYXR1cmUgZmxhZyBvbiBuZXRkZXZzaW0gVkYgZGV2aWNlcyAoY2xlYXJpbmcgYml0cyBpbiBod19mZWF0dXJlcyBhbmQgZmVhdHVyZXMpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIGludHJvZHVjZSBwYWRkaW5nIGlzc3Vlcywgb3IgY2hhbmdlIGJ1ZmZlciBsZW5ndGggaGFuZGxpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgZGlzYWJsZXMgdGhlIE5FVElGX0ZfTE9PUEJBQ0sgZmVhdHVyZSBmbGFnIG9uIG5ldGRldnNpbSBWRiBkZXZpY2VzIChjbGVhcmluZyBiaXRzIGluIGh3X2ZlYXR1cmVzIGFuZCBmZWF0dXJlcykuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBtZW1vcnksIG1vZGlmeSBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgaW50cm9kdWNlIHBhZGRpbmcgaXNzdWVzLCBvciBjaGFuZ2UgYnVmZmVyIGxlbmd0aCBoYW5kbGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowg7g65[1] Phase: Succeeded StartedAt: 2026-08-31 04:57:31 +0000 UTC FinishedAt: 2026-08-31 04:57:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 04:57:31 +0000 UTC FinishedAt: 2026-08-31 04:57:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2] Phase: Succeeded StartedAt: 2026-08-31 04:57:31 +0000 UTC FinishedAt: 2026-08-31 08:38:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 04:57:31 +0000 UTC FinishedAt: 2026-08-31 08:38:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 04:57:31 +0000 UTC FinishedAt: 2026-08-31 04:57:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 04:57:31 +0000 UTC FinishedAt: 2026-08-31 04:57:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg7g65/series-workflowg7g65-convert-artifact-172181129/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 04:57:41 +0000 UTC FinishedAt: 2026-08-31 05:16:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 04:57:41 +0000 UTC FinishedAt: 2026-08-31 05:16:36 +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:*ddf6e84e-538f-4fa8-bbe4-7296f373485d,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-workflowg7g65/series-workflowg7g65-convert-artifact-172181129/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": "799569f6-1255-489c-b8f3-7a73d97dba3f", "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-workflowg7g65/series-workflowg7g65-build-action-249298791/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 04:57:41 +0000 UTC FinishedAt: 2026-08-31 05:16:26 +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:*ddf6e84e-538f-4fa8-bbe4-7296f373485d,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-workflowg7g65/series-workflowg7g65-convert-artifact-172181129/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": "799569f6-1255-489c-b8f3-7a73d97dba3f", "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-workflowg7g65/series-workflowg7g65-build-action-249298791/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 05:16:36 +0000 UTC FinishedAt: 2026-08-31 05:16:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 05:16:36 +0000 UTC FinishedAt: 2026-08-31 05:16:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 05:16:36 +0000 UTC FinishedAt: 2026-08-31 05:16:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 05:16:36 +0000 UTC FinishedAt: 2026-08-31 05:16:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowg7g65/series-workflowg7g65-convert-artifact-3844761500/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 05:16:46 +0000 UTC FinishedAt: 2026-08-31 05:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 05:16:46 +0000 UTC FinishedAt: 2026-08-31 05:18:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*799569f6-1255-489c-b8f3-7a73d97dba3f,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-workflowg7g65/series-workflowg7g65-build-action-249298791/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-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 05:18:39 +0000 UTC FinishedAt: 2026-08-31 05:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 05:18:39 +0000 UTC FinishedAt: 2026-08-31 05:18:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 05:18:39 +0000 UTC FinishedAt: 2026-08-31 05:34:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 05:18:39 +0000 UTC FinishedAt: 2026-08-31 05:34:57 +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:*ddf6e84e-538f-4fa8-bbe4-7296f373485d,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-workflowg7g65/series-workflowg7g65-convert-artifact-3844761500/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": "00d0772c-8572-4901-b1c3-6d5b4f469749", "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-workflowg7g65/series-workflowg7g65-build-action-1428163320/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 05:18:39 +0000 UTC FinishedAt: 2026-08-31 05:34:47 +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:*ddf6e84e-538f-4fa8-bbe4-7296f373485d,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-workflowg7g65/series-workflowg7g65-convert-artifact-3844761500/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": "00d0772c-8572-4901-b1c3-6d5b4f469749", "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-workflowg7g65/series-workflowg7g65-build-action-1428163320/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 05:34:57 +0000 UTC FinishedAt: 2026-08-31 05:34:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 05:34:57 +0000 UTC FinishedAt: 2026-08-31 05:34:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 05:34:57 +0000 UTC FinishedAt: 2026-08-31 05:36:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 05:34:57 +0000 UTC FinishedAt: 2026-08-31 05:36:37 +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:*00d0772c-8572-4901-b1c3-6d5b4f469749,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-workflowg7g65/series-workflowg7g65-build-action-1428163320/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-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 05:36:47 +0000 UTC FinishedAt: 2026-08-31 08:38:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 05:36:47 +0000 UTC FinishedAt: 2026-08-31 08:38:19 +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":["nsim_create","nsim_drv_port_add"],"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:*799569f6-1255-489c-b8f3-7a73d97dba3f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*00d0772c-8572-4901-b1c3-6d5b4f469749,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-workflowg7g65/series-workflowg7g65-build-action-249298791/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-workflowg7g65/series-workflowg7g65-build-action-1428163320/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 05:36:47 +0000 UTC FinishedAt: 2026-08-31 05:36:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 05:36:47 +0000 UTC FinishedAt: 2026-08-31 05:36:51 +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":["nsim_create","nsim_drv_port_add"],"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-workflowg7g65/series-workflowg7g65-convert-artifact-1311770981/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 05:36:47 +0000 UTC FinishedAt: 2026-08-31 05:36:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 05:36:47 +0000 UTC FinishedAt: 2026-08-31 05:36:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 05:36:47 +0000 UTC FinishedAt: 2026-08-31 05:36:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 05:36:57 +0000 UTC FinishedAt: 2026-08-31 08:38:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg7g65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nsim_create","nsim_drv_port_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a8455260b2e9c024d1872ac1c094793d55a7e537","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","DEBUG_FS","INET"],"series_id":"6e3862e5-35e9-41d2-93cf-7a345fa2d91e","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 05:36:57 +0000 UTC FinishedAt: 2026-08-31 08:38:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*799569f6-1255-489c-b8f3-7a73d97dba3f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*00d0772c-8572-4901-b1c3-6d5b4f469749,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-workflowg7g65/series-workflowg7g65-build-action-249298791/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-workflowg7g65/series-workflowg7g65-build-action-1428163320/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-workflowg7g65/series-workflowg7g65-convert-artifact-1311770981/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,}