Name: series-workflowgl4lh Phase: Succeeded StartedAt: 2026-07-31 01:00:53 +0000 UTC FinishedAt: 2026-07-31 02:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[0] Phase: Succeeded StartedAt: 2026-07-31 01:00:53 +0000 UTC FinishedAt: 2026-07-31 01:15:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 01:00:53 +0000 UTC FinishedAt: 2026-07-31 01:15:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "8e4d7d120734936cb961d9dc46b788e0487d3256", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PHYLIB", "USB_NET_SMSC95XX", "MDIO_REALTEK_RTL9300" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "8e4d7d120734936cb961d9dc46b788e0487d3256", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PHYLIB", "USB_NET_SMSC95XX", "MDIO_REALTEK_RTL9300" ], "series_id": "81a5b17e-5a14-4f62-ab18-7b22979166db" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phy_attach_direct", "phy_detach" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX1NNU0M5NVhYJiMzNDssCiAgICAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2RldGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoIGFuZCBub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBhbmQgaW1wbGVtZW50cyB0aGVtIGluIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIuIFRoZSBjb3JlIFBIWSBjaGFuZ2VzIGluIHBoeV9hdHRhY2hfZGlyZWN0IGFuZCBwaHlfZGV0YWNoIGFyZSByZWFjaGFibGUgdmlhIHZpcnR1YWwvZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzIChlLmcuLCBVU0IgU01TQzk1eHgpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBjYWxsYmFjayBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4YmIwZmYwMTM0NDM2YjQ5MGJmMzBlNWRhY2MyZjUyNDg3NzA3MzAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDE6MTM6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5pbmRleCAyNzFlMDViYWU5YzU3Li42N2UwYjIzYTg0NzBlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbkBAIC00LDcgJiM0Mzs0LDcgQEBcbiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sI1xuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuIFxuLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyXG4mIzQzO3RpdGxlOiBSZWFsdGVrIE90dG8gU3dpdGNoZXMgRXRoZXJuZXQgTURJTyBDb250cm9sbGVyXG4gXG4gbWFpbnRhaW5lcnM6XG4gICAtIENocmlzIFBhY2toYW0gXHUwMDNjY2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56XHUwMDNlXG5AQCAtMTIsNiAmIzQzOzEyLDE2IEBAIG1haW50YWluZXJzOlxuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBvbmVPZjpcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODItbWRpb1xuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzgwLW1kaW9cbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5Mi1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpb1xuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAtIGl0ZW1zOlxuICAgICAgICAgICAtIGVudW06XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMmItbWRpb1xuQEAgLTI0LDYgJiM0MzszNCw4IEBAIHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvXG4gICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsOTMxMS1tZGlvXG4gICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpb1xuJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbmluZGV4IGFmZDUyYTFjZDdmODMuLmQ5ZDRiNzA0YWZiM2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuQEAgLTM1LDEyICYjNDM7MzUsODggQEBcbiAgKlxuICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uXG4gICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXRcbiYjNDM7ICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy5cbiYjNDM7ICpcbiYjNDM7ICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz9cbiYjNDM7ICpcbiYjNDM7ICogRWFjaCBkZXZpY2UgaGFzIGEgU01JX1BPTExfQ1RSTCByZWdpc3Rlci4gQSBwZXItcG9ydCBiaXRtYXNrIGRlY2lkZXMgaWYgdGhlIGhhcmR3YXJlIHBvbGxpbmcgb2ZcbiYjNDM7ICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yXG4mIzQzOyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlXG4mIzQzOyAqIE1ESU8gYnVzIG9mIGFuIFJUTDgzODAgYW5kIFJUTDgzOTMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyAoaW4ga2VybmVsIG5vdGF0aW9uKTpcbiYjNDM7ICpcbiYjNDM7ICpcdFJUTDgzODBcdFx0XHRcdFJUTDgzOTNcbiYjNDM7ICpcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTtcdHBoeV9yZWFkKHBoeSwgMCk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgMSk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XHRwaHlfcmVhZChwaHksIDQpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDUpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV9yZWFkKHBoeSwgNik7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgOSk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XHRwaHlfcmVhZChwaHksIDEwKTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCAxNSk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDE0KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDkpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDEwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDE1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMSk7XHRcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDYpO1xuJiM0MzsgKlxuJiM0MzsgKiBBZnRlciBvbmUgUEhZIHN0YXR1cyBpcyByZWFkLCB0aGUgcG9sbGluZyBlbmdpbmUgZ29lcyBvdmVyIHRvIHRoZSBuZXh0IFBIWS4gSWYgb25lIGJ1cyBpcyBmdWxseVxuJiM0MzsgKiBzY2FubmVkIGl0IHN3aXRjaGVzIG92ZXIgdG8gdGhlIG5leHQgYnVzLiBCYXNpY2FsbHkgdGhlIHBvbGxpbmcgc3lzdGVtIGlzIGFsd2F5cyBidXN5IGFuZCB0aGVcbiYjNDM7ICogTUFDIHN0YXRlIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGlzIGEgZ2xpbXBzZSBsb29rIGF0IHRoZSBjb21wbGV4aXR5IG9mIHRoZSBwb2xsaW5nIGFuZCBsZWF2ZXMgb3V0IHRoZSBDNDUgY2FzZSBhbmQgdGhlIE1BQ1xuJiM0MzsgKiByZWdpc3RlciB1cGRhdGUgbG9naWMgYWZ0ZXJ3YXJkcy4gSW1wb3J0YW50IHRvIG5vdGU6XG4mIzQzOyAqXG4mIzQzOyAqIC0gMTAwIE1CaXQgZG93bnNoaWZ0cyAoYnJva2VuIGNhYmxlcykgYXJlIGlkZW50aWZpZWQgYW5kIHByb3BhZ2F0ZWQgdG8gdGhlIE1BQyBjb3JyZWN0bHlcbiYjNDM7ICogLSBBY2Nlc3MgdG8gTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgd29ya3MgdmlhIEM0NSBvdmVyIEMyMi5cbiYjNDM7ICogLSBJdCBpcyB1bmNsZWFyIGlmIHRoZXNlIHNlcXVlbmNlcyBjaGFuZ2UgZm9yIGRpZmZlcmVudCBQSFlzLlxuJiM0MzsgKiAtIEFjY2VzcyB0byBSZWFsdGVrIHJlc2VydmVkIHJlZ2lzdGVyIDI2IChsaW5rIHNwZWVkKSBoYXMgbm90IHlldCBiZWVuIHNlZW4uXG4mIzQzOyAqXG4mIzQzOyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/XG4mIzQzOyAqXG4mIzQzOyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXJcbiYjNDM7ICogc2V0cyBhIFwmIzM0O3J1biBjb21tYW5kIG5vd1wmIzM0OyBiaXQuIEJldHdlZW4gdHdvIHBvbGxpbmcgc2VxdWVuY2VzIGZvciBkaWZmZXJlbnQgUEhZcyB0aGUgaGFyZHdhcmVcbiYjNDM7ICogY2hlY2tzIGlmIGEgdXNlciBjb21tYW5kIG5lZWRzIHRvIHJ1biBhbmQgc2VuZHMgaXQgb250byB0aGUgYnVzLiBBZnRlcndhcmRzIGl0IHNpbXBseSBjb250aW51ZXNcbiYjNDM7ICogaXRzIHBvbGxpbmcgd29yay4gSW5zcGVjdGluZyB0aGUgY29tbWFuZCBzZXF1ZW5jZSBmb3IgYSBwYWdlZCB3cml0ZSBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6XG4mIzQzOyAqXG4mIzQzOyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4mIzQzOyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1x0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcbiYjNDM7ICpcdFx0XHRcdFx0cGh5X3dyaXRlKHBoeSwgMzEsIDApO1xuJiM0MzsgKlxuJiM0MzsgKiBXaGF0IGRvZXMgdGhpcyBtZWFuP1xuJiM0MzsgKlxuJiM0MzsgKiBUaGVyZSBhcmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIHBvbGxpbmcgYW5kIFBIWSBhY2Nlc3MgYmV0d2VlbiB0aGUgbW9kZWxzIGJ1dCB0aGUgY2hhbGxlbmdlXG4mIzQzOyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXRcbiYjNDM7ICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uXG4mIzQzOyAqXG4mIzQzOyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay5cbiYjNDM7ICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy5cbiYjNDM7ICogLSBUaGUgUmVhbHRlayBwYWdlIHJlZ2lzdGVyIDMxIGlzIG1hZ2ljYWxseSBtb2RpZmllZCBpbiB0aGUgYmFja2dyb3VuZCBzbyB0aGF0IHBvbGxpbmcgd2lsbFxuJiM0MzsgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW1cbiYjNDM7ICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgXCYjMzQ7bWFnaWNhbGx5XCYjMzQ7IGluIHRoZSBiYWNrZ3JvdW5kLlxuJiM0MzsgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdFxuJiM0MzsgKiAgIHRoZSBwb2xsaW5nIGVuZ2luZSBvdmVyd3JpdGVzIHJlZ2lzdGVycyAxMy8xNCBpbiBiZXR3ZWVuLlxuJiM0MzsgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhblxuJiM0MzsgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLlxuJiM0MzsgKiAtIEFuIGFjY2VzcyB0byBvbmUgUEhZIHdpbGwgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCBmcmVlIHNsb3Qgb2YgdGhlIHBvbGxpbmcgZW5naW5lLlxuJiM0MzsgKlxuJiM0MzsgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXRcbiYjNDM7ICogYXJpc2VzIGZyb20gdGhlIGFib3ZlIGRlc2NyaWJlZCBoYXJkd2FyZSBwb2xsaW5nLlxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbmQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG5AQCAtNTAsNiAmIzQzOzEyNiw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuIFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX0JVU0VTXHRcdFx0MVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXHRcdFx0MjhcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4YTEwMFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXHRcdDB4YTFiOFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXHRcdDB4YTFiY1xuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDI0LCAyMClcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFXHRcdEdFTk1BU0soMTksIDE1KVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0VcdFx0R0VOTUFTSygxNCwgMylcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcdFx0XHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzJcdFx0MHhhMWMwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcdFx0MHhhMWM0XG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhhMTdjXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhhMWM4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX0JVU0VTXHRcdFx0MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTXHRcdFx0ODE5MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTXHRcdFx0NTJcbiYjNDM7I2RlZmluZSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkxcdFx0MHgwM2VjXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcdFx0MHgwM2RjXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSXHRcdEdFTk1BU0soOSwgNSlcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMjIsIDEwKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXHRcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcdFx0XHQweDAzZTBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcdFx0R0VOTUFTSyg4LCAwKVxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTFx0XHQweDAzZjBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTFx0XHRcdDB4MDNmNFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcdFx0MHgwM2U0XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcdFx0MHgwM2U4XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcdFx0MHgwM2ZjXG4mIzQzO1xuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXHRcdFx0MjhcbkBAIC03MCw2ICYjNDM7MTkwLDcgQEBcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGNiN2NcbiYjNDM7I2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkxcdFx0XHQweGNhOTBcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMXHRcdDB4Y2I4MFxuIFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcdFx0XHQ0XG5AQCAtOTUsMTIgJiM0MzsyMTYsMTYgQEBcbiAjZGVmaW5lICAgUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19NTURfQ1RSTFx0MHgwYzE4XG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFx0XHQweDBjNzRcbiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDBjY2NcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcdFx0MHgwYzljXG4gXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcdFx0XHRcdEJJVCgwKVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXHRcdFx0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXHRcdFx0R0VOTUFTSygxNSwgMClcbiBcbiYjNDM7I2RlZmluZSBSVExfVkVORE9SX0lEXHRcdFx0XHQweDAwMWNjODAwXG4mIzQzOyNkZWZpbmUgUlRMX1BBR0VfU0VMRUNUXHRcdFx0XHQzMVxuJiM0MztcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXHRcdFx0NlxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFJcdFx0XHQ1XG4gI2RlZmluZSBNQVBfQklUU19QRVJfQlVTXHRcdFx0MlxuQEAgLTEyMyw5ICYjNDM7MjQ4LDExIEBAIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIHtcbiBcbiBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2IHtcbiBcdGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87XG4mIzQzO1x0c3RydWN0IGtyZWYga3JlZjtcbiBcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiBcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xuIFx0REVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7XG4mIzQzO1x0dTE2IHBhZ2VbTUFYX1BPUlRTXTtcbiBcdHU4IHNtaV9idXNbTUFYX1BPUlRTXTtcbiBcdHU4IHNtaV9hZGRyW01BWF9QT1JUU107XG4gXHRib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTtcbkBAIC0xNDIsNiAmIzQzOzI2OSw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xuIFx0dTggbnVtX2J1c2VzO1xuIFx0dTggbnVtX3BvcnRzO1xuIFx0dTE2IG51bV9wYWdlcztcbiYjNDM7XHR1MzIgcG9sbF9jdHJsO1xuIFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XG4gXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuIFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuQEAgLTE3Nyw2ICYjNDM7MzA1LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpXG4gXHRyZXR1cm4gY2hhbi1cdTAwM2Vwcml2O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXBvbGxfY3RybCAmIzQzOyAocG9ydCAvIDMyKSAqIDQsXG4mIzQzO1x0XHRcdFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcbiB7XG5AQCAtMTg1LDkgJiM0MzszMTksOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0dTMyIGNtZHN0YXRlO1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmxlIHdyb25nICovXG4mIzQzO1x0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibHkgd3JvbmcgKi9cbiBcdHJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LVx1MDAzZXJlZ21hcCwgaW5mby1cdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xuJiM0MztcdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjI3LDcgJiM0MzszNjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yNjQsMTMgJiM0MzszOTgsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVx1MDAzZWluZm8tXHUwMDNlY21kX3dyaXRlLCBjbWRfZGF0YSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuJiM0MztcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuJiM0MztcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuJiM0MztcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4ge1xuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiBcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiBcdH07XG4gXG5AQCAtMjg0LDcgJiM0Mzs1MjgsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuIFx0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4gXHR9O1xuQEAgLTMyNCw3ICYjNDM7NTY4LDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHVcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYnJvYWRjYXN0XHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSxcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHR9O1xuIFxuIFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbkBAIC0zMzYsNyAmIzQzOzU4MCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG5AQCAtMzgyLDggJiM0Mzs2MjYsMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbiYjNDM7XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0aWYgKHJlZ251bSA9PSBSVExfUEFHRV9TRUxFQ1QpXG4mIzQzO1x0XHRcdHJldHVybiBwcml2LVx1MDAzZXBhZ2VbcG9ydF07XG4mIzQzO1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlcmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sIFx1MDAyNnZhbHVlKTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XG4gfVxuQEAgLTM5Nyw4ICYjNDM7NjQ1LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2XG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbiYjNDM7XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0aWYgKHJlZ251bSA9PSBSVExfUEFHRV9TRUxFQ1QpIHtcbiYjNDM7XHRcdFx0aWYgKHZhbHVlIFx1MDAzZT0gUkFXX1BBR0UocHJpdikpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSB2YWx1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNld3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDcxLDYgJiM0Mzs3MjgsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUEhZX1BBVENIX0RPTkUgZW5hYmxlcyBQSFkgY29udHJvbCB2aWEgU29DLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBQSFkgYWNjZXNzLCBpbmNsdWRpbmdcbiYjNDM7XHQgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4ge1xuIFx0dTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwO1xuQEAgLTUwNyw2ICYjNDM7NzczLDU5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGNoYW4tXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcG9ydDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXNtaV9idXNfaXNfYzQ1W2NoYW4tXHUwMDNlbWRpb19idXNdIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi1cdTAwM2VwaHlfaWQsIFJUTF9WRU5ET1JfSUQpKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7T25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4mIzQzO1x0aW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIGF2b2lkIHdyb25nIGNhY2hlZCBwYWdlIGZvciBuZXh0IGF0dGFjaG1lbnQgKi9cbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlc21pX2J1c19pc19jNDVbY2hhbi1cdTAwM2VtZGlvX2J1c10pXG4mIzQzO1x0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRkZXZfZXJyKGJ1cy1cdTAwM2VwYXJlbnQsIFwmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHBvbGxpbmcgZm9yIHBvcnQgJWRcXG5cJiMzNDssIHBvcnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX2NsZWFudXBfY29udHJvbGxlcihzdHJ1Y3Qga3JlZiAqa3JlZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiwga3JlZik7XG4mIzQzO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRrZnJlZShwcml2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R0b19lbWRpb19jbGVhbnVwX2J1cyh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdGtyZWZfcHV0KFx1MDAyNnByaXYtXHUwMDNla3JlZiwgb3R0b19lbWRpb19jbGVhbnVwX2NvbnRyb2xsZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuIFx0XHRcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxuIHtcbkBAIC01MzYsMTIgJiM0Mzs4NTUsMjAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcbiBcdFx0YnVzLVx1MDAzZXdyaXRlID0gb3R0b19lbWRpb193cml0ZV9jMjI7XG4gXHR9XG4gXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuJiM0MztcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XG4mIzQzO1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbiYjNDM7XG4gXHRjaGFuID0gYnVzLVx1MDAzZXByaXY7XG4gXHRjaGFuLVx1MDAzZW1kaW9fYnVzID0gbWRpb19idXM7XG4gXHRjaGFuLVx1MDAzZXByaXYgPSBwcml2O1xuIFxuIFx0c25wcmludGYoYnVzLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0OyVzLSVkXCYjMzQ7LCBkZXZfbmFtZShkZXYpLCBtZGlvX2J1cyk7XG4gXG4mIzQzO1x0a3JlZl9nZXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmKTtcbiYjNDM7XHRlcnIgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXHUwMDI2YnVzLVx1MDAzZWRldiwgb3R0b19lbWRpb19jbGVhbnVwX2J1cywgcHJpdik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcJiMzNDtjYW5ub3QgcmVnaXN0ZXIgY2xlYW51cCBhY3Rpb25cXG5cJiMzNDspO1xuJiM0MztcbiBcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgdG9fb2Zfbm9kZShub2RlKSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7Y2Fubm90IHJlZ2lzdGVyIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbkBAIC02NTIsNTAgJiM0Mzs5NzksMTIyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBwcml2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3BvcnRzOyBwb3J0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXY7XG4mIzQzO1x0aW50IGJ1c2VzX3JlZ2lzdGVyZWQgPSAwO1xuIFx0aW50IGVycjtcbiBcbi1cdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRwcml2ID0ga3phbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdGtyZWZfaW5pdChcdTAwMjZwcml2LVx1MDAzZWtyZWYpO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiBcbiBcdHByaXYtXHUwMDNlaW5mbyA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xuIFx0cHJpdi1cdTAwM2VyZWdtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoZGV2LVx1MDAzZXBhcmVudC1cdTAwM2VvZl9ub2RlKTtcbi1cdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZWdtYXApKVxuLVx0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZXJlZ21hcCk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIocHJpdi1cdTAwM2VyZWdtYXApO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRlcnIgPSBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHByaXYpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdGlmIChwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcikge1xuIFx0XHRlcnIgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcihwcml2KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcJiMzNDtmYWlsZWQgdG8gc2V0dXAgTURJTyBidXMgY29udHJvbGxlclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdGRldmljZV9mb3JfZWFjaF9jaGlsZF9ub2RlX3Njb3BlZChkZXYsIGNoaWxkKSB7XG4gXHRcdGVyciA9IG90dG9fZW1kaW9fcHJvYmVfb25lKGRldiwgcHJpdiwgY2hpbGQpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdGJ1c2VzX3JlZ2lzdGVyZWQmIzQzOyYjNDM7O1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKCFidXNlc19yZWdpc3RlcmVkKVxuJiM0MztcdFx0ZXJyID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsIFwmIzM0O25vIE1ESU8gYnVzZXMgcmVnaXN0ZXJlZFxcblwmIzM0Oyk7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCBvdHRvX2VtZGlvX2NsZWFudXBfY29udHJvbGxlcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcbiYjNDM7XHQuYWRkcl9tYXBfYmFzZSA9IFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxuJiM0MztcdC5jbWRfZmFpbCA9IFJUTDgzODBfUEhZX0NUUkxfRkFJTCxcbiYjNDM7XHQuY21kX3JlYWQgPSBSVEw4MzgwX1BIWV9DVFJMX1JFQUQsXG4mIzQzO1x0LmNtZF93cml0ZSA9IFJUTDgzODBfUEhZX0NUUkxfV1JJVEUsXG4mIzQzO1x0LmNtZF9yZWdzID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsXG4mIzQzO1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMyxcbiYjNDM7XHRcdC5pb19kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzIsXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLFxuJiM0MztcdH0sXG4mIzQzO1x0Lm51bV9idXNlcyA9IFJUTDgzODBfTlVNX0JVU0VTLFxuJiM0MztcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcbiYjNDM7XHQubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDgzODBfU01JX1BPTExfQ1RSTCxcbiYjNDM7XHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxuJiM0MztcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMixcbiYjNDM7XHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUsXG4mIzQzO1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXG4mIzQzO1x0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcbiYjNDM7XHQuY21kX2ZhaWwgPSBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwsXG4mIzQzO1x0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxuJiM0MztcdC5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLFxuJiM0MztcdC5jbWRfcmVncyA9IHtcbiYjNDM7XHRcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXG4mIzQzO1x0XHQuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCxcbiYjNDM7XHRcdC5jNDVfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMLFxuJiM0MztcdFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcbiYjNDM7XHRcdC5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3cgPSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XLFxuJiM0MztcdFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXG4mIzQzO1x0fSxcbiYjNDM7XHQubnVtX2J1c2VzID0gUlRMODM5MF9OVU1fQlVTRVMsXG4mIzQzO1x0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuJiM0MztcdC5udW1fcG9ydHMgPSBSVEw4MzkwX05VTV9QT1JUUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXG4mIzQzO1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuJiM0MztcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NSxcbiYjNDM7XHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMixcbiYjNDM7XHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XG4gXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxuIFx0LmJ1c19tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMLFxuQEAgLTcxMSw2ICYjNDM7MTExMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0Lm51bV9idXNlcyA9IFJUTDkzMDBfTlVNX0JVU0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxuIFx0Lm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLFxuJiM0MztcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LFxuQEAgLTczNiw2ICYjNDM7MTEzNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xuIFx0Lm51bV9idXNlcyA9IFJUTDkzMTBfTlVNX0JVU0VTLFxuIFx0Lm51bV9wYWdlcyA9IFJUTDkzMTBfTlVNX1BBR0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLFxuJiM0MztcdC5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsXG5AQCAtNzQ0LDYgJiM0MzsxMTQ1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvdHRvX2VtZGlvX2lkc1tdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHJ0bDgzODAtbWRpb1wmIzM0OywgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzgzODBfaW5mbyB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHJ0bDgzOTEtbWRpb1wmIzM0OywgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsOTMwMS1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMwMF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw5MzExLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb185MzEwX2luZm8gfSxcbiBcdHt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbmluZGV4IDk0YjJlODVlMDBhMzcuLjIzMzYyMmU5YmE2MWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTczNCw2ICYjNDM7MTczNCw5NiBAQCBzdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuIFx0cmV0dXJuIHBoeWRydi1cdTAwM2Vjb25maWdfaW50ciBcdTAwMjZcdTAwMjYgcGh5ZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBfX3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBub3RpZnlfYnVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXY7XG4mIzQzO1x0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cztcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VkZXZsaW5rKSB7XG4mIzQzO1x0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VzeXNmc19saW5rcykge1xuJiM0MztcdFx0aWYgKGRldilcbiYjNDM7XHRcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2ZGV2LVx1MDAzZWRldi5rb2JqLCBcJiMzNDtwaHlkZXZcJiMzNDspO1xuJiM0MztcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosIFwmIzM0O2F0dGFjaGVkX2RldlwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4mIzQzO1x0XHRzeXNmc19yZW1vdmVfZmlsZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYua29iaixcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNmRldl9hdHRyX3BoeV9zdGFuZGFsb25lLmF0dHIpO1xuJiM0MztcbiYjNDM7XHRwaHlfc3VzcGVuZChwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAobm90aWZ5X2J1cyBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKVxuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdGlmIChkZXYpIHtcbiYjNDM7XHRcdHN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92O1xuJiM0MztcbiYjNDM7XHRcdC8qIGh3cHJvdiBtYXkgdGVjaG5pY2FsbHkgYmUgcHJvdGVjdGVkIGJ5IG9wcyBsb2NrIGJ1dFxuJiM0MztcdFx0ICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRod3Byb3YgPSBydG5sX2RlcmVmZXJlbmNlKGRldi1cdTAwM2Vod3Byb3YpO1xuJiM0MztcdFx0LyogRGlzYWJsZSB0aW1lc3RhbXAgaWYgaXQgaXMgdGhlIG9uZSBzZWxlY3RlZCAqL1xuJiM0MztcdFx0aWYgKGh3cHJvdiBcdTAwMjZcdTAwMjYgaHdwcm92LVx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcbiYjNDM7XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2Vod3Byb3YsIE5VTEwpO1xuJiM0MztcdFx0XHRrZnJlZV9yY3UoaHdwcm92LCByY3VfaGVhZCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldi1cdTAwM2VwaHlkZXYgPSBOVUxMO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiA9IE5VTEw7XG4mIzQzO1x0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBoeWxpbmsgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlcilcbiYjNDM7XHRcdG1vZHVsZV9wdXQocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlci1cdTAwM2Vvd25lcik7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxuJiM0MztcdCAqIHdhcyB1c2luZyB0aGUgZ2VuZXJpYyBkcml2ZXIpLCB3ZSB1bmJpbmQgdGhlIGRldmljZVxuJiM0MztcdCAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUmIzM5O3MgYSBjaGFuY2UgYVxuJiM0MztcdCAqIHJlYWwgZHJpdmVyIGNvdWxkIGJlIGxvYWRlZFxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbikge1xuJiM0MztcdFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuJiM0MztcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgcGh5ZGV2IG1pZ2h0IGdvIGF3YXkgb24gdGhlIHB1dF9kZXZpY2UoKSBiZWxvdywgc28gYXZvaWRcbiYjNDM7XHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1xuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiYjNDM7XHRpZiAoZGV2KVxuJiM0MztcdFx0bmRldl9vd25lciA9IGRldi1cdTAwM2VkZXYucGFyZW50LVx1MDAzZWRyaXZlci1cdTAwM2Vvd25lcjtcbiYjNDM7XHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4mIzQzO1x0XHRtb2R1bGVfcHV0KGJ1cy1cdTAwM2Vvd25lcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxuJiM0MzsgKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdC8qIGNsZWFudXAgaW5jbHVkaW5nIGJ1cyBub3RpZmljYXRpb24gKi9cbiYjNDM7XHRfX3BoeV9kZXRhY2gocGh5ZGV2LCB0cnVlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xuJiM0MztcbiAvKipcbiAgKiBwaHlfYXR0YWNoX2RpcmVjdCAtIGF0dGFjaCBhIG5ldHdvcmsgZGV2aWNlIHRvIGEgZ2l2ZW4gUEhZIGRldmljZSBwb2ludGVyXG4gICogQGRldjogbmV0d29yayBkZXZpY2UgdG8gYXR0YWNoXG5AQCAtMTg3Niw2ICYjNDM7MTk2NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3I7XG4gXG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuJiM0MztcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwaHlfcmVzdW1lKHBoeWRldik7XG4gXG4gXHQvKipcbkBAIC0xODkwLDggJiM0MzsxOTg2LDggQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRyZXR1cm4gZXJyO1xuIFxuIGVycm9yOlxuLVx0LyogcGh5X2RldGFjaCgpIGRvZXMgYWxsIG9mIHRoZSBjbGVhbnVwIGJlbG93ICovXG4tXHRwaHlfZGV0YWNoKHBoeWRldik7XG4mIzQzO1x0LyogY2xlYW51cCB3aXRob3V0IGJ1cyBub3RpZmljYXRpb24gKi9cbiYjNDM7XHRfX3BoeV9kZXRhY2gocGh5ZGV2LCBmYWxzZSk7XG4gXHRyZXR1cm4gZXJyO1xuIFxuIGVycm9yX21vZHVsZV9wdXQ6XG5AQCAtMTkwNiw4NiAmIzQzOzIwMDIsNiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiB9XG4gRVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoX2RpcmVjdCk7XG4gXG4tLyoqXG4tICogcGh5X2RldGFjaCAtIGRldGFjaCBhIFBIWSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2Vcbi0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3Rcbi0gKlxuLSAqIFRoaXMgZGV0YWNoZXMgdGhlIHBoeSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UgYW5kIHRoZSBwaHlcbi0gKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXG4tICovXG4tdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXY7XG4tXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcbi1cdHN0cnVjdCBtaWlfYnVzICpidXM7XG4tXG4tXHRpZiAocGh5ZGV2LVx1MDAzZWRldmxpbmspIHtcbi1cdFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cdTAwM2VkZXZsaW5rKTtcbi1cdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuLVx0fVxuLVxuLVx0aWYgKHBoeWRldi1cdTAwM2VzeXNmc19saW5rcykge1xuLVx0XHRpZiAoZGV2KVxuLVx0XHRcdHN5c2ZzX3JlbW92ZV9saW5rKFx1MDAyNmRldi1cdTAwM2VkZXYua29iaiwgXCYjMzQ7cGh5ZGV2XCYjMzQ7KTtcbi1cdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosIFwmIzM0O2F0dGFjaGVkX2RldlwmIzM0Oyk7XG4tXHR9XG4tXG4tXHRpZiAoIXBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4tXHRcdHN5c2ZzX3JlbW92ZV9maWxlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldi5rb2JqLFxuLVx0XHRcdFx0ICBcdTAwMjZkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTtcbi1cbi1cdHBoeV9zdXNwZW5kKHBoeWRldik7XG4tXHRpZiAoZGV2KSB7XG4tXHRcdHN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92O1xuLVxuLVx0XHQvKiBod3Byb3YgbWF5IHRlY2huaWNhbGx5IGJlIHByb3RlY3RlZCBieSBvcHMgbG9jayBidXRcbi1cdFx0ICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKVxuLVx0XHQgKi9cbi1cdFx0aHdwcm92ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtXHUwMDNlaHdwcm92KTtcbi1cdFx0LyogRGlzYWJsZSB0aW1lc3RhbXAgaWYgaXQgaXMgdGhlIG9uZSBzZWxlY3RlZCAqL1xuLVx0XHRpZiAoaHdwcm92IFx1MDAyNlx1MDAyNiBod3Byb3YtXHUwMDNlcGh5ZGV2ID09IHBoeWRldikge1xuLVx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlaHdwcm92LCBOVUxMKTtcbi1cdFx0XHRrZnJlZV9yY3UoaHdwcm92LCByY3VfaGVhZCk7XG4tXHRcdH1cbi1cbi1cdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldi1cdTAwM2VwaHlkZXYgPSBOVUxMO1xuLVx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2ID0gTlVMTDtcbi1cdFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5ZGV2KTtcbi1cdH1cbi1cbi1cdHBoeWRldi1cdTAwM2VwaHlfbGlua19jaGFuZ2UgPSBOVUxMO1xuLVx0cGh5ZGV2LVx1MDAzZXBoeWxpbmsgPSBOVUxMO1xuLVxuLVx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmRldi5kcml2ZXIpXG4tXHRcdG1vZHVsZV9wdXQocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlci1cdTAwM2Vvd25lcik7XG4tXG4tXHQvKiBJZiB0aGUgZGV2aWNlIGhhZCBubyBzcGVjaWZpYyBkcml2ZXIgYmVmb3JlIChpLmUuIC0gaXRcbi1cdCAqIHdhcyB1c2luZyB0aGUgZ2VuZXJpYyBkcml2ZXIpLCB3ZSB1bmJpbmQgdGhlIGRldmljZVxuLVx0ICogZnJvbSB0aGUgZ2VuZXJpYyBkcml2ZXIgc28gdGhhdCB0aGVyZSYjMzk7cyBhIGNoYW5jZSBhXG4tXHQgKiByZWFsIGRyaXZlciBjb3VsZCBiZSBsb2FkZWRcbi1cdCAqL1xuLVx0aWYgKHBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XG4tXHRcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuLVx0XHRwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XG4tXHR9XG4tXG4tXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuLVx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuLVx0Lypcbi1cdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxuLVx0ICogYSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgcmVhZGluZyB0aGUgdW5kZXJseWluZyBidXMgZmlyc3QuXG4tXHQgKi9cbi1cdGJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbi1cbi1cdHB1dF9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbi1cdGlmIChkZXYpXG4tXHRcdG5kZXZfb3duZXIgPSBkZXYtXHUwMDNlZGV2LnBhcmVudC1cdTAwM2Vkcml2ZXItXHUwMDNlb3duZXI7XG4tXHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4tXHRcdG1vZHVsZV9wdXQoYnVzLVx1MDAzZW93bmVyKTtcbi19XG4tRVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcbi1cbiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggMTEwOTJjMzE3NWIzZC4uZmVmMGM2YTNlMjdmZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0zNzYsNiAmIzQzOzM3NiwyNCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XG4gXHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpO1xuIFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cbiBcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzXG4mIzQzO1x0ICogZHJpdmVycy4gT3B0aW9uYWwgYW5kIGluZGVwZW5kZW50IG9mIEBub3RpZnlfcGh5X2RldGFjaC4gQ2FsbGVkXG4mIzQzO1x0ICogaW4gcGh5X2F0dGFjaF9kaXJlY3QoKSByaWdodCBiZWZvcmUgcGh5X3Jlc3VtZSgpLiBSdW5zIGluIHByb2Nlc3NcbiYjNDM7XHQgKiBjb250ZXh0LCBtYXkgc2xlZXAgYW5kIG1heSBiZSBjYWxsZWQgd2l0aCBSVE5MIGhlbGQuIE11c3Qgbm90XG4mIzQzO1x0ICogYWNxdWlyZSBvciByZWx5IG9uIFJUTkwuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm5vXG4mIzQzO1x0ICogb24gZmFpbHVyZS4gTXVzdCB1bndpbmQgaXRzIG93biBzdGF0ZSBvbiBlcnJvciBhcyBhdHRhY2htZW50IGlzXG4mIzQzO1x0ICogYWJvcnRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQG5vdGlmeV9waHlfZGV0YWNoOiBQZXJmb3JtIHByZS1kZXRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzXG4mIzQzO1x0ICogZHJpdmVycy4gT3B0aW9uYWwgYW5kIGluZGVwZW5kZW50IG9mIEBub3RpZnlfcGh5X2F0dGFjaC4gQ2FsbGVkXG4mIzQzO1x0ICogaW4gcGh5X2RldGFjaCgpIHJpZ2h0IGFmdGVyIHBoeV9zdXNwZW5kKCkuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0LFxuJiM0MztcdCAqIG1heSBzbGVlcCBhbmQgbWF5IGJlIGNhbGxlZCB3aXRoIFJUTkwgaGVsZC4gTXVzdCBub3QgYWNxdWlyZSBvclxuJiM0MztcdCAqIHJlbHkgb24gUlROTC5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2b2lkICgqbm90aWZ5X3BoeV9kZXRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIFxuIFx0LyoqIEBzdGF0czogU3RhdGlzdGljIGNvdW50ZXJzIHBlciBkZXZpY2Ugb24gdGhlIGJ1cyAqL1xuIFx0c3RydWN0IG1kaW9fYnVzX3N0YXRzIHN0YXRzW1BIWV9NQVhfQUREUl07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX1NNU0M5NVhYJiMzNDssCiAgICAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2RldGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoIGFuZCBub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBhbmQgaW1wbGVtZW50cyB0aGVtIGluIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIuIFRoZSBjb3JlIFBIWSBjaGFuZ2VzIGluIHBoeV9hdHRhY2hfZGlyZWN0IGFuZCBwaHlfZGV0YWNoIGFyZSByZWFjaGFibGUgdmlhIHZpcnR1YWwvZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzIChlLmcuLCBVU0IgU01TQzk1eHgpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBjYWxsYmFjayBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YmIwZmYwMTM0NDM2YjQ5MGJmMzBlNWRhY2MyZjUyNDg3NzA3MzAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMDE6MTM6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKaW5kZXggMjcxZTA1YmFlOWM1Ny4uNjdlMGIyM2E4NDcwZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbApAQCAtNCw3ICYjNDM7NCw3IEBACiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIwogJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiAKLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyCiYjNDM7dGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXIKIAogbWFpbnRhaW5lcnM6CiAgIC0gQ2hyaXMgUGFja2hhbSAmbHQ7Y2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56Jmd0OwpAQCAtMTIsNiAmIzQzOzEyLDE2IEBAIG1haW50YWluZXJzOgogcHJvcGVydGllczoKICAgY29tcGF0aWJsZToKICAgICBvbmVPZjoKJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpbwomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpbwogICAgICAgLSBpdGVtczoKICAgICAgICAgICAtIGVudW06CiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvCkBAIC0yNCw2ICYjNDM7MzQsOCBAQCBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvCiAgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw5MzExLW1kaW8KICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpbwomIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvCiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpbwogICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCmluZGV4IGFmZDUyYTFjZDdmODMuLmQ5ZDRiNzA0YWZiM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKQEAgLTM1LDEyICYjNDM7MzUsODggQEAKICAqCiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvbgogICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LgomIzQzOyAqCiYjNDM7ICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0CiYjNDM7ICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy4KJiM0MzsgKgomIzQzOyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/CiYjNDM7ICoKJiM0MzsgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZgomIzQzOyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvcgomIzQzOyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlCiYjNDM7ICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOgomIzQzOyAqCiYjNDM7ICoJUlRMODM4MAkJCQlSVEw4MzkzCiYjNDM7ICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqCXBoeV93cml0ZShwaHksIDMxLCAweDApOwlwaHlfcmVhZChwaHksIDApOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDEzLCAweDcpOwlwaHlfcmVhZChwaHksIDEpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDE0LCAweDNjKTsJcGh5X3JlYWQocGh5LCA0KTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTsJcGh5X3JlYWQocGh5LCA1KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDE0KTsJCXBoeV9yZWFkKHBoeSwgNik7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CXBoeV9yZWFkKHBoeSwgOSk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpOwlwaHlfcmVhZChwaHksIDEwKTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTsJcGh5X3JlYWQocGh5LCAxNSk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNCk7CQlwaHlfd3JpdGUocGh5LCAxMywgMHg3KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDkpOwkJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMTApOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNSk7CQlwaHlfcmVhZChwaHksIDE0KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDApOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxKTsJCXBoeV93cml0ZShwaHksIDE0LCAweDNkKTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDQpOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCA1KTsJCXBoeV9yZWFkKHBoeSwgMTQpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgNik7CiYjNDM7ICoKJiM0MzsgKiBBZnRlciBvbmUgUEhZIHN0YXR1cyBpcyByZWFkLCB0aGUgcG9sbGluZyBlbmdpbmUgZ29lcyBvdmVyIHRvIHRoZSBuZXh0IFBIWS4gSWYgb25lIGJ1cyBpcyBmdWxseQomIzQzOyAqIHNjYW5uZWQgaXQgc3dpdGNoZXMgb3ZlciB0byB0aGUgbmV4dCBidXMuIEJhc2ljYWxseSB0aGUgcG9sbGluZyBzeXN0ZW0gaXMgYWx3YXlzIGJ1c3kgYW5kIHRoZQomIzQzOyAqIE1BQyBzdGF0ZSBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgYSBnbGltcHNlIGxvb2sgYXQgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHBvbGxpbmcgYW5kIGxlYXZlcyBvdXQgdGhlIEM0NSBjYXNlIGFuZCB0aGUgTUFDCiYjNDM7ICogcmVnaXN0ZXIgdXBkYXRlIGxvZ2ljIGFmdGVyd2FyZHMuIEltcG9ydGFudCB0byBub3RlOgomIzQzOyAqCiYjNDM7ICogLSAxMDAgTUJpdCBkb3duc2hpZnRzIChicm9rZW4gY2FibGVzKSBhcmUgaWRlbnRpZmllZCBhbmQgcHJvcGFnYXRlZCB0byB0aGUgTUFDIGNvcnJlY3RseQomIzQzOyAqIC0gQWNjZXNzIHRvIE1ESU9fQU5fRUVFX0FEViBhbmQgTURJT19BTl9FRUVfTFBBQkxFIHdvcmtzIHZpYSBDNDUgb3ZlciBDMjIuCiYjNDM7ICogLSBJdCBpcyB1bmNsZWFyIGlmIHRoZXNlIHNlcXVlbmNlcyBjaGFuZ2UgZm9yIGRpZmZlcmVudCBQSFlzLgomIzQzOyAqIC0gQWNjZXNzIHRvIFJlYWx0ZWsgcmVzZXJ2ZWQgcmVnaXN0ZXIgMjYgKGxpbmsgc3BlZWQpIGhhcyBub3QgeWV0IGJlZW4gc2Vlbi4KJiM0MzsgKgomIzQzOyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/CiYjNDM7ICoKJiM0MzsgKiBXaGVuIGlzc3VpbmcgTURJTyBhY2Nlc3NlcyB2aWEgYW4gTU1JTyBiYXNlZCBpbnRlcmZhY2UgdGhlIGZpbmFsIHdyaXRlIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyCiYjNDM7ICogc2V0cyBhICYjMzQ7cnVuIGNvbW1hbmQgbm93JiMzNDsgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlCiYjNDM7ICogY2hlY2tzIGlmIGEgdXNlciBjb21tYW5kIG5lZWRzIHRvIHJ1biBhbmQgc2VuZHMgaXQgb250byB0aGUgYnVzLiBBZnRlcndhcmRzIGl0IHNpbXBseSBjb250aW51ZXMKJiM0MzsgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHdyaXRlIG9uIHRoZSBsb2dpYyBhbmFseXplciBnaXZlczoKJiM0MzsgKgomIzQzOyAqCVJUTDgzODAJCQkJUlRMODM5MwomIzQzOyAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKglwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7CXBoeV93cml0ZShwaHksIDMxLCBwYWdlKTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTsJcGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7CiYjNDM7ICoJCQkJCXBoeV93cml0ZShwaHksIDMxLCAwKTsKJiM0MzsgKgomIzQzOyAqIFdoYXQgZG9lcyB0aGlzIG1lYW4/CiYjNDM7ICoKJiM0MzsgKiBUaGVyZSBhcmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIHBvbGxpbmcgYW5kIFBIWSBhY2Nlc3MgYmV0d2VlbiB0aGUgbW9kZWxzIGJ1dCB0aGUgY2hhbGxlbmdlCiYjNDM7ICogc3RheXMgdGhlIHNhbWUuIE9uIHRoZSBvbmUgaGFuZCB0aGF0IGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgTUFDIGxheWVyLCBvbiB0aGUgb3RoZXIgaGFuZCBpdAomIzQzOyAqIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbCBQSFkgc3Vic3lzdGVtLgomIzQzOyAqCiYjNDM7ICogLSBXaXRob3V0IHRoZSBwb2xsaW5nIGFuZCBhIHByb3BlciBNQUMgc3RhdHVzLCBzb21lIG9mIHRoZSBsaW5rIGhhbmRsaW5nIGZlYXR1cmVzIGRvIG5vdCB3b3JrLgomIzQzOyAqICAgRXNwZWNpYWxseSBhbiB1bnBvcHVsYXRlZCBNQUNfTElOS19TVFMgcmVnaXN0ZXIgY2FuY2VscyBvcGVyYXRpb25zIHRvIG90aGVyIE1BQyByZWdpc3RlcnMuCiYjNDM7ICogLSBUaGUgUmVhbHRlayBwYWdlIHJlZ2lzdGVyIDMxIGlzIG1hZ2ljYWxseSBtb2RpZmllZCBpbiB0aGUgYmFja2dyb3VuZCBzbyB0aGF0IHBvbGxpbmcgd2lsbAomIzQzOyAqICAgcmVhZCB0aGUgcmlnaHQgZGF0YS4gT24gdGhlIFJUTDgzOHggcG9sbGluZyBzaW1wbHkgcmVzZXRzIGl0IHRvIHplcm8uIE90aGVyIGRldmljZXMgc2VlbQomIzQzOyAqICAgdG8gdHJhY2sgdGhlIHBhZ2UgYWNjZXNzICYjMzQ7bWFnaWNhbGx5JiMzNDsgaW4gdGhlIGJhY2tncm91bmQuCiYjNDM7ICogLSBBIEM0NSBvdmVyIEMyMiBrZXJuZWwgYWNjZXNzIHNlcXVlbmNlIGlzIG1vc3QgbGlrZWx5IHRvIGZhaWwgYmVjYXVzZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXQKJiM0MzsgKiAgIHRoZSBwb2xsaW5nIGVuZ2luZSBvdmVyd3JpdGVzIHJlZ2lzdGVycyAxMy8xNCBpbiBiZXR3ZWVuLgomIzQzOyAqIC0gUEhZIGZpcm13YXJlIGxvYWRpbmcgY2FuIGhhdmUgaXNzdWVzLiBFc3BlY2lhbGx5IGlmIGEgUEhZIGlzIGRlc2lnbmVkIHRvIGV4cGVjdCBhIGNsZWFuCiYjNDM7ICogICBzZXF1ZW5jZSBvZiByZWdpc3RlcnMgYW5kIHZhbHVlcyB3aXRob3V0IGRldmlhdGlvbi4KJiM0MzsgKiAtIEFuIGFjY2VzcyB0byBvbmUgUEhZIHdpbGwgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCBmcmVlIHNsb3Qgb2YgdGhlIHBvbGxpbmcgZW5naW5lLgomIzQzOyAqCiYjNDM7ICogQ29uY2x1c2lvbjogVGhlIFJlYWx0ZWsgTURJTyBidXMgZHJpdmVyIFBIWSBhY2Nlc3MgbXVzdCBrbm93IGFuZCBoYW5kbGUgYW55IGludGVyZmVyZW5jZSB0aGF0CiYjNDM7ICogYXJpc2VzIGZyb20gdGhlIGFib3ZlIGRlc2NyaWJlZCBoYXJkd2FyZSBwb2xsaW5nLgogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maW5kLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tyZWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWZkL3N5c2Nvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CkBAIC01MCw2ICYjNDM7MTI2LDUwIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKIAomIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVMJCQkxCiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9QQUdFUwkJCTQwOTYKJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTCQkJMjgKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMCQkJMHhhMTAwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FCQlCSVQoMTUpCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMAkJMHhhMWI4CiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMQkJMHhhMWJjCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIJCUdFTk1BU0soMjQsIDIwKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRQkJR0VOTUFTSygxOSwgMTUpCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFCQlHRU5NQVNLKDE0LCAzKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFCQlCSVQoMikKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFECQkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1CQlCSVQoMSkKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMgkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwJCQkwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMgkJMHhhMWMwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDMxLCAxNikKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBCQkJR0VOTUFTSygxNSwgMCkKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zCQkweGExYzQKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTAkJCTB4YTE3YwomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwJCTB4YTFjOAomIzQzOwomIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVMJCQkyCiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9QQUdFUwkJCTgxOTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTCQkJNTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTAkJMHgwM2VjCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTAkJMHgwM2RjCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIJCUdFTk1BU0soOSwgNSkKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UJCUdFTk1BU0soMjIsIDEwKQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwJCQlCSVQoMSkKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURQkJQklUKDMpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRAkJCTAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NQkJQklUKDIpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIJCTAKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkwJCQkweDAzZTAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRQkJR0VOTUFTSyg4LCAwKQomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMCQkweDAzZjAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwJCQkweDAzZjQKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1cJCTB4MDNlNAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gJCTB4MDNlOAomIzQzOyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwJCTB4MDNmYwomIzQzOwogI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFUwkJCTQKICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVMJCQk0MDk2CiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTCQkJMjgKQEAgLTcwLDYgJiM0MzsxOTAsNyBAQAogI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDMxLCAxNikKICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQogI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMwkJMHhjYjdjCiYjNDM7I2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwJCQkweGNhOTAKICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwJCTB4Y2I4MAogCiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTCQkJNApAQCAtOTUsMTIgJiM0MzsyMTYsMTYgQEAKICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQQkJR0VOTUFTSygxNSwgMCkKICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMCTB4MGMxOAogI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTAkJMHgwYzc0CiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTAkJMHgwY2NjCiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUwJCTB4MGM5YwogCiAjZGVmaW5lIFBIWV9DVFJMX0NNRAkJCQlCSVQoMCkKICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFECQkJR0VOTUFTSygyMCwgMTYpCiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUcJCQlHRU5NQVNLKDE1LCAwKQogCiYjNDM7I2RlZmluZSBSVExfVkVORE9SX0lECQkJCTB4MDAxY2M4MDAKJiM0MzsjZGVmaW5lIFJUTF9QQUdFX1NFTEVDVAkJCQkzMQomIzQzOwogI2RlZmluZSBNQVBfQUREUlNfUEVSX1JFRwkJCTYKICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFIJCQk1CiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9CVVMJCQkyCkBAIC0xMjMsOSAmIzQzOzI0OCwxMSBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyB7CiAKIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgewogCWNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87CiYjNDM7CXN0cnVjdCBrcmVmIGtyZWY7CiAJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwogCXN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqLwogCURFQ0xBUkVfQklUTUFQKHZhbGlkX3BvcnRzLCBNQVhfUE9SVFMpOwomIzQzOwl1MTYgcGFnZVtNQVhfUE9SVFNdOwogCXU4IHNtaV9idXNbTUFYX1BPUlRTXTsKIAl1OCBzbWlfYWRkcltNQVhfUE9SVFNdOwogCWJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdOwpAQCAtMTQyLDYgJiM0MzsyNjksNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHsKIAl1OCBudW1fYnVzZXM7CiAJdTggbnVtX3BvcnRzOwogCXUxNiBudW1fcGFnZXM7CiYjNDM7CXUzMiBwb2xsX2N0cmw7CiAJaW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7CiAJaW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTsKIAlpbnQgKCpyZWFkX2M0NSkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7CkBAIC0xNzcsNiAmIzQzOzMwNSwxMiBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogCXJldHVybiBjaGFuLSZndDtwcml2OwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LSZndDtyZWdtYXAsIHByaXYtJmd0O2luZm8tJmd0O3BvbGxfY3RybCAmIzQzOyAocG9ydCAvIDMyKSAqIDQsCiYjNDM7CQkJCSAgQklUKHBvcnQgJSAzMiksIGFjdGl2ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCwKIAkJCSAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSkKIHsKQEAgLTE4NSw5ICYjNDM7MzE5LDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCwKIAl1MzIgY21kc3RhdGU7CiAJaW50IHJldDsKIAotCS8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmxlIHdyb25nICovCiYjNDM7CS8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmx5IHdyb25nICovCiAJcmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtJmd0O3JlZ21hcCwgaW5mby0mZ3Q7Y21kX3JlZ3MuYzIyX2RhdGEsCi0JCQkJICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlICZhbXA7IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTsKJiM0MzsJCQkJICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlICZhbXA7IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMjI3LDcgJiM0MzszNjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLAogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtJmd0O3JlZ21hcCwgaW5mby0mZ3Q7Y21kX3JlZ3MuYzIyX2RhdGEsCi0JCQkJICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlICZhbXA7IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTsKJiM0MzsJCQkJICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlICZhbXA7IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMjY0LDEzICYjNDM7Mzk4LDEyMyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJcmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtJmd0O2luZm8tJmd0O2NtZF93cml0ZSwgY21kX2RhdGEpOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhLAomIzQzOwkJCQkgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiYjNDM7CQkucG9ydF9tYXNrX2xvdwk9IEJJVChwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzQ1X2RhdGEJPSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsICZhbXA7Y21kX2RhdGEsCiYjNDM7CQkJCSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsCiYjNDM7CQkJCSAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jNDVfZGF0YQk9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAomIzQzOwkJLnBvcnRfbWFza19sb3cJPSBCSVQocG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsICZhbXA7Y21kX2RhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5leHRfcGFnZQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhLAomIzQzOwkJCQkgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiYjNDM7CQkuZXh0X3BhZ2UJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAomIzQzOwkJLnBvcnRfbWFza19oaWdoCT0gKHUzMikoQklUX1VMTChwb3J0KSAmZ3Q7Jmd0OyAzMiksCiYjNDM7CQkucG9ydF9tYXNrX2xvdwk9ICh1MzIpKEJJVF9VTEwocG9ydCkpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsCiYjNDM7CQkJCSAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jNDVfZGF0YQk9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgJmFtcDtjbWRfZGF0YSwKJiM0MzsJCQkJICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmM0NV9kYXRhCT0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiYjNDM7CQkucG9ydF9tYXNrX2hpZ2gJPSAodTMyKShCSVRfVUxMKHBvcnQpICZndDsmZ3Q7IDMyKSwKJiM0MzsJCS5wb3J0X21hc2tfbG93CT0gKHUzMikoQklUX1VMTChwb3J0KSksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsICZhbXA7Y21kX2RhdGEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQogewogCXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiAJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiAJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiAJCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8Ci0JCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksCiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiAJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiAJfTsKIApAQCAtMjg0LDcgJiM0Mzs1MjgsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sCiAJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiAJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiAJCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8Ci0JCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksCiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiAJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAogCQkucG9ydF9tYXNrX2xvdwk9IEJJVChwb3J0KSwKIAl9OwpAQCAtMzI0LDcgJiM0Mzs1NjgsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdQogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYnJvYWRjYXN0CT0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLAogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCX07CiAKIAlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDkzMTBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEsCkBAIC0zMzYsNyAmIzQzOzU4MCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwKIAlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKIAkJLnBvcnRfbWFza19oaWdoCT0gKHUzMikoQklUX1VMTChwb3J0KSAmZ3Q7Jmd0OyAzMiksCiAJCS5wb3J0X21hc2tfbG93CT0gKHUzMikoQklUX1VMTChwb3J0KSksCkBAIC0zODIsOCAmIzQzOzYyNiwxMiBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSkKIAlpZiAocG9ydCAmbHQ7IDApCiAJCXJldHVybiBwb3J0OwogCi0Jc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spCiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKSB7CiYjNDM7CQlpZiAocmVnbnVtID09IFJUTF9QQUdFX1NFTEVDVCkKJiM0MzsJCQlyZXR1cm4gcHJpdi0mZ3Q7cGFnZVtwb3J0XTsKJiM0MzsKIAkJcmV0ID0gcHJpdi0mZ3Q7aW5mby0mZ3Q7cmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sICZhbXA7dmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7CiB9CkBAIC0zOTcsOCAmIzQzOzY0NSwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNgogCWlmIChwb3J0ICZsdDsgMCkKIAkJcmV0dXJuIHBvcnQ7CiAKLQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCWlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKSB7CiYjNDM7CQkJaWYgKHZhbHVlICZndDs9IFJBV19QQUdFKHByaXYpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCQlwcml2LSZndDtwYWdlW3BvcnRdID0gdmFsdWU7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CiAJCXJldCA9IHByaXYtJmd0O2luZm8tJmd0O3dyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDcxLDYgJiM0Mzs3MjgsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZwomIzQzOwkgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtJmd0O3JlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiB7CiAJdTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwOwpAQCAtNTA3LDYgJiM0Mzs3NzMsNTkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LSZndDttZGlvLmJ1cywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGNoYW4tJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChwb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBwb3J0OwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3NtaV9idXNfaXNfYzQ1W2NoYW4tJmd0O21kaW9fYnVzXSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi0mZ3Q7cGh5X2lkLCBSVExfVkVORE9SX0lEKSkgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7T25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LSZndDttZGlvLmJ1cyk7CiYjNDM7CWludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtJmd0O21kaW8uYnVzLCBwaHlkZXYtJmd0O21kaW8uYWRkcik7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBhdm9pZCB3cm9uZyBjYWNoZWQgcGFnZSBmb3IgbmV4dCBhdHRhY2htZW50ICovCiYjNDM7CWlmICghcHJpdi0mZ3Q7c21pX2J1c19pc19jNDVbY2hhbi0mZ3Q7bWRpb19idXNdKQomIzQzOwkJcHJpdi0mZ3Q7cGFnZVtwb3J0XSA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkZXZfZXJyKGJ1cy0mZ3Q7cGFyZW50LCAmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHBvbGxpbmcgZm9yIHBvcnQgJWRcbiYjMzQ7LCBwb3J0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R0b19lbWRpb19jbGVhbnVwX2NvbnRyb2xsZXIoc3RydWN0IGtyZWYgKmtyZWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYsIGtyZWYpOwomIzQzOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CWtmcmVlKHByaXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX2NsZWFudXBfYnVzKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gZGF0YTsKJiM0MzsKJiM0MzsJa3JlZl9wdXQoJmFtcDtwcml2LSZndDtrcmVmLCBvdHRvX2VtZGlvX2NsZWFudXBfY29udHJvbGxlcik7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsCiAJCQkJIHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKQogewpAQCAtNTM2LDEyICYjNDM7ODU1LDIwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2CiAJCWJ1cy0mZ3Q7d3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjsKIAl9CiAJYnVzLSZndDtwYXJlbnQgPSBkZXY7CiYjNDM7CWJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoOwomIzQzOwlidXMtJmd0O25vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDsKJiM0MzsKIAljaGFuID0gYnVzLSZndDtwcml2OwogCWNoYW4tJmd0O21kaW9fYnVzID0gbWRpb19idXM7CiAJY2hhbi0mZ3Q7cHJpdiA9IHByaXY7CiAKIAlzbnByaW50ZihidXMtJmd0O2lkLCBNSUlfQlVTX0lEX1NJWkUsICYjMzQ7JXMtJWQmIzM0OywgZGV2X25hbWUoZGV2KSwgbWRpb19idXMpOwogCiYjNDM7CWtyZWZfZ2V0KCZhbXA7cHJpdi0mZ3Q7a3JlZik7CiYjNDM7CWVyciA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldCgmYW1wO2J1cy0mZ3Q7ZGV2LCBvdHRvX2VtZGlvX2NsZWFudXBfYnVzLCBwcml2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCAmIzM0O2Nhbm5vdCByZWdpc3RlciBjbGVhbnVwIGFjdGlvblxuJiMzNDspOwomIzQzOwogCWVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgdG9fb2Zfbm9kZShub2RlKSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsICYjMzQ7Y2Fubm90IHJlZ2lzdGVyIE1ESU8gYnVzXG4mIzM0Oyk7CkBAIC02NTIsNTAgJiM0Mzs5NzksMTIyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlmb3IgKGludCBwb3J0ID0gMDsgcG9ydCAmbHQ7IHByaXYtJmd0O2luZm8tJmd0O251bV9wb3J0czsgcG9ydCYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwZGV2LSZndDtkZXY7CiAJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdjsKJiM0MzsJaW50IGJ1c2VzX3JlZ2lzdGVyZWQgPSAwOwogCWludCBlcnI7CiAKLQlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXByaXYgPSBremFsbG9jX29iaigqcHJpdiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsICZhbXA7cHJpdi0mZ3Q7bG9jayk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJa3JlZl9pbml0KCZhbXA7cHJpdi0mZ3Q7a3JlZik7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwcml2LSZndDtsb2NrKTsKIAogCXByaXYtJmd0O2luZm8gPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKIAlwcml2LSZndDtyZWdtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoZGV2LSZndDtwYXJlbnQtJmd0O29mX25vZGUpOwotCWlmIChJU19FUlIocHJpdi0mZ3Q7cmVnbWFwKSkKLQkJcmV0dXJuIFBUUl9FUlIocHJpdi0mZ3Q7cmVnbWFwKTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDtyZWdtYXApKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKHByaXYtJmd0O3JlZ21hcCk7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKIAogCWVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gZXJyX291dDsKIAogCWVyciA9IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3kocHJpdik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gZXJyX291dDsKIAogCWlmIChwcml2LSZndDtpbmZvLSZndDtzZXR1cF9jb250cm9sbGVyKSB7CiAJCWVyciA9IHByaXYtJmd0O2luZm8tJmd0O3NldHVwX2NvbnRyb2xsZXIocHJpdik7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtmYWlsZWQgdG8gc2V0dXAgTURJTyBidXMgY29udHJvbGxlclxuJiMzNDspOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWRldl9lcnJfcHJvYmUoZGV2LCBlcnIsICYjMzQ7ZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CQl9CiAJfQogCiAJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGVfc2NvcGVkKGRldiwgY2hpbGQpIHsKIAkJZXJyID0gb3R0b19lbWRpb19wcm9iZV9vbmUoZGV2LCBwcml2LCBjaGlsZCk7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCWJ1c2VzX3JlZ2lzdGVyZWQmIzQzOyYjNDM7OwogCX0KIAotCXJldHVybiAwOwomIzQzOwlpZiAoIWJ1c2VzX3JlZ2lzdGVyZWQpCiYjNDM7CQllcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwgJiMzNDtubyBNRElPIGJ1c2VzIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MztlcnJfb3V0OgomIzQzOwlrcmVmX3B1dCgmYW1wO3ByaXYtJmd0O2tyZWYsIG90dG9fZW1kaW9fY2xlYW51cF9jb250cm9sbGVyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0gewomIzQzOwkuYWRkcl9tYXBfYmFzZSA9IFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMLAomIzQzOwkuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsCiYjNDM7CS5jbWRfcmVhZCA9IFJUTDgzODBfUEhZX0NUUkxfUkVBRCwKJiM0MzsJLmNtZF93cml0ZSA9IFJUTDgzODBfUEhZX0NUUkxfV1JJVEUsCiYjNDM7CS5jbWRfcmVncyA9IHsKJiM0MzsJCS5jMjJfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xLAomIzQzOwkJLmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsCiYjNDM7CQkuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLAomIzQzOwkJLnBvcnRfbWFza19sb3cgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMCwKJiM0MzsJfSwKJiM0MzsJLm51bV9idXNlcyA9IFJUTDgzODBfTlVNX0JVU0VTLAomIzQzOwkubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsCiYjNDM7CS5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDgzODBfU01JX1BPTExfQ1RSTCwKJiM0MzsJLnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlciwKJiM0MzsJLnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLAomIzQzOwkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUsCiYjNDM7CS53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyLAomIzQzOwkud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0gewomIzQzOwkuY21kX2ZhaWwgPSBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwsCiYjNDM7CS5jbWRfcmVhZCA9IFJUTDgzOTBfUEhZX0NUUkxfUkVBRCwKJiM0MzsJLmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsCiYjNDM7CS5jbWRfcmVncyA9IHsKJiM0MzsJCS5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsCiYjNDM7CQkuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCwKJiM0MzsJCS5jNDVfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMLAomIzQzOwkJLmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCwKJiM0MzsJCS5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLAomIzQzOwkJLnBvcnRfbWFza19sb3cgPSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XLAomIzQzOwkJLnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsCiYjNDM7CX0sCiYjNDM7CS5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUywKJiM0MzsJLm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLAomIzQzOwkubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCwKJiM0MzsJLnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLAomIzQzOwkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsCiYjNDM7CS53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLAomIzQzOwkud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7CiAJLmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCwKIAkuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsCkBAIC03MTEsNiAmIzQzOzExMTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHsKIAkubnVtX2J1c2VzID0gUlRMOTMwMF9OVU1fQlVTRVMsCiAJLm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLAogCS5udW1fcGFnZXMgPSBSVEw5MzAwX05VTV9QQUdFUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCwKIAkuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLAogCS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMiwKIAkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsCkBAIC03MzYsNiAmIzQzOzExMzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHsKIAkubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsCiAJLm51bV9wYWdlcyA9IFJUTDkzMTBfTlVNX1BBR0VTLAogCS5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLAogCS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsCiAJLnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLAogCS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSwKQEAgLTc0NCw2ICYjNDM7MTE0NSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0gewogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxydGw4MzgwLW1kaW8mIzM0OywgLmRhdGEgPSAmYW1wO290dG9fZW1kaW9fODM4MF9pbmZvIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsODM5MS1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LAogCXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsOTMwMS1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzkzMDBfaW5mbyB9LAogCXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsOTMxMS1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LAogCXt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCA5NGIyZTg1ZTAwYTM3Li4yMzM2MjJlOWJhNjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKQEAgLTE3MzQsNiAmIzQzOzE3MzQsOTYgQEAgc3RhdGljIGJvb2wgcGh5X2Rydl9zdXBwb3J0c19pcnEoY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydikKIAlyZXR1cm4gcGh5ZHJ2LSZndDtjb25maWdfaW50ciAmYW1wOyZhbXA7IHBoeWRydi0mZ3Q7aGFuZGxlX2ludGVycnVwdDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIF9fcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIG5vdGlmeV9idXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LSZndDthdHRhY2hlZF9kZXY7CiYjNDM7CXN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtkZXZsaW5rKSB7CiYjNDM7CQlkZXZpY2VfbGlua19kZWwocGh5ZGV2LSZndDtkZXZsaW5rKTsKJiM0MzsJCXBoeWRldi0mZ3Q7ZGV2bGluayA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7c3lzZnNfbGlua3MpIHsKJiM0MzsJCWlmIChkZXYpCiYjNDM7CQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmFtcDtkZXYtJmd0O2Rldi5rb2JqLCAmIzM0O3BoeWRldiYjMzQ7KTsKJiM0MzsJCXN5c2ZzX3JlbW92ZV9saW5rKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldi5rb2JqLCAmIzM0O2F0dGFjaGVkX2RldiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2KQomIzQzOwkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LmtvYmosCiYjNDM7CQkJCSAgJmFtcDtkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTsKJiM0MzsKJiM0MzsJcGh5X3N1c3BlbmQocGh5ZGV2KTsKJiM0MzsKJiM0MzsJaWYgKG5vdGlmeV9idXMgJmFtcDsmYW1wOyBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2RldGFjaCkKJiM0MzsJCXBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7CiYjNDM7CiYjNDM7CWlmIChkZXYpIHsKJiM0MzsJCXN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92OwomIzQzOwomIzQzOwkJLyogaHdwcm92IG1heSB0ZWNobmljYWxseSBiZSBwcm90ZWN0ZWQgYnkgb3BzIGxvY2sgYnV0CiYjNDM7CQkgKiBub3QgZm9yIGRldmljZXMgd2l0aCBhIHBoeWRldiwgc2VlIHBoeV9saW5rX3RvcG9fYWRkX3BoeSgpCiYjNDM7CQkgKi8KJiM0MzsJCWh3cHJvdiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LSZndDtod3Byb3YpOwomIzQzOwkJLyogRGlzYWJsZSB0aW1lc3RhbXAgaWYgaXQgaXMgdGhlIG9uZSBzZWxlY3RlZCAqLwomIzQzOwkJaWYgKGh3cHJvdiAmYW1wOyZhbXA7IGh3cHJvdi0mZ3Q7cGh5ZGV2ID09IHBoeWRldikgewomIzQzOwkJCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtJmd0O2h3cHJvdiwgTlVMTCk7CiYjNDM7CQkJa2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcGh5ZGV2LSZndDthdHRhY2hlZF9kZXYtJmd0O3BoeWRldiA9IE5VTEw7CiYjNDM7CQlwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiA9IE5VTEw7CiYjNDM7CQlwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cGh5X2xpbmtfY2hhbmdlID0gTlVMTDsKJiM0MzsJcGh5ZGV2LSZndDtwaHlsaW5rID0gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5kZXYuZHJpdmVyKQomIzQzOwkJbW9kdWxlX3B1dChwaHlkZXYtJmd0O21kaW8uZGV2LmRyaXZlci0mZ3Q7b3duZXIpOwomIzQzOwomIzQzOwkvKiBJZiB0aGUgZGV2aWNlIGhhZCBubyBzcGVjaWZpYyBkcml2ZXIgYmVmb3JlIChpLmUuIC0gaXQKJiM0MzsJICogd2FzIHVzaW5nIHRoZSBnZW5lcmljIGRyaXZlciksIHdlIHVuYmluZCB0aGUgZGV2aWNlCiYjNDM7CSAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUmIzM5O3MgYSBjaGFuY2UgYQomIzQzOwkgKiByZWFsIGRyaXZlciBjb3VsZCBiZSBsb2FkZWQKJiM0MzsJICovCiYjNDM7CWlmIChwaHlkZXYtJmd0O2lzX2dlbnBoeV9kcml2ZW4pIHsKJiM0MzsJCWRldmljZV9yZWxlYXNlX2RyaXZlcigmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwomIzQzOwkJcGh5ZGV2LSZndDtpc19nZW5waHlfZHJpdmVuID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqLwomIzQzOwlwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZAomIzQzOwkgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC4KJiM0MzsJICovCiYjNDM7CWJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7CiYjNDM7CiYjNDM7CXB1dF9kZXZpY2UoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2KTsKJiM0MzsJaWYgKGRldikKJiM0MzsJCW5kZXZfb3duZXIgPSBkZXYtJmd0O2Rldi5wYXJlbnQtJmd0O2RyaXZlci0mZ3Q7b3duZXI7CiYjNDM7CWlmIChuZGV2X293bmVyICE9IGJ1cy0mZ3Q7b3duZXIpCiYjNDM7CQltb2R1bGVfcHV0KGJ1cy0mZ3Q7b3duZXIpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZQomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeQomIzQzOyAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CS8qIGNsZWFudXAgaW5jbHVkaW5nIGJ1cyBub3RpZmljYXRpb24gKi8KJiM0MzsJX19waHlfZGV0YWNoKHBoeWRldiwgdHJ1ZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGh5X2RldGFjaCk7CiYjNDM7CiAvKioKICAqIHBoeV9hdHRhY2hfZGlyZWN0IC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBnaXZlbiBQSFkgZGV2aWNlIHBvaW50ZXIKICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaApAQCAtMTg3Niw2ICYjNDM7MTk2NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogCiYjNDM7CWlmIChwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaCkgewomIzQzOwkJZXJyID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJvcjsKJiM0MzsJfQomIzQzOwogCXBoeV9yZXN1bWUocGh5ZGV2KTsKIAogCS8qKgpAQCAtMTg5MCw4ICYjNDM7MTk4Niw4IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCXJldHVybiBlcnI7CiAKIGVycm9yOgotCS8qIHBoeV9kZXRhY2goKSBkb2VzIGFsbCBvZiB0aGUgY2xlYW51cCBiZWxvdyAqLwotCXBoeV9kZXRhY2gocGh5ZGV2KTsKJiM0MzsJLyogY2xlYW51cCB3aXRob3V0IGJ1cyBub3RpZmljYXRpb24gKi8KJiM0MzsJX19waHlfZGV0YWNoKHBoeWRldiwgZmFsc2UpOwogCXJldHVybiBlcnI7CiAKIGVycm9yX21vZHVsZV9wdXQ6CkBAIC0xOTA2LDg2ICYjNDM7MjAwMiw2IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogfQogRVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoX2RpcmVjdCk7CiAKLS8qKgotICogcGh5X2RldGFjaCAtIGRldGFjaCBhIFBIWSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UKLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAotICoKLSAqIFRoaXMgZGV0YWNoZXMgdGhlIHBoeSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UgYW5kIHRoZSBwaHkKLSAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS4KLSAqLwotdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2OwotCXN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMOwotCXN0cnVjdCBtaWlfYnVzICpidXM7Ci0KLQlpZiAocGh5ZGV2LSZndDtkZXZsaW5rKSB7Ci0JCWRldmljZV9saW5rX2RlbChwaHlkZXYtJmd0O2RldmxpbmspOwotCQlwaHlkZXYtJmd0O2RldmxpbmsgPSBOVUxMOwotCX0KLQotCWlmIChwaHlkZXYtJmd0O3N5c2ZzX2xpbmtzKSB7Ci0JCWlmIChkZXYpCi0JCQlzeXNmc19yZW1vdmVfbGluaygmYW1wO2Rldi0mZ3Q7ZGV2LmtvYmosICYjMzQ7cGh5ZGV2JiMzNDspOwotCQlzeXNmc19yZW1vdmVfbGluaygmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYua29iaiwgJiMzNDthdHRhY2hlZF9kZXYmIzM0Oyk7Ci0JfQotCi0JaWYgKCFwaHlkZXYtJmd0O2F0dGFjaGVkX2RldikKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LmtvYmosCi0JCQkJICAmYW1wO2Rldl9hdHRyX3BoeV9zdGFuZGFsb25lLmF0dHIpOwotCi0JcGh5X3N1c3BlbmQocGh5ZGV2KTsKLQlpZiAoZGV2KSB7Ci0JCXN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92OwotCi0JCS8qIGh3cHJvdiBtYXkgdGVjaG5pY2FsbHkgYmUgcHJvdGVjdGVkIGJ5IG9wcyBsb2NrIGJ1dAotCQkgKiBub3QgZm9yIGRldmljZXMgd2l0aCBhIHBoeWRldiwgc2VlIHBoeV9saW5rX3RvcG9fYWRkX3BoeSgpCi0JCSAqLwotCQlod3Byb3YgPSBydG5sX2RlcmVmZXJlbmNlKGRldi0mZ3Q7aHdwcm92KTsKLQkJLyogRGlzYWJsZSB0aW1lc3RhbXAgaWYgaXQgaXMgdGhlIG9uZSBzZWxlY3RlZCAqLwotCQlpZiAoaHdwcm92ICZhbXA7JmFtcDsgaHdwcm92LSZndDtwaHlkZXYgPT0gcGh5ZGV2KSB7Ci0JCQlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LSZndDtod3Byb3YsIE5VTEwpOwotCQkJa2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpOwotCQl9Ci0KLQkJcGh5ZGV2LSZndDthdHRhY2hlZF9kZXYtJmd0O3BoeWRldiA9IE5VTEw7Ci0JCXBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2ID0gTlVMTDsKLQkJcGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5ZGV2KTsKLQl9Ci0KLQlwaHlkZXYtJmd0O3BoeV9saW5rX2NoYW5nZSA9IE5VTEw7Ci0JcGh5ZGV2LSZndDtwaHlsaW5rID0gTlVMTDsKLQotCWlmIChwaHlkZXYtJmd0O21kaW8uZGV2LmRyaXZlcikKLQkJbW9kdWxlX3B1dChwaHlkZXYtJmd0O21kaW8uZGV2LmRyaXZlci0mZ3Q7b3duZXIpOwotCi0JLyogSWYgdGhlIGRldmljZSBoYWQgbm8gc3BlY2lmaWMgZHJpdmVyIGJlZm9yZSAoaS5lLiAtIGl0Ci0JICogd2FzIHVzaW5nIHRoZSBnZW5lcmljIGRyaXZlciksIHdlIHVuYmluZCB0aGUgZGV2aWNlCi0JICogZnJvbSB0aGUgZ2VuZXJpYyBkcml2ZXIgc28gdGhhdCB0aGVyZSYjMzk7cyBhIGNoYW5jZSBhCi0JICogcmVhbCBkcml2ZXIgY291bGQgYmUgbG9hZGVkCi0JICovCi0JaWYgKHBoeWRldi0mZ3Q7aXNfZ2VucGh5X2RyaXZlbikgewotCQlkZXZpY2VfcmVsZWFzZV9kcml2ZXIoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2KTsKLQkJcGh5ZGV2LSZndDtpc19nZW5waHlfZHJpdmVuID0gMDsKLQl9Ci0KLQkvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqLwotCXBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTsKLQotCS8qCi0JICogVGhlIHBoeWRldiBtaWdodCBnbyBhd2F5IG9uIHRoZSBwdXRfZGV2aWNlKCkgYmVsb3csIHNvIGF2b2lkCi0JICogYSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgcmVhZGluZyB0aGUgdW5kZXJseWluZyBidXMgZmlyc3QuCi0JICovCi0JYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKLQotCXB1dF9kZXZpY2UoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2KTsKLQlpZiAoZGV2KQotCQluZGV2X293bmVyID0gZGV2LSZndDtkZXYucGFyZW50LSZndDtkcml2ZXItJmd0O293bmVyOwotCWlmIChuZGV2X293bmVyICE9IGJ1cy0mZ3Q7b3duZXIpCi0JCW1vZHVsZV9wdXQoYnVzLSZndDtvd25lcik7Ci19Ci1FWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpOwotCiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGh5ZGV2LSZndDthdHRhY2hlZF9kZXY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAxMTA5MmMzMTc1YjNkLi5mZWYwYzZhM2UyN2ZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTM3Niw2ICYjNDM7Mzc2LDI0IEBAIHN0cnVjdCBtaWlfYnVzIHsKIAkJCSBpbnQgcmVnbnVtLCB1MTYgdmFsKTsKIAkvKiogQHJlc2V0OiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGJ1cyAqLwogCWludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTsKJiM0MzsJLyoqCiYjNDM7CSAqIEBub3RpZnlfcGh5X2F0dGFjaDogUGVyZm9ybSBwb3N0LWF0dGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXMKJiM0MzsJICogZHJpdmVycy4gT3B0aW9uYWwgYW5kIGluZGVwZW5kZW50IG9mIEBub3RpZnlfcGh5X2RldGFjaC4gQ2FsbGVkCiYjNDM7CSAqIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkgcmlnaHQgYmVmb3JlIHBoeV9yZXN1bWUoKS4gUnVucyBpbiBwcm9jZXNzCiYjNDM7CSAqIGNvbnRleHQsIG1heSBzbGVlcCBhbmQgbWF5IGJlIGNhbGxlZCB3aXRoIFJUTkwgaGVsZC4gTXVzdCBub3QKJiM0MzsJICogYWNxdWlyZSBvciByZWx5IG9uIFJUTkwuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm5vCiYjNDM7CSAqIG9uIGZhaWx1cmUuIE11c3QgdW53aW5kIGl0cyBvd24gc3RhdGUgb24gZXJyb3IgYXMgYXR0YWNobWVudCBpcwomIzQzOwkgKiBhYm9ydGVkLgomIzQzOwkgKi8KJiM0MzsJaW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwomIzQzOwkvKioKJiM0MzsJICogQG5vdGlmeV9waHlfZGV0YWNoOiBQZXJmb3JtIHByZS1kZXRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzCiYjNDM7CSAqIGRyaXZlcnMuIE9wdGlvbmFsIGFuZCBpbmRlcGVuZGVudCBvZiBAbm90aWZ5X3BoeV9hdHRhY2guIENhbGxlZAomIzQzOwkgKiBpbiBwaHlfZGV0YWNoKCkgcmlnaHQgYWZ0ZXIgcGh5X3N1c3BlbmQoKS4gUnVucyBpbiBwcm9jZXNzIGNvbnRleHQsCiYjNDM7CSAqIG1heSBzbGVlcCBhbmQgbWF5IGJlIGNhbGxlZCB3aXRoIFJUTkwgaGVsZC4gTXVzdCBub3QgYWNxdWlyZSBvcgomIzQzOwkgKiByZWx5IG9uIFJUTkwuCiYjNDM7CSAqLwomIzQzOwl2b2lkICgqbm90aWZ5X3BoeV9kZXRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogCiAJLyoqIEBzdGF0czogU3RhdGlzdGljIGNvdW50ZXJzIHBlciBkZXZpY2Ugb24gdGhlIGJ1cyAqLwogCXN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI4NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBSZWFsdGVrIE90dG8gU3dpdGNoIE1ESU8gQ29udHJvbGxlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgc3VwcG9ydCBmb3IgUmVhbHRlayBPdHRvIFN3aXRjaGVzLCBzcGVjaWZpY2FsbHkgdGhlIFJUTDgzODAgYW5kIFJUTDgzOTAgZmFtaWxpZXMsIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIFBIWSBjb3JlIHRvIGFkZCBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyB0byB0aGUgYG1paV9idXNgIHN0cnVjdC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3b3J0aCB0aHJvd2luZyBmdXp6aW5nIGF0PwoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgYW5kIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYC4gYHBoeV9kZXZpY2UuY2AsIHRoYXQmIzM5O3MgY29yZSBuZXR3b3JraW5nIGNvZGUsIHRoZSBQSFkgc3Vic3lzdGVtIGl0c2VsZi4gVGhlIGNoYW5nZXMgaW4gYHBoeV9kZXZpY2UuY2AgYWRkIHRoZSBjYWxsYmFja3MgdG8gYG1paV9idXNgIGFuZCBjYWxsIHRoZW0gZHVyaW5nIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYC4gSW1tZWRpYXRlbHksIHRob3NlIGZ1bmN0aW9ucyBzZWVtIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyB0aGluayBkdW1teSBuZXQgZGV2aWNlcywgdmV0aCBpbnRlcmZhY2VzLCBhbnkgZW11bGF0ZWQgTklDIHRoYXQgdXNlcyBQSFlzLiBBbmQgdGhlbiBpdCBoaXRzIG1lOiBgcGh5X2F0dGFjaF9kaXJlY3RgIGlzIGNhbGxlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgYXR0YWNoZXMgdG8gYSBQSFkuCgpDb3VsZCBzeXprYWxsZXIgcmVhY2ggdGhhdD8gQWJzb2x1dGVseS4gSXQgY2FuIGNyZWF0ZSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcywgdXNpbmcgbmV0bGluaywgdHVuL3RhcCwgb3IgZHVtbXksIGFuZCBzb21lIG9mIHRob3NlIGNvdWxkIHZlcnkgd2VsbCBhdHRhY2ggUEhZcy4gT3IsIGl0IGNhbiBpbnRlcmFjdCB3aXRoIE1ESU8gYnVzZXMuIFRoZSBrZXkgcGFydHMgYXJlIGNoYW5nZXMgbWFkZSB0byBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIExvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCB0aGUgY29yZSBjaGFuZ2VzIHRoYXQgYXJlIG1hZGUsIHNwZWNpZmljYWxseToKCmBgYGMKJiM0MztzdGF0aWMgdm9pZCBfX3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBub3RpZnlfYnVzKQouLi4KJiM0MzsJaWYgKG5vdGlmeV9idXMgJmFtcDsmYW1wOyBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2RldGFjaCkKJiM0MzsJCXBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7Ci4uLgpgYGAKQW5kIGluIGBwaHlfYXR0YWNoX2RpcmVjdGA6CmBgYGMKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfYXR0YWNoKSB7CiYjNDM7CQllcnIgPSBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGVycm9yOwomIzQzOwl9CmBgYAoKVGhpcyAqaXMqIGNvcmUgYXR0YWNobWVudC9kZXRhY2htZW50IGxvZ2ljLCBzbyB5ZXMsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byB0aGUgd2F5IFBIWXMgYXJlIGhhbmRsZWQuCgpXaGF0IGFib3V0IHRoZSBNRElPIGRyaXZlciAoYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgKT8gTURJTyBkcml2ZXJzIGFyZSB1c3VhbGx5IHBsYXRmb3JtIGRyaXZlcnMsIG1lYW5pbmcgdGhleSBtaWdodCBub3QgYmUgZWFzaWx5IHJlYWNoYWJsZSB3aXRob3V0IHRoZSBwbGF0Zm9ybSBkZXZpY2UgYmVpbmcgaW5zdGFudGlhdGVkLiBTdGlsbCwgdGhlIGNvcmUgUEhZIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSByZWdhcmRsZXNzLgoKU28sIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhvc2UgdHdvIGZ1bmN0aW9ucy4gVGltZSB0byBsb29rIGZvciBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgdXNhZ2VzIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgZW50cnkgcG9pbnRzIGFuZCBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgY2FuIGJlc3QgaW50ZXJhY3Qgd2l0aCB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdD04NT1UaGVzZSBmdW5jdGlvbiBhcmUgYWxyZWFkeSBob29rZWQgaW50byB0aGUgcGh5bGliIHN1YnN5c3RlbSwgc28gYWxsIFBIWXMgdGhhdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdDo4NjphcmUgbGlua2VkIHRvIGEgbmV0X2RldmljZSB0aHJvdWdoIDpjOmZ1bmM6YHBoeV9hdHRhY2hfZGlyZWN0YCB3aWxsIGF1dG9tYXRpY2FsbHlcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktbGluay10b3BvbG9neS5yc3QtODctam9pbiB0aGUgbmV0ZGV2JiMzOTtzIHRvcG9sb2d5LlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3Q9NzQ9dGhpcyBkb2N1bWVudGF0aW9uLlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3QtMTY1LSAgIEZvciB0aGUgbW9zdCBwYXJ0LCBgYGZsYWdzYGAgY2FuIGJlIHplcm87IHRoZXNlIGZsYWdzIGFyZSBwYXNzZWQgdG9cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3Q6MTY2OiAgIHRoZSBwaHlfYXR0YWNoX2RpcmVjdCgpIGluc2lkZSB0aGlzIGZ1bmN0aW9uIGNhbGwgaWYgYSBQSFkgaXMgc3BlY2lmaWVkXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2ZwLXBoeWxpbmsucnN0LTE2Ny0gICBpbiB0aGUgRFQgbm9kZSBgYG5vZGVgYC5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTkzMT1zdGF0aWMgaW50IHhnYmVfcGh5X2ZpbmRfcGh5X2RldmljZShzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjk4MzpcdHJldCA9IHBoeV9hdHRhY2hfZGlyZWN0KHBkYXRhLVx1MDAzZW5ldGRldiwgcGh5ZGV2LCBwaHlkZXYtXHUwMDNlZGV2X2ZsYWdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODQtXHRcdFx0XHRQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODUtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjk4NjpcdFx0bmV0ZGV2X2VycihwZGF0YS1cdTAwM2VuZXRkZXYsIFwmIzM0O3BoeV9hdHRhY2hfZGlyZWN0IGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk4Ny1cdFx0cGh5X2RldmljZV9yZW1vdmUocGh5ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmM9MTE1OT1pbnQgaG5zX25pY19pbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGhuYWVfaGFuZGxlICpoKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYy0xMTgwLVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYzoxMTgxOlx0XHRyZXQgPSBwaHlfYXR0YWNoX2RpcmVjdChuZGV2LCBwaHlfZGV2LCAwLCBoLVx1MDAzZXBoeV9pZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmMtMTE4Mi1cdH1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyMjU9aW50IHBoeV9jb25uZWN0X2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTIzMy1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTIzNDpcdHJjID0gcGh5X2F0dGFjaF9kaXJlY3QoZGV2LCBwaHlkZXYsIHBoeWRldi1cdTAwM2VkZXZfZmxhZ3MsIGludGVyZmFjZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyMzUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzM3PXN0YXRpYyB2b2lkIF9fcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIG5vdGlmeV9idXMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODE3LSAqIFRoaXMgZGV0YWNoZXMgdGhlIHBoeSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UgYW5kIHRoZSBwaHlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTgxODogKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MTktICovXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xODI1PUVYUE9SVF9TWU1CT0wocGh5X2RldGFjaCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODI3LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODI4OiAqIHBoeV9hdHRhY2hfZGlyZWN0IC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBnaXZlbiBQSFkgZGV2aWNlIHBvaW50ZXJcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgyOS0gKiBAZGV2OiBuZXR3b3JrIGRldmljZSB0byBhdHRhY2hcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4NDEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4NDI6aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4NDMtXHRcdCAgICAgIHUzMiBmbGFncywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwMDItfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMDAzOkVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaF9kaXJlY3QpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMDA0LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjIwND1zdGF0aWMgaW50IHBoeWxpbmtfYXR0YWNoX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjE5LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMjIwOlx0cmV0dXJuIHBoeV9hdHRhY2hfZGlyZWN0KHBsLVx1MDAzZW5ldGRldiwgcGh5LCBmbGFncywgaW50ZXJmYWNlKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIyMS19XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjI4LSAqIENvbm5lY3QgQHBoeSB0byB0aGUgcGh5bGluayBpbnN0YW5jZSBzcGVjaWZpZWQgYnkgQHBsIGJ5IGNhbGxpbmdcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjIyOTogKiBwaHlfYXR0YWNoX2RpcmVjdCgpLiBDb25maWd1cmUgdGhlIEBwaHkgYWNjb3JkaW5nIHRvIHRoZSBNQUMgZHJpdmVyJiMzOTtzXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyMzAtICogY2FwYWJpbGl0aWVzLCBzdGFydCB0aGUgUEhZTElCIHN0YXRlIG1hY2hpbmUgYW5kIGVuYWJsZSBhbnkgaW50ZXJydXB0c1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjI5MD1pbnQgcGh5bGlua19md25vZGVfcGh5X2Nvbm5lY3Qoc3RydWN0IHBoeWxpbmsgKnBsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjMyMy1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjMyNDpcdHJldCA9IHBoeV9hdHRhY2hfZGlyZWN0KHBsLVx1MDAzZW5ldGRldiwgcGh5X2RldiwgZmxhZ3MsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzMjUtXHRcdFx0XHRwbC1cdTAwM2VsaW5rX2ludGVyZmFjZSk7XG4tLVxuaW5jbHVkZS9saW51eC9waHkuaD0zNjM9c3RydWN0IG1paV9idXMge1xuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMzgxLVx0ICogZHJpdmVycy4gT3B0aW9uYWwgYW5kIGluZGVwZW5kZW50IG9mIEBub3RpZnlfcGh5X2RldGFjaC4gQ2FsbGVkXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjM4MjpcdCAqIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkgcmlnaHQgYmVmb3JlIHBoeV9yZXN1bWUoKS4gUnVucyBpbiBwcm9jZXNzXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTM4My1cdCAqIGNvbnRleHQsIG1heSBzbGVlcCBhbmQgbWF5IGJlIGNhbGxlZCB3aXRoIFJUTkwgaGVsZC4gTXVzdCBub3Rcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIxODc9c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9maW5kX25leHQoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IHBoeV9kZXZpY2UgKnBvcyk7XG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIxODg6aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIxODktXHRcdCAgICAgIHUzMiBmbGFncywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyOTQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBwaHlfYXR0YWNoX2RpcmVjdGAqKgoKT2theSwgc28gYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyBhIGtleSBmdW5jdGlvbiwgY2FsbGVkIGJ5IHRoaW5ncyBsaWtlIGBwaHlfY29ubmVjdF9kaXJlY3RgLCBgcGh5bGlua19hdHRhY2hfcGh5YCwgYW5kIGBwaHlsaW5rX2Z3bm9kZV9waHlfY29ubmVjdGAuIFRoZSBxdWVzdGlvbiB0aGF0JiMzOTtzIHBpcXVpbmcgbXkgaW50ZXJlc3QgaXMgd2hldGhlciBhIHZpcnR1YWwgZGV2aWNlIGNhbiB0cmlnZ2VyIGl0cyB1c2UuIE15IGluc3RpbmN0IGlzIHRoYXQgUEhZcyBhcmUgcHJpbWFyaWx5IGhhcmR3YXJlLWJvdW5kLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuCgpMZXQmIzM5O3MgcnVuIHRocm91Z2ggc29tZSBjb21tb24gdmlydHVhbCBuZXR3b3JrIGRldmljZXMuIENvdWxkIGBtYWNzZWNgLCBgdmV0aGAsIGBkdW1teWAsIG9yIGB0dW5gIGRldmljZXMgZXZlciB0b3VjaCB0aGlzIGZ1bmN0aW9uPyBNeSBndXQgc2F5cyBubywgZ2l2ZW4gdGhlaXIgbmF0dXJlLiBUaGV5JiMzOTtyZSB1c3VhbGx5IGxheWVycyBhYm92ZSB0aGUgcGh5c2ljYWwgaW50ZXJmYWNlLCBhYnN0cmFjdGluZyBhd2F5IHRoZSBQSFkgaW50ZXJhY3Rpb24uIFRoaW5raW5nIGFib3V0IGl0LCBldmVuIHRob3VnaCBQSFlzIGFyZSB0eXBpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIGhhcmR3YXJlIGxpa2UgaW4gYG1hY2JgLCBgZmVjYCwgb3IgYGUxMDAwYCBkcml2ZXJzLCBhcmUgYW55IG9mIHRoZXNlIHBhdGh3YXlzIHJlbGV2YW50PyBJIGRvbiYjMzk7dCBzZWUgaXQuIGB0dW5gIGFuZCBgdmV0aGAgZGVmaW5pdGVseSBkb24mIzM5O3QgZGVhbCB3aXRoIHRoZSBwaHlzaWNhbCBsYXllci4KCk9rYXksIGxldCYjMzk7cyBrZWVwIGdvaW5nLiBXaGF0IGFib3V0IHNvbWV0aGluZyBsaWtlIGBtYWM4MDIxMV9od3NpbWA/IE5vLCBpdCYjMzk7cyBub3QgYSBkaXJlY3QgbWF0Y2guIGB2a21zYCBpcyBEUk0sIHNvIG5vIHRoZXJlIGVpdGhlci4gYGR1bW15YCBpcyBhbHNvIG91dC4gQWxyaWdodCwgdGltZSB0byBjaGVjayBgbmV0ZGV2c2ltYC4gKlRoYXQmIzM5O3MqIHRoZSBvbmUgdGhhdCBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGludGVyZXN0aW5nIHRvIGxvb2sgaW50by4gTGV0IG1lIHNlZSBpZiBgbmV0ZGV2c2ltYCBoYXMgYW55IGludGVyYWN0aW9uIHdpdGggUEhZcywgYXMgdGhhdCB3b3VsZCBiZSB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9hdHRhY2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc4MCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdD04NT1UaGVzZSBmdW5jdGlvbiBhcmUgYWxyZWFkeSBob29rZWQgaW50byB0aGUgcGh5bGliIHN1YnN5c3RlbSwgc28gYWxsIFBIWXMgdGhhdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdDo4NjphcmUgbGlua2VkIHRvIGEgbmV0X2RldmljZSB0aHJvdWdoIDpjOmZ1bmM6YHBoeV9hdHRhY2hfZGlyZWN0YCB3aWxsIGF1dG9tYXRpY2FsbHlcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktbGluay10b3BvbG9neS5yc3QtODctam9pbiB0aGUgbmV0ZGV2JiMzOTtzIHRvcG9sb2d5LlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0PTM2Mz1ldmVyeSBzZWNvbmQgYmVmb3JlIHRoZSBzdGF0ZSBtYWNoaW5lIHJlYWN0cyB0byBhbnkgY2hhbmdlcy4gIFRvIGRvIHRoaXMsIHlvdVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q6MzY0Om5lZWQgdG8gbWFudWFsbHkgY2FsbCBwaHlfYXR0YWNoKCkgYW5kIHBoeV9wcmVwYXJlX2xpbmsoKSwgYW5kIHRoZW4gY2FsbFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtMzY1LXBoeV9zdGFydF9tYWNoaW5lKCkgd2l0aCB0aGUgc2Vjb25kIGFyZ3VtZW50IHNldCB0byBwb2ludCB0byB5b3VyIHNwZWNpYWxcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD0zNzY9dGhlIGNvbXBsZXggaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFBIWSBhbmQgeW91ciBuZXR3b3JrIGRldmljZS4gIElmIHRoaXMgaXNcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0OjM3NzpzbywgeW91IGNhbiBzaW1wbHkgY2FsbCBwaHlfYXR0YWNoKCksIGFuZCBub3QgY2FsbCBwaHlfc3RhcnRfbWFjaGluZSBvclxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtMzc4LXBoeV9wcmVwYXJlX2xpbmsoKS4gIFRoaXMgd2lsbCBtZWFuIHRoYXQgcGh5ZGV2LVx1MDAzZXN0YXRlIGlzIGVudGlyZWx5IHlvdXJzIHRvXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q9NDA0PVJlcXVlc3RzIHRoZSBJUlEgZm9yIHRoZSBQSFkgaW50ZXJydXB0cy5cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC00MDYtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDo0MDc6IHN0cnVjdCBwaHlfZGV2aWNlICogcGh5X2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpwaHlfaWQsXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC00MDgtXHRcdCAgICAgICAgICAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2ZwLXBoeWxpbmsucnN0PTc0PXRoaXMgZG9jdW1lbnRhdGlvbi5cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2ZwLXBoeWxpbmsucnN0LTE2NS0gICBGb3IgdGhlIG1vc3QgcGFydCwgYGBmbGFnc2BgIGNhbiBiZSB6ZXJvOyB0aGVzZSBmbGFncyBhcmUgcGFzc2VkIHRvXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2ZwLXBoeWxpbmsucnN0OjE2NjogICB0aGUgcGh5X2F0dGFjaF9kaXJlY3QoKSBpbnNpZGUgdGhpcyBmdW5jdGlvbiBjYWxsIGlmIGEgUEhZIGlzIHNwZWNpZmllZFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NmcC1waHlsaW5rLnJzdC0xNjctICAgaW4gdGhlIERUIG5vZGUgYGBub2RlYGAuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jPTEzNTM9c3RhdGljIGludCBvd2xfZW1hY19waHlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzY2LVx0aWYgKG5ldGlmX21zZ19saW5rKHByaXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jOjEzNjc6XHRcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM2OC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYz02NTA9c3RhdGljIGludCBhZGluMTE0MF9waHlfaW5pdChzdHJ1Y3QgYWRpbjExNDBfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02NzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYzo2Nzc6XHRwaHlfYXR0YWNoZWRfaW5mbyhwcml2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02NzgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM9MzI3Mz1zdGF0aWMgaW50IGV0MTMxeF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy0zMjk4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM6MzI5OTpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy0zMzAwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM9NDcyPXN0YXRpYyBpbnQgYXUxMDAwX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtNTUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYzo1NTM6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy01NTQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYz05MzE9c3RhdGljIGludCB4Z2JlX3BoeV9maW5kX3BoeV9kZXZpY2Uoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5ODM6XHRyZXQgPSBwaHlfYXR0YWNoX2RpcmVjdChwZGF0YS1cdTAwM2VuZXRkZXYsIHBoeWRldiwgcGh5ZGV2LVx1MDAzZWRldl9mbGFncyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTg0LVx0XHRcdFx0UEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTg1LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5ODY6XHRcdG5ldGRldl9lcnIocGRhdGEtXHUwMDNlbmV0ZGV2LCBcJiMzNDtwaHlfYXR0YWNoX2RpcmVjdCBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODctXHRcdHBoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM9OTY2PXN0YXRpYyBpbnQgYXg4ODc5NmNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDk0LVx0XHQgICBkZXZfbmFtZShcdTAwMjZzcGktXHUwMDNlZGV2KSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYzoxMDk1Olx0cGh5X2F0dGFjaGVkX2luZm8oYXhfbG9jYWwtXHUwMDNlcGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwOTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jPTEwMzc9c3RhdGljIHBoeV9pbnRlcmZhY2VfdCBiY21hc3BfcGh5X2lmYWNlX2Zvcl9jb25uZWN0KHBoeV9pbnRlcmZhY2VfdCBtb2RlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYy0xMDczLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jOjEwNzQ6c3RhdGljIGludCBiY21hc3BfcGh5X2F0dGFjaChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTA3NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jPTExMjE9c3RhdGljIGludCBiY21hc3Bfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYy0xMTM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jOjExNDA6XHRyZXQgPSBiY21hc3BfcGh5X2F0dGFjaChpbnRmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYy0xMTQxLVx0aWYgKHJldClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYzoxMTQyOlx0XHRnb3RvIGVycl9waHlfYXR0YWNoO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jLTExNDMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jLTExNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmM6MTE1NjplcnJfcGh5X2F0dGFjaDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYy0xMTU3LVx0YmNtYXNwX3BoeV9od191bnByZXBhcmUoaW50Zik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyOTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjk5Olx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIzMDAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM9ODkwPXN0YXRpYyBpbnQgYmNtX2VuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTkyMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jOjkyNDpcdFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTkyNS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM9MjMyND1zdGF0aWMgaW50IHNibWFjX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMzQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jOjIzNDY6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMzQ3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTIwODQ9c3RhdGljIGludCB0ZzNfcGh5X2luaXQoc3RydWN0IHRnMyAqdHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMjEyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jOjIxMjU6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMjEyNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jb3J0aW5hL2dlbWluaS5jPTM2MD1zdGF0aWMgaW50IGdtYWNfc2V0dXBfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY29ydGluYS9nZW1pbmkuYy00MDUtXHRpZiAobmV0aWZfbXNnX2xpbmsocG9ydCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jb3J0aW5hL2dlbWluaS5jOjQwNjpcdFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NvcnRpbmEvZ2VtaW5pLmMtNDA3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTQ5Nz1zdGF0aWMgaW50IGZ0Z21hYzEwMF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE1NTUtXHQvKiBEaXNwbGF5IHdoYXQgd2UgZm91bmQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTU1NjpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE1NTctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz0xODkwPXN0YXRpYyBpbnQgZnRnbWFjMTAwX3Byb2JlX2R0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xOTIxLVx0XHQvKiBEaXNwbGF5IHdoYXQgd2UgZm91bmQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTkyMjpcdFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTkyMy1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9Mjk4MT1zdGF0aWMgaW50IGZlY19lbmV0X21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAzNzpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeV9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAzOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jPTIwMT1zdGF0aWMgaW50IGhiZ19waHlfY29ubmVjdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMTctXHRwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjIxODpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIxOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlzaV9mZW1hYy5jPTc2OD1zdGF0aWMgaW50IGhpc2lfZmVtYWNfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpc2lfZmVtYWMuYy04MzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlzaV9mZW1hYy5jOjg0MDpcdHBoeV9hdHRhY2hlZF9wcmludChwaHksIFwmIzM0O3BoeV9pZD0weCUuOGx4LCBwaHlfbW9kZT0lc1xcblwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXNpX2ZlbWFjLmMtODQxLVx0XHRcdCAgICh1bnNpZ25lZCBsb25nKXBoeS1cdTAwM2VwaHlfaWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZW5ldC5jPTExNTk9aW50IGhuc19uaWNfaW5pdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBobmFlX2hhbmRsZSAqaClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmMtMTE4MC1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmM6MTE4MTpcdFx0cmV0ID0gcGh5X2F0dGFjaF9kaXJlY3QobmRldiwgcGh5X2RldiwgMCwgaC1cdTAwM2VwaHlfaWYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZW5ldC5jLTExODItXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZW5ldC5jLTExODUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmM6MTE4NjpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeV9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZW5ldC5jLTExODctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0yMDI9aW50IGhjbGdlX21hY19jb25uZWN0X3BoeShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0yMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jOjIzNzpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTIzOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jPTM1Nz1sdHFfZXRvcF9tZGlvX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy0zNzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jOjM3OTpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTM4MC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWFpbi5jPTM4NT1zdGF0aWMgaW50IG1seGJmX2dpZ2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWFpbi5jLTQ4Ny1cdC8qIERpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgYXR0YWNoZWQgUEhZIGRldmljZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21haW4uYzo0ODg6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21haW4uYy00ODktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYz03NTE9c3RhdGljIGludCBscGNfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L254cC9scGNfZXRoLmMtNzg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYzo3ODU6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYy03ODYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM9NTc4PXN0YXRpYyBpbnQgb2FfdGM2X3BoeV9pbml0KHN0cnVjdCBvYV90YzYgKnRjNilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy02MTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYzo2MTQ6XHRwaHlfYXR0YWNoZWRfaW5mbyh0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy02MTUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vZW1hYy9lbWFjLW1hYy5jPTkzMT1pbnQgZW1hY19tYWNfdXAoc3RydWN0IGVtYWNfYWRhcHRlciAqYWRwdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMtbWFjLmMtOTQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vZW1hYy9lbWFjLW1hYy5jOjk0ODpcdHBoeV9hdHRhY2hlZF9wcmludChhZHB0LVx1MDAzZXBoeWRldiwgTlVMTCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMtbWFjLmMtOTQ5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JkYy9yNjA0MC5jPTk5OD1zdGF0aWMgaW50IHI2MDQwX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JkYy9yNjA0MC5jLTEwMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZGMvcjYwNDAuYzoxMDIyOlx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JkYy9yNjA0MC5jLTEwMjMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NDk4Mj1zdGF0aWMgaW50IHI4MTY5X3BoeV9jb25uZWN0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTQ5OTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo0OTk5Olx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTUwMDAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYz0xNDkyPXN0YXRpYyBpbnQgcmF2Yl9waHlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jLTE1NDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jOjE1NDI6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYy0xNTQzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcnN3aXRjaF9tYWluLmM9MTQ2MD1zdGF0aWMgaW50IHJzd2l0Y2hfcGh5X2RldmljZV9pbml0KHN0cnVjdCByc3dpdGNoX2RldmljZSAqcmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3Jzd2l0Y2hfbWFpbi5jLTE0OTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3Jzd2l0Y2hfbWFpbi5jOjE0OTQ6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYy0xNDk1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcnRzbi5jPTg5NT1zdGF0aWMgaW50IHJ0c25fcGh5X2luaXQoc3RydWN0IHJ0c25fcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3J0c24uYy05MTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3J0c24uYzo5MTg6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmMtOTE5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmM9MTk4Nz1zdGF0aWMgaW50IHNoX2V0aF9waHlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jLTIwMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jOjIwMjg6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYy0yMDI5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzkxMXguYz0xMDE1PXN0YXRpYyBpbnQgc21zYzkxMXhfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTExeC5jLTEwMzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmM6MTAzOTpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmMtMTA0MC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5NDIwLmM9MTEwMj1zdGF0aWMgaW50IHNtc2M5NDIwX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzk0MjAuYy0xMTI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTQyMC5jOjExMjk6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTQyMC5jLTExMzAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L3NuaV9hdmUuYz0xMTYzPXN0YXRpYyBpbnQgYXZlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L3NuaV9hdmUuYy0xMjMyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L3NuaV9hdmUuYzoxMjMzOlx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9zbmlfYXZlLmMtMTIzNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmM9MTU5Nz1zdGF0aWMgaW50IGVtYWNfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3BhY2VtaXQvazFfZW1hYy5jLTE2NDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmM6MTY0OTpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmMtMTY1MC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTU5NT1pbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy03MDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjcwNTpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTcwNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW5wbHVzL3NwbDJzd19waHkuYz01Nj1pbnQgc3BsMnN3X3BoeV9jb25uZWN0KHN0cnVjdCBzcGwyc3dfY29tbW9uICpjb21tKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bnBsdXMvc3BsMnN3X3BoeS5jLTcyLVx0XHRcdHBoeV9zdXBwb3J0X2FzeW1fcGF1c2UocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bnBsdXMvc3BsMnN3X3BoeS5jOjczOlx0XHRcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW5wbHVzL3NwbDJzd19waHkuYy03NC1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3cuYz01ODU9c3RhdGljIHZvaWQgY3Bzd19zbGF2ZV9vcGVuKHN0cnVjdCBjcHN3X3NsYXZlICpzbGF2ZSwgc3RydWN0IGNwc3dfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmMtNjYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5jOjY2MzpcdHBoeV9hdHRhY2hlZF9pbmZvKHNsYXZlLVx1MDAzZXBoeSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmMtNjY0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3dfbmV3LmM9NzQwPXN0YXRpYyB2b2lkIGNwc3dfc2xhdmVfb3BlbihzdHJ1Y3QgY3Bzd19zbGF2ZSAqc2xhdmUsIHN0cnVjdCBjcHN3X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19uZXcuYy04MDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X25ldy5jOjgwNTpcdHBoeV9hdHRhY2hlZF9pbmZvKHNsYXZlLVx1MDAzZXBoeSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X25ldy5jLTgwNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX2VtYWMuYz0xNDAyPXN0YXRpYyBpbnQgZW1hY19kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX2VtYWMuYy0xNTI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvZGF2aW5jaV9lbWFjLmM6MTUyOTpcdFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfZW1hYy5jLTE1MzAtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM9MjE3OD1zdGF0aWMgaW50IHBydWV0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI0MTYtXHRcdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jOjI0MTc6XHRcdHBoeV9hdHRhY2hlZF9pbmZvKHBydWV0aC1cdTAwM2VlbWFjW1BSVUVUSF9NQUMwXS1cdTAwM2VuZGV2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYy0yNDE4LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI0MzMtXHRcdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jOjI0MzQ6XHRcdHBoeV9hdHRhY2hlZF9pbmZvKHBydWV0aC1cdTAwM2VlbWFjW1BSVUVUSF9NQUMxXS1cdTAwM2VuZGV2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYy0yNDM1LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aF9zcjEuYz04ODk9c3RhdGljIGludCBwcnVldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmMtMTA5MC1cdFx0ZW1hY19waHlfY29ubmVjdChwcnVldGgtXHUwMDNlZW1hY1tQUlVFVEhfTUFDMF0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jOjEwOTE6XHRcdHBoeV9hdHRhY2hlZF9pbmZvKHBydWV0aC1cdTAwM2VlbWFjW1BSVUVUSF9NQUMwXS1cdTAwM2VuZGV2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmMtMTA5Mi1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmMtMTEwMi1cdFx0ZW1hY19waHlfY29ubmVjdChwcnVldGgtXHUwMDNlZW1hY1tQUlVFVEhfTUFDMV0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jOjExMDM6XHRcdHBoeV9hdHRhY2hlZF9pbmZvKHBydWV0aC1cdTAwM2VlbWFjW1BSVUVUSF9NQUMxXS1cdTAwM2VuZGV2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmMtMTEwNC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90b3NoaWJhL3RjMzU4MTUuYz02MDc9c3RhdGljIGludCB0Y19taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90b3NoaWJhL3RjMzU4MTUuYy02MjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90b3NoaWJhL3RjMzU4MTUuYzo2Mjg6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdG9zaGliYS90YzM1ODE1LmMtNjI5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYz0xNTk9aW50IG5nYmVfbWRpb19pbml0KHN0cnVjdCB3eCAqd3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTE4OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzoxOTA6XHRwaHlfYXR0YWNoZWRfaW5mbyh3eC1cdTAwM2VwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTE5MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUyND1zdGF0aWMgaW50IHR4Z2JlX2V4dF9waHlfaW5pdChzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1NTk6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01NjAtXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTc2MD1zdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc3NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo3NzY6c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNzc3LXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9ODI5PXN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04NTctXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjg1ODpcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODU5LVx0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyMjU9aW50IHBoeV9jb25uZWN0X2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTIzMy1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTIzNDpcdHJjID0gcGh5X2F0dGFjaF9kaXJlY3QoZGV2LCBwaHlkZXYsIHBoeWRldi1cdTAwM2VkZXZfZmxhZ3MsIGludGVyZmFjZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyMzUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzg4PUVYUE9SVF9TWU1CT0wocGh5X2luaXRfaHcpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzg5LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzkwOnZvaWQgcGh5X2F0dGFjaGVkX2luZm8oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM5MS17XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzOTI6XHRwaHlfYXR0YWNoZWRfcHJpbnQocGh5ZGV2LCBOVUxMKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM5My19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzOTQ6RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoZWRfaW5mbyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTUtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTYtI2RlZmluZSBBVFRBQ0hFRF9GTVQgXCYjMzQ7YXR0YWNoZWQgUEhZIGRyaXZlciAlcyhtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JXMpXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzOTc6Y2hhciAqcGh5X2F0dGFjaGVkX2luZm9faXJxKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQxNi19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE0MTc6RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoZWRfaW5mb19pcnEpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDE4LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNDE5OnZvaWQgcGh5X2F0dGFjaGVkX3ByaW50KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDIwLXtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQyMS1cdGNvbnN0IGNoYXIgKnVuYm91bmQgPSBwaHlkZXYtXHUwMDNlZHJ2ID8gXCYjMzQ7XCYjMzQ7IDogXCYjMzQ7W3VuYm91bmRdIFwmIzM0OztcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTQyMjpcdGNoYXIgKmlycV9zdHIgPSBwaHlfYXR0YWNoZWRfaW5mb19pcnEocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQyMy1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0MzgtfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNDM5OkVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaGVkX3ByaW50KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ0MC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE3Mzc9c3RhdGljIHZvaWQgX19waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgbm90aWZ5X2J1cylcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MTctICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODE4OiAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS5cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgxOS0gKi9cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE4MjU9RVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MjctLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4Mjg6ICogcGh5X2F0dGFjaF9kaXJlY3QgLSBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBhIGdpdmVuIFBIWSBkZXZpY2UgcG9pbnRlclxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODI5LSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg0MS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg0MjppbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg0My1cdFx0ICAgICAgdTMyIGZsYWdzLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk2OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTk2OTpcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTk3MDpcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE5NzEtXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMDAyLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjAwMzpFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjAwNC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIwODc9c3RhdGljIGludCBwaHlsaW5rX2JyaW5ndXBfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIxMjEtXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIxMjI6XHRpcnFfc3RyID0gcGh5X2F0dGFjaGVkX2luZm9faXJxKHBoeSk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIxMjMtXHRwaHlsaW5rX2luZm8ocGwsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMjA0PXN0YXRpYyBpbnQgcGh5bGlua19hdHRhY2hfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyMTktXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyMjA6XHRyZXR1cm4gcGh5X2F0dGFjaF9kaXJlY3QocGwtXHUwMDNlbmV0ZGV2LCBwaHksIGZsYWdzLCBpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjIxLX1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyMjgtICogQ29ubmVjdCBAcGh5IHRvIHRoZSBwaHlsaW5rIGluc3RhbmNlIHNwZWNpZmllZCBieSBAcGwgYnkgY2FsbGluZ1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMjI5OiAqIHBoeV9hdHRhY2hfZGlyZWN0KCkuIENvbmZpZ3VyZSB0aGUgQHBoeSBhY2NvcmRpbmcgdG8gdGhlIE1BQyBkcml2ZXImIzM5O3NcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIzMC0gKiBjYXBhYmlsaXRpZXMsIHN0YXJ0IHRoZSBQSFlMSUIgc3RhdGUgbWFjaGluZSBhbmQgZW5hYmxlIGFueSBpbnRlcnJ1cHRzXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMjkwPWludCBwaHlsaW5rX2Z3bm9kZV9waHlfY29ubmVjdChzdHJ1Y3QgcGh5bGluayAqcGwsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMzIzLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMzI0Olx0cmV0ID0gcGh5X2F0dGFjaF9kaXJlY3QocGwtXHUwMDNlbmV0ZGV2LCBwaHlfZGV2LCBmbGFncyxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjMyNS1cdFx0XHRcdHBsLVx1MDAzZWxpbmtfaW50ZXJmYWNlKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NzAzPXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X3BoeShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcyMi1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo3MjM6XHRwaHlfYXR0YWNoZWRfaW5mbyhwcml2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNzI0LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5Mi1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyOTM6XHRwaHlfYXR0YWNoZWRfaW5mbyhkZXYtXHUwMDNlbmV0LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjk0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWluLmM9NDM0NT1zdGF0aWMgaW50IGJyY21zX2JfYXR0YWNoKHN0cnVjdCBicmNtc19jX2luZm8gKndsYywgc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWluLmMtNDUzOC1cdFx0d2xjX2h3LVx1MDAzZWJhbmQtXHUwMDNlcGkgPVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21haW4uYzo0NTM5Olx0XHRcdHdsY19waHlfYXR0YWNoKHdsY19ody1cdTAwM2VwaHlfc2gsIGNvcmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFpbi5jLTQ1NDAtXHRcdFx0XHQgICAgICAgd2xjX2h3LVx1MDAzZWJhbmQtXHUwMDNlYmFuZHR5cGUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfY21uLmM9Mzk2PXN0cnVjdCBicmNtc19waHlfcHViICpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jOjM5Nzp3bGNfcGh5X2F0dGFjaChzdHJ1Y3Qgc2hhcmVkX3BoeSAqc2gsIHN0cnVjdCBiY21hX2RldmljZSAqZDExY29yZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jLTM5OC1cdCAgICAgICBpbnQgYmFuZHR5cGUsIHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfY21uLmMtNTMyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfY21uLmM6NTMzOlx0XHR3bGNfcGh5X2F0dGFjaF9ucGh5KHBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jLTUzNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jLTUzNS1cdH0gZWxzZSBpZiAoSVNMQ05QSFkocGkpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9jbW4uYzo1MzY6XHRcdGlmICghd2xjX3BoeV9hdHRhY2hfbGNucGh5KHBpKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jLTUzNy1cdFx0XHRnb3RvIGVycjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9oYWwuaD0xNjY9c3RydWN0IHNoYXJlZF9waHkgKndsY19waHlfc2hhcmVkX2F0dGFjaChzdHJ1Y3Qgc2hhcmVkX3BoeV9wYXJhbXMgKnNocCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9oYWwuaDoxNjc6c3RydWN0IGJyY21zX3BoeV9wdWIgKndsY19waHlfYXR0YWNoKHN0cnVjdCBzaGFyZWRfcGh5ICpzaCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2hhbC5oLTE2OC1cdFx0XHRcdCAgICAgc3RydWN0IGJjbWFfZGV2aWNlICpkMTFjb3JlLCBpbnQgYmFuZHR5cGUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfaW50Lmg9OTM5PXZvaWQgd2xjX3BoeV9jYWxfcGVyaWNhbF9tcGhhc2VfcmVzdGFydChzdHJ1Y3QgYnJjbXNfcGh5ICpwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9pbnQuaC05NDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9pbnQuaDo5NDE6dm9pZCB3bGNfcGh5X2F0dGFjaF9ucGh5KHN0cnVjdCBicmNtc19waHkgKnBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2ludC5oOjk0Mjpib29sIHdsY19waHlfYXR0YWNoX2xjbnBoeShzdHJ1Y3QgYnJjbXNfcGh5ICpwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9pbnQuaC05NDMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfbGNuLmM9NDk1Mz12b2lkIHdsY19waHlfZGV0YWNoX2xjbnBoeShzdHJ1Y3QgYnJjbXNfcGh5ICpwaSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9sY24uYy00OTU3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfbGNuLmM6NDk1ODpib29sIHdsY19waHlfYXR0YWNoX2xjbnBoeShzdHJ1Y3QgYnJjbXNfcGh5ICpwaSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2xjbi5jLTQ5NTkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X24uYz0xNDU0OT1zdGF0aWMgdm9pZCB3bGNfcGh5X3R4cHdyX3Nyb21fcmVhZF9ucGh5KHN0cnVjdCBicmNtc19waHkgKnBpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X24uYy0xNDU5OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X24uYzoxNDYwMDp2b2lkIHdsY19waHlfYXR0YWNoX25waHkoc3RydWN0IGJyY21zX3BoeSAqcGkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9uLmMtMTQ2MDEte1xuLS1cbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYz0xNTQ9c3RhdGljIHZvaWRcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYzoxNTU6YmZhX2NvbV9waHlfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG1pbmNmZylcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYy0xNTYte1xuLS1cbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYy0xNTktXG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmM6MTYwOlx0YmZhX3BoeV9hdHRhY2gocGh5LCBcdTAwMjZiZmEtXHUwMDNlaW9jLCBiZmEsIGJmYS1cdTAwM2V0cmNtb2QsIG1pbmNmZyk7XG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMtMTYxLVx0YmZhX3BoeV9tZW1jbGFpbShwaHksIHBoeV9kbWEtXHUwMDNla3ZhX2N1cnAsIHBoeV9kbWEtXHUwMDNlZG1hX2N1cnAsIG1pbmNmZyk7XG4tLVxuZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jPTE4Mjc9YmZhX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLFxuLS1cbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYy0xODcyLVx0YmZhX2NvbV9kaWFnX2F0dGFjaChiZmEpO1xuZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jOjE4NzM6XHRiZmFfY29tX3BoeV9hdHRhY2goYmZhLCBjZmctXHUwMDNlZHJ2Y2ZnLm1pbl9jZmcpO1xuZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jLTE4NzQtXHRiZmFfY29tX2ZydV9hdHRhY2goYmZhLCBjZmctXHUwMDNlZHJ2Y2ZnLm1pbl9jZmcpO1xuLS1cbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jPTU0MzY9dm9pZFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmM6NTQzNzpiZmFfcGh5X2F0dGFjaChzdHJ1Y3QgYmZhX3BoeV9zICpwaHksIHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqZGV2LFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmMtNTQzOC1cdFx0c3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwgYmZhX2Jvb2xlYW5fdCBtaW5jZmcpXG4tLVxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmg9NzI5PXUzMlx0YmZhX3BoeV9tZW1pbmZvKGJmYV9ib29sZWFuX3QgbWluY2ZnKTtcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5oOjczMDp2b2lkIGJmYV9waHlfYXR0YWNoKHN0cnVjdCBiZmFfcGh5X3MgKnBoeSwgc3RydWN0IGJmYV9pb2NfcyAqaW9jLFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgtNzMxLVx0XHR2b2lkICpkZXYsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsIGJmYV9ib29sZWFuX3QgbWluY2ZnKTtcbi0tXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXMuaD0xODE9c3RydWN0IGhpc2lfc2FzX3BoeSB7XG4tLVxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzLmgtMTkyLVx0dThcdFx0ZnJhbWVfcmN2ZFtGUkFNRV9SQ1ZEX0JVRl07XG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXMuaDoxOTM6XHR1OFx0XHRwaHlfYXR0YWNoZWQ7XG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXMuaC0xOTQtXHR1OFx0XHRpbl9yZXNldDtcbi0tXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jPTY0OT1zdGF0aWMgdm9pZCBoaXNpX3Nhc19ieXRlc19kbWFlZChzdHJ1Y3QgaGlzaV9oYmEgKmhpc2lfaGJhLCBpbnQgcGh5X25vLFxuLS1cbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtNjU0LVxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYzo2NTU6XHRpZiAoIXBoeS1cdTAwM2VwaHlfYXR0YWNoZWQpXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jLTY1Ni1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmM9MTAzMD12b2lkIGhpc2lfc2FzX3BoeV9vb2JfcmVhZHkoc3RydWN0IGhpc2lfaGJhICpoaXNpX2hiYSwgaW50IHBoeV9ubylcbi0tXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jLTEwMzctXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaHktXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYzoxMDM4Olx0aWYgKHBoeS1cdTAwM2VwaHlfYXR0YWNoZWQpIHtcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtMTAzOS1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwaHktXHUwMDNlbG9jaywgZmxhZ3MpO1xuLS1cbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmM9MTI4MD1zdGF0aWMgaW50IGhpc2lfc2FzX2NvbnRyb2xfcGh5KHN0cnVjdCBhc2Rfc2FzX3BoeSAqc2FzX3BoeSwgZW51bSBwaHlfZnVuYyBmdW5jLFxuLS1cbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtMTI4OS1cdGludCBwaHlfbm8gPSBzYXNfcGh5LVx1MDAzZWlkO1xuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYzoxMjkwOlx0dTggc3RzID0gcGh5LVx1MDAzZXBoeV9hdHRhY2hlZDtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDkyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBgcGh5X2F0dGFjaF9kaXJlY3RgIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHN5emthbGxlciBjYW4gdHJpZ2dlciB0aGUgYHBoeV9hdHRhY2hfZGlyZWN0YCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiwgSSBrbm93LCBpcyBjYWxsZWQgYnkgYHBoeV9jb25uZWN0X2RpcmVjdGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBwaHlfY29ubmVjdGAuIFRoZSBjb25uZWN0aW9uIGNoYWluIGlzIGltcG9ydGFudCwgYmVjYXVzZSBgcGh5X2Nvbm5lY3RgIGlzIGNhbGxlZCBieSBhIGxvdCBvZiBuZXR3b3JrIGRyaXZlcnMuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgc29tZWhvdyBnZXQgdGhlcmU/CgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBmb3IgYSB3YXkgc3l6a2FsbGVyIGNvdWxkIGNyZWF0ZSBhIHZpcnR1YWwgZGV2aWNlIHRoYXQgaW50ZXJhY3RzIHdpdGggYHBoeWxpYmAuIEkgY29uc2lkZXJlZCB0aGUgcG9zc2liaWxpdHkgb2YgdXNpbmcgYG5ldGxpbmtgIHRvIGFjY29tcGxpc2ggdGhpcy4gVGhlbiwgSSBoYWQgYSBicmllZiwgaW5jb3JyZWN0IHRob3VnaHQgYWJvdXQgYG1hY3NlY2AgdXNpbmcgUEhZcywgYnV0IHF1aWNrbHkgZGlzbWlzc2VkIGl04oCUYG1hY3NlY2AgaXMgcHVyZWx5IGEgc29mdHdhcmUgZGV2aWNlLgoKSSBzdGFydGVkIHNjYW5uaW5nIHBvdGVudGlhbCB2aXJ0dWFsIGRldmljZXMgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLiBJIGNoZWNrZWQgYGRyaXZlcnMvbmV0L2R1bW15LmNgLCBgZHJpdmVycy9uZXQvdmV0aC5jYCwgYGRyaXZlcnMvbmV0L3R1bi5jYCwgYW5kIGBkcml2ZXJzL25ldC9tYWN2bGFuLmNgLiBOb25lIG9mIHRob3NlIHVzZSBQSFlzLiBJIHRob3VnaHQgYWJvdXQgTURJTyBidXNlcywgc28gSSBnbGFuY2VkIGF0IGBkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY2AuIEkga25vdyBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggdGhvc2UgdGhyb3VnaCBpb2N0bHMgbGlrZSBgU0lPQ1NNSUlSRUdgIGFuZCBgU0lPQ0dNSUlQSFlgLiBIb3dldmVyLCB0aGlzIGRvZXNuJiMzOTt0IGRpcmVjdGx5IHRyaWdnZXIgYHBoeV9hdHRhY2hfZGlyZWN0YDsgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIGBuZXRfZGV2aWNlYCBhdHRhY2hlcyB0byBhIFBIWS4KClRoYXQmIzM5O3Mgd2hlbiBpdCBoaXQgbWU6IGBwaHlfYXR0YWNoX2RpcmVjdGAgaXMgY2FsbGVkIHdoZW4gYSBgbmV0X2RldmljZWAgaXMgb3BlbmVkLCBzYXksIHZpYSB0aGUgYG5kb19vcGVuYCBtZXRob2QsIGFuZCBvbmx5IHdoZW4gdGhlIGRldmljZSBhY3R1YWxseSBoYXMgYSBQSFkgYXNzb2NpYXRlZCB3aXRoIGl0LiBTbywgaWYgdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRoIHRoaW5ncyBsaWtlIGBDT05GSUdfRFVNTVlgIG9yIGBDT05GSUdfVkVUSGAsIEkgY2FuJiMzOTt0IHRyaWdnZXIgaXQsIGJlY2F1c2UgdGhvc2UgZGV2aWNlcyBkb24mIzM5O3QgaGF2ZSBQSFlzLgoKU28sIEkgbmVlZCB0byBmaW5kIGEgbmV0d29yayBkcml2ZXIsIHJlYWNoYWJsZSBieSBzeXprYWxsZXIsIHdoaWNoICpkb2VzKiB1c2UgUEhZcy4gVGhhdCYjMzk7cyB0aGUga2V5LiBBaGEhIFN5emthbGxlciBjYW4gdXNlIGBuZXRkZXZzaW1gLiBJJiMzOTtsbCBnbyBjaGVjayB3aGV0aGVyIG9yIG5vdCBgbmV0ZGV2c2ltYCB1c2VzIFBIWXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzAwMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVTQiBOZXR3b3JrIERyaXZlcnMgYW5kIFBIWXM6IEEgU3l6a2FsbGVyIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gYnJvYWRlbiB0aGUgY292ZXJhZ2Ugb2YgbXkgZnV6emluZyBlZmZvcnRzLCBhbmQgYGRyaXZlcnMvbmV0L3VzYmAgY29tZXMgdG8gbWluZC4gU3l6a2FsbGVyJiMzOTtzIGFiaWxpdHkgdG8gZW11bGF0ZSBVU0IgZGV2aWNlcyB1c2luZyBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSB3YW50IHRvIGxldmVyYWdlLiBUaGUgcXVlc3Rpb24gaXMsIHdoYXQgdnVsbmVyYWJpbGl0aWVzIGFyZSBsaWtlbHkgdG8gYmUgbHVya2luZyB0aGVyZT8KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB3aGV0aGVyIGFueSBVU0IgbmV0d29yayBkcml2ZXJzIGFjdHVhbGx5IHJlbHkgb24gUEhZcy4gVGhpcyBjb3VsZCBvcGVuIHVwIGEgbmV3IGF2ZW51ZSBmb3IgdGVzdGluZyBhbmQgZXhwbG9pdCBkaXNjb3ZlcnkuIFNvLCBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGxpbmsgYmV0d2VlbiB0aGUgVVNCIG5ldHdvcmsgZHJpdmVycyBhbmQgYW55IFBoeXNpY2FsIExheWVyIGltcGxlbWVudGF0aW9ucy4gVGhpcyBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz03MDM9c3RhdGljIGludCBheDg4NzcyX2luaXRfcGh5KHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNzIyLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjcyMzpcdHBoeV9hdHRhY2hlZF9pbmZvKHByaXYtXHUwMDNlcGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MjQtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjkyLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI5MzpcdHBoeV9hdHRhY2hlZF9pbmZvKGRldi1cdTAwM2VuZXQtXHUwMDNlcGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyOTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDgxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipOZXR3b3JrIERyaXZlciBJbnZlc3RpZ2F0aW9uOiBgcGh5X2Nvbm5lY3RgIHZzLiBgcGh5X2F0dGFjaF9kaXJlY3RgKioKClJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBxdWlja2x5IGFzY2VydGFpbiBob3cgdGhlIGBzbXNjOTV4eGAgYW5kIGBhc2l4YCBkcml2ZXJzIGhhbmRsZSB0aGVpciBQSFkgY29ubmVjdGlvbnMuIFRoZSBrZXkgdGhpbmcgSSYjMzk7bSBsb29raW5nIGZvciBpcyB3aGV0aGVyIHRoZXkmIzM5O3JlIGVtcGxveWluZyB0aGUgbGVnYWN5IGBwaHlfY29ubmVjdGAgZnVuY3Rpb24sIG9yIGlmIHRoZXkmIzM5O3ZlIG1pZ3JhdGVkIHRvIHRoZSBuZXdlciBgcGh5X2F0dGFjaF9kaXJlY3RgIGFwcHJvYWNoLiBLbm93aW5nIHRoaXMgaW1wYWN0cyBzbyBtYW55IHRoaW5ncywgZnJvbSB0aGUgb3ZlcmFsbCBkcml2ZXIgYXJjaGl0ZWN0dXJlIHRvIHBvdGVudGlhbCBxdWlya3MgaW4gaGFuZGxpbmcgc3BlY2lmaWMgUEhZIGNoYXJhY3RlcmlzdGljcy4gSXQgd2lsbCBoZWxwIG1lIGRpYWdub3NlIGNlcnRhaW4gaXNzdWVzLCBjb21wYXJlIHRoZWlyIG1ldGhvZHMgZm9yIGZ1dHVyZSByZWZlcmVuY2UsIGFuZCB1bmRlcnN0YW5kIGlmIHRoZXkgaGF2ZSB0YWtlbiBhZHZhbnRhZ2Ugb2YgdGhlIG1vZGVybiBhcHByb2FjaC4gSXQmIzM5O3MgcmVhbGx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciBQSFkgaW50ZXJhY3Rpb24gbW9kZWwgYW5kIHdoZXJlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBwcm9ibGVtcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBUaW1lIHRvIGdldCBkaWdnaW5nIHRocm91Z2ggdGhlIGNvZGUuLi4gbGV0JiMzOTtzIHNlZSB3aGljaCBwYXRoIHRoZXNlIGRyaXZlcnMgYXJlIHRha2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MjYxPXN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTMxMy1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjMxNDpcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LVx1MDAzZW5ldCwgcHJpdi1cdTAwM2VwaHlfbmFtZSxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTMxNS1cdFx0XHRcdCAgIFx1MDAyNmF4ODgxNzJhX2FkanVzdF9saW5rLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4NC1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyODU6XHRyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QoZGV2LVx1MDAzZW5ldCwgcGRhdGEtXHUwMDNlcGh5ZGV2LFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4Ni1cdFx0XHRcdCBcdTAwMjZzbXNjOTV4eF9oYW5kbGVfbGlua19jaGFuZ2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDM4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiB0aGUgTmV3IE1ESU8gQnVzIENhbGxiYWNrcyoqCgpPa2F5LCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIGZvbGxvd2luZyB0aGUgcG90ZW50aWFsIGNhbGwgY2hhaW4gaGVyZS4gSXQgbG9va3MgbGlrZSBib3RoIGBzbXNjOTV4eGAgYW5kIGBheDg4MTcyYWAgdXNlIGBwaHlfY29ubmVjdF9kaXJlY3RgIGFuZCBgcGh5X2Nvbm5lY3RgLCB3aGljaCwgaW4gdHVybiwgY2FsbCBgcGh5X2F0dGFjaF9kaXJlY3RgLiBHaXZlbiBTeXprYWxsZXImIzM5O3MgVVNCIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMsIGl0IGNvdWxkIHRyaWdnZXIgZWl0aGVyIGBzbXNjOTV4eF9iaW5kYCBvciBgYXg4ODE3MmFfcmVzZXRgLiBUaGF0IHdvdWxkIGJlIHRoZSBlbnRyeSBwb2ludCB0byBnZXQgaW50byB0aGUgZnVuY3Rpb25zLCBgcGh5X2Nvbm5lY3RfZGlyZWN0YCBhbmQgYHBoeV9jb25uZWN0YCwgZXZlbnR1YWxseSBsZWFkaW5nIHRvIGBwaHlfYXR0YWNoX2RpcmVjdGAuCgpBbmQgdGhlbiwgY3J1Y2lhbGx5LCBgcGh5X2F0dGFjaF9kaXJlY3RgIGNhbGxzIGBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpYC4gVGhhdCYjMzk7cyB3aGVyZSBpdCBjb25uZWN0cy4KCkFoYSEgVGhlIHBhdGNoICphZGRzKiBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIHRvIHRoZSBgc3RydWN0IG1paV9idXNgLCB3aGljaCBpcyBrZXkuIEFuZCB0aGVuIGl0IGFjdHVhbGx5IGltcGxlbWVudHMgdGhlc2UgY2FsbGJhY2tzIHdpdGhpbiBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gQnV0IGhlcmUmIzM5O3MgdGhlIHNuYWc6IGBzbXNjOTV4eGAgYW5kIGBheDg4MTcyYWAgdXNlICp0aGVpciBvd24qIE1ESU8gYnVzZXMsIG5vdCB0aGUgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGltcGxlbWVudGF0aW9uLiBUaGlzIG1lYW5zIHRoZSBgbm90aWZ5X3BoeV9hdHRhY2hgIGNhbGxiYWNrIGluIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCB3aWxsICpvbmx5KiBiZSBjYWxsZWQgaWYgdGhlIFBIWSBpcyBhdHRhY2hlZCB0byB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gYnVzLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIFN5emthbGxlciBjYW4gaW5zdGFudGlhdGUgdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGJ1cy4gSXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIHN1Z2dlc3RzIGl0IG1pZ2h0IHJlcXVpcmUgc3BlY2lmaWMgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBob3cgdG8gdHJpZ2dlciB0aGF0IHBsYXRmb3JtIGRyaXZlciwgdG8gc2VlIGlmIEkgY2FuIGZvcmNlIGl0IHRvIHVzZSB0aGlzIGRyaXZlci4gVGhhdCB3b3VsZCBiZSB0aGUgcGF0aCB0byBtYWtpbmcgdGhpcyBjYWxsIGNoYWluIGFjdHVhbGx5IGZpcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsYXRmb3JtX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9MTE1ND1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvdHRvX2VtZGlvX2lkcyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTE1NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoxMTU2OnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG90dG9fZW1kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTExNTctXHQucHJvYmUgPSBvdHRvX2VtZGlvX3Byb2JlLFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTYzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjExNjQ6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihvdHRvX2VtZGlvX2RyaXZlcik7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTE2NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwOTMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaG93IGEgcGxhdGZvcm0gZHJpdmVyIGdldHMgbG9hZGVkLiBUeXBpY2FsbHksIGl0JiMzOTtzIHRoZSBEZXZpY2UgVHJlZSB0aGF0IGtpY2tzIHRoaW5ncyBvZmYsIHJpZ2h0PyBUaGF0JiMzOTtzIGhvdyB0aGUga2VybmVsIGtub3dzIGFib3V0IHRoZSBoYXJkd2FyZSBhbmQgd2hhdCBkcml2ZXJzIHRvIGxvYWQsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkZXZpY2UgdHJlZSBoYXMgdGhhdCBhbGwtaW1wb3J0YW50ICYjMzQ7Y29tcGF0aWJsZSYjMzQ7IHN0cmluZywgdGhlIG9uZSB0aGF0IHRlbGxzIHRoZSBrZXJuZWwgJiMzNDtoZXksIHVzZSB0aGlzIGRyaXZlciYjMzQ7IOKAkyB0aGluZ3MgbGlrZSBgJiMzNDtyZWFsdGVrLHJ0bDgzODAtbWRpbyYjMzQ7YC4gSWYgaXQmIzM5O3MgbWlzc2luZywgYG90dG9fZW1kaW9fcHJvYmVgIGlzbiYjMzk7dCBnb2luZyB0byBnZXQgY2FsbGVkLCBhbmQgdGhhdCYjMzk7cyBhIHByb2JsZW0uCgpOb3csIG15IG1pbmQgd2FuZGVycyB0byBzeXprYWxsZXIuLi4gY2FuIEkgZm9yY2UgYSBwbGF0Zm9ybSBkZXZpY2UgaW50byBleGlzdGVuY2UgdGhyb3VnaCBgc3l6X2Rldm1lbWAgb3Igb25lIG9mIHRob3NlIHBzZXVkby1zeXNjYWxscz8gTm8sIHdhaXQsIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBTeXprYWxsZXIgaGFzIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAsIG9yIGl0IGNhbiB1c2UgYG5ldGxpbmtgIHRvIGNyZWF0ZSBkZXZpY2VzLCBidXQgZ2VuZXJhbGx5IGl0JiMzOTtzIGEgYml0IHRyaWNreSB0byBzcGluIHVwIHBsYXRmb3JtIGRldmljZXMgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUgc3BlY2lhbCBzeXprYWxsZXIgZGVzY3JpcHRpb24gZm9yIHRoYXQgc3BlY2lmaWMgZGV2aWNlLgoKQnV0IHRoZW4sIHRoYXQgc3BhcmtzIGEgbmV3IHRob3VnaHQuIERvZXMgc3l6a2FsbGVyIGhhdmUgYSBtb3JlIGdlbmVyYWwgbWVjaGFuaXNtIHRvIGluc3RhbnRpYXRlICphcmJpdHJhcnkqIHBsYXRmb3JtIGRldmljZXM/IElzIHRoZXJlIGEgYnJvYWRlciB3YXkgdG8gZGVmaW5lIGFuZCB0cmlnZ2VyIHRoZSBjcmVhdGlvbiBvZiBhIHBsYXRmb3JtIGRldmljZSB3aXRob3V0IHJlbHlpbmcgb24gdGhlIERldmljZSBUcmVlIG9yIGEgc3BlY2lmaWMgZGV2aWNlLXJlbGF0ZWQgY2FsbD8KCkkgbmVlZCB0byBkaWcgaW50byB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gYW5kIGNvZGUgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgZ2VuZXJhbGl6ZWQgJiMzNDtwbGF0Zm9ybSBkZXZpY2UmIzM0OyBkZXNjcmlwdGlvbiBzb21ld2hlcmUuIFRpbWUgdG8gY2hlY2sgaWYgdGhlcmUmIzM5O3MgYSBzeXprYWxsZXIgZGVzY3JpcHRpb24gZm9yIHBsYXRmb3JtIGRldmljZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6X3BsYXRmb3JtX2RldmljZV9hZGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTY2MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGggRnV6emluZyBEZWNpc2lvbjogWUVTKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGRpdGNoIHRoZSBpZGVhIG9mIHVzaW5nIGBnaXQgZ3JlcGAgZm9yIHNlYXJjaGluZyBzeXprYWxsZXIgcHNldWRvLXN5c2NhbGxzOyBgcmVhZC1maWxlYCBvciBteSBleGlzdGluZyBrbm93bGVkZ2UgaXMgdGhlIHdheSB0byBnby4KClRoaXMgcGF0Y2gsIGl0JiMzOTtzIGdvdCBtZSB0aGlua2luZy4gSXQgdG91Y2hlcyBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AsIHdoaWNoIGlzIGNvcmUgUEhZIGNvZGUuIFRoZSBjaGFuZ2VzIHRoZXJlIGFyZSBzaW1wbGU6IGFkZGluZyBhIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gb24gUEhZIGF0dGFjaC9kZXRhY2gg4oCTIGNoZWNraW5nIGZvciBhIGZ1bmN0aW9uIHBvaW50ZXIgYW5kIGNhbGxpbmcgaXQuIFZlcnkgYmFzaWMuIFRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzIGFyZSBpbiBhIFJlYWx0ZWsgTURJTyBjb250cm9sbGVyIGRyaXZlci4gVGhhdCYjMzk7cyBwbGF0Zm9ybS1zcGVjaWZpYyBhbmQgZm9yIHZlcnkgc3BlY2lmaWMgUmVhbHRlayBoYXJkd2FyZS4gQ2FuIEkgaGl0IHRoYXQgaW4gUUVNVT8gUHJvYmFibHkgbm90IHdpdGhvdXQgc3BlY2lmaWMgcGxhdGZvcm0gaW5zdGFudGlhdGlvbiwgd2hpY2ggc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHVzdWFsbHkgZG8gdW5sZXNzIGl0JiMzOTtzIGV4cGxpY2l0bHkgc2V0IHVwLiBTbywgdGhhdCBSZWFsdGVrIHN0dWZmIGlzIHByb2JhYmx5IGEgZGVhZCBlbmQgZm9yIG1lLgoKQnV0IHRob3NlIGNvcmUgUEhZIGNoYW5nZXM/IFRoZXkmIzM5O3JlIGV4ZWN1dGVkIG9uICpldmVyeSogUEhZIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQuIEV2ZW4gaWYgdGhlIGBub3RpZnlfcGh5X2F0dGFjaGAgaXMgTlVMTCwgdGhhdCBjb2RlIHN0aWxsIHJ1bnMuIFNvIGlmIEkgZnV6eiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAsIEkmIzM5O20gZnV6emluZyB0aGUgY29yZSwgcmVnYXJkbGVzcyBvZiB0aGUgdGFyZ2V0LgoKSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgcHJvbXB0IHNheXMgaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBJIHNob3VsZCB2ZXJpZnkgZXhlY3V0aW9uIGFuZCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4KCkkmIzM5O20gdGhpbmtpbmc6IGlzIHRoZXJlIHNvbWUgb3RoZXIgd2F5IHRvIHJlYWNoIHRoZSBSZWFsdGVrIGNoYW5nZXM/IE5vcGUsIHRoYXQmIzM5O3Mgc3BlY2lmaWMgaGFyZHdhcmUuIEJVVCB0aG9zZSBjb3JlIGNoYW5nZXMgYXJlIGluZGVlZCB0cml2aWFsLCBqdXN0IGEgbnVsbCBjaGVjayBhbmQgYSBmdW5jdGlvbiBjYWxsLiBJdCYjMzk7cyBhIHZlcnkgc2ltcGxlIGJyYW5jaC4gVGhlIHJlYWwgbG9naWMgaXMgaW4gdGhhdCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLCBzbyB0aGF0IHNwZWNpZmljIGNvbnRyb2xsZXIgaXMgbm90IHJlYWNoYWJsZS4gU28gaXQgc2hvdWxkIGJlIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKV2FpdCEgVGhlIHByb21wdCBhbHNvIHNheXM6ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OwoKSSBjYW4gcmVhY2ggdGhpcywgdXNpbmcgYSBVU0IgbmV0d29ya2luZyBnYWRnZXQsIHN1Y2ggYXMgYHNtc2M5NXh4YC4KClNvIGl0IHNlZW1zIGxpa2UgZnV6emluZyBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgaXMgYWN0dWFsbHkgYSBnb29kIHBsYW4uIFRob3NlIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGNvbW1vbiBVU0IgbmV0d29ya2luZyBnYWRnZXRzLiBTbywgbXkgZm9jdXMgc2hvdWxkIGJlIHRob3NlIGZ1bmN0aW9ucy4gT2theSwgc28gSSBzaG91bGQgYmUgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAgYW5kIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4gVGhvc2Ugd2lsbCBleGVjdXRlIGJlY2F1c2Ugb2YgdGhlIFVTQiBuZXR3b3JraW5nIGdhZGdldC4KCkFsc28sIGlzIHRoaXMgY29yZSBwYXRoIGEgaG90LXBhdGg/IE5vdCByZWFsbHksIGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgZGV2aWNlIG9wZW4vaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uIFRoaXMgd2lsbCBiZSBhbiBlZGdlIGNhc2UuCgpPbmUgbGFzdCBjaGVjay4gYF9fcGh5X2RldGFjaGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0ICptaWdodCogYmUgaW5saW5lZC4gQnV0IGl0JiMzOTtzIGNhbGxlZCBieSBgcGh5X2RldGFjaGAgYW5kIGBwaHlfYXR0YWNoX2RpcmVjdGAgKG9uIGVycm9yKS4gTG9va3MgbGlrZSB0aGF0IHdpbGwgbmVlZCB0byBiZSBjaGVja2VkLiBMZXQgbWUgY29uZmlybSwgeWVzLCBgX19waHlfZGV0YWNoYCBpcyBzdGF0aWMuCgpBbHJpZ2h0LCB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIHdoYXQgSSBzaG91bGQgZm9jdXMgb24uIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBpdCBpcy4gQW5kIHllcywgSSBkb3VibGUtY2hlY2tlZDsgYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgYHNtc2M5NXh4YCBkZXZpY2UsIHdoaWNoIGNhbiBiZSBlbXVsYXRlZC4KClNvIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9jb25uZWN0X2RpcmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4NC1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyODU6XHRyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QoZGV2LVx1MDAzZW5ldCwgcGRhdGEtXHUwMDNlcGh5ZGV2LFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4Ni1cdFx0XHRcdCBcdTAwMjZzbXNjOTV4eF9oYW5kbGVfbGlua19jaGFuZ2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3OTQzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgUGh5IEF0dGFjaCBEaXJlY3QqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUgZmxvdywgYHNtc2M5NXh4X2JpbmRgIGRpcmVjdGx5IGNhbGxzIGBwaHlfY29ubmVjdF9kaXJlY3RgLCBhbmQgdGhhdCBmdW5jdGlvbiwgaW4gdHVybiwgY2FsbHMgYHBoeV9hdHRhY2hfZGlyZWN0YC4gVGhhdCBjb25maXJtcyB0aGF0IGBwaHlfYXR0YWNoX2RpcmVjdGAgKmlzKiBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHRoYXQgYmluZGluZyBmdW5jdGlvbi4gR29vZC4gTm93LCB3aGF0IGFib3V0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zPyBUbyBtYWtlIHN1cmUgdGhhdCBgcGh5X2RldmljZS5jYCBpcyBjb21waWxlZCwgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgYENPTkZJR19QSFlMSUJgIGVuYWJsZWQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlYCB0byBjb25maXJtIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9kZXZpY2VcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjQ6bGlicGh5LXlcdFx0XHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS01LVx0XHRcdFx0ICAgbGlua21vZGUubyBwaHlfbGlua190b3BvbG9neS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjY5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmc6CgoqKlBIWSBMaWJyYXJ5IERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IHByb2Nlc3NlZCB0aGF0IGBsaWJwaHkteWAgZ2V0cyBjb25zdHJ1Y3RlZCBvbmx5IHdoZW4gdGhlIGBDT05GSUdfUEhZTElCYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IGltcGxpZXMgdGhhdCB0aGUgUEhZIGxpYnJhcnksIG9yIHNvbWUgY29yZSBwYXJ0IG9mIGl0LCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBUaGlzIHRlbGxzIG1lIHRoYXQgaWYgYENPTkZJR19QSFlMSUJgIGlzbiYjMzk7dCBlbmFibGVkLCB0aGVuIHRoZSBQSFkgZnVuY3Rpb25hbGl0eSBpcyBlaXRoZXIgYWJzZW50IGVudGlyZWx5IGZyb20gdGhlIGtlcm5lbCwgaW1wbGVtZW50ZWQgZGlmZmVyZW50bHksIG9yIGhhbmRsZWQgYnkgYSBzZXBhcmF0ZSBtb2R1bGUuIFRoaXMgaXMgZnVuZGFtZW50YWwgdG8gbXkga25vd2xlZGdlIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uOyBlbmFibGluZyBpdCBlc3NlbnRpYWxseSBpbmNsdWRlcyB0aGUgY29yZSBQSFkgc3VwcG9ydC4gSSBuZWVkIHRvIG5vdyBjb25zaWRlciBob3cgdGhlIFBIWSBsaWJyYXJ5IGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29yayBzdGFjaywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaWJwaHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMtXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NDpsaWJwaHkteVx0XHRcdDo9IHBoeS5vIHBoeS1jNDUubyBwaHktY29yZS5vIHBoeV9kZXZpY2UubyBcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTUtXHRcdFx0XHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTI9ZW5kaWZcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xMy1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNDpsaWJwaHktJChDT05GSUdfU1dQSFkpXHRcdCYjNDM7PSBzd3BoeS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MTU6bGlicGh5LSQoQ09ORklHX0xFRF9UUklHR0VSX1BIWSlcdCYjNDM7PSBwaHlfbGVkX3RyaWdnZXJzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNjpsaWJwaHktJChDT05GSUdfT1BFTl9BTExJQU5DRV9IRUxQRVJTKSAmIzQzOz0gb3Blbl9hbGxpYW5jZV9oZWxwZXJzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xNy1cbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX1BIWUxJTkspXHRcdCYjNDM7PSBwaHlsaW5rLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfUEhZTElCKVx0XHQmIzQzOz0gbGlicGh5Lm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfUEhZTElCKVx0XHQmIzQzOz0gbWRpb19kZXZyZXMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVVNCIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBjb25maWd1cmluZyB0aGlzIG5ldHdvcmsgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgc29ydGVkIG91dC4gRmlyc3QsIEkmIzM5O20gY29uZmlybWluZyB0aGF0IGBDT05GSUdfUEhZTElCYCBpcyBlbmFibGVkOyB0aGF0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LiBUaGVuLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgc21zYzk1eHhgIGRyaXZlciwgSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgYENPTkZJR19VU0JfTkVUX1NNU0M5NVhYYCBpcyBlbmFibGVkLiBUbyBkb3VibGUtY2hlY2sgdGhvc2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfTkVUX1NNU0M5NVhYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzQxPWNvbmZpZyBVU0JfTkVUX1NNU0M3NVhYXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzUwLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzUxOmNvbmZpZyBVU0JfTkVUX1NNU0M5NVhYXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNTItXHR0cmlzdGF0ZSBcJiMzNDtTTVNDIExBTjk1WFggYmFzZWQgVVNCIDIuMCAxMC8xMDAgZXRoZXJuZXQgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTEwNwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGZyYW1lZCBhcyBpZiBJJiMzOTttIHdvcmtpbmcgdGhyb3VnaCBpdCBteXNlbGY6CgoqKk5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24gRGVjaXNpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGJhc2VkIG9uIHRoZSBuZXR3b3JrIHJlcXVpcmVtZW50cywgYFBIWUxJQmAgYW5kIGBVU0JfTkVUX1NNU0M5NVhYYCBhcmUgZGVmaW5pdGVseSBnb29kIGNhbmRpZGF0ZXMgdG8gZW5hYmxlLiBUaG9zZSBjb3ZlciBhIGJyb2FkIHJhbmdlIG9mIFBIWSBhbmQgVVNCIG5ldHdvcmsgYWRhcHRlciBzY2VuYXJpb3MsIHJlc3BlY3RpdmVseS4gSSB0aGluayB0aGF0JiMzOTtzIGEgc29saWQgc3RhcnQuCgpIbW0sIGJ1dCB3YWl0IGEgc2Vjb25kLi4uIGlzbiYjMzk7dCB0aGUgUmVhbHRlayBkcml2ZXIgdXNpbmcgYENPTkZJR19SRUFMVEVLX01ESU9gPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcgY3J1Y2lhbC4gTGV0IG1lIGdvIHB1bGwgdXAgdGhlIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIGZpbGUgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEp1c3QgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgcmVsZXZhbnQgUmVhbHRlay1zcGVjaWZpYyBzZXR0aW5ncywgb3IgYW55IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gdGFrZSBjYXJlIG9mIGFzIHdlbGwuIFRoYXQgUmVhbHRlayBkcml2ZXIgbWlnaHQgYnJpbmcgaW4gb3RoZXIgY29uZmlndXJhdGlvbnMuIEJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTY2PWNvbmZpZyBNRElPX0lQUTgwNjRcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTczLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3NDpjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzUtXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTU0NAoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA5OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgUEhZIENvcmUgYW5kIFJUTDkzMDAgTURJTyBDb250cm9sbGVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYC4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBhbiBSZWFsdGVrIFNvQywgc28gaXQgd29uJiMzOTt0IGJlIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgd2l0aG91dCBhIHNwZWNpZmljIGRldmljZSB0cmVlLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpcyBpbmNsdWRpbmcgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBpbiBgRW5hYmxlQ29uZmlnc2Agd29ydGh3aGlsZT8gWWVzLCBhYnNvbHV0ZWx5LiBJdCYjMzk7cyB0aGUgcHJpbWFyeSB0YXJnZXQgb2YgdGhlIHBhdGNoLCBhbmQgd2hpbGUgaXQgbWlnaHQgbm90IGJlIGRpcmVjdGx5IGZ1enplZCwgaXQgZG9lc24mIzM5O3QgaHVydCB0byBpbmNsdWRlIGl0LgoKVGhlIHByb21wdCBzcGVjaWZpZWQgdGhhdCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyBhcmUgbm90IGxpa2VseSB0byBiZSBlbXVsYXRlZC4gQnV0IHRoaXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBpcyBub3QgYSBQQ0llIGRldmljZTsgaXQmIzM5O3MgYW4gTU1JTyBkZXZpY2UsIGEgc3lzY29uLCBhbiBTb0MgYmxvY2suIFNvIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIG5vdCBhIFBDSWUgZGV2aWNlLCB0aGUgcHJvbXB0IGlzIHN0aWxsIGFwcGxpY2FibGUgaWYgdGhlIGRldmljZSBpcyBub3QgaW5zdGFudGlhdGVkLiAKCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQuIEl0JiMzOTtzIHVubGlrZWx5IHN5emthbGxlciBjYW4gZWFzaWx5IGZ1enogaXQgdW5sZXNzIGl0JiMzOTtzIGluc3RhbnRpYXRlZC4gSG93ZXZlciwgdGhlIGNvcmUgUEhZIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBzbyB0aGF0JiMzOTtzIHRoZSBhbmdsZS4KClRodXMsIEkmIzM5O2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGUgY29yZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBrZXkgZnVuY3Rpb25zOiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIHN5bWJvbHMgYXJlIGV4cG9ydGVkLiBZZXMsIGBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtgIGlzIHVzZWQsIGFuZCBzaW1pbGFybHkgZm9yIGBwaHlfZGV0YWNoYC4KClRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBJZiB0aGUgUmVhbHRlayBkZXZpY2UgKndlcmUqIGluc3RhbnRpYXRlZCBzb21laG93LCB0aGVyZSBhcmUgZnVuY3Rpb25zIGhlcmUgdGhhdCBtaWdodCBiZSBpbnRlcmVzdGluZzogYG90dG9fZW1kaW9fcHJvYmVgLCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaGAsIGFuZCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaGAuIEJ1dCB0aGUgU29DIGJsb2NrIGluc3RhbnRpYXRpb24gaXMgdmVyeSB1bmxpa2VseSwgc28gSSB3aWxsIGZvY3VzIG9uIHRoZSBjb3JlIFBIWSBmdW5jdGlvbnMuCgpJIHJldmlld2VkIHRoZSBjaGFuZ2VzIHRvIGBwaHlfZGV2aWNlLmNgLiBUaGUgcGF0Y2ggcmVmYWN0b3JzIGBwaHlfZGV0YWNoYCB0byBgX19waHlfZGV0YWNoYCBhbmQgYWRkcyBhIGBub3RpZnlfYnVzYCBwYXJhbWV0ZXIuIEl0IGFsc28gY2FsbHMgYG5vdGlmeV9waHlfYXR0YWNoYCB3aXRoaW4gYHBoeV9hdHRhY2hfZGlyZWN0YC4gSWYgYG5vdGlmeV9waHlfYXR0YWNoYCBmYWlscywgaXQgY2FsbHMgYF9fcGh5X2RldGFjaChwaHlkZXYsIGZhbHNlKWAgdG8gcm9sbGJhY2suIFRoaXMgaXMgYSBzbWFsbCBidXQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbS4KCkhvdyBvZnRlbiBpcyBgcGh5X2F0dGFjaF9kaXJlY3RgIGNhbGxlZD8gTm90IG9uIGEgaG90IHBhdGguIEl0JiMzOTtzIGNhbGxlZCB3aGVuIGEgbmV0d29yayBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cCAoYGlwIGxpbmsgc2V0IGV0aDAgdXBgKS4gU2FmZSB0byBmb2N1cyBvbi4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4gYENPTkZJR19QSFlMSUJgIGlzIHRyaXN0YXRlLiBgQ09ORklHX1VTQl9ORVRfU01TQzk1WFhgIGlzIGFsc28gdHJpc3RhdGUuIGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgIGlzIGFsc28gdHJpc3RhdGUuCgpUaGVyZWZvcmUsIGhlcmUgaXMgdGhlIHN0cmF0ZWd5OgoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgCiogICBgRm9jdXNTeW1ib2xzOiBbJiMzNDtwaHlfYXR0YWNoX2RpcmVjdCYjMzQ7LCAmIzM0O3BoeV9kZXRhY2gmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnczogWyYjMzQ7UEhZTElCJiMzNDssICYjMzQ7VVNCX05FVF9TTVNDOTVYWCYjMzQ7LCAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDtdYAoqICAgYFJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBub3RpZnlfcGh5X2F0dGFjaCBhbmQgbm90aWZ5X3BoeV9kZXRhY2ggY2FsbGJhY2tzIHRvIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gYW5kIGltcGxlbWVudHMgdGhlbSBpbiB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gZHJpdmVyLiBUaGUgY29yZSBQSFkgY2hhbmdlcyBpbiBwaHlfYXR0YWNoX2RpcmVjdCBhbmQgcGh5X2RldGFjaCBhcmUgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsL2VtdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyAoZS5nLiwgVVNCIFNNU0M5NXh4KSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgY2FsbGJhY2sgbG9naWMgaXMgcm9idXN0LiYjMzQ7YAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfU01TQzk1WFgmIzM0OywKICAgICYjMzQ7TURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfYXR0YWNoX2RpcmVjdCYjMzQ7LAogICAgJiMzNDtwaHlfZGV0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbm90aWZ5X3BoeV9hdHRhY2ggYW5kIG5vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIGFuZCBpbXBsZW1lbnRzIHRoZW0gaW4gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGRyaXZlci4gVGhlIGNvcmUgUEhZIGNoYW5nZXMgaW4gcGh5X2F0dGFjaF9kaXJlY3QgYW5kIHBoeV9kZXRhY2ggYXJlIHJlYWNoYWJsZSB2aWEgdmlydHVhbC9lbXVsYXRlZCBuZXR3b3JrIGRldmljZXMgKGUuZy4sIFVTQiBTTVNDOTV4eCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGNhbGxiYWNrIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfU01TQzk1WFgmIzM0OywKICAgICYjMzQ7TURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfYXR0YWNoX2RpcmVjdCYjMzQ7LAogICAgJiMzNDtwaHlfZGV0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbm90aWZ5X3BoeV9hdHRhY2ggYW5kIG5vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIGFuZCBpbXBsZW1lbnRzIHRoZW0gaW4gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGRyaXZlci4gVGhlIGNvcmUgUEhZIGNoYW5nZXMgaW4gcGh5X2F0dGFjaF9kaXJlY3QgYW5kIHBoeV9kZXRhY2ggYXJlIHJlYWNoYWJsZSB2aWEgdmlydHVhbC9lbXVsYXRlZCBuZXR3b3JrIGRldmljZXMgKGUuZy4sIFVTQiBTTVNDOTV4eCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGNhbGxiYWNrIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjEzOjM2LjgwODAzMzExM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTYwNDAxNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiVVNCX05FVF9TTVNDOTVYWFwiLFxuICAgIFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfYXR0YWNoX2RpcmVjdFwiLFxuICAgIFwicGh5X2RldGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbm90aWZ5X3BoeV9hdHRhY2ggYW5kIG5vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIGFuZCBpbXBsZW1lbnRzIHRoZW0gaW4gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGRyaXZlci4gVGhlIGNvcmUgUEhZIGNoYW5nZXMgaW4gcGh5X2F0dGFjaF9kaXJlY3QgYW5kIHBoeV9kZXRhY2ggYXJlIHJlYWNoYWJsZSB2aWEgdmlydHVhbC9lbXVsYXRlZCBuZXR3b3JrIGRldmljZXMgKGUuZy4sIFVTQiBTTVNDOTV4eCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGNhbGxiYWNrIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTM6MzYuODA4MDQwMzMzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTcxNDkzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4YmIwZmYwMTM0NDM2YjQ5MGJmMzBlNWRhY2MyZjUyNDg3NzA3MzAyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDAxOjEzOjM2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbmluZGV4IDI3MWUwNWJhZTljNTcuLjY3ZTBiMjNhODQ3MGUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuQEAgLTQsNyArNCw3IEBAXFxuICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjXFxuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbiBcXG4tdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXJcXG4rdGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXJcXG4gXFxuIG1haW50YWluZXJzOlxcbiAgIC0gQ2hyaXMgUGFja2hhbSBcXHUwMDNjY2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56XFx1MDAzZVxcbkBAIC0xMiw2ICsxMiwxNiBAQCBtYWludGFpbmVyczpcXG4gcHJvcGVydGllczpcXG4gICBjb21wYXRpYmxlOlxcbiAgICAgb25lT2Y6XFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW9cXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvXFxuICAgICAgIC0gaXRlbXM6XFxuICAgICAgICAgICAtIGVudW06XFxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW9cXG5AQCAtMjQsNiArMzQsOCBAQCBwcm9wZXJ0aWVzOlxcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW9cXG4gICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsOTMxMS1tZGlvXFxuICAgICAgIC0gZW51bTpcXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xcbmluZGV4IGFmZDUyYTFjZDdmODMuLmQ5ZDRiNzA0YWZiM2QgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuQEAgLTM1LDEyICszNSw4OCBAQFxcbiAgKlxcbiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvblxcbiAgKiB0aGUgZXRoZXJuZXQtcG9ydHMgcHJvcGVydHkuXFxuKyAqXFxuKyAqIFRoZSBkZXZpY2VzIGhhdmUgYSBoYXJkd2FyZSBwb2xsaW5nIHVuaXQgdGhhdCBydW5zIGluIHRoZSBiYWNrZ3JvdW5kIHdpdGhvdXQgYW55IENQVSBsb2FkLiBJdFxcbisgKiBjb25zdGFudGx5IHNjYW5zIHRoZSBNRElPIGJ1cyBhbmQgdGhlIGF0dGFjaGVkIFBIWXMgYW5kIHVwZGF0ZXMgdGhlIE1BQyBzdGF0dXMgcmVnaXN0ZXJzLlxcbisgKlxcbisgKiBIb3cgZG9lcyB0aGUgcG9sbGluZyB3b3JrP1xcbisgKlxcbisgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZlxcbisgKiB0aGUgYXNzb2NpYXRlZCBidXMvYWRkcmVzcyBpcyBhY3RpdmUgb3Igbm90LiBUaGUgaGFyZHdhcmUgcnVucyBhIHRpZ2h0IGxvb3Agb3ZlciB0aGlzIGFuZCBmb3JcXG4rICogZWFjaCBzZXQgcG9sbGluZyBiaXQgaXQgaXNzdWVzIGEgc3RhdHVzIGNoZWNrIGZvciB0aGUgUEhZLiBBdHRhY2hpbmcgYSBsb2dpYyBhbmFseXplciB0byB0aGVcXG4rICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOlxcbisgKlxcbisgKlxcdFJUTDgzODBcXHRcXHRcXHRcXHRSVEw4MzkzXFxuKyAqXFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMzEsIDB4MCk7XFx0cGh5X3JlYWQocGh5LCAwKTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcXHRwaHlfcmVhZChwaHksIDEpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcXHRwaHlfcmVhZChwaHksIDQpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1xcdHBoeV9yZWFkKHBoeSwgNSk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxNCk7XFx0XFx0cGh5X3JlYWQocGh5LCA2KTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcXHRwaHlfcmVhZChwaHksIDkpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcXHRwaHlfcmVhZChwaHksIDEwKTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcXHRwaHlfcmVhZChwaHksIDE1KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDE0KTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDkpO1xcdFxcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDEwKTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDE1KTtcXHRcXHRwaHlfcmVhZChwaHksIDE0KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDApO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMSk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgNCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA1KTtcXHRcXHRwaHlfcmVhZChwaHksIDE0KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDYpO1xcbisgKlxcbisgKiBBZnRlciBvbmUgUEhZIHN0YXR1cyBpcyByZWFkLCB0aGUgcG9sbGluZyBlbmdpbmUgZ29lcyBvdmVyIHRvIHRoZSBuZXh0IFBIWS4gSWYgb25lIGJ1cyBpcyBmdWxseVxcbisgKiBzY2FubmVkIGl0IHN3aXRjaGVzIG92ZXIgdG8gdGhlIG5leHQgYnVzLiBCYXNpY2FsbHkgdGhlIHBvbGxpbmcgc3lzdGVtIGlzIGFsd2F5cyBidXN5IGFuZCB0aGVcXG4rICogTUFDIHN0YXRlIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLlxcbisgKlxcbisgKiBUaGlzIGlzIGEgZ2xpbXBzZSBsb29rIGF0IHRoZSBjb21wbGV4aXR5IG9mIHRoZSBwb2xsaW5nIGFuZCBsZWF2ZXMgb3V0IHRoZSBDNDUgY2FzZSBhbmQgdGhlIE1BQ1xcbisgKiByZWdpc3RlciB1cGRhdGUgbG9naWMgYWZ0ZXJ3YXJkcy4gSW1wb3J0YW50IHRvIG5vdGU6XFxuKyAqXFxuKyAqIC0gMTAwIE1CaXQgZG93bnNoaWZ0cyAoYnJva2VuIGNhYmxlcykgYXJlIGlkZW50aWZpZWQgYW5kIHByb3BhZ2F0ZWQgdG8gdGhlIE1BQyBjb3JyZWN0bHlcXG4rICogLSBBY2Nlc3MgdG8gTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgd29ya3MgdmlhIEM0NSBvdmVyIEMyMi5cXG4rICogLSBJdCBpcyB1bmNsZWFyIGlmIHRoZXNlIHNlcXVlbmNlcyBjaGFuZ2UgZm9yIGRpZmZlcmVudCBQSFlzLlxcbisgKiAtIEFjY2VzcyB0byBSZWFsdGVrIHJlc2VydmVkIHJlZ2lzdGVyIDI2IChsaW5rIHNwZWVkKSBoYXMgbm90IHlldCBiZWVuIHNlZW4uXFxuKyAqXFxuKyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/XFxuKyAqXFxuKyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXJcXG4rICogc2V0cyBhIFxcXCJydW4gY29tbWFuZCBub3dcXFwiIGJpdC4gQmV0d2VlbiB0d28gcG9sbGluZyBzZXF1ZW5jZXMgZm9yIGRpZmZlcmVudCBQSFlzIHRoZSBoYXJkd2FyZVxcbisgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlc1xcbisgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHdyaXRlIG9uIHRoZSBsb2dpYyBhbmFseXplciBnaXZlczpcXG4rICpcXG4rICpcXHRSVEw4MzgwXFx0XFx0XFx0XFx0UlRMODM5M1xcbisgKlxcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKlxcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcXHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XFx0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XFxuKyAqXFx0XFx0XFx0XFx0XFx0cGh5X3dyaXRlKHBoeSwgMzEsIDApO1xcbisgKlxcbisgKiBXaGF0IGRvZXMgdGhpcyBtZWFuP1xcbisgKlxcbisgKiBUaGVyZSBhcmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIHBvbGxpbmcgYW5kIFBIWSBhY2Nlc3MgYmV0d2VlbiB0aGUgbW9kZWxzIGJ1dCB0aGUgY2hhbGxlbmdlXFxuKyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXRcXG4rICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uXFxuKyAqXFxuKyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay5cXG4rICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy5cXG4rICogLSBUaGUgUmVhbHRlayBwYWdlIHJlZ2lzdGVyIDMxIGlzIG1hZ2ljYWxseSBtb2RpZmllZCBpbiB0aGUgYmFja2dyb3VuZCBzbyB0aGF0IHBvbGxpbmcgd2lsbFxcbisgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW1cXG4rICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgXFxcIm1hZ2ljYWxseVxcXCIgaW4gdGhlIGJhY2tncm91bmQuXFxuKyAqIC0gQSBDNDUgb3ZlciBDMjIga2VybmVsIGFjY2VzcyBzZXF1ZW5jZSBpcyBtb3N0IGxpa2VseSB0byBmYWlsIGJlY2F1c2UgY2hhbmNlcyBhcmUgaGlnaCB0aGF0XFxuKyAqICAgdGhlIHBvbGxpbmcgZW5naW5lIG92ZXJ3cml0ZXMgcmVnaXN0ZXJzIDEzLzE0IGluIGJldHdlZW4uXFxuKyAqIC0gUEhZIGZpcm13YXJlIGxvYWRpbmcgY2FuIGhhdmUgaXNzdWVzLiBFc3BlY2lhbGx5IGlmIGEgUEhZIGlzIGRlc2lnbmVkIHRvIGV4cGVjdCBhIGNsZWFuXFxuKyAqICAgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgd2l0aG91dCBkZXZpYXRpb24uXFxuKyAqIC0gQW4gYWNjZXNzIHRvIG9uZSBQSFkgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyZWUgc2xvdCBvZiB0aGUgcG9sbGluZyBlbmdpbmUuXFxuKyAqXFxuKyAqIENvbmNsdXNpb246IFRoZSBSZWFsdGVrIE1ESU8gYnVzIGRyaXZlciBQSFkgYWNjZXNzIG11c3Qga25vdyBhbmQgaGFuZGxlIGFueSBpbnRlcmZlcmVuY2UgdGhhdFxcbisgKiBhcmlzZXMgZnJvbSB0aGUgYWJvdmUgZGVzY3JpYmVkIGhhcmR3YXJlIHBvbGxpbmcuXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbmQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tyZWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuQEAgLTUwLDYgKzEyNiw1MCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbiBcXG4rI2RlZmluZSBSVEw4MzgwX05VTV9CVVNFU1xcdFxcdFxcdDFcXG4rI2RlZmluZSBSVEw4MzgwX05VTV9QQUdFU1xcdFxcdFxcdDQwOTZcXG4rI2RlZmluZSBSVEw4MzgwX05VTV9QT1JUU1xcdFxcdFxcdDI4XFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfR0xCX0NUUkxcXHRcXHRcXHQweGExMDBcXG4rI2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FXFx0XFx0QklUKDE1KVxcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXFx0XFx0MHhhMWI4XFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcXHRcXHQweGExYmNcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFJcXHRcXHRHRU5NQVNLKDI0LCAyMClcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFXFx0XFx0R0VOTUFTSygxOSwgMTUpXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRVxcdFxcdEdFTk1BU0soMTQsIDMpXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQURcXHRcXHRcXHQwXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1XFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyXFx0XFx0MFxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9GQUlMXFx0XFx0XFx0MCAvKiBubyBmYWlsIGluZGljYXRvciAqL1xcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yXFx0XFx0MHhhMWMwXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMzEsIDE2KVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1xcdFxcdDB4YTFjNFxcbisjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTFxcdFxcdFxcdDB4YTE3Y1xcbisjZGVmaW5lIFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMXFx0XFx0MHhhMWM4XFxuK1xcbisjZGVmaW5lIFJUTDgzOTBfTlVNX0JVU0VTXFx0XFx0XFx0MlxcbisjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTXFx0XFx0XFx0ODE5MlxcbisjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTXFx0XFx0XFx0NTJcXG4rI2RlZmluZSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkxcXHRcXHQweDAzZWNcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTFxcdFxcdDB4MDNkY1xcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUlxcdFxcdEdFTk1BU0soOSwgNSlcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFXFx0XFx0R0VOTUFTSygyMiwgMTApXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUxcXHRcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfV1JJVEVcXHRcXHRCSVQoMylcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRFxcdFxcdFxcdDBcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDVcXHRcXHRCSVQoMilcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjJcXHRcXHQwXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQ1RSTFxcdFxcdFxcdDB4MDNlMFxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRVxcdFxcdEdFTk1BU0soOCwgMClcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkxcXHRcXHQweDAzZjBcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygzMSwgMTYpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEFcXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMXFx0XFx0XFx0MHgwM2Y0XFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPV1xcdFxcdDB4MDNlNFxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdIXFx0XFx0MHgwM2U4XFxuKyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcXHRcXHQweDAzZmNcXG4rXFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcXHRcXHRcXHQ0XFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVNcXHRcXHRcXHQ0MDk2XFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFNcXHRcXHRcXHQyOFxcbkBAIC03MCw2ICsxOTAsNyBAQFxcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEFcXHRcXHRHRU5NQVNLKDMxLCAxNilcXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcXHRcXHQweGNiN2NcXG4rI2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkxcXHRcXHRcXHQweGNhOTBcXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFxcdFxcdDB4Y2I4MFxcbiBcXG4gI2RlZmluZSBSVEw5MzEwX05VTV9CVVNFU1xcdFxcdFxcdDRcXG5AQCAtOTUsMTIgKzIxNiwxNiBAQFxcbiAjZGVmaW5lICAgUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEFcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19NTURfQ1RSTFxcdDB4MGMxOFxcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfQUREUl9DVFJMXFx0XFx0MHgwYzc0XFxuKyNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcXHRcXHQweDBjY2NcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfU0VMXFx0XFx0MHgwYzljXFxuIFxcbiAjZGVmaW5lIFBIWV9DVFJMX0NNRFxcdFxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9ERVZBRFxcdFxcdFxcdEdFTk1BU0soMjAsIDE2KVxcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUdcXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbiBcXG4rI2RlZmluZSBSVExfVkVORE9SX0lEXFx0XFx0XFx0XFx0MHgwMDFjYzgwMFxcbisjZGVmaW5lIFJUTF9QQUdFX1NFTEVDVFxcdFxcdFxcdFxcdDMxXFxuK1xcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXFx0XFx0XFx0NlxcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSXFx0XFx0XFx0NVxcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9CVVNcXHRcXHRcXHQyXFxuQEAgLTEyMyw5ICsyNDgsMTEgQEAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3Mge1xcbiBcXG4gc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87XFxuK1xcdHN0cnVjdCBrcmVmIGtyZWY7XFxuIFxcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcXG4gXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3QgSFcgYWNjZXNzICovXFxuIFxcdERFQ0xBUkVfQklUTUFQKHZhbGlkX3BvcnRzLCBNQVhfUE9SVFMpO1xcbitcXHR1MTYgcGFnZVtNQVhfUE9SVFNdO1xcbiBcXHR1OCBzbWlfYnVzW01BWF9QT1JUU107XFxuIFxcdHU4IHNtaV9hZGRyW01BWF9QT1JUU107XFxuIFxcdGJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdO1xcbkBAIC0xNDIsNiArMjY5LDcgQEAgc3RydWN0IG90dG9fZW1kaW9faW5mbyB7XFxuIFxcdHU4IG51bV9idXNlcztcXG4gXFx0dTggbnVtX3BvcnRzO1xcbiBcXHR1MTYgbnVtX3BhZ2VzO1xcbitcXHR1MzIgcG9sbF9jdHJsO1xcbiBcXHRpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTtcXG4gXFx0aW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcXG4gXFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xcbkBAIC0xNzcsNiArMzA1LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpXFxuIFxcdHJldHVybiBjaGFuLVxcdTAwM2Vwcml2O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCBpbnQgcG9ydCwgYm9vbCBhY3RpdmUpXFxuK3tcXG4rXFx0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXBvbGxfY3RybCArIChwb3J0IC8gMzIpICogNCxcXG4rXFx0XFx0XFx0XFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxcbiB7XFxuQEAgLTE4NSw5ICszMTksOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbiBcXHR1MzIgY21kc3RhdGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqL1xcbitcXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xcbiBcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlcmVnbWFwLCBpbmZvLVxcdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjI3LDcgKzM2MSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlcmVnbWFwLCBpbmZvLVxcdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjY0LDEzICszOTgsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9IEJJVChwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFxcdTAwMjZjbWRfZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jNDVfZGF0YVxcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gQklUKHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmV4dF9wYWdlXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbitcXHRcXHQuZXh0X3BhZ2VcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbitcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmM0NV9kYXRhXFx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoXFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFxcdTAwM2VcXHUwMDNlIDMyKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuIHtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuIFxcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4gXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXFxuIFxcdH07XFxuIFxcbkBAIC0yODQsNyArNTI4LDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbiBcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4tXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuIFxcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXFxuIFxcdFxcdC5wb3J0X21hc2tfbG93XFx0PSBCSVQocG9ydCksXFxuIFxcdH07XFxuQEAgLTMyNCw3ICs1NjgsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdVxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmJyb2FkY2FzdFxcdD0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLFxcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHR9O1xcbiBcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuQEAgLTMzNiw3ICs1ODAsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuQEAgLTM4Miw4ICs2MjYsMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXFxuIFxcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKVxcbitcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcGFnZVtwb3J0XTtcXG4rXFxuIFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcXHUwMDI2dmFsdWUpO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XFxuIH1cXG5AQCAtMzk3LDggKzY0NSwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNlxcbiBcXHRpZiAocG9ydCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBwb3J0O1xcbiBcXG4tXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaylcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRpZiAocmVnbnVtID09IFJUTF9QQUdFX1NFTEVDVCkge1xcbitcXHRcXHRcXHRpZiAodmFsdWUgXFx1MDAzZT0gUkFXX1BBR0UocHJpdikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlcGFnZVtwb3J0XSA9IHZhbHVlO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNld3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtNDcxLDYgKzcyOCwxNSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZ1xcbitcXHQgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiB7XFxuIFxcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcXG5AQCAtNTA3LDYgKzc3Myw1OSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGNoYW4tXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAocG9ydCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBwb3J0O1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVxcdTAwM2VtZGlvX2J1c10gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LVxcdTAwM2VwaHlfaWQsIFJUTF9WRU5ET1JfSUQpKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiT25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyk7XFxuK1xcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogYXZvaWQgd3JvbmcgY2FjaGVkIHBhZ2UgZm9yIG5leHQgYXR0YWNobWVudCAqL1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXNtaV9idXNfaXNfYzQ1W2NoYW4tXFx1MDAzZW1kaW9fYnVzXSlcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcGFnZVtwb3J0XSA9IDA7XFxuK1xcbitcXHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZXJyKGJ1cy1cXHUwMDNlcGFyZW50LCBcXFwiZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcXFxuXFxcIiwgcG9ydCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fY2xlYW51cF9jb250cm9sbGVyKHN0cnVjdCBrcmVmICprcmVmKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiwga3JlZik7XFxuK1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0a2ZyZWUocHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fY2xlYW51cF9idXModm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gZGF0YTtcXG4rXFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZwcml2LVxcdTAwM2VrcmVmLCBvdHRvX2VtZGlvX2NsZWFudXBfY29udHJvbGxlcik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXFxuIHtcXG5AQCAtNTM2LDEyICs4NTUsMjAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcXG4gXFx0XFx0YnVzLVxcdTAwM2V3cml0ZSA9IG90dG9fZW1kaW9fd3JpdGVfYzIyO1xcbiBcXHR9XFxuIFxcdGJ1cy1cXHUwMDNlcGFyZW50ID0gZGV2O1xcbitcXHRidXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcXG4rXFx0YnVzLVxcdTAwM2Vub3RpZnlfcGh5X2RldGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2g7XFxuK1xcbiBcXHRjaGFuID0gYnVzLVxcdTAwM2Vwcml2O1xcbiBcXHRjaGFuLVxcdTAwM2VtZGlvX2J1cyA9IG1kaW9fYnVzO1xcbiBcXHRjaGFuLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4gXFxuIFxcdHNucHJpbnRmKGJ1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcIiVzLSVkXFxcIiwgZGV2X25hbWUoZGV2KSwgbWRpb19idXMpO1xcbiBcXG4rXFx0a3JlZl9nZXQoXFx1MDAyNnByaXYtXFx1MDAzZWtyZWYpO1xcbitcXHRlcnIgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2LCBvdHRvX2VtZGlvX2NsZWFudXBfYnVzLCBwcml2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFxcXCJjYW5ub3QgcmVnaXN0ZXIgY2xlYW51cCBhY3Rpb25cXFxcblxcXCIpO1xcbitcXG4gXFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCB0b19vZl9ub2RlKG5vZGUpKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFxcXCJjYW5ub3QgcmVnaXN0ZXIgTURJTyBidXNcXFxcblxcXCIpO1xcbkBAIC02NTIsNTAgKzk3OSwxMjIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXFx1MDAzYyBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fcG9ydHM7IHBvcnQrKykge1xcbitcXHRcXHRlcnIgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdjtcXG4rXFx0aW50IGJ1c2VzX3JlZ2lzdGVyZWQgPSAwO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRwcml2ID0ga3phbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0ZXJyID0gZGV2bV9tdXRleF9pbml0KGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRrcmVmX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZWtyZWYpO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdHByaXYtXFx1MDAzZWluZm8gPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcXG4gXFx0cHJpdi1cXHUwMDNlcmVnbWFwID0gc3lzY29uX25vZGVfdG9fcmVnbWFwKGRldi1cXHUwMDNlcGFyZW50LVxcdTAwM2VvZl9ub2RlKTtcXG4tXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZWdtYXApKVxcbi1cXHRcXHRyZXR1cm4gUFRSX0VSUihwcml2LVxcdTAwM2VyZWdtYXApO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXJlZ21hcCkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihwcml2LVxcdTAwM2VyZWdtYXApO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTtcXG4gXFxuIFxcdGVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdGVyciA9IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3kocHJpdik7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdGlmIChwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VzZXR1cF9jb250cm9sbGVyKSB7XFxuIFxcdFxcdGVyciA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXNldHVwX2NvbnRyb2xsZXIocHJpdik7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcXFwiZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFxcXCJmYWlsZWQgdG8gc2V0dXAgTURJTyBidXMgY29udHJvbGxlclxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRkZXZpY2VfZm9yX2VhY2hfY2hpbGRfbm9kZV9zY29wZWQoZGV2LCBjaGlsZCkge1xcbiBcXHRcXHRlcnIgPSBvdHRvX2VtZGlvX3Byb2JlX29uZShkZXYsIHByaXYsIGNoaWxkKTtcXG4gXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHRcXHRidXNlc19yZWdpc3RlcmVkKys7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRpZiAoIWJ1c2VzX3JlZ2lzdGVyZWQpXFxuK1xcdFxcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLCBcXFwibm8gTURJTyBidXNlcyByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rZXJyX291dDpcXG4rXFx0a3JlZl9wdXQoXFx1MDAyNnByaXYtXFx1MDAzZWtyZWYsIG90dG9fZW1kaW9fY2xlYW51cF9jb250cm9sbGVyKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0ge1xcbitcXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxcbitcXHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXFxuK1xcdC5jbWRfcmVhZCA9IFJUTDgzODBfUEhZX0NUUkxfUkVBRCxcXG4rXFx0LmNtZF93cml0ZSA9IFJUTDgzODBfUEhZX0NUUkxfV1JJVEUsXFxuK1xcdC5jbWRfcmVncyA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsXFxuK1xcdFxcdC5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLFxcbitcXHRcXHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLFxcbitcXHR9LFxcbitcXHQubnVtX2J1c2VzID0gUlRMODM4MF9OVU1fQlVTRVMsXFxuK1xcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcXG4rXFx0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMODM4MF9TTUlfUE9MTF9DVFJMLFxcbitcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxcbitcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXFxuK1xcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NSxcXG4rXFx0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXFxuK1xcdC53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7XFxuK1xcdC5jbWRfZmFpbCA9IFJUTDgzOTBfUEhZX0NUUkxfRkFJTCxcXG4rXFx0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxcbitcXHQuY21kX3dyaXRlID0gUlRMODM5MF9QSFlfQ1RSTF9XUklURSxcXG4rXFx0LmNtZF9yZWdzID0ge1xcbitcXHRcXHQuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLFxcbitcXHRcXHQuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCxcXG4rXFx0XFx0LmM0NV9kYXRhID0gUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwsXFxuK1xcdFxcdC5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsXFxuK1xcdFxcdC5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1csXFxuK1xcdFxcdC5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILFxcbitcXHR9LFxcbitcXHQubnVtX2J1c2VzID0gUlRMODM5MF9OVU1fQlVTRVMsXFxuK1xcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcXG4rXFx0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXFxuK1xcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMixcXG4rXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxcbitcXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMixcXG4rXFx0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcXG4gXFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcXG4gXFx0LmJ1c19tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMLFxcbkBAIC03MTEsNiArMTExMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xcbiBcXHQubnVtX2J1c2VzID0gUlRMOTMwMF9OVU1fQlVTRVMsXFxuIFxcdC5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUyxcXG4gXFx0Lm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLFxcbiBcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLFxcbiBcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXFxuIFxcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSxcXG5AQCAtNzM2LDYgKzExMzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcXG4gXFx0Lm51bV9idXNlcyA9IFJUTDkzMTBfTlVNX0JVU0VTLFxcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXFxuIFxcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcXG4rXFx0LnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxcbiBcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLFxcbiBcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXFxuIFxcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSxcXG5AQCAtNzQ0LDYgKzExNDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw4MzgwLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzgzODBfaW5mbyB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscnRsODM5MS1tZGlvXFxcIiwgLmRhdGEgPSBcXHUwMDI2b3R0b19lbWRpb184MzkwX2luZm8gfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDkzMDEtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fOTMwMF9pbmZvIH0sXFxuIFxcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw5MzExLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LFxcbiBcXHR7fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDk0YjJlODVlMDBhMzcuLjIzMzYyMmU5YmE2MWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG5AQCAtMTczNCw2ICsxNzM0LDk2IEBAIHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuIFxcdHJldHVybiBwaHlkcnYtXFx1MDAzZWNvbmZpZ19pbnRyIFxcdTAwMjZcXHUwMDI2IHBoeWRydi1cXHUwMDNlaGFuZGxlX2ludGVycnVwdDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgX19waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgbm90aWZ5X2J1cylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXY7XFxuK1xcdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlZGV2bGluaykge1xcbitcXHRcXHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVxcdTAwM2VkZXZsaW5rKTtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VkZXZsaW5rID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlc3lzZnNfbGlua3MpIHtcXG4rXFx0XFx0aWYgKGRldilcXG4rXFx0XFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNmRldi1cXHUwMDNlZGV2LmtvYmosIFxcXCJwaHlkZXZcXFwiKTtcXG4rXFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYua29iaiwgXFxcImF0dGFjaGVkX2RldlxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2KVxcbitcXHRcXHRzeXNmc19yZW1vdmVfZmlsZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5rb2JqLFxcbitcXHRcXHRcXHRcXHQgIFxcdTAwMjZkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTtcXG4rXFxuK1xcdHBoeV9zdXNwZW5kKHBoeWRldik7XFxuK1xcbitcXHRpZiAobm90aWZ5X2J1cyBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2RldGFjaClcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gocGh5ZGV2KTtcXG4rXFxuK1xcdGlmIChkZXYpIHtcXG4rXFx0XFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XFxuK1xcbitcXHRcXHQvKiBod3Byb3YgbWF5IHRlY2huaWNhbGx5IGJlIHByb3RlY3RlZCBieSBvcHMgbG9jayBidXRcXG4rXFx0XFx0ICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aHdwcm92ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtXFx1MDAzZWh3cHJvdik7XFxuK1xcdFxcdC8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi9cXG4rXFx0XFx0aWYgKGh3cHJvdiBcXHUwMDI2XFx1MDAyNiBod3Byb3YtXFx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcXG4rXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cXHUwMDNlaHdwcm92LCBOVUxMKTtcXG4rXFx0XFx0XFx0a2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2Rldi1cXHUwMDNlcGh5ZGV2ID0gTlVMTDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xcbitcXHRcXHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XFxuK1xcdHBoeWRldi1cXHUwMDNlcGh5bGluayA9IE5VTEw7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5kcml2ZXIpXFxuK1xcdFxcdG1vZHVsZV9wdXQocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5kcml2ZXItXFx1MDAzZW93bmVyKTtcXG4rXFxuK1xcdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxcbitcXHQgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2VcXG4rXFx0ICogZnJvbSB0aGUgZ2VuZXJpYyBkcml2ZXIgc28gdGhhdCB0aGVyZSdzIGEgY2hhbmNlIGFcXG4rXFx0ICogcmVhbCBkcml2ZXIgY291bGQgYmUgbG9hZGVkXFxuK1xcdCAqL1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XFxuK1xcdFxcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXFxuK1xcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxcbitcXHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cXG4rXFx0ICovXFxuK1xcdGJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuK1xcbitcXHRwdXRfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4rXFx0aWYgKGRldilcXG4rXFx0XFx0bmRldl9vd25lciA9IGRldi1cXHUwMDNlZGV2LnBhcmVudC1cXHUwMDNlZHJpdmVyLVxcdTAwM2Vvd25lcjtcXG4rXFx0aWYgKG5kZXZfb3duZXIgIT0gYnVzLVxcdTAwM2Vvd25lcilcXG4rXFx0XFx0bW9kdWxlX3B1dChidXMtXFx1MDAzZW93bmVyKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHBoeV9kZXRhY2ggLSBkZXRhY2ggYSBQSFkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBUaGlzIGRldGFjaGVzIHRoZSBwaHkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcGh5XFxuKyAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS5cXG4rICovXFxuK3ZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdC8qIGNsZWFudXAgaW5jbHVkaW5nIGJ1cyBub3RpZmljYXRpb24gKi9cXG4rXFx0X19waHlfZGV0YWNoKHBoeWRldiwgdHJ1ZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcXG4rXFxuIC8qKlxcbiAgKiBwaHlfYXR0YWNoX2RpcmVjdCAtIGF0dGFjaCBhIG5ldHdvcmsgZGV2aWNlIHRvIGEgZ2l2ZW4gUEhZIGRldmljZSBwb2ludGVyXFxuICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxcbkBAIC0xODc2LDYgKzE5NjYsMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcXG4rXFx0XFx0ZXJyID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFx0fVxcbitcXG4gXFx0cGh5X3Jlc3VtZShwaHlkZXYpO1xcbiBcXG4gXFx0LyoqXFxuQEAgLTE4OTAsOCArMTk4Niw4IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiBcXHRyZXR1cm4gZXJyO1xcbiBcXG4gZXJyb3I6XFxuLVxcdC8qIHBoeV9kZXRhY2goKSBkb2VzIGFsbCBvZiB0aGUgY2xlYW51cCBiZWxvdyAqL1xcbi1cXHRwaHlfZGV0YWNoKHBoeWRldik7XFxuK1xcdC8qIGNsZWFudXAgd2l0aG91dCBidXMgbm90aWZpY2F0aW9uICovXFxuK1xcdF9fcGh5X2RldGFjaChwaHlkZXYsIGZhbHNlKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gXFxuIGVycm9yX21vZHVsZV9wdXQ6XFxuQEAgLTE5MDYsODYgKzIwMDIsNiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcXG4gXFxuLS8qKlxcbi0gKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxcbi0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tICpcXG4tICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxcbi0gKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXFxuLSAqL1xcbi12b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4te1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXY7XFxuLVxcdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbi1cXG4tXFx0aWYgKHBoeWRldi1cXHUwMDNlZGV2bGluaykge1xcbi1cXHRcXHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVxcdTAwM2VkZXZsaW5rKTtcXG4tXFx0XFx0cGh5ZGV2LVxcdTAwM2VkZXZsaW5rID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHBoeWRldi1cXHUwMDNlc3lzZnNfbGlua3MpIHtcXG4tXFx0XFx0aWYgKGRldilcXG4tXFx0XFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNmRldi1cXHUwMDNlZGV2LmtvYmosIFxcXCJwaHlkZXZcXFwiKTtcXG4tXFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYua29iaiwgXFxcImF0dGFjaGVkX2RldlxcXCIpO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIXBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2KVxcbi1cXHRcXHRzeXNmc19yZW1vdmVfZmlsZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5rb2JqLFxcbi1cXHRcXHRcXHRcXHQgIFxcdTAwMjZkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTtcXG4tXFxuLVxcdHBoeV9zdXNwZW5kKHBoeWRldik7XFxuLVxcdGlmIChkZXYpIHtcXG4tXFx0XFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XFxuLVxcbi1cXHRcXHQvKiBod3Byb3YgbWF5IHRlY2huaWNhbGx5IGJlIHByb3RlY3RlZCBieSBvcHMgbG9jayBidXRcXG4tXFx0XFx0ICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKVxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aHdwcm92ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtXFx1MDAzZWh3cHJvdik7XFxuLVxcdFxcdC8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi9cXG4tXFx0XFx0aWYgKGh3cHJvdiBcXHUwMDI2XFx1MDAyNiBod3Byb3YtXFx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcXG4tXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cXHUwMDNlaHdwcm92LCBOVUxMKTtcXG4tXFx0XFx0XFx0a2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2Rldi1cXHUwMDNlcGh5ZGV2ID0gTlVMTDtcXG4tXFx0XFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xcbi1cXHRcXHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xcbi1cXHR9XFxuLVxcbi1cXHRwaHlkZXYtXFx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XFxuLVxcdHBoeWRldi1cXHUwMDNlcGh5bGluayA9IE5VTEw7XFxuLVxcbi1cXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5kcml2ZXIpXFxuLVxcdFxcdG1vZHVsZV9wdXQocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5kcml2ZXItXFx1MDAzZW93bmVyKTtcXG4tXFxuLVxcdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxcbi1cXHQgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2VcXG4tXFx0ICogZnJvbSB0aGUgZ2VuZXJpYyBkcml2ZXIgc28gdGhhdCB0aGVyZSdzIGEgY2hhbmNlIGFcXG4tXFx0ICogcmVhbCBkcml2ZXIgY291bGQgYmUgbG9hZGVkXFxuLVxcdCAqL1xcbi1cXHRpZiAocGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XFxuLVxcdFxcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuLVxcdFxcdHBoeWRldi1cXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXFxuLVxcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxcbi1cXHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cXG4tXFx0ICovXFxuLVxcdGJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuLVxcbi1cXHRwdXRfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4tXFx0aWYgKGRldilcXG4tXFx0XFx0bmRldl9vd25lciA9IGRldi1cXHUwMDNlZGV2LnBhcmVudC1cXHUwMDNlZHJpdmVyLVxcdTAwM2Vvd25lcjtcXG4tXFx0aWYgKG5kZXZfb3duZXIgIT0gYnVzLVxcdTAwM2Vvd25lcilcXG4tXFx0XFx0bW9kdWxlX3B1dChidXMtXFx1MDAzZW93bmVyKTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xcbi1cXG4gaW50IHBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDExMDkyYzMxNzViM2QuLmZlZjBjNmEzZTI3ZmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMzc2LDYgKzM3NiwyNCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XFxuIFxcdFxcdFxcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKTtcXG4gXFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cXG4gXFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xcbitcXHQvKipcXG4rXFx0ICogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nIGZvciBNRElPIGJ1c1xcbitcXHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfZGV0YWNoLiBDYWxsZWRcXG4rXFx0ICogaW4gcGh5X2F0dGFjaF9kaXJlY3QoKSByaWdodCBiZWZvcmUgcGh5X3Jlc3VtZSgpLiBSdW5zIGluIHByb2Nlc3NcXG4rXFx0ICogY29udGV4dCwgbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdFxcbitcXHQgKiBhY3F1aXJlIG9yIHJlbHkgb24gUlROTC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJybm9cXG4rXFx0ICogb24gZmFpbHVyZS4gTXVzdCB1bndpbmQgaXRzIG93biBzdGF0ZSBvbiBlcnJvciBhcyBhdHRhY2htZW50IGlzXFxuK1xcdCAqIGFib3J0ZWQuXFxuK1xcdCAqL1xcbitcXHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuK1xcdC8qKlxcbitcXHQgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcXG4rXFx0ICogZHJpdmVycy4gT3B0aW9uYWwgYW5kIGluZGVwZW5kZW50IG9mIEBub3RpZnlfcGh5X2F0dGFjaC4gQ2FsbGVkXFxuK1xcdCAqIGluIHBoeV9kZXRhY2goKSByaWdodCBhZnRlciBwaHlfc3VzcGVuZCgpLiBSdW5zIGluIHByb2Nlc3MgY29udGV4dCxcXG4rXFx0ICogbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdCBhY3F1aXJlIG9yXFxuK1xcdCAqIHJlbHkgb24gUlROTC5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIFxcbiBcXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXFxuIFxcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxMzozNy4xMjU5MDc3MzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4OTI0MjUxOTMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlVTQl9ORVRfU01TQzk1WFhcIixcbiAgICBcIk1ESU9fUkVBTFRFS19SVEw5MzAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5X2F0dGFjaF9kaXJlY3RcIixcbiAgICBcInBoeV9kZXRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoIGFuZCBub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBhbmQgaW1wbGVtZW50cyB0aGVtIGluIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIuIFRoZSBjb3JlIFBIWSBjaGFuZ2VzIGluIHBoeV9hdHRhY2hfZGlyZWN0IGFuZCBwaHlfZGV0YWNoIGFyZSByZWFjaGFibGUgdmlhIHZpcnR1YWwvZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzIChlLmcuLCBVU0IgU01TQzk1eHgpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBjYWxsYmFjayBsb2dpYyBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhiYjBmZjAxMzQ0MzZiNDkwYmYzMGU1ZGFjYzJmNTI0ODc3MDczMDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMToxMzozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuaW5kZXggMjcxZTA1YmFlOWM1Ny4uNjdlMGIyM2E4NDcwZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5AQCAtNCw3ICs0LDcgQEBcbiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sI1xuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuIFxuLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyXG4rdGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXJcbiBcbiBtYWludGFpbmVyczpcbiAgIC0gQ2hyaXMgUGFja2hhbSBcdTAwM2NjaHJpcy5wYWNraGFtQGFsbGllZHRlbGVzaXMuY28ubnpcdTAwM2VcbkBAIC0xMiw2ICsxMiwxNiBAQCBtYWludGFpbmVyczpcbiBwcm9wZXJ0aWVzOlxuICAgY29tcGF0aWJsZTpcbiAgICAgb25lT2Y6XG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODItbWRpb1xuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzODAtbWRpb1xuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAtIGl0ZW1zOlxuICAgICAgICAgICAtIGVudW06XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMmItbWRpb1xuQEAgLTI0LDYgKzM0LDggQEAgcHJvcGVydGllczpcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW9cbiAgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw5MzExLW1kaW9cbiAgICAgICAtIGVudW06XG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cbisgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbmluZGV4IGFmZDUyYTFjZDdmODMuLmQ5ZDRiNzA0YWZiM2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuQEAgLTM1LDEyICszNSw4OCBAQFxuICAqXG4gICogVGhlIGRyaXZlciB3b3JrcyBvdXQgdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIE1ESU8gYnVzIGRlc2NyaWJlZCBpbiBkZXZpY2UgdHJlZSBhbmQgcGhhbmRsZXMgb25cbiAgKiB0aGUgZXRoZXJuZXQtcG9ydHMgcHJvcGVydHkuXG4rICpcbisgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXRcbisgKiBjb25zdGFudGx5IHNjYW5zIHRoZSBNRElPIGJ1cyBhbmQgdGhlIGF0dGFjaGVkIFBIWXMgYW5kIHVwZGF0ZXMgdGhlIE1BQyBzdGF0dXMgcmVnaXN0ZXJzLlxuKyAqXG4rICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz9cbisgKlxuKyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mXG4rICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yXG4rICogZWFjaCBzZXQgcG9sbGluZyBiaXQgaXQgaXNzdWVzIGEgc3RhdHVzIGNoZWNrIGZvciB0aGUgUEhZLiBBdHRhY2hpbmcgYSBsb2dpYyBhbmFseXplciB0byB0aGVcbisgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6XG4rICpcbisgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuKyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTtcdHBoeV9yZWFkKHBoeSwgMCk7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1x0cGh5X3JlYWQocGh5LCAxKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1x0cGh5X3JlYWQocGh5LCA0KTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDUpO1xuKyAqXHRwaHlfcmVhZChwaHksIDE0KTtcdFx0cGh5X3JlYWQocGh5LCA2KTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDkpO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XHRwaHlfcmVhZChwaHksIDEwKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDE1KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xuKyAqXHRwaHlfcmVhZChwaHksIDkpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuKyAqXHRwaHlfcmVhZChwaHksIDApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1xuKyAqXHRwaHlfcmVhZChwaHksIDQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbisgKlx0cGh5X3JlYWQocGh5LCA1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4rICpcdHBoeV9yZWFkKHBoeSwgNik7XG4rICpcbisgKiBBZnRlciBvbmUgUEhZIHN0YXR1cyBpcyByZWFkLCB0aGUgcG9sbGluZyBlbmdpbmUgZ29lcyBvdmVyIHRvIHRoZSBuZXh0IFBIWS4gSWYgb25lIGJ1cyBpcyBmdWxseVxuKyAqIHNjYW5uZWQgaXQgc3dpdGNoZXMgb3ZlciB0byB0aGUgbmV4dCBidXMuIEJhc2ljYWxseSB0aGUgcG9sbGluZyBzeXN0ZW0gaXMgYWx3YXlzIGJ1c3kgYW5kIHRoZVxuKyAqIE1BQyBzdGF0ZSBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS5cbisgKlxuKyAqIFRoaXMgaXMgYSBnbGltcHNlIGxvb2sgYXQgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHBvbGxpbmcgYW5kIGxlYXZlcyBvdXQgdGhlIEM0NSBjYXNlIGFuZCB0aGUgTUFDXG4rICogcmVnaXN0ZXIgdXBkYXRlIGxvZ2ljIGFmdGVyd2FyZHMuIEltcG9ydGFudCB0byBub3RlOlxuKyAqXG4rICogLSAxMDAgTUJpdCBkb3duc2hpZnRzIChicm9rZW4gY2FibGVzKSBhcmUgaWRlbnRpZmllZCBhbmQgcHJvcGFnYXRlZCB0byB0aGUgTUFDIGNvcnJlY3RseVxuKyAqIC0gQWNjZXNzIHRvIE1ESU9fQU5fRUVFX0FEViBhbmQgTURJT19BTl9FRUVfTFBBQkxFIHdvcmtzIHZpYSBDNDUgb3ZlciBDMjIuXG4rICogLSBJdCBpcyB1bmNsZWFyIGlmIHRoZXNlIHNlcXVlbmNlcyBjaGFuZ2UgZm9yIGRpZmZlcmVudCBQSFlzLlxuKyAqIC0gQWNjZXNzIHRvIFJlYWx0ZWsgcmVzZXJ2ZWQgcmVnaXN0ZXIgMjYgKGxpbmsgc3BlZWQpIGhhcyBub3QgeWV0IGJlZW4gc2Vlbi5cbisgKlxuKyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/XG4rICpcbisgKiBXaGVuIGlzc3VpbmcgTURJTyBhY2Nlc3NlcyB2aWEgYW4gTU1JTyBiYXNlZCBpbnRlcmZhY2UgdGhlIGZpbmFsIHdyaXRlIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyXG4rICogc2V0cyBhIFwicnVuIGNvbW1hbmQgbm93XCIgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXG4rICogY2hlY2tzIGlmIGEgdXNlciBjb21tYW5kIG5lZWRzIHRvIHJ1biBhbmQgc2VuZHMgaXQgb250byB0aGUgYnVzLiBBZnRlcndhcmRzIGl0IHNpbXBseSBjb250aW51ZXNcbisgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHdyaXRlIG9uIHRoZSBsb2dpYyBhbmFseXplciBnaXZlczpcbisgKlxuKyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4rICpcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICpcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcbisgKlx0XHRcdFx0XHRwaHlfd3JpdGUocGh5LCAzMSwgMCk7XG4rICpcbisgKiBXaGF0IGRvZXMgdGhpcyBtZWFuP1xuKyAqXG4rICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZVxuKyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXRcbisgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS5cbisgKlxuKyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay5cbisgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLlxuKyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGxcbisgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW1cbisgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyBcIm1hZ2ljYWxseVwiIGluIHRoZSBiYWNrZ3JvdW5kLlxuKyAqIC0gQSBDNDUgb3ZlciBDMjIga2VybmVsIGFjY2VzcyBzZXF1ZW5jZSBpcyBtb3N0IGxpa2VseSB0byBmYWlsIGJlY2F1c2UgY2hhbmNlcyBhcmUgaGlnaCB0aGF0XG4rICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi5cbisgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhblxuKyAqICAgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgd2l0aG91dCBkZXZpYXRpb24uXG4rICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS5cbisgKlxuKyAqIENvbmNsdXNpb246IFRoZSBSZWFsdGVrIE1ESU8gYnVzIGRyaXZlciBQSFkgYWNjZXNzIG11c3Qga25vdyBhbmQgaGFuZGxlIGFueSBpbnRlcmZlcmVuY2UgdGhhdFxuKyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maW5kLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG5AQCAtNTAsNiArMTI2LDUwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4gXG4rI2RlZmluZSBSVEw4MzgwX05VTV9CVVNFU1x0XHRcdDFcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFNcdFx0XHQyOFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfR0xCX0NUUkxcdFx0XHQweGExMDBcbisjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcdFx0QklUKDE1KVxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzBcdFx0MHhhMWI4XG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMVx0XHQweGExYmNcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDI0LCAyMClcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0VcdFx0R0VOTUFTSygxOSwgMTUpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMTQsIDMpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDIpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVBRFx0XHRcdDBcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMSlcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTFx0XHRcdDAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi9cbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yXHRcdDB4YTFjMFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXHRcdDB4YTFjNFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhhMTdjXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFx0XHQweGExYzhcbitcbisjZGVmaW5lIFJUTDgzOTBfTlVNX0JVU0VTXHRcdFx0MlxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUEFHRVNcdFx0XHQ4MTkyXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QT1JUU1x0XHRcdDUyXG4rI2RlZmluZSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkxcdFx0MHgwM2VjXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTFx0XHQweDAzZGNcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDksIDUpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMjIsIDEwKVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUxcdFx0XHRCSVQoMSlcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURVx0XHRCSVQoMylcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgyKVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyXHRcdDBcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcdFx0XHQweDAzZTBcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRVx0XHRHRU5NQVNLKDgsIDApXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkxcdFx0MHgwM2YwXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkxcdFx0XHQweDAzZjRcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcdFx0MHgwM2U0XG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSFx0XHQweDAzZThcbisjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MDNmY1xuK1xuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXHRcdFx0MjhcbkBAIC03MCw2ICsxOTAsNyBAQFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXHRcdDB4Y2I3Y1xuKyNkZWZpbmUgUlRMOTMwMF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhjYTkwXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFx0XHQweGNiODBcbiBcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTXHRcdFx0NFxuQEAgLTk1LDEyICsyMTYsMTYgQEBcbiAjZGVmaW5lICAgUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19NTURfQ1RSTFx0MHgwYzE4XG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFx0XHQweDBjNzRcbisjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MGNjY1xuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTFx0XHQweDBjOWNcbiBcbiAjZGVmaW5lIFBIWV9DVFJMX0NNRFx0XHRcdFx0QklUKDApXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQURcdFx0XHRHRU5NQVNLKDIwLCAxNilcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUdcdFx0XHRHRU5NQVNLKDE1LCAwKVxuIFxuKyNkZWZpbmUgUlRMX1ZFTkRPUl9JRFx0XHRcdFx0MHgwMDFjYzgwMFxuKyNkZWZpbmUgUlRMX1BBR0VfU0VMRUNUXHRcdFx0XHQzMVxuK1xuICNkZWZpbmUgTUFQX0FERFJTX1BFUl9SRUdcdFx0XHQ2XG4gI2RlZmluZSBNQVBfQklUU19QRVJfQUREUlx0XHRcdDVcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9CVVNcdFx0XHQyXG5AQCAtMTIzLDkgKzI0OCwxMSBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyB7XG4gXG4gc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XG4gXHRjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvICppbmZvO1xuK1x0c3RydWN0IGtyZWYga3JlZjtcbiBcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiBcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xuIFx0REVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7XG4rXHR1MTYgcGFnZVtNQVhfUE9SVFNdO1xuIFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xuIFx0dTggc21pX2FkZHJbTUFYX1BPUlRTXTtcbiBcdGJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdO1xuQEAgLTE0Miw2ICsyNjksNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcbiBcdHU4IG51bV9idXNlcztcbiBcdHU4IG51bV9wb3J0cztcbiBcdHUxNiBudW1fcGFnZXM7XG4rXHR1MzIgcG9sbF9jdHJsO1xuIFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XG4gXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuIFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuQEAgLTE3Nyw2ICszMDUsMTIgQEAgc3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcbiBcdHJldHVybiBjaGFuLVx1MDAzZXByaXY7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcbit7XG4rXHRyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBwcml2LVx1MDAzZWluZm8tXHUwMDNlcG9sbF9jdHJsICsgKHBvcnQgLyAzMikgKiA0LFxuK1x0XHRcdFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpXG4ge1xuQEAgLTE4NSw5ICszMTksOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0dTMyIGNtZHN0YXRlO1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmxlIHdyb25nICovXG4rXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4rXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyNyw3ICszNjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4rXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTI2NCwxMyArMzk4LDEyMyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRyZXR1cm4gb3R0b19lbWRpb19ydW5fY21kKGJ1cywgY21kIHwgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4rXHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuK1x0XHRcdFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5leHRfcGFnZVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuK1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuK1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiB7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuIFx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4gXHR9O1xuIFxuQEAgLTI4NCw3ICs1MjgsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbiBcdH07XG5AQCAtMzI0LDcgKzU2OCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmJyb2FkY2FzdFx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfQkNfUE9SVF9JRCwgcG9ydCksXG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHR9O1xuIFxuIFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbkBAIC0zMzYsNyArNTgwLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuQEAgLTM4Miw4ICs2MjYsMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdGlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKVxuK1x0XHRcdHJldHVybiBwcml2LVx1MDAzZXBhZ2VbcG9ydF07XG4rXG4gXHRcdHJldCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2VyZWFkX2MyMihidXMsIHBvcnQsIHJlZ251bSwgXHUwMDI2dmFsdWUpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHJldCA/IHJldCA6IHZhbHVlO1xuIH1cbkBAIC0zOTcsOCArNjQ1LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2XG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdGlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKSB7XG4rXHRcdFx0aWYgKHZhbHVlIFx1MDAzZT0gUkFXX1BBR0UocHJpdikpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSB2YWx1ZTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNld3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XG4rXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00NzEsNiArNzI4LDE1IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbit7XG4rXHQvKlxuK1x0ICogUEhZX1BBVENIX0RPTkUgZW5hYmxlcyBQSFkgY29udHJvbCB2aWEgU29DLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBQSFkgYWNjZXNzLCBpbmNsdWRpbmdcbitcdCAqIHBhdGNoaW5nIGFuZCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIFBIWXMgYXJlIHByb2JlZC5cbitcdCAqL1xuK1x0cmV0dXJuIHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIHtcbiBcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcbkBAIC01MDcsNiArNzczLDU5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBjaGFuLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAocG9ydCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHBvcnQ7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlc21pX2J1c19pc19jNDVbY2hhbi1cdTAwM2VtZGlvX2J1c10gXHUwMDI2XHUwMDI2XG4rXHQgICAgIXBoeV9pZF9jb21wYXJlX3ZlbmRvcihwaHlkZXYtXHUwMDNlcGh5X2lkLCBSVExfVkVORE9SX0lEKSkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgdHJ1ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtXHUwMDNlbWRpby5idXMpO1xuK1x0aW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwb3J0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBhdm9pZCB3cm9uZyBjYWNoZWQgcGFnZSBmb3IgbmV4dCBhdHRhY2htZW50ICovXG4rXHRpZiAoIXByaXYtXHUwMDNlc21pX2J1c19pc19jNDVbY2hhbi1cdTAwM2VtZGlvX2J1c10pXG4rXHRcdHByaXYtXHUwMDNlcGFnZVtwb3J0XSA9IDA7XG4rXG4rXHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuK1x0aWYgKHJldClcbitcdFx0ZGV2X2VycihidXMtXHUwMDNlcGFyZW50LCBcImZhaWxlZCB0byBkaXNhYmxlIHBvbGxpbmcgZm9yIHBvcnQgJWRcXG5cIiwgcG9ydCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fY2xlYW51cF9jb250cm9sbGVyKHN0cnVjdCBrcmVmICprcmVmKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiwga3JlZik7XG4rXG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXHRrZnJlZShwcml2KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R0b19lbWRpb19jbGVhbnVwX2J1cyh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBkYXRhO1xuK1xuK1x0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCBvdHRvX2VtZGlvX2NsZWFudXBfY29udHJvbGxlcik7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuIFx0XHRcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxuIHtcbkBAIC01MzYsMTIgKzg1NSwyMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFx0XHRidXMtXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcbiBcdH1cbiBcdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4rXHRidXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoO1xuK1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbitcbiBcdGNoYW4gPSBidXMtXHUwMDNlcHJpdjtcbiBcdGNoYW4tXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcbiBcdGNoYW4tXHUwMDNlcHJpdiA9IHByaXY7XG4gXG4gXHRzbnByaW50ZihidXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCIlcy0lZFwiLCBkZXZfbmFtZShkZXYpLCBtZGlvX2J1cyk7XG4gXG4rXHRrcmVmX2dldChcdTAwMjZwcml2LVx1MDAzZWtyZWYpO1xuK1x0ZXJyID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KFx1MDAyNmJ1cy1cdTAwM2VkZXYsIG90dG9fZW1kaW9fY2xlYW51cF9idXMsIHByaXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwiY2Fubm90IHJlZ2lzdGVyIGNsZWFudXAgYWN0aW9uXFxuXCIpO1xuK1xuIFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCB0b19vZl9ub2RlKG5vZGUpKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcImNhbm5vdCByZWdpc3RlciBNRElPIGJ1c1xcblwiKTtcbkBAIC02NTIsNTAgKzk3OSwxMjIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBwcml2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3BvcnRzOyBwb3J0KyspIHtcbitcdFx0ZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdjtcbitcdGludCBidXNlc19yZWdpc3RlcmVkID0gMDtcbiBcdGludCBlcnI7XG4gXG4tXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRwcml2ID0ga3phbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0a3JlZl9pbml0KFx1MDAyNnByaXYtXHUwMDNla3JlZik7XG4rXHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4gXG4gXHRwcml2LVx1MDAzZWluZm8gPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcbiBcdHByaXYtXHUwMDNlcmVnbWFwID0gc3lzY29uX25vZGVfdG9fcmVnbWFwKGRldi1cdTAwM2VwYXJlbnQtXHUwMDNlb2Zfbm9kZSk7XG4tXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcmVnbWFwKSlcbi1cdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VyZWdtYXApO1xuK1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpIHtcbitcdFx0ZXJyID0gUFRSX0VSUihwcml2LVx1MDAzZXJlZ21hcCk7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfb3V0O1xuIFxuIFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XG4gXG4gXHRlcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBlcnJfb3V0O1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShwcml2KTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdGlmIChwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcikge1xuIFx0XHRlcnIgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcihwcml2KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCJmYWlsZWQgdG8gc2V0dXAgTURJTyBidXMgY29udHJvbGxlclxcblwiKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwiZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcXG5cIik7XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRkZXZpY2VfZm9yX2VhY2hfY2hpbGRfbm9kZV9zY29wZWQoZGV2LCBjaGlsZCkge1xuIFx0XHRlcnIgPSBvdHRvX2VtZGlvX3Byb2JlX29uZShkZXYsIHByaXYsIGNoaWxkKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbitcdFx0YnVzZXNfcmVnaXN0ZXJlZCsrO1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4rXHRpZiAoIWJ1c2VzX3JlZ2lzdGVyZWQpXG4rXHRcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLCBcIm5vIE1ESU8gYnVzZXMgcmVnaXN0ZXJlZFxcblwiKTtcbitlcnJfb3V0OlxuK1x0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCBvdHRvX2VtZGlvX2NsZWFudXBfY29udHJvbGxlcik7XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcbitcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4rXHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXG4rXHQuY21kX3JlYWQgPSBSVEw4MzgwX1BIWV9DVFJMX1JFQUQsXG4rXHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcbitcdC5jbWRfcmVncyA9IHtcbitcdFx0LmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsXG4rXHRcdC5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLFxuK1x0XHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxuK1x0XHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLFxuK1x0fSxcbitcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcbitcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcbitcdC5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4rXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLFxuK1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXG4rXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NSxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0ge1xuK1x0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxuK1x0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxuK1x0LmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsXG4rXHQuY21kX3JlZ3MgPSB7XG4rXHRcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXG4rXHRcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxuK1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcbitcdFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcbitcdFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXG4rXHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcbitcdFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXG4rXHR9LFxuK1x0Lm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLFxuK1x0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuK1x0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuK1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG4rXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSxcbit9O1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiBcdC5idXNfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTCxcbkBAIC03MTEsNiArMTExMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0Lm51bV9idXNlcyA9IFJUTDkzMDBfTlVNX0JVU0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxuIFx0Lm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXG5AQCAtNzM2LDYgKzExMzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzEwX05VTV9CVVNFUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsXG5AQCAtNzQ0LDYgKzExNDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDgzOTEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM5MF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDkzMDEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMwMF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDkzMTEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXG4gXHR7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCA5NGIyZTg1ZTAwYTM3Li4yMzM2MjJlOWJhNjFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE3MzQsNiArMTczNCw5NiBAQCBzdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuIFx0cmV0dXJuIHBoeWRydi1cdTAwM2Vjb25maWdfaW50ciBcdTAwMjZcdTAwMjYgcGh5ZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIF9fcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIG5vdGlmeV9idXMpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXY7XG4rXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcbitcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWRldmxpbmspIHtcbitcdFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cdTAwM2VkZXZsaW5rKTtcbitcdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuK1x0fVxuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VzeXNmc19saW5rcykge1xuK1x0XHRpZiAoZGV2KVxuK1x0XHRcdHN5c2ZzX3JlbW92ZV9saW5rKFx1MDAyNmRldi1cdTAwM2VkZXYua29iaiwgXCJwaHlkZXZcIik7XG4rXHRcdHN5c2ZzX3JlbW92ZV9saW5rKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldi5rb2JqLCBcImF0dGFjaGVkX2RldlwiKTtcbitcdH1cbitcbitcdGlmICghcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldilcbitcdFx0c3lzZnNfcmVtb3ZlX2ZpbGUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosXG4rXHRcdFx0XHQgIFx1MDAyNmRldl9hdHRyX3BoeV9zdGFuZGFsb25lLmF0dHIpO1xuK1xuK1x0cGh5X3N1c3BlbmQocGh5ZGV2KTtcbitcbitcdGlmIChub3RpZnlfYnVzIFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gpXG4rXHRcdHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xuK1xuK1x0aWYgKGRldikge1xuK1x0XHRzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXIgKmh3cHJvdjtcbitcbitcdFx0LyogaHdwcm92IG1heSB0ZWNobmljYWxseSBiZSBwcm90ZWN0ZWQgYnkgb3BzIGxvY2sgYnV0XG4rXHRcdCAqIG5vdCBmb3IgZGV2aWNlcyB3aXRoIGEgcGh5ZGV2LCBzZWUgcGh5X2xpbmtfdG9wb19hZGRfcGh5KClcbitcdFx0ICovXG4rXHRcdGh3cHJvdiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZWh3cHJvdik7XG4rXHRcdC8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi9cbitcdFx0aWYgKGh3cHJvdiBcdTAwMjZcdTAwMjYgaHdwcm92LVx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcbitcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZWh3cHJvdiwgTlVMTCk7XG4rXHRcdFx0a2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpO1xuK1x0XHR9XG4rXG4rXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYtXHUwMDNlcGh5ZGV2ID0gTlVMTDtcbitcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiA9IE5VTEw7XG4rXHRcdHBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7XG4rXHR9XG4rXG4rXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gTlVMTDtcbitcdHBoeWRldi1cdTAwM2VwaHlsaW5rID0gTlVMTDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZHJpdmVyKVxuK1x0XHRtb2R1bGVfcHV0KHBoeWRldi1cdTAwM2VtZGlvLmRldi5kcml2ZXItXHUwMDNlb3duZXIpO1xuK1xuK1x0LyogSWYgdGhlIGRldmljZSBoYWQgbm8gc3BlY2lmaWMgZHJpdmVyIGJlZm9yZSAoaS5lLiAtIGl0XG4rXHQgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2VcbitcdCAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUncyBhIGNoYW5jZSBhXG4rXHQgKiByZWFsIGRyaXZlciBjb3VsZCBiZSBsb2FkZWRcbitcdCAqL1xuK1x0aWYgKHBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XG4rXHRcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuK1x0XHRwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XG4rXHR9XG4rXG4rXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuK1x0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuK1xuK1x0LypcbitcdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxuK1x0ICogYSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgcmVhZGluZyB0aGUgdW5kZXJseWluZyBidXMgZmlyc3QuXG4rXHQgKi9cbitcdGJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbitcbitcdHB1dF9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbitcdGlmIChkZXYpXG4rXHRcdG5kZXZfb3duZXIgPSBkZXYtXHUwMDNlZGV2LnBhcmVudC1cdTAwM2Vkcml2ZXItXHUwMDNlb3duZXI7XG4rXHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4rXHRcdG1vZHVsZV9wdXQoYnVzLVx1MDAzZW93bmVyKTtcbit9XG4rXG4rLyoqXG4rICogcGh5X2RldGFjaCAtIGRldGFjaCBhIFBIWSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2VcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIFRoaXMgZGV0YWNoZXMgdGhlIHBoeSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UgYW5kIHRoZSBwaHlcbisgKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXG4rICovXG4rdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0LyogY2xlYW51cCBpbmNsdWRpbmcgYnVzIG5vdGlmaWNhdGlvbiAqL1xuK1x0X19waHlfZGV0YWNoKHBoeWRldiwgdHJ1ZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGh5X2RldGFjaCk7XG4rXG4gLyoqXG4gICogcGh5X2F0dGFjaF9kaXJlY3QgLSBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBhIGdpdmVuIFBIWSBkZXZpY2UgcG9pbnRlclxuICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxuQEAgLTE4NzYsNiArMTk2NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3I7XG4gXG4rXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKSB7XG4rXHRcdGVyciA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXHR9XG4rXG4gXHRwaHlfcmVzdW1lKHBoeWRldik7XG4gXG4gXHQvKipcbkBAIC0xODkwLDggKzE5ODYsOCBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdHJldHVybiBlcnI7XG4gXG4gZXJyb3I6XG4tXHQvKiBwaHlfZGV0YWNoKCkgZG9lcyBhbGwgb2YgdGhlIGNsZWFudXAgYmVsb3cgKi9cbi1cdHBoeV9kZXRhY2gocGh5ZGV2KTtcbitcdC8qIGNsZWFudXAgd2l0aG91dCBidXMgbm90aWZpY2F0aW9uICovXG4rXHRfX3BoeV9kZXRhY2gocGh5ZGV2LCBmYWxzZSk7XG4gXHRyZXR1cm4gZXJyO1xuIFxuIGVycm9yX21vZHVsZV9wdXQ6XG5AQCAtMTkwNiw4NiArMjAwMiw2IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIH1cbiBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcbiBcbi0vKipcbi0gKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxuLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuLSAqXG4tICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxuLSAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS5cbi0gKi9cbi12b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldjtcbi1cdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xuLVx0c3RydWN0IG1paV9idXMgKmJ1cztcbi1cbi1cdGlmIChwaHlkZXYtXHUwMDNlZGV2bGluaykge1xuLVx0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuLVx0XHRwaHlkZXYtXHUwMDNlZGV2bGluayA9IE5VTEw7XG4tXHR9XG4tXG4tXHRpZiAocGh5ZGV2LVx1MDAzZXN5c2ZzX2xpbmtzKSB7XG4tXHRcdGlmIChkZXYpXG4tXHRcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2ZGV2LVx1MDAzZWRldi5rb2JqLCBcInBoeWRldlwiKTtcbi1cdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosIFwiYXR0YWNoZWRfZGV2XCIpO1xuLVx0fVxuLVxuLVx0aWYgKCFwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2KVxuLVx0XHRzeXNmc19yZW1vdmVfZmlsZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYua29iaixcbi1cdFx0XHRcdCAgXHUwMDI2ZGV2X2F0dHJfcGh5X3N0YW5kYWxvbmUuYXR0cik7XG4tXG4tXHRwaHlfc3VzcGVuZChwaHlkZXYpO1xuLVx0aWYgKGRldikge1xuLVx0XHRzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXIgKmh3cHJvdjtcbi1cbi1cdFx0LyogaHdwcm92IG1heSB0ZWNobmljYWxseSBiZSBwcm90ZWN0ZWQgYnkgb3BzIGxvY2sgYnV0XG4tXHRcdCAqIG5vdCBmb3IgZGV2aWNlcyB3aXRoIGEgcGh5ZGV2LCBzZWUgcGh5X2xpbmtfdG9wb19hZGRfcGh5KClcbi1cdFx0ICovXG4tXHRcdGh3cHJvdiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZWh3cHJvdik7XG4tXHRcdC8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi9cbi1cdFx0aWYgKGh3cHJvdiBcdTAwMjZcdTAwMjYgaHdwcm92LVx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcbi1cdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZWh3cHJvdiwgTlVMTCk7XG4tXHRcdFx0a2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpO1xuLVx0XHR9XG4tXG4tXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYtXHUwMDNlcGh5ZGV2ID0gTlVMTDtcbi1cdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiA9IE5VTEw7XG4tXHRcdHBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7XG4tXHR9XG4tXG4tXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gTlVMTDtcbi1cdHBoeWRldi1cdTAwM2VwaHlsaW5rID0gTlVMTDtcbi1cbi1cdGlmIChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZHJpdmVyKVxuLVx0XHRtb2R1bGVfcHV0KHBoeWRldi1cdTAwM2VtZGlvLmRldi5kcml2ZXItXHUwMDNlb3duZXIpO1xuLVxuLVx0LyogSWYgdGhlIGRldmljZSBoYWQgbm8gc3BlY2lmaWMgZHJpdmVyIGJlZm9yZSAoaS5lLiAtIGl0XG4tXHQgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2Vcbi1cdCAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUncyBhIGNoYW5jZSBhXG4tXHQgKiByZWFsIGRyaXZlciBjb3VsZCBiZSBsb2FkZWRcbi1cdCAqL1xuLVx0aWYgKHBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XG4tXHRcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuLVx0XHRwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XG4tXHR9XG4tXG4tXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuLVx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuLVx0Lypcbi1cdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxuLVx0ICogYSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgcmVhZGluZyB0aGUgdW5kZXJseWluZyBidXMgZmlyc3QuXG4tXHQgKi9cbi1cdGJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbi1cbi1cdHB1dF9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbi1cdGlmIChkZXYpXG4tXHRcdG5kZXZfb3duZXIgPSBkZXYtXHUwMDNlZGV2LnBhcmVudC1cdTAwM2Vkcml2ZXItXHUwMDNlb3duZXI7XG4tXHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4tXHRcdG1vZHVsZV9wdXQoYnVzLVx1MDAzZW93bmVyKTtcbi19XG4tRVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcbi1cbiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggMTEwOTJjMzE3NWIzZC4uZmVmMGM2YTNlMjdmZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0zNzYsNiArMzc2LDI0IEBAIHN0cnVjdCBtaWlfYnVzIHtcbiBcdFx0XHQgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4gXHQvKiogQHJlc2V0OiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGJ1cyAqL1xuIFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xuK1x0LyoqXG4rXHQgKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzXG4rXHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfZGV0YWNoLiBDYWxsZWRcbitcdCAqIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkgcmlnaHQgYmVmb3JlIHBoeV9yZXN1bWUoKS4gUnVucyBpbiBwcm9jZXNzXG4rXHQgKiBjb250ZXh0LCBtYXkgc2xlZXAgYW5kIG1heSBiZSBjYWxsZWQgd2l0aCBSVE5MIGhlbGQuIE11c3Qgbm90XG4rXHQgKiBhY3F1aXJlIG9yIHJlbHkgb24gUlROTC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJybm9cbitcdCAqIG9uIGZhaWx1cmUuIE11c3QgdW53aW5kIGl0cyBvd24gc3RhdGUgb24gZXJyb3IgYXMgYXR0YWNobWVudCBpc1xuK1x0ICogYWJvcnRlZC5cbitcdCAqL1xuK1x0aW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuK1x0LyoqXG4rXHQgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcbitcdCAqIGRyaXZlcnMuIE9wdGlvbmFsIGFuZCBpbmRlcGVuZGVudCBvZiBAbm90aWZ5X3BoeV9hdHRhY2guIENhbGxlZFxuK1x0ICogaW4gcGh5X2RldGFjaCgpIHJpZ2h0IGFmdGVyIHBoeV9zdXNwZW5kKCkuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0LFxuK1x0ICogbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdCBhY3F1aXJlIG9yXG4rXHQgKiByZWx5IG9uIFJUTkwuXG4rXHQgKi9cbitcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4gXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXG4gXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjEzOjM3LjEyNTkwOTA0OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNjA1MzY0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogUmVhbHRlayBPdHRvIFN3aXRjaCBNRElPIENvbnRyb2xsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBzdXBwb3J0IGZvciBSZWFsdGVrIE90dG8gU3dpdGNoZXMsIHNwZWNpZmljYWxseSB0aGUgUlRMODM4MCBhbmQgUlRMODM5MCBmYW1pbGllcywgYW5kIGl0J3MgbW9kaWZ5aW5nIHRoZSBQSFkgY29yZSB0byBhZGQgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGBtaWlfYnVzYCBzdHJ1Y3QuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBzb21ldGhpbmcgd29ydGggdGhyb3dpbmcgZnV6emluZyBhdD9cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLiBgcGh5X2RldmljZS5jYCwgdGhhdCdzIGNvcmUgbmV0d29ya2luZyBjb2RlLCB0aGUgUEhZIHN1YnN5c3RlbSBpdHNlbGYuIFRoZSBjaGFuZ2VzIGluIGBwaHlfZGV2aWNlLmNgIGFkZCB0aGUgY2FsbGJhY2tzIHRvIGBtaWlfYnVzYCBhbmQgY2FsbCB0aGVtIGR1cmluZyBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIEltbWVkaWF0ZWx5LCB0aG9zZSBmdW5jdGlvbnMgc2VlbSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgdGhpbmsgZHVtbXkgbmV0IGRldmljZXMsIHZldGggaW50ZXJmYWNlcywgYW55IGVtdWxhdGVkIE5JQyB0aGF0IHVzZXMgUEhZcy4gQW5kIHRoZW4gaXQgaGl0cyBtZTogYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyBjYWxsZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGF0dGFjaGVzIHRvIGEgUEhZLlxuXG5Db3VsZCBzeXprYWxsZXIgcmVhY2ggdGhhdD8gQWJzb2x1dGVseS4gSXQgY2FuIGNyZWF0ZSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcywgdXNpbmcgbmV0bGluaywgdHVuL3RhcCwgb3IgZHVtbXksIGFuZCBzb21lIG9mIHRob3NlIGNvdWxkIHZlcnkgd2VsbCBhdHRhY2ggUEhZcy4gT3IsIGl0IGNhbiBpbnRlcmFjdCB3aXRoIE1ESU8gYnVzZXMuIFRoZSBrZXkgcGFydHMgYXJlIGNoYW5nZXMgbWFkZSB0byBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIExvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCB0aGUgY29yZSBjaGFuZ2VzIHRoYXQgYXJlIG1hZGUsIHNwZWNpZmljYWxseTpcblxuYGBgY1xuK3N0YXRpYyB2b2lkIF9fcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIG5vdGlmeV9idXMpXG4uLi5cbitcdGlmIChub3RpZnlfYnVzIFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gpXG4rXHRcdHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xuLi4uXG5gYGBcbkFuZCBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgOlxuYGBgY1xuK1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuK1x0XHRlcnIgPSBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycm9yO1xuK1x0fVxuYGBgXG5cblRoaXMgKmlzKiBjb3JlIGF0dGFjaG1lbnQvZGV0YWNobWVudCBsb2dpYywgc28geWVzLCB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQncyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byB0aGUgd2F5IFBIWXMgYXJlIGhhbmRsZWQuXG5cbldoYXQgYWJvdXQgdGhlIE1ESU8gZHJpdmVyIChgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2ApPyBNRElPIGRyaXZlcnMgYXJlIHVzdWFsbHkgcGxhdGZvcm0gZHJpdmVycywgbWVhbmluZyB0aGV5IG1pZ2h0IG5vdCBiZSBlYXNpbHkgcmVhY2hhYmxlIHdpdGhvdXQgdGhlIHBsYXRmb3JtIGRldmljZSBiZWluZyBpbnN0YW50aWF0ZWQuIFN0aWxsLCB0aGUgY29yZSBQSFkgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHJlZ2FyZGxlc3MuXG5cblNvLCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhvc2UgdHdvIGZ1bmN0aW9ucy4gVGltZSB0byBsb29rIGZvciBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgdXNhZ2VzIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgZW50cnkgcG9pbnRzIGFuZCBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgY2FuIGJlc3QgaW50ZXJhY3Qgd2l0aCB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjg0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTM6NDYuMjg2NDQ4NTk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDc3NTYyMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2F0dGFjaF9kaXJlY3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdD04NT1UaGVzZSBmdW5jdGlvbiBhcmUgYWxyZWFkeSBob29rZWQgaW50byB0aGUgcGh5bGliIHN1YnN5c3RlbSwgc28gYWxsIFBIWXMgdGhhdFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktbGluay10b3BvbG9neS5yc3Q6ODY6YXJlIGxpbmtlZCB0byBhIG5ldF9kZXZpY2UgdGhyb3VnaCA6YzpmdW5jOmBwaHlfYXR0YWNoX2RpcmVjdGAgd2lsbCBhdXRvbWF0aWNhbGx5XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdC04Ny1qb2luIHRoZSBuZXRkZXYncyB0b3BvbG9neS5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3Q9NzQ9dGhpcyBkb2N1bWVudGF0aW9uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NmcC1waHlsaW5rLnJzdC0xNjUtICAgRm9yIHRoZSBtb3N0IHBhcnQsIGBgZmxhZ3NgYCBjYW4gYmUgemVybzsgdGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0b1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3Q6MTY2OiAgIHRoZSBwaHlfYXR0YWNoX2RpcmVjdCgpIGluc2lkZSB0aGlzIGZ1bmN0aW9uIGNhbGwgaWYgYSBQSFkgaXMgc3BlY2lmaWVkXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NmcC1waHlsaW5rLnJzdC0xNjctICAgaW4gdGhlIERUIG5vZGUgYGBub2RlYGAuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTkzMT1zdGF0aWMgaW50IHhnYmVfcGh5X2ZpbmRfcGh5X2RldmljZShzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjk4MzpcXHRyZXQgPSBwaHlfYXR0YWNoX2RpcmVjdChwZGF0YS1cXHUwMDNlbmV0ZGV2LCBwaHlkZXYsIHBoeWRldi1cXHUwMDNlZGV2X2ZsYWdzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTg0LVxcdFxcdFxcdFxcdFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODUtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6OTg2OlxcdFxcdG5ldGRldl9lcnIocGRhdGEtXFx1MDAzZW5ldGRldiwgXFxcInBoeV9hdHRhY2hfZGlyZWN0IGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODctXFx0XFx0cGh5X2RldmljZV9yZW1vdmUocGh5ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYz0xMTU5PWludCBobnNfbmljX2luaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaG5hZV9oYW5kbGUgKmgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmMtMTE4MC1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYzoxMTgxOlxcdFxcdHJldCA9IHBoeV9hdHRhY2hfZGlyZWN0KG5kZXYsIHBoeV9kZXYsIDAsIGgtXFx1MDAzZXBoeV9pZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZW5ldC5jLTExODItXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjI1PWludCBwaHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTIzMy1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyMzQ6XFx0cmMgPSBwaHlfYXR0YWNoX2RpcmVjdChkZXYsIHBoeWRldiwgcGh5ZGV2LVxcdTAwM2VkZXZfZmxhZ3MsIGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjM1LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTczNz1zdGF0aWMgdm9pZCBfX3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBub3RpZnlfYnVzKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODE3LSAqIFRoaXMgZGV0YWNoZXMgdGhlIHBoeSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UgYW5kIHRoZSBwaHlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4MTg6ICogZHJpdmVyLCBhbmQgZHJvcHMgdGhlIHJlZmVyZW5jZSBjb3VudCB0YWtlbiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpLlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgxOS0gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTgyNT1FWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODI3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTgyODogKiBwaHlfYXR0YWNoX2RpcmVjdCAtIGF0dGFjaCBhIG5ldHdvcmsgZGV2aWNlIHRvIGEgZ2l2ZW4gUEhZIGRldmljZSBwb2ludGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODI5LSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODQxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg0MjppbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4NDMtXFx0XFx0ICAgICAgdTMyIGZsYWdzLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMDAyLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIwMDM6RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoX2RpcmVjdCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMDA0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMjA0PXN0YXRpYyBpbnQgcGh5bGlua19hdHRhY2hfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIxOS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyMjA6XFx0cmV0dXJuIHBoeV9hdHRhY2hfZGlyZWN0KHBsLVxcdTAwM2VuZXRkZXYsIHBoeSwgZmxhZ3MsIGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjIxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIyOC0gKiBDb25uZWN0IEBwaHkgdG8gdGhlIHBoeWxpbmsgaW5zdGFuY2Ugc3BlY2lmaWVkIGJ5IEBwbCBieSBjYWxsaW5nXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMjI5OiAqIHBoeV9hdHRhY2hfZGlyZWN0KCkuIENvbmZpZ3VyZSB0aGUgQHBoeSBhY2NvcmRpbmcgdG8gdGhlIE1BQyBkcml2ZXInc1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIzMC0gKiBjYXBhYmlsaXRpZXMsIHN0YXJ0IHRoZSBQSFlMSUIgc3RhdGUgbWFjaGluZSBhbmQgZW5hYmxlIGFueSBpbnRlcnJ1cHRzXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIyOTA9aW50IHBoeWxpbmtfZndub2RlX3BoeV9jb25uZWN0KHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjMyMy1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIzMjQ6XFx0cmV0ID0gcGh5X2F0dGFjaF9kaXJlY3QocGwtXFx1MDAzZW5ldGRldiwgcGh5X2RldiwgZmxhZ3MsXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMzI1LVxcdFxcdFxcdFxcdHBsLVxcdTAwM2VsaW5rX2ludGVyZmFjZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTM2Mz1zdHJ1Y3QgbWlpX2J1cyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTM4MS1cXHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfZGV0YWNoLiBDYWxsZWRcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjM4MjpcXHQgKiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpIHJpZ2h0IGJlZm9yZSBwaHlfcmVzdW1lKCkuIFJ1bnMgaW4gcHJvY2Vzc1xcbmluY2x1ZGUvbGludXgvcGh5LmgtMzgzLVxcdCAqIGNvbnRleHQsIG1heSBzbGVlcCBhbmQgbWF5IGJlIGNhbGxlZCB3aXRoIFJUTkwgaGVsZC4gTXVzdCBub3RcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9MjE4Nz1zdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2ZpbmRfbmV4dChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgcGh5X2RldmljZSAqcG9zKTtcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIxODg6aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTg5LVxcdFxcdCAgICAgIHUzMiBmbGFncywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjEzOjQ3Ljk5NDIwOTcxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDY1NTUxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBwaHlfYXR0YWNoX2RpcmVjdGAqKlxuXG5Pa2F5LCBzbyBgcGh5X2F0dGFjaF9kaXJlY3RgIGlzIGEga2V5IGZ1bmN0aW9uLCBjYWxsZWQgYnkgdGhpbmdzIGxpa2UgYHBoeV9jb25uZWN0X2RpcmVjdGAsIGBwaHlsaW5rX2F0dGFjaF9waHlgLCBhbmQgYHBoeWxpbmtfZndub2RlX3BoeV9jb25uZWN0YC4gVGhlIHF1ZXN0aW9uIHRoYXQncyBwaXF1aW5nIG15IGludGVyZXN0IGlzIHdoZXRoZXIgYSB2aXJ0dWFsIGRldmljZSBjYW4gdHJpZ2dlciBpdHMgdXNlLiBNeSBpbnN0aW5jdCBpcyB0aGF0IFBIWXMgYXJlIHByaW1hcmlseSBoYXJkd2FyZS1ib3VuZCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLlxuXG5MZXQncyBydW4gdGhyb3VnaCBzb21lIGNvbW1vbiB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcy4gQ291bGQgYG1hY3NlY2AsIGB2ZXRoYCwgYGR1bW15YCwgb3IgYHR1bmAgZGV2aWNlcyBldmVyIHRvdWNoIHRoaXMgZnVuY3Rpb24/IE15IGd1dCBzYXlzIG5vLCBnaXZlbiB0aGVpciBuYXR1cmUuIFRoZXkncmUgdXN1YWxseSBsYXllcnMgYWJvdmUgdGhlIHBoeXNpY2FsIGludGVyZmFjZSwgYWJzdHJhY3RpbmcgYXdheSB0aGUgUEhZIGludGVyYWN0aW9uLiBUaGlua2luZyBhYm91dCBpdCwgZXZlbiB0aG91Z2ggUEhZcyBhcmUgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBoYXJkd2FyZSBsaWtlIGluIGBtYWNiYCwgYGZlY2AsIG9yIGBlMTAwMGAgZHJpdmVycywgYXJlIGFueSBvZiB0aGVzZSBwYXRod2F5cyByZWxldmFudD8gSSBkb24ndCBzZWUgaXQuIGB0dW5gIGFuZCBgdmV0aGAgZGVmaW5pdGVseSBkb24ndCBkZWFsIHdpdGggdGhlIHBoeXNpY2FsIGxheWVyLlxuXG5Pa2F5LCBsZXQncyBrZWVwIGdvaW5nLiBXaGF0IGFib3V0IHNvbWV0aGluZyBsaWtlIGBtYWM4MDIxMV9od3NpbWA/IE5vLCBpdCdzIG5vdCBhIGRpcmVjdCBtYXRjaC4gYHZrbXNgIGlzIERSTSwgc28gbm8gdGhlcmUgZWl0aGVyLiBgZHVtbXlgIGlzIGFsc28gb3V0LiBBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIGBuZXRkZXZzaW1gLiAqVGhhdCdzKiB0aGUgb25lIHRoYXQgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBpbnRlcmVzdGluZyB0byBsb29rIGludG8uIExldCBtZSBzZWUgaWYgYG5ldGRldnNpbWAgaGFzIGFueSBpbnRlcmFjdGlvbiB3aXRoIFBIWXMsIGFzIHRoYXQgd291bGQgYmUgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyOTQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTM6NTMuNzAwNzY3MzY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDM2NTkwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2F0dGFjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc4MCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdD04NT1UaGVzZSBmdW5jdGlvbiBhcmUgYWxyZWFkeSBob29rZWQgaW50byB0aGUgcGh5bGliIHN1YnN5c3RlbSwgc28gYWxsIFBIWXMgdGhhdFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktbGluay10b3BvbG9neS5yc3Q6ODY6YXJlIGxpbmtlZCB0byBhIG5ldF9kZXZpY2UgdGhyb3VnaCA6YzpmdW5jOmBwaHlfYXR0YWNoX2RpcmVjdGAgd2lsbCBhdXRvbWF0aWNhbGx5XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdC04Ny1qb2luIHRoZSBuZXRkZXYncyB0b3BvbG9neS5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0PTM2Mz1ldmVyeSBzZWNvbmQgYmVmb3JlIHRoZSBzdGF0ZSBtYWNoaW5lIHJlYWN0cyB0byBhbnkgY2hhbmdlcy4gIFRvIGRvIHRoaXMsIHlvdVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0OjM2NDpuZWVkIHRvIG1hbnVhbGx5IGNhbGwgcGh5X2F0dGFjaCgpIGFuZCBwaHlfcHJlcGFyZV9saW5rKCksIGFuZCB0aGVuIGNhbGxcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC0zNjUtcGh5X3N0YXJ0X21hY2hpbmUoKSB3aXRoIHRoZSBzZWNvbmQgYXJndW1lbnQgc2V0IHRvIHBvaW50IHRvIHlvdXIgc3BlY2lhbFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q9Mzc2PXRoZSBjb21wbGV4IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBQSFkgYW5kIHlvdXIgbmV0d29yayBkZXZpY2UuICBJZiB0aGlzIGlzXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q6Mzc3OnNvLCB5b3UgY2FuIHNpbXBseSBjYWxsIHBoeV9hdHRhY2goKSwgYW5kIG5vdCBjYWxsIHBoeV9zdGFydF9tYWNoaW5lIG9yXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtMzc4LXBoeV9wcmVwYXJlX2xpbmsoKS4gIFRoaXMgd2lsbCBtZWFuIHRoYXQgcGh5ZGV2LVxcdTAwM2VzdGF0ZSBpcyBlbnRpcmVseSB5b3VycyB0b1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q9NDA0PVJlcXVlc3RzIHRoZSBJUlEgZm9yIHRoZSBQSFkgaW50ZXJydXB0cy5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTQwNi1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDo0MDc6IHN0cnVjdCBwaHlfZGV2aWNlICogcGh5X2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpwaHlfaWQsXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNDA4LVxcdFxcdCAgICAgICAgICAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3Q9NzQ9dGhpcyBkb2N1bWVudGF0aW9uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NmcC1waHlsaW5rLnJzdC0xNjUtICAgRm9yIHRoZSBtb3N0IHBhcnQsIGBgZmxhZ3NgYCBjYW4gYmUgemVybzsgdGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0b1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3Q6MTY2OiAgIHRoZSBwaHlfYXR0YWNoX2RpcmVjdCgpIGluc2lkZSB0aGlzIGZ1bmN0aW9uIGNhbGwgaWYgYSBQSFkgaXMgc3BlY2lmaWVkXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NmcC1waHlsaW5rLnJzdC0xNjctICAgaW4gdGhlIERUIG5vZGUgYGBub2RlYGAuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM9MTM1Mz1zdGF0aWMgaW50IG93bF9lbWFjX3BoeV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM2Ni1cXHRpZiAobmV0aWZfbXNnX2xpbmsocHJpdikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jOjEzNjc6XFx0XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM2OC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jPTY1MD1zdGF0aWMgaW50IGFkaW4xMTQwX3BoeV9pbml0KHN0cnVjdCBhZGluMTE0MF9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjc2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jOjY3NzpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTY3OC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jPTMyNzM9c3RhdGljIGludCBldDEzMXhfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy0zMjk4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jOjMyOTk6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy0zMzAwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYz00NzI9c3RhdGljIGludCBhdTEwMDBfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jLTU1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jOjU1MzpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtNTU0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYz05MzE9c3RhdGljIGludCB4Z2JlX3BoeV9maW5kX3BoeV9kZXZpY2Uoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5ODM6XFx0cmV0ID0gcGh5X2F0dGFjaF9kaXJlY3QocGRhdGEtXFx1MDAzZW5ldGRldiwgcGh5ZGV2LCBwaHlkZXYtXFx1MDAzZWRldl9mbGFncyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk4NC1cXHRcXHRcXHRcXHRQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTg1LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjk4NjpcXHRcXHRuZXRkZXZfZXJyKHBkYXRhLVxcdTAwM2VuZXRkZXYsIFxcXCJwaHlfYXR0YWNoX2RpcmVjdCBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTg3LVxcdFxcdHBoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYz05NjY9c3RhdGljIGludCBheDg4Nzk2Y19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTA5NC1cXHRcXHQgICBkZXZfbmFtZShcXHUwMDI2c3BpLVxcdTAwM2VkZXYpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYzoxMDk1OlxcdHBoeV9hdHRhY2hlZF9pbmZvKGF4X2xvY2FsLVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwOTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmM9MTAzNz1zdGF0aWMgcGh5X2ludGVyZmFjZV90IGJjbWFzcF9waHlfaWZhY2VfZm9yX2Nvbm5lY3QocGh5X2ludGVyZmFjZV90IG1vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTA3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmM6MTA3NDpzdGF0aWMgaW50IGJjbWFzcF9waHlfYXR0YWNoKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTA3NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmM9MTEyMT1zdGF0aWMgaW50IGJjbWFzcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTEzOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmM6MTE0MDpcXHRyZXQgPSBiY21hc3BfcGh5X2F0dGFjaChpbnRmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTE0MS1cXHRpZiAocmV0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYzoxMTQyOlxcdFxcdGdvdG8gZXJyX3BoeV9hdHRhY2g7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jLTExNDMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTE1NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmM6MTE1NjplcnJfcGh5X2F0dGFjaDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTE1Ny1cXHRiY21hc3BfcGh5X2h3X3VucHJlcGFyZShpbnRmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIyMzQ9c3RhdGljIGludCBiNDRfcmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyOTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjI5OTpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIzMDAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYz04OTA9c3RhdGljIGludCBiY21fZW5ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy05MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM6OTI0OlxcdFxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtOTI1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jPTIzMjQ9c3RhdGljIGludCBzYm1hY19taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMzQ1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoyMzQ2OlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeV9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMzQ3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM9MjA4ND1zdGF0aWMgaW50IHRnM19waHlfaW5pdChzdHJ1Y3QgdGczICp0cClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTIxMjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM6MjEyNTpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTIxMjYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jb3J0aW5hL2dlbWluaS5jPTM2MD1zdGF0aWMgaW50IGdtYWNfc2V0dXBfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jb3J0aW5hL2dlbWluaS5jLTQwNS1cXHRpZiAobmV0aWZfbXNnX2xpbmsocG9ydCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY29ydGluYS9nZW1pbmkuYzo0MDY6XFx0XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jb3J0aW5hL2dlbWluaS5jLTQwNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTQ5Nz1zdGF0aWMgaW50IGZ0Z21hYzEwMF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTU1NS1cXHQvKiBEaXNwbGF5IHdoYXQgd2UgZm91bmQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE1NTY6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE1NTctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE4OTA9c3RhdGljIGludCBmdGdtYWMxMDBfcHJvYmVfZHQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTkyMS1cXHRcXHQvKiBEaXNwbGF5IHdoYXQgd2UgZm91bmQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE5MjI6XFx0XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE5MjMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz0yOTgxPXN0YXRpYyBpbnQgZmVjX2VuZXRfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozMDM3OlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeV9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMwMzgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jPTIwMT1zdGF0aWMgaW50IGhiZ19waHlfY29ubmVjdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIxNy1cXHRwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyMTg6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIxOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXNpX2ZlbWFjLmM9NzY4PXN0YXRpYyBpbnQgaGlzaV9mZW1hY19kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXNpX2ZlbWFjLmMtODM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXNpX2ZlbWFjLmM6ODQwOlxcdHBoeV9hdHRhY2hlZF9wcmludChwaHksIFxcXCJwaHlfaWQ9MHglLjhseCwgcGh5X21vZGU9JXNcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpc2lfZmVtYWMuYy04NDEtXFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcpcGh5LVxcdTAwM2VwaHlfaWQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmM9MTE1OT1pbnQgaG5zX25pY19pbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGhuYWVfaGFuZGxlICpoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZW5ldC5jLTExODAtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmM6MTE4MTpcXHRcXHRyZXQgPSBwaHlfYXR0YWNoX2RpcmVjdChuZGV2LCBwaHlfZGV2LCAwLCBoLVxcdTAwM2VwaHlfaWYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYy0xMTgyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYy0xMTg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYzoxMTg2OlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeV9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYy0xMTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0yMDI9aW50IGhjbGdlX21hY19jb25uZWN0X3BoeShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTIzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jOjIzNzpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMjM4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYz0zNTc9bHRxX2V0b3BfbWRpb19wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy0zNzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYzozNzk6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTM4MC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tYWluLmM9Mzg1PXN0YXRpYyBpbnQgbWx4YmZfZ2lnZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21haW4uYy00ODctXFx0LyogRGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBhdHRhY2hlZCBQSFkgZGV2aWNlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21haW4uYzo0ODg6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWFpbi5jLTQ4OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L254cC9scGNfZXRoLmM9NzUxPXN0YXRpYyBpbnQgbHBjX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L254cC9scGNfZXRoLmMtNzg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L254cC9scGNfZXRoLmM6Nzg1OlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYy03ODYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYz01Nzg9c3RhdGljIGludCBvYV90YzZfcGh5X2luaXQoc3RydWN0IG9hX3RjNiAqdGM2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtNjEzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjYxNDpcXHRwaHlfYXR0YWNoZWRfaW5mbyh0YzYtXFx1MDAzZW5ldGRldi1cXHUwMDNlcGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy02MTUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMtbWFjLmM9OTMxPWludCBlbWFjX21hY191cChzdHJ1Y3QgZW1hY19hZGFwdGVyICphZHB0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vZW1hYy9lbWFjLW1hYy5jLTk0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMtbWFjLmM6OTQ4OlxcdHBoeV9hdHRhY2hlZF9wcmludChhZHB0LVxcdTAwM2VwaHlkZXYsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL2VtYWMvZW1hYy1tYWMuYy05NDktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZGMvcjYwNDAuYz05OTg9c3RhdGljIGludCByNjA0MF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JkYy9yNjA0MC5jLTEwMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmRjL3I2MDQwLmM6MTAyMjpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JkYy9yNjA0MC5jLTEwMjMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz00OTgyPXN0YXRpYyBpbnQgcjgxNjlfcGh5X2Nvbm5lY3Qoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy00OTk4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjQ5OTk6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01MDAwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYz0xNDkyPXN0YXRpYyBpbnQgcmF2Yl9waHlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMtMTU0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jOjE1NDI6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jLTE1NDMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3Jzd2l0Y2hfbWFpbi5jPTE0NjA9c3RhdGljIGludCByc3dpdGNoX3BoeV9kZXZpY2VfaW5pdChzdHJ1Y3QgcnN3aXRjaF9kZXZpY2UgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3Jzd2l0Y2hfbWFpbi5jLTE0OTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYzoxNDk0OlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYy0xNDk1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmM9ODk1PXN0YXRpYyBpbnQgcnRzbl9waHlfaW5pdChzdHJ1Y3QgcnRzbl9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmMtOTE3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcnRzbi5jOjkxODpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcnRzbi5jLTkxOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmM9MTk4Nz1zdGF0aWMgaW50IHNoX2V0aF9waHlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMtMjAyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jOjIwMjg6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jLTIwMjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmM9MTAxNT1zdGF0aWMgaW50IHNtc2M5MTF4X21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTExeC5jLTEwMzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTExeC5jOjEwMzk6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmMtMTA0MC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzk0MjAuYz0xMTAyPXN0YXRpYyBpbnQgc21zYzk0MjBfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5NDIwLmMtMTEyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5NDIwLmM6MTEyOTpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzk0MjAuYy0xMTMwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L3NuaV9hdmUuYz0xMTYzPXN0YXRpYyBpbnQgYXZlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvc25pX2F2ZS5jLTEyMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L3NuaV9hdmUuYzoxMjMzOlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L3NuaV9hdmUuYy0xMjM0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3BhY2VtaXQvazFfZW1hYy5jPTE1OTc9c3RhdGljIGludCBlbWFjX3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3BhY2VtaXQvazFfZW1hYy5jLTE2NDgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3BhY2VtaXQvazFfZW1hYy5jOjE2NDk6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmMtMTY1MC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM9NTk1PWludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNzA0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NzA1OlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy03MDYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW5wbHVzL3NwbDJzd19waHkuYz01Nj1pbnQgc3BsMnN3X3BoeV9jb25uZWN0KHN0cnVjdCBzcGwyc3dfY29tbW9uICpjb21tKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VucGx1cy9zcGwyc3dfcGh5LmMtNzItXFx0XFx0XFx0cGh5X3N1cHBvcnRfYXN5bV9wYXVzZShwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bnBsdXMvc3BsMnN3X3BoeS5jOjczOlxcdFxcdFxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VucGx1cy9zcGwyc3dfcGh5LmMtNzQtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5jPTU4NT1zdGF0aWMgdm9pZCBjcHN3X3NsYXZlX29wZW4oc3RydWN0IGNwc3dfc2xhdmUgKnNsYXZlLCBzdHJ1Y3QgY3Bzd19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5jLTY2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmM6NjYzOlxcdHBoeV9hdHRhY2hlZF9pbmZvKHNsYXZlLVxcdTAwM2VwaHkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3cuYy02NjQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X25ldy5jPTc0MD1zdGF0aWMgdm9pZCBjcHN3X3NsYXZlX29wZW4oc3RydWN0IGNwc3dfc2xhdmUgKnNsYXZlLCBzdHJ1Y3QgY3Bzd19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19uZXcuYy04MDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19uZXcuYzo4MDU6XFx0cGh5X2F0dGFjaGVkX2luZm8oc2xhdmUtXFx1MDAzZXBoeSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19uZXcuYy04MDYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX2VtYWMuYz0xNDAyPXN0YXRpYyBpbnQgZW1hY19kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfZW1hYy5jLTE1MjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvZGF2aW5jaV9lbWFjLmM6MTUyOTpcXHRcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfZW1hYy5jLTE1MzAtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM9MjE3OD1zdGF0aWMgaW50IHBydWV0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMtMjQxNi1cXHRcXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM6MjQxNzpcXHRcXHRwaHlfYXR0YWNoZWRfaW5mbyhwcnVldGgtXFx1MDAzZWVtYWNbUFJVRVRIX01BQzBdLVxcdTAwM2VuZGV2LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI0MTgtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMtMjQzMy1cXHRcXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM6MjQzNDpcXHRcXHRwaHlfYXR0YWNoZWRfaW5mbyhwcnVldGgtXFx1MDAzZWVtYWNbUFJVRVRIX01BQzFdLVxcdTAwM2VuZGV2LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI0MzUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jPTg4OT1zdGF0aWMgaW50IHBydWV0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jLTEwOTAtXFx0XFx0ZW1hY19waHlfY29ubmVjdChwcnVldGgtXFx1MDAzZWVtYWNbUFJVRVRIX01BQzBdKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmM6MTA5MTpcXHRcXHRwaHlfYXR0YWNoZWRfaW5mbyhwcnVldGgtXFx1MDAzZWVtYWNbUFJVRVRIX01BQzBdLVxcdTAwM2VuZGV2LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aF9zcjEuYy0xMDkyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aF9zcjEuYy0xMTAyLVxcdFxcdGVtYWNfcGh5X2Nvbm5lY3QocHJ1ZXRoLVxcdTAwM2VlbWFjW1BSVUVUSF9NQUMxXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jOjExMDM6XFx0XFx0cGh5X2F0dGFjaGVkX2luZm8ocHJ1ZXRoLVxcdTAwM2VlbWFjW1BSVUVUSF9NQUMxXS1cXHUwMDNlbmRldi1cXHUwMDNlcGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmMtMTEwNC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90b3NoaWJhL3RjMzU4MTUuYz02MDc9c3RhdGljIGludCB0Y19taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Rvc2hpYmEvdGMzNTgxNS5jLTYyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90b3NoaWJhL3RjMzU4MTUuYzo2Mjg6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90b3NoaWJhL3RjMzU4MTUuYy02MjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM9MTU5PWludCBuZ2JlX21kaW9faW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTE4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTkwOlxcdHBoeV9hdHRhY2hlZF9pbmZvKHd4LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0xOTEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUyND1zdGF0aWMgaW50IHR4Z2JlX2V4dF9waHlfaW5pdChzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01NTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1NTk6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTU2MC1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz03NjA9c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc3NS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6Nzc2OnN0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03Nzcte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTgyOT1zdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04NTctXFx0YnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjg1ODpcXHRidXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODU5LVxcdGJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjI1PWludCBwaHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTIzMy1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyMzQ6XFx0cmMgPSBwaHlfYXR0YWNoX2RpcmVjdChkZXYsIHBoeWRldiwgcGh5ZGV2LVxcdTAwM2VkZXZfZmxhZ3MsIGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjM1LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTM4OD1FWFBPUlRfU1lNQk9MKHBoeV9pbml0X2h3KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzODktXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzkwOnZvaWQgcGh5X2F0dGFjaGVkX2luZm8oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTEte1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM5MjpcXHRwaHlfYXR0YWNoZWRfcHJpbnQocGh5ZGV2LCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTMtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM5NDpFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hlZF9pbmZvKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTUtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzk2LSNkZWZpbmUgQVRUQUNIRURfRk1UIFxcXCJhdHRhY2hlZCBQSFkgZHJpdmVyICVzKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lcylcXFwiXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzk3OmNoYXIgKnBoeV9hdHRhY2hlZF9pbmZvX2lycShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM5OC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0MTYtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTQxNzpFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hlZF9pbmZvX2lycSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDE4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTQxOTp2b2lkIHBoeV9hdHRhY2hlZF9wcmludChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0MjAte1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQyMS1cXHRjb25zdCBjaGFyICp1bmJvdW5kID0gcGh5ZGV2LVxcdTAwM2VkcnYgPyBcXFwiXFxcIiA6IFxcXCJbdW5ib3VuZF0gXFxcIjtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE0MjI6XFx0Y2hhciAqaXJxX3N0ciA9IHBoeV9hdHRhY2hlZF9pbmZvX2lycShwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQyMy1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQzOC19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNDM5OkVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaGVkX3ByaW50KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0NDAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE3Mzc9c3RhdGljIHZvaWQgX19waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgbm90aWZ5X2J1cylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgxNy0gKiBUaGlzIGRldGFjaGVzIHRoZSBwaHkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcGh5XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODE4OiAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS5cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MTktICovXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE4MjU9RVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgyNy0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4Mjg6ICogcGh5X2F0dGFjaF9kaXJlY3QgLSBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBhIGdpdmVuIFBIWSBkZXZpY2UgcG9pbnRlclxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgyOS0gKiBAZGV2OiBuZXR3b3JrIGRldmljZSB0byBhdHRhY2hcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg0MS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4NDI6aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODQzLVxcdFxcdCAgICAgIHUzMiBmbGFncywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk2OC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE5Njk6XFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKSB7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTcwOlxcdFxcdGVyciA9IHBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTcxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwMDItfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjAwMzpFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwMDQtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIwODc9c3RhdGljIGludCBwaHlsaW5rX2JyaW5ndXBfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjEyMS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIxMjI6XFx0aXJxX3N0ciA9IHBoeV9hdHRhY2hlZF9pbmZvX2lycShwaHkpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjEyMy1cXHRwaHlsaW5rX2luZm8ocGwsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIyMDQ9c3RhdGljIGludCBwaHlsaW5rX2F0dGFjaF9waHkoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjE5LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjIyMDpcXHRyZXR1cm4gcGh5X2F0dGFjaF9kaXJlY3QocGwtXFx1MDAzZW5ldGRldiwgcGh5LCBmbGFncywgaW50ZXJmYWNlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyMjEtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjI4LSAqIENvbm5lY3QgQHBoeSB0byB0aGUgcGh5bGluayBpbnN0YW5jZSBzcGVjaWZpZWQgYnkgQHBsIGJ5IGNhbGxpbmdcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyMjk6ICogcGh5X2F0dGFjaF9kaXJlY3QoKS4gQ29uZmlndXJlIHRoZSBAcGh5IGFjY29yZGluZyB0byB0aGUgTUFDIGRyaXZlcidzXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjMwLSAqIGNhcGFiaWxpdGllcywgc3RhcnQgdGhlIFBIWUxJQiBzdGF0ZSBtYWNoaW5lIGFuZCBlbmFibGUgYW55IGludGVycnVwdHNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjI5MD1pbnQgcGh5bGlua19md25vZGVfcGh5X2Nvbm5lY3Qoc3RydWN0IHBoeWxpbmsgKnBsLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMzIzLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjMyNDpcXHRyZXQgPSBwaHlfYXR0YWNoX2RpcmVjdChwbC1cXHUwMDNlbmV0ZGV2LCBwaHlfZGV2LCBmbGFncyxcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzMjUtXFx0XFx0XFx0XFx0cGwtXFx1MDAzZWxpbmtfaW50ZXJmYWNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz03MDM9c3RhdGljIGludCBheDg4NzcyX2luaXRfcGh5KHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MjItXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjcyMzpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MjQtXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMTQ3PXN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5Mi1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjkzOlxcdHBoeV9hdHRhY2hlZF9pbmZvKGRldi1cXHUwMDNlbmV0LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyOTQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFpbi5jPTQzNDU9c3RhdGljIGludCBicmNtc19iX2F0dGFjaChzdHJ1Y3QgYnJjbXNfY19pbmZvICp3bGMsIHN0cnVjdCBiY21hX2RldmljZSAqY29yZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWluLmMtNDUzOC1cXHRcXHR3bGNfaHctXFx1MDAzZWJhbmQtXFx1MDAzZXBpID1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFpbi5jOjQ1Mzk6XFx0XFx0XFx0d2xjX3BoeV9hdHRhY2god2xjX2h3LVxcdTAwM2VwaHlfc2gsIGNvcmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21haW4uYy00NTQwLVxcdFxcdFxcdFxcdCAgICAgICB3bGNfaHctXFx1MDAzZWJhbmQtXFx1MDAzZWJhbmR0eXBlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfY21uLmM9Mzk2PXN0cnVjdCBicmNtc19waHlfcHViICpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9jbW4uYzozOTc6d2xjX3BoeV9hdHRhY2goc3RydWN0IHNoYXJlZF9waHkgKnNoLCBzdHJ1Y3QgYmNtYV9kZXZpY2UgKmQxMWNvcmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfY21uLmMtMzk4LVxcdCAgICAgICBpbnQgYmFuZHR5cGUsIHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9jbW4uYy01MzItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfY21uLmM6NTMzOlxcdFxcdHdsY19waHlfYXR0YWNoX25waHkocGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jLTUzNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9jbW4uYy01MzUtXFx0fSBlbHNlIGlmIChJU0xDTlBIWShwaSkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9jbW4uYzo1MzY6XFx0XFx0aWYgKCF3bGNfcGh5X2F0dGFjaF9sY25waHkocGkpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jLTUzNy1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2hhbC5oPTE2Nj1zdHJ1Y3Qgc2hhcmVkX3BoeSAqd2xjX3BoeV9zaGFyZWRfYXR0YWNoKHN0cnVjdCBzaGFyZWRfcGh5X3BhcmFtcyAqc2hwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9oYWwuaDoxNjc6c3RydWN0IGJyY21zX3BoeV9wdWIgKndsY19waHlfYXR0YWNoKHN0cnVjdCBzaGFyZWRfcGh5ICpzaCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9oYWwuaC0xNjgtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYmNtYV9kZXZpY2UgKmQxMWNvcmUsIGludCBiYW5kdHlwZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2ludC5oPTkzOT12b2lkIHdsY19waHlfY2FsX3BlcmljYWxfbXBoYXNlX3Jlc3RhcnQoc3RydWN0IGJyY21zX3BoeSAqcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2ludC5oLTk0MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9pbnQuaDo5NDE6dm9pZCB3bGNfcGh5X2F0dGFjaF9ucGh5KHN0cnVjdCBicmNtc19waHkgKnBpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9pbnQuaDo5NDI6Ym9vbCB3bGNfcGh5X2F0dGFjaF9sY25waHkoc3RydWN0IGJyY21zX3BoeSAqcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2ludC5oLTk0My1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2xjbi5jPTQ5NTM9dm9pZCB3bGNfcGh5X2RldGFjaF9sY25waHkoc3RydWN0IGJyY21zX3BoeSAqcGkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9sY24uYy00OTU3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2xjbi5jOjQ5NTg6Ym9vbCB3bGNfcGh5X2F0dGFjaF9sY25waHkoc3RydWN0IGJyY21zX3BoeSAqcGkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfbGNuLmMtNDk1OS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9uLmM9MTQ1NDk9c3RhdGljIHZvaWQgd2xjX3BoeV90eHB3cl9zcm9tX3JlYWRfbnBoeShzdHJ1Y3QgYnJjbXNfcGh5ICpwaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X24uYy0xNDU5OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9uLmM6MTQ2MDA6dm9pZCB3bGNfcGh5X2F0dGFjaF9ucGh5KHN0cnVjdCBicmNtc19waHkgKnBpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X24uYy0xNDYwMS17XFxuLS1cXG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmM9MTU0PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jOjE1NTpiZmFfY29tX3BoeV9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgbWluY2ZnKVxcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYy0xNTYte1xcbi0tXFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jLTE1OS1cXG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmM6MTYwOlxcdGJmYV9waHlfYXR0YWNoKHBoeSwgXFx1MDAyNmJmYS1cXHUwMDNlaW9jLCBiZmEsIGJmYS1cXHUwMDNldHJjbW9kLCBtaW5jZmcpO1xcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYy0xNjEtXFx0YmZhX3BoeV9tZW1jbGFpbShwaHksIHBoeV9kbWEtXFx1MDAzZWt2YV9jdXJwLCBwaHlfZG1hLVxcdTAwM2VkbWFfY3VycCwgbWluY2ZnKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYz0xODI3PWJmYV9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZyxcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYy0xODcyLVxcdGJmYV9jb21fZGlhZ19hdHRhY2goYmZhKTtcXG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmM6MTg3MzpcXHRiZmFfY29tX3BoeV9hdHRhY2goYmZhLCBjZmctXFx1MDAzZWRydmNmZy5taW5fY2ZnKTtcXG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMtMTg3NC1cXHRiZmFfY29tX2ZydV9hdHRhY2goYmZhLCBjZmctXFx1MDAzZWRydmNmZy5taW5fY2ZnKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jPTU0MzY9dm9pZFxcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jOjU0Mzc6YmZhX3BoeV9hdHRhY2goc3RydWN0IGJmYV9waHlfcyAqcGh5LCBzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmRldixcXG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuYy01NDM4LVxcdFxcdHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsIGJmYV9ib29sZWFuX3QgbWluY2ZnKVxcbi0tXFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmg9NzI5PXUzMlxcdGJmYV9waHlfbWVtaW5mbyhiZmFfYm9vbGVhbl90IG1pbmNmZyk7XFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmg6NzMwOnZvaWQgYmZhX3BoeV9hdHRhY2goc3RydWN0IGJmYV9waHlfcyAqcGh5LCBzdHJ1Y3QgYmZhX2lvY19zICppb2MsXFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgtNzMxLVxcdFxcdHZvaWQgKmRldiwgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwgYmZhX2Jvb2xlYW5fdCBtaW5jZmcpO1xcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzLmg9MTgxPXN0cnVjdCBoaXNpX3Nhc19waHkge1xcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzLmgtMTkyLVxcdHU4XFx0XFx0ZnJhbWVfcmN2ZFtGUkFNRV9SQ1ZEX0JVRl07XFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzLmg6MTkzOlxcdHU4XFx0XFx0cGh5X2F0dGFjaGVkO1xcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhcy5oLTE5NC1cXHR1OFxcdFxcdGluX3Jlc2V0O1xcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYz02NDk9c3RhdGljIHZvaWQgaGlzaV9zYXNfYnl0ZXNfZG1hZWQoc3RydWN0IGhpc2lfaGJhICpoaXNpX2hiYSwgaW50IHBoeV9ubyxcXG4tLVxcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtNjU0LVxcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmM6NjU1OlxcdGlmICghcGh5LVxcdTAwM2VwaHlfYXR0YWNoZWQpXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYy02NTYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYz0xMDMwPXZvaWQgaGlzaV9zYXNfcGh5X29vYl9yZWFkeShzdHJ1Y3QgaGlzaV9oYmEgKmhpc2lfaGJhLCBpbnQgcGh5X25vKVxcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYy0xMDM3LVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwaHktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jOjEwMzg6XFx0aWYgKHBoeS1cXHUwMDNlcGh5X2F0dGFjaGVkKSB7XFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYy0xMDM5LVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBoeS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYz0xMjgwPXN0YXRpYyBpbnQgaGlzaV9zYXNfY29udHJvbF9waHkoc3RydWN0IGFzZF9zYXNfcGh5ICpzYXNfcGh5LCBlbnVtIHBoeV9mdW5jIGZ1bmMsXFxuLS1cXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jLTEyODktXFx0aW50IHBoeV9ubyA9IHNhc19waHktXFx1MDAzZWlkO1xcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmM6MTI5MDpcXHR1OCBzdHMgPSBwaHktXFx1MDAzZXBoeV9hdHRhY2hlZDtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTM6NTUuNDA0NDMyMjkzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYxNzMzNDQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIGludG8gYHBoeV9hdHRhY2hfZGlyZWN0YCBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgc3l6a2FsbGVyIGNhbiB0cmlnZ2VyIHRoZSBgcGh5X2F0dGFjaF9kaXJlY3RgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uLCBJIGtub3csIGlzIGNhbGxlZCBieSBgcGh5X2Nvbm5lY3RfZGlyZWN0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYHBoeV9jb25uZWN0YC4gVGhlIGNvbm5lY3Rpb24gY2hhaW4gaXMgaW1wb3J0YW50LCBiZWNhdXNlIGBwaHlfY29ubmVjdGAgaXMgY2FsbGVkIGJ5IGEgbG90IG9mIG5ldHdvcmsgZHJpdmVycy4gU28sIHRoZSBxdWVzdGlvbiBpcywgY2FuIHN5emthbGxlciBzb21laG93IGdldCB0aGVyZT9cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxvb2sgZm9yIGEgd2F5IHN5emthbGxlciBjb3VsZCBjcmVhdGUgYSB2aXJ0dWFsIGRldmljZSB0aGF0IGludGVyYWN0cyB3aXRoIGBwaHlsaWJgLiBJIGNvbnNpZGVyZWQgdGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIGBuZXRsaW5rYCB0byBhY2NvbXBsaXNoIHRoaXMuIFRoZW4sIEkgaGFkIGEgYnJpZWYsIGluY29ycmVjdCB0aG91Z2h0IGFib3V0IGBtYWNzZWNgIHVzaW5nIFBIWXMsIGJ1dCBxdWlja2x5IGRpc21pc3NlZCBpdOKAlGBtYWNzZWNgIGlzIHB1cmVseSBhIHNvZnR3YXJlIGRldmljZS5cblxuSSBzdGFydGVkIHNjYW5uaW5nIHBvdGVudGlhbCB2aXJ0dWFsIGRldmljZXMgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uIEkgY2hlY2tlZCBgZHJpdmVycy9uZXQvZHVtbXkuY2AsIGBkcml2ZXJzL25ldC92ZXRoLmNgLCBgZHJpdmVycy9uZXQvdHVuLmNgLCBhbmQgYGRyaXZlcnMvbmV0L21hY3ZsYW4uY2AuIE5vbmUgb2YgdGhvc2UgdXNlIFBIWXMuIEkgdGhvdWdodCBhYm91dCBNRElPIGJ1c2VzLCBzbyBJIGdsYW5jZWQgYXQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYC4gSSBrbm93IHN5emthbGxlciBjYW4gaW50ZXJhY3Qgd2l0aCB0aG9zZSB0aHJvdWdoIGlvY3RscyBsaWtlIGBTSU9DU01JSVJFR2AgYW5kIGBTSU9DR01JSVBIWWAuIEhvd2V2ZXIsIHRoaXMgZG9lc24ndCBkaXJlY3RseSB0cmlnZ2VyIGBwaHlfYXR0YWNoX2RpcmVjdGA7IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBgbmV0X2RldmljZWAgYXR0YWNoZXMgdG8gYSBQSFkuXG5cblRoYXQncyB3aGVuIGl0IGhpdCBtZTogYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyBjYWxsZWQgd2hlbiBhIGBuZXRfZGV2aWNlYCBpcyBvcGVuZWQsIHNheSwgdmlhIHRoZSBgbmRvX29wZW5gIG1ldGhvZCwgYW5kIG9ubHkgd2hlbiB0aGUgZGV2aWNlIGFjdHVhbGx5IGhhcyBhIFBIWSBhc3NvY2lhdGVkIHdpdGggaXQuIFNvLCBpZiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGggdGhpbmdzIGxpa2UgYENPTkZJR19EVU1NWWAgb3IgYENPTkZJR19WRVRIYCwgSSBjYW4ndCB0cmlnZ2VyIGl0LCBiZWNhdXNlIHRob3NlIGRldmljZXMgZG9uJ3QgaGF2ZSBQSFlzLlxuXG5TbywgSSBuZWVkIHRvIGZpbmQgYSBuZXR3b3JrIGRyaXZlciwgcmVhY2hhYmxlIGJ5IHN5emthbGxlciwgd2hpY2ggKmRvZXMqIHVzZSBQSFlzLiBUaGF0J3MgdGhlIGtleS4gQWhhISBTeXprYWxsZXIgY2FuIHVzZSBgbmV0ZGV2c2ltYC4gSSdsbCBnbyBjaGVjayB3aGV0aGVyIG9yIG5vdCBgbmV0ZGV2c2ltYCB1c2VzIFBIWXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjAzLjAyMTc2OTQzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY4Mzg3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjAzLjA3MjQ2MjIwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTE2MDg3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVVNCIE5ldHdvcmsgRHJpdmVycyBhbmQgUEhZczogQSBTeXprYWxsZXIgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gYnJvYWRlbiB0aGUgY292ZXJhZ2Ugb2YgbXkgZnV6emluZyBlZmZvcnRzLCBhbmQgYGRyaXZlcnMvbmV0L3VzYmAgY29tZXMgdG8gbWluZC4gU3l6a2FsbGVyJ3MgYWJpbGl0eSB0byBlbXVsYXRlIFVTQiBkZXZpY2VzIHVzaW5nIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gbGV2ZXJhZ2UuIFRoZSBxdWVzdGlvbiBpcywgd2hhdCB2dWxuZXJhYmlsaXRpZXMgYXJlIGxpa2VseSB0byBiZSBsdXJraW5nIHRoZXJlP1xuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgd2hldGhlciBhbnkgVVNCIG5ldHdvcmsgZHJpdmVycyBhY3R1YWxseSByZWx5IG9uIFBIWXMuIFRoaXMgY291bGQgb3BlbiB1cCBhIG5ldyBhdmVudWUgZm9yIHRlc3RpbmcgYW5kIGV4cGxvaXQgZGlzY292ZXJ5LiBTbywgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIHRoZXJlJ3MgYW55IGxpbmsgYmV0d2VlbiB0aGUgVVNCIG5ldHdvcmsgZHJpdmVycyBhbmQgYW55IFBoeXNpY2FsIExheWVyIGltcGxlbWVudGF0aW9ucy4gVGhpcyBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzAwMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjA2LjEyNDA3MzE5NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5OTMwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTcwMz1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9waHkoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcyMi1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzIzOlxcdHBoeV9hdHRhY2hlZF9pbmZvKHByaXYtXFx1MDAzZXBoeWRldik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcyNC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjkyLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyOTM6XFx0cGh5X2F0dGFjaGVkX2luZm8oZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXBoeWRldik7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MDYuMTY3MDcyNTY1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjI1MzMxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqTmV0d29yayBEcml2ZXIgSW52ZXN0aWdhdGlvbjogYHBoeV9jb25uZWN0YCB2cy4gYHBoeV9hdHRhY2hfZGlyZWN0YCoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGhvdyB0aGUgYHNtc2M5NXh4YCBhbmQgYGFzaXhgIGRyaXZlcnMgaGFuZGxlIHRoZWlyIFBIWSBjb25uZWN0aW9ucy4gVGhlIGtleSB0aGluZyBJJ20gbG9va2luZyBmb3IgaXMgd2hldGhlciB0aGV5J3JlIGVtcGxveWluZyB0aGUgbGVnYWN5IGBwaHlfY29ubmVjdGAgZnVuY3Rpb24sIG9yIGlmIHRoZXkndmUgbWlncmF0ZWQgdG8gdGhlIG5ld2VyIGBwaHlfYXR0YWNoX2RpcmVjdGAgYXBwcm9hY2guIEtub3dpbmcgdGhpcyBpbXBhY3RzIHNvIG1hbnkgdGhpbmdzLCBmcm9tIHRoZSBvdmVyYWxsIGRyaXZlciBhcmNoaXRlY3R1cmUgdG8gcG90ZW50aWFsIHF1aXJrcyBpbiBoYW5kbGluZyBzcGVjaWZpYyBQSFkgY2hhcmFjdGVyaXN0aWNzLiBJdCB3aWxsIGhlbHAgbWUgZGlhZ25vc2UgY2VydGFpbiBpc3N1ZXMsIGNvbXBhcmUgdGhlaXIgbWV0aG9kcyBmb3IgZnV0dXJlIHJlZmVyZW5jZSwgYW5kIHVuZGVyc3RhbmQgaWYgdGhleSBoYXZlIHRha2VuIGFkdmFudGFnZSBvZiB0aGUgbW9kZXJuIGFwcHJvYWNoLiBJdCdzIHJlYWxseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgUEhZIGludGVyYWN0aW9uIG1vZGVsIGFuZCB3aGVyZSB0byBsb29rIGZvciBwb3RlbnRpYWwgcHJvYmxlbXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGltZSB0byBnZXQgZGlnZ2luZyB0aHJvdWdoIHRoZSBjb2RlLi4uIGxldCdzIHNlZSB3aGljaCBwYXRoIHRoZXNlIGRyaXZlcnMgYXJlIHRha2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0ODEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDowOS44ODk2MDg5OTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTMxMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0yNjE9c3RhdGljIGludCBheDg4MTcyYV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zMTMtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzE0OlxcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeV9jb25uZWN0KGRldi1cXHUwMDNlbmV0LCBwcml2LVxcdTAwM2VwaHlfbmFtZSxcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zMTUtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmF4ODgxNzJhX2FkanVzdF9saW5rLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyODQtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI4NTpcXHRyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QoZGV2LVxcdTAwM2VuZXQsIHBkYXRhLVxcdTAwM2VwaHlkZXYsXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4Ni1cXHRcXHRcXHRcXHQgXFx1MDAyNnNtc2M5NXh4X2hhbmRsZV9saW5rX2NoYW5nZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MDkuOTM4NTQ1MTk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODkzNDU2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIHRoZSBOZXcgTURJTyBCdXMgQ2FsbGJhY2tzKipcblxuT2theSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIGZvbGxvd2luZyB0aGUgcG90ZW50aWFsIGNhbGwgY2hhaW4gaGVyZS4gSXQgbG9va3MgbGlrZSBib3RoIGBzbXNjOTV4eGAgYW5kIGBheDg4MTcyYWAgdXNlIGBwaHlfY29ubmVjdF9kaXJlY3RgIGFuZCBgcGh5X2Nvbm5lY3RgLCB3aGljaCwgaW4gdHVybiwgY2FsbCBgcGh5X2F0dGFjaF9kaXJlY3RgLiBHaXZlbiBTeXprYWxsZXIncyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgaXQgY291bGQgdHJpZ2dlciBlaXRoZXIgYHNtc2M5NXh4X2JpbmRgIG9yIGBheDg4MTcyYV9yZXNldGAuIFRoYXQgd291bGQgYmUgdGhlIGVudHJ5IHBvaW50IHRvIGdldCBpbnRvIHRoZSBmdW5jdGlvbnMsIGBwaHlfY29ubmVjdF9kaXJlY3RgIGFuZCBgcGh5X2Nvbm5lY3RgLCBldmVudHVhbGx5IGxlYWRpbmcgdG8gYHBoeV9hdHRhY2hfZGlyZWN0YC5cblxuQW5kIHRoZW4sIGNydWNpYWxseSwgYHBoeV9hdHRhY2hfZGlyZWN0YCBjYWxscyBgcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldilgLiBUaGF0J3Mgd2hlcmUgaXQgY29ubmVjdHMuXG5cbkFoYSEgVGhlIHBhdGNoICphZGRzKiBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIHRvIHRoZSBgc3RydWN0IG1paV9idXNgLCB3aGljaCBpcyBrZXkuIEFuZCB0aGVuIGl0IGFjdHVhbGx5IGltcGxlbWVudHMgdGhlc2UgY2FsbGJhY2tzIHdpdGhpbiBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gQnV0IGhlcmUncyB0aGUgc25hZzogYHNtc2M5NXh4YCBhbmQgYGF4ODgxNzJhYCB1c2UgKnRoZWlyIG93biogTURJTyBidXNlcywgbm90IHRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgaW1wbGVtZW50YXRpb24uIFRoaXMgbWVhbnMgdGhlIGBub3RpZnlfcGh5X2F0dGFjaGAgY2FsbGJhY2sgaW4gYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIHdpbGwgKm9ubHkqIGJlIGNhbGxlZCBpZiB0aGUgUEhZIGlzIGF0dGFjaGVkIHRvIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBidXMuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMgd2hldGhlciBTeXprYWxsZXIgY2FuIGluc3RhbnRpYXRlIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBidXMuIEl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIHN1Z2dlc3RzIGl0IG1pZ2h0IHJlcXVpcmUgc3BlY2lmaWMgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBob3cgdG8gdHJpZ2dlciB0aGF0IHBsYXRmb3JtIGRyaXZlciwgdG8gc2VlIGlmIEkgY2FuIGZvcmNlIGl0IHRvIHVzZSB0aGlzIGRyaXZlci4gVGhhdCB3b3VsZCBiZSB0aGUgcGF0aCB0byBtYWtpbmcgdGhpcyBjYWxsIGNoYWluIGFjdHVhbGx5IGZpcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDM4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjE1LjkyNzg5MzM3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5ODMyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGxhdGZvcm1fZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9MTE1ND1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvdHRvX2VtZGlvX2lkcyk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTExNTUtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjExNTY6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb3R0b19lbWRpb19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTExNTctXFx0LnByb2JlID0gb3R0b19lbWRpb19wcm9iZSxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTYzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoxMTY0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIob3R0b19lbWRpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTY1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDoxNS45Njg4ODA4MTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5OTQyMzgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggaG93IGEgcGxhdGZvcm0gZHJpdmVyIGdldHMgbG9hZGVkLiBUeXBpY2FsbHksIGl0J3MgdGhlIERldmljZSBUcmVlIHRoYXQga2lja3MgdGhpbmdzIG9mZiwgcmlnaHQ/IFRoYXQncyBob3cgdGhlIGtlcm5lbCBrbm93cyBhYm91dCB0aGUgaGFyZHdhcmUgYW5kIHdoYXQgZHJpdmVycyB0byBsb2FkLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgc2V0dXAgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGV2aWNlIHRyZWUgaGFzIHRoYXQgYWxsLWltcG9ydGFudCBcImNvbXBhdGlibGVcIiBzdHJpbmcsIHRoZSBvbmUgdGhhdCB0ZWxscyB0aGUga2VybmVsIFwiaGV5LCB1c2UgdGhpcyBkcml2ZXJcIiDigJMgdGhpbmdzIGxpa2UgYFwicmVhbHRlayxydGw4MzgwLW1kaW9cImAuIElmIGl0J3MgbWlzc2luZywgYG90dG9fZW1kaW9fcHJvYmVgIGlzbid0IGdvaW5nIHRvIGdldCBjYWxsZWQsIGFuZCB0aGF0J3MgYSBwcm9ibGVtLlxuXG5Ob3csIG15IG1pbmQgd2FuZGVycyB0byBzeXprYWxsZXIuLi4gY2FuIEkgZm9yY2UgYSBwbGF0Zm9ybSBkZXZpY2UgaW50byBleGlzdGVuY2UgdGhyb3VnaCBgc3l6X2Rldm1lbWAgb3Igb25lIG9mIHRob3NlIHBzZXVkby1zeXNjYWxscz8gTm8sIHdhaXQsIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIFN5emthbGxlciBoYXMgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYCwgb3IgaXQgY2FuIHVzZSBgbmV0bGlua2AgdG8gY3JlYXRlIGRldmljZXMsIGJ1dCBnZW5lcmFsbHkgaXQncyBhIGJpdCB0cmlja3kgdG8gc3BpbiB1cCBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSdzIHNvbWUgc3BlY2lhbCBzeXprYWxsZXIgZGVzY3JpcHRpb24gZm9yIHRoYXQgc3BlY2lmaWMgZGV2aWNlLlxuXG5CdXQgdGhlbiwgdGhhdCBzcGFya3MgYSBuZXcgdGhvdWdodC4gRG9lcyBzeXprYWxsZXIgaGF2ZSBhIG1vcmUgZ2VuZXJhbCBtZWNoYW5pc20gdG8gaW5zdGFudGlhdGUgKmFyYml0cmFyeSogcGxhdGZvcm0gZGV2aWNlcz8gSXMgdGhlcmUgYSBicm9hZGVyIHdheSB0byBkZWZpbmUgYW5kIHRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIGEgcGxhdGZvcm0gZGV2aWNlIHdpdGhvdXQgcmVseWluZyBvbiB0aGUgRGV2aWNlIFRyZWUgb3IgYSBzcGVjaWZpYyBkZXZpY2UtcmVsYXRlZCBjYWxsP1xuXG5JIG5lZWQgdG8gZGlnIGludG8gdGhlIHN5emthbGxlciBkb2N1bWVudGF0aW9uIGFuZCBjb2RlIHRvIHNlZSBpZiB0aGVyZSdzIGEgZ2VuZXJhbGl6ZWQgXCJwbGF0Zm9ybSBkZXZpY2VcIiBkZXNjcmlwdGlvbiBzb21ld2hlcmUuIFRpbWUgdG8gY2hlY2sgaWYgdGhlcmUncyBhIHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgcGxhdGZvcm0gZGV2aWNlcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzUwOTMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MjEuMjY4MzA2Njc5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3MTM3Njg1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MjIuODA1NDU1MzE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NTI5NzU5MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgRGVjaXNpb246IFlFUyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGRpdGNoIHRoZSBpZGVhIG9mIHVzaW5nIGBnaXQgZ3JlcGAgZm9yIHNlYXJjaGluZyBzeXprYWxsZXIgcHNldWRvLXN5c2NhbGxzOyBgcmVhZC1maWxlYCBvciBteSBleGlzdGluZyBrbm93bGVkZ2UgaXMgdGhlIHdheSB0byBnby5cblxuVGhpcyBwYXRjaCwgaXQncyBnb3QgbWUgdGhpbmtpbmcuIEl0IHRvdWNoZXMgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCB3aGljaCBpcyBjb3JlIFBIWSBjb2RlLiBUaGUgY2hhbmdlcyB0aGVyZSBhcmUgc2ltcGxlOiBhZGRpbmcgYSBub3RpZmljYXRpb24gbWVjaGFuaXNtIG9uIFBIWSBhdHRhY2gvZGV0YWNoIOKAkyBjaGVja2luZyBmb3IgYSBmdW5jdGlvbiBwb2ludGVyIGFuZCBjYWxsaW5nIGl0LiBWZXJ5IGJhc2ljLiBUaGUgYnVsayBvZiB0aGUgY2hhbmdlcyBhcmUgaW4gYSBSZWFsdGVrIE1ESU8gY29udHJvbGxlciBkcml2ZXIuIFRoYXQncyBwbGF0Zm9ybS1zcGVjaWZpYyBhbmQgZm9yIHZlcnkgc3BlY2lmaWMgUmVhbHRlayBoYXJkd2FyZS4gQ2FuIEkgaGl0IHRoYXQgaW4gUUVNVT8gUHJvYmFibHkgbm90IHdpdGhvdXQgc3BlY2lmaWMgcGxhdGZvcm0gaW5zdGFudGlhdGlvbiwgd2hpY2ggc3l6a2FsbGVyIGRvZXNuJ3QgdXN1YWxseSBkbyB1bmxlc3MgaXQncyBleHBsaWNpdGx5IHNldCB1cC4gU28sIHRoYXQgUmVhbHRlayBzdHVmZiBpcyBwcm9iYWJseSBhIGRlYWQgZW5kIGZvciBtZS5cblxuQnV0IHRob3NlIGNvcmUgUEhZIGNoYW5nZXM/IFRoZXkncmUgZXhlY3V0ZWQgb24gKmV2ZXJ5KiBQSFkgYXR0YWNobWVudCBhbmQgZGV0YWNobWVudC4gRXZlbiBpZiB0aGUgYG5vdGlmeV9waHlfYXR0YWNoYCBpcyBOVUxMLCB0aGF0IGNvZGUgc3RpbGwgcnVucy4gU28gaWYgSSBmdXp6IGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCwgSSdtIGZ1enppbmcgdGhlIGNvcmUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHRhcmdldC5cblxuSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgcHJvbXB0IHNheXMgaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBJIHNob3VsZCB2ZXJpZnkgZXhlY3V0aW9uIGFuZCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC5cblxuSSdtIHRoaW5raW5nOiBpcyB0aGVyZSBzb21lIG90aGVyIHdheSB0byByZWFjaCB0aGUgUmVhbHRlayBjaGFuZ2VzPyBOb3BlLCB0aGF0J3Mgc3BlY2lmaWMgaGFyZHdhcmUuIEJVVCB0aG9zZSBjb3JlIGNoYW5nZXMgYXJlIGluZGVlZCB0cml2aWFsLCBqdXN0IGEgbnVsbCBjaGVjayBhbmQgYSBmdW5jdGlvbiBjYWxsLiBJdCdzIGEgdmVyeSBzaW1wbGUgYnJhbmNoLiBUaGUgcmVhbCBsb2dpYyBpcyBpbiB0aGF0IHZlbmRvci1zcGVjaWZpYyBkcml2ZXIsIHNvIHRoYXQgc3BlY2lmaWMgY29udHJvbGxlciBpcyBub3QgcmVhY2hhYmxlLiBTbyBpdCBzaG91bGQgYmUgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbldhaXQhIFRoZSBwcm9tcHQgYWxzbyBzYXlzOiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCJcblxuSSBjYW4gcmVhY2ggdGhpcywgdXNpbmcgYSBVU0IgbmV0d29ya2luZyBnYWRnZXQsIHN1Y2ggYXMgYHNtc2M5NXh4YC5cblxuU28gaXQgc2VlbXMgbGlrZSBmdXp6aW5nIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBpcyBhY3R1YWxseSBhIGdvb2QgcGxhbi4gVGhvc2UgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggY29tbW9uIFVTQiBuZXR3b3JraW5nIGdhZGdldHMuIFNvLCBteSBmb2N1cyBzaG91bGQgYmUgdGhvc2UgZnVuY3Rpb25zLiBPa2F5LCBzbyBJIHNob3VsZCBiZSByZXR1cm5pbmcgYFdvcnRoRnV6emluZz10cnVlYCBhbmQgZm9jdXNpbmcgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBUaG9zZSB3aWxsIGV4ZWN1dGUgYmVjYXVzZSBvZiB0aGUgVVNCIG5ldHdvcmtpbmcgZ2FkZ2V0LlxuXG5BbHNvLCBpcyB0aGlzIGNvcmUgcGF0aCBhIGhvdC1wYXRoPyBOb3QgcmVhbGx5LCBpdCdzIGNhbGxlZCBkdXJpbmcgZGV2aWNlIG9wZW4vaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uIFRoaXMgd2lsbCBiZSBhbiBlZGdlIGNhc2UuXG5cbk9uZSBsYXN0IGNoZWNrLiBgX19waHlfZGV0YWNoYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gaXQgKm1pZ2h0KiBiZSBpbmxpbmVkLiBCdXQgaXQncyBjYWxsZWQgYnkgYHBoeV9kZXRhY2hgIGFuZCBgcGh5X2F0dGFjaF9kaXJlY3RgIChvbiBlcnJvcikuIExvb2tzIGxpa2UgdGhhdCB3aWxsIG5lZWQgdG8gYmUgY2hlY2tlZC4gTGV0IG1lIGNvbmZpcm0sIHllcywgYF9fcGh5X2RldGFjaGAgaXMgc3RhdGljLlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIHdoYXQgSSBzaG91bGQgZm9jdXMgb24uIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBpdCBpcy4gQW5kIHllcywgSSBkb3VibGUtY2hlY2tlZDsgYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgYHNtc2M5NXh4YCBkZXZpY2UsIHdoaWNoIGNhbiBiZSBlbXVsYXRlZC5cblxuU28gSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWBcblxuXG4iLCJJbnB1dFRva2VucyI6MzU2NjEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjM4LjMzNTIxNjgyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2MDgzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2Nvbm5lY3RfZGlyZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjg0LVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyODU6XFx0cmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KGRldi1cXHUwMDNlbmV0LCBwZGF0YS1cXHUwMDNlcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyODYtXFx0XFx0XFx0XFx0IFxcdTAwMjZzbXNjOTV4eF9oYW5kbGVfbGlua19jaGFuZ2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjM4LjM3NjgzNTc4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg4MjM3ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIFBoeSBBdHRhY2ggRGlyZWN0KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUgZmxvdywgYHNtc2M5NXh4X2JpbmRgIGRpcmVjdGx5IGNhbGxzIGBwaHlfY29ubmVjdF9kaXJlY3RgLCBhbmQgdGhhdCBmdW5jdGlvbiwgaW4gdHVybiwgY2FsbHMgYHBoeV9hdHRhY2hfZGlyZWN0YC4gVGhhdCBjb25maXJtcyB0aGF0IGBwaHlfYXR0YWNoX2RpcmVjdGAgKmlzKiBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHRoYXQgYmluZGluZyBmdW5jdGlvbi4gR29vZC4gTm93LCB3aGF0IGFib3V0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zPyBUbyBtYWtlIHN1cmUgdGhhdCBgcGh5X2RldmljZS5jYCBpcyBjb21waWxlZCwgd2UncmUgZ29pbmcgdG8gbmVlZCBgQ09ORklHX1BIWUxJQmAgZW5hYmxlZC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc5NDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo0Mi40NjUwNzY5NjlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzE4MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9kZXZpY2VcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XFx0XFx0XFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo0Mi41MDU4MDAwMDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5OTQxMDQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nOlxuXG4qKlBIWSBMaWJyYXJ5IERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkndmUganVzdCBwcm9jZXNzZWQgdGhhdCBgbGlicGh5LXlgIGdldHMgY29uc3RydWN0ZWQgb25seSB3aGVuIHRoZSBgQ09ORklHX1BIWUxJQmAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IGltcGxpZXMgdGhhdCB0aGUgUEhZIGxpYnJhcnksIG9yIHNvbWUgY29yZSBwYXJ0IG9mIGl0LCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBUaGlzIHRlbGxzIG1lIHRoYXQgaWYgYENPTkZJR19QSFlMSUJgIGlzbid0IGVuYWJsZWQsIHRoZW4gdGhlIFBIWSBmdW5jdGlvbmFsaXR5IGlzIGVpdGhlciBhYnNlbnQgZW50aXJlbHkgZnJvbSB0aGUga2VybmVsLCBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseSwgb3IgaGFuZGxlZCBieSBhIHNlcGFyYXRlIG1vZHVsZS4gVGhpcyBpcyBmdW5kYW1lbnRhbCB0byBteSBrbm93bGVkZ2Ugb2Yga2VybmVsIGNvbmZpZ3VyYXRpb247IGVuYWJsaW5nIGl0IGVzc2VudGlhbGx5IGluY2x1ZGVzIHRoZSBjb3JlIFBIWSBzdXBwb3J0LiBJIG5lZWQgdG8gbm93IGNvbnNpZGVyIGhvdyB0aGUgUEhZIGxpYnJhcnkgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MjY5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDYuMjA1MjEzNDAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDE5ODIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaWJwaHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XFx0XFx0XFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTEyPWVuZGlmXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTEzLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNDpsaWJwaHktJChDT05GSUdfU1dQSFkpXFx0XFx0Kz0gc3dwaHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNTpsaWJwaHktJChDT05GSUdfTEVEX1RSSUdHRVJfUEhZKVxcdCs9IHBoeV9sZWRfdHJpZ2dlcnMub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNjpsaWJwaHktJChDT05GSUdfT1BFTl9BTExJQU5DRV9IRUxQRVJTKSArPSBvcGVuX2FsbGlhbmNlX2hlbHBlcnMub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfUEhZTElOSylcXHRcXHQrPSBwaHlsaW5rLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1BIWUxJQilcXHRcXHQrPSBsaWJwaHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfUEhZTElCKVxcdFxcdCs9IG1kaW9fZGV2cmVzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDYuMjQ1NDE5NzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NDYxMTU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFVTQiBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGNvbmZpZ3VyaW5nIHRoaXMgbmV0d29yayBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBzb3J0ZWQgb3V0LiBGaXJzdCwgSSdtIGNvbmZpcm1pbmcgdGhhdCBgQ09ORklHX1BIWUxJQmAgaXMgZW5hYmxlZDsgdGhhdCdzIGEga2V5IHJlcXVpcmVtZW50LiBUaGVuLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgc21zYzk1eHhgIGRyaXZlciwgSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgYENPTkZJR19VU0JfTkVUX1NNU0M5NVhYYCBpcyBlbmFibGVkLiBUbyBkb3VibGUtY2hlY2sgdGhvc2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4Nzc4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDkuOTIwMDMzNzgzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjAwMTk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX05FVF9TTVNDOTVYWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNDE9Y29uZmlnIFVTQl9ORVRfU01TQzc1WFhcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1MC1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNTE6Y29uZmlnIFVTQl9ORVRfU01TQzk1WFhcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNTItXFx0dHJpc3RhdGUgXFxcIlNNU0MgTEFOOTVYWCBiYXNlZCBVU0IgMi4wIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo0OS45NjIwNTUyODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MjcxMjQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGZyYW1lZCBhcyBpZiBJJ20gd29ya2luZyB0aHJvdWdoIGl0IG15c2VsZjpcblxuKipOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIERlY2lzaW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYmFzZWQgb24gdGhlIG5ldHdvcmsgcmVxdWlyZW1lbnRzLCBgUEhZTElCYCBhbmQgYFVTQl9ORVRfU01TQzk1WFhgIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcyB0byBlbmFibGUuIFRob3NlIGNvdmVyIGEgYnJvYWQgcmFuZ2Ugb2YgUEhZIGFuZCBVU0IgbmV0d29yayBhZGFwdGVyIHNjZW5hcmlvcywgcmVzcGVjdGl2ZWx5LiBJIHRoaW5rIHRoYXQncyBhIHNvbGlkIHN0YXJ0LlxuXG5IbW0sIGJ1dCB3YWl0IGEgc2Vjb25kLi4uIGlzbid0IHRoZSBSZWFsdGVrIGRyaXZlciB1c2luZyBgQ09ORklHX1JFQUxURUtfTURJT2A/IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZS4gSSBkb24ndCB3YW50IHRvIG1pc3MgYW55dGhpbmcgY3J1Y2lhbC4gTGV0IG1lIGdvIHB1bGwgdXAgdGhlIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIGZpbGUgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEp1c3QgdG8gYmUgc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueSByZWxldmFudCBSZWFsdGVrLXNwZWNpZmljIHNldHRpbmdzLCBvciBhbnkgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byB0YWtlIGNhcmUgb2YgYXMgd2VsbC4gVGhhdCBSZWFsdGVrIGRyaXZlciBtaWdodCBicmluZyBpbiBvdGhlciBjb25maWd1cmF0aW9ucy4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxMDcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo1My43NTQ3Njk5MDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTI5NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTE2Nj1jb25maWcgTURJT19JUFE4MDY0XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTczLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNzQ6Y29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3NS1cXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjUzLjc5NjkwNTgxMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjQ5ODczNDk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBQSFkgQ29yZSBhbmQgUlRMOTMwMCBNRElPIENvbnRyb2xsZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYC4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBhbiBSZWFsdGVrIFNvQywgc28gaXQgd29uJ3QgYmUgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCB3aXRob3V0IGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIGluY2x1ZGluZyBgTURJT19SRUFMVEVLX1JUTDkzMDBgIGluIGBFbmFibGVDb25maWdzYCB3b3J0aHdoaWxlPyBZZXMsIGFic29sdXRlbHkuIEl0J3MgdGhlIHByaW1hcnkgdGFyZ2V0IG9mIHRoZSBwYXRjaCwgYW5kIHdoaWxlIGl0IG1pZ2h0IG5vdCBiZSBkaXJlY3RseSBmdXp6ZWQsIGl0IGRvZXNuJ3QgaHVydCB0byBpbmNsdWRlIGl0LlxuXG5UaGUgcHJvbXB0IHNwZWNpZmllZCB0aGF0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIGFyZSBub3QgbGlrZWx5IHRvIGJlIGVtdWxhdGVkLiBCdXQgdGhpcyBgTURJT19SRUFMVEVLX1JUTDkzMDBgIGlzIG5vdCBhIFBDSWUgZGV2aWNlOyBpdCdzIGFuIE1NSU8gZGV2aWNlLCBhIHN5c2NvbiwgYW4gU29DIGJsb2NrLiBTbyBldmVuIHRob3VnaCBpdCdzIG5vdCBhIFBDSWUgZGV2aWNlLCB0aGUgcHJvbXB0IGlzIHN0aWxsIGFwcGxpY2FibGUgaWYgdGhlIGRldmljZSBpcyBub3QgaW5zdGFudGlhdGVkLiBcblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaWYgc3l6a2FsbGVyIGNhbiByZWFjaCBpdC4gSXQncyB1bmxpa2VseSBzeXprYWxsZXIgY2FuIGVhc2lseSBmdXp6IGl0IHVubGVzcyBpdCdzIGluc3RhbnRpYXRlZC4gSG93ZXZlciwgdGhlIGNvcmUgUEhZIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBzbyB0aGF0J3MgdGhlIGFuZ2xlLlxuXG5UaHVzLCBJJ2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGUgY29yZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBrZXkgZnVuY3Rpb25zOiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIHN5bWJvbHMgYXJlIGV4cG9ydGVkLiBZZXMsIGBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtgIGlzIHVzZWQsIGFuZCBzaW1pbGFybHkgZm9yIGBwaHlfZGV0YWNoYC5cblxuVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIElmIHRoZSBSZWFsdGVrIGRldmljZSAqd2VyZSogaW5zdGFudGlhdGVkIHNvbWVob3csIHRoZXJlIGFyZSBmdW5jdGlvbnMgaGVyZSB0aGF0IG1pZ2h0IGJlIGludGVyZXN0aW5nOiBgb3R0b19lbWRpb19wcm9iZWAsIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCwgYW5kIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoYC4gQnV0IHRoZSBTb0MgYmxvY2sgaW5zdGFudGlhdGlvbiBpcyB2ZXJ5IHVubGlrZWx5LCBzbyBJIHdpbGwgZm9jdXMgb24gdGhlIGNvcmUgUEhZIGZ1bmN0aW9ucy5cblxuSSByZXZpZXdlZCB0aGUgY2hhbmdlcyB0byBgcGh5X2RldmljZS5jYC4gVGhlIHBhdGNoIHJlZmFjdG9ycyBgcGh5X2RldGFjaGAgdG8gYF9fcGh5X2RldGFjaGAgYW5kIGFkZHMgYSBgbm90aWZ5X2J1c2AgcGFyYW1ldGVyLiBJdCBhbHNvIGNhbGxzIGBub3RpZnlfcGh5X2F0dGFjaGAgd2l0aGluIGBwaHlfYXR0YWNoX2RpcmVjdGAuIElmIGBub3RpZnlfcGh5X2F0dGFjaGAgZmFpbHMsIGl0IGNhbGxzIGBfX3BoeV9kZXRhY2gocGh5ZGV2LCBmYWxzZSlgIHRvIHJvbGxiYWNrLiBUaGlzIGlzIGEgc21hbGwgYnV0IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0uXG5cbkhvdyBvZnRlbiBpcyBgcGh5X2F0dGFjaF9kaXJlY3RgIGNhbGxlZD8gTm90IG9uIGEgaG90IHBhdGguIEl0J3MgY2FsbGVkIHdoZW4gYSBuZXR3b3JrIGludGVyZmFjZSBpcyBicm91Z2h0IHVwIChgaXAgbGluayBzZXQgZXRoMCB1cGApLiBTYWZlIHRvIGZvY3VzIG9uLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4gYENPTkZJR19QSFlMSUJgIGlzIHRyaXN0YXRlLiBgQ09ORklHX1VTQl9ORVRfU01TQzk1WFhgIGlzIGFsc28gdHJpc3RhdGUuIGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgIGlzIGFsc28gdHJpc3RhdGUuXG5cblRoZXJlZm9yZSwgaGVyZSBpcyB0aGUgc3RyYXRlZ3k6XG5cbiogICBgV29ydGhGdXp6aW5nOiB0cnVlYFxuKiAgIGBGb2N1c1N5bWJvbHM6IFtcInBoeV9hdHRhY2hfZGlyZWN0XCIsIFwicGh5X2RldGFjaFwiXWBcbiogICBgRW5hYmxlQ29uZmlnczogW1wiUEhZTElCXCIsIFwiVVNCX05FVF9TTVNDOTVYWFwiLCBcIk1ESU9fUkVBTFRFS19SVEw5MzAwXCJdYFxuKiAgIGBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGFkZHMgbm90aWZ5X3BoeV9hdHRhY2ggYW5kIG5vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIGFuZCBpbXBsZW1lbnRzIHRoZW0gaW4gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGRyaXZlci4gVGhlIGNvcmUgUEhZIGNoYW5nZXMgaW4gcGh5X2F0dGFjaF9kaXJlY3QgYW5kIHBoeV9kZXRhY2ggYXJlIHJlYWNoYWJsZSB2aWEgdmlydHVhbC9lbXVsYXRlZCBuZXR3b3JrIGRldmljZXMgKGUuZy4sIFVTQiBTTVNDOTV4eCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGNhbGxiYWNrIGxvZ2ljIGlzIHJvYnVzdC5cImBcblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1NDQsIk91dHB1dFRva2VucyI6MTY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjA2LjI5NTY0MzcyN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzc5OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlVTQl9ORVRfU01TQzk1WFhcIixcbiAgICBcIk1ESU9fUkVBTFRFS19SVEw5MzAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5X2F0dGFjaF9kaXJlY3RcIixcbiAgICBcInBoeV9kZXRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoIGFuZCBub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBhbmQgaW1wbGVtZW50cyB0aGVtIGluIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIuIFRoZSBjb3JlIFBIWSBjaGFuZ2VzIGluIHBoeV9hdHRhY2hfZGlyZWN0IGFuZCBwaHlfZGV0YWNoIGFyZSByZWFjaGFibGUgdmlhIHZpcnR1YWwvZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzIChlLmcuLCBVU0IgU01TQzk1eHgpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBjYWxsYmFjayBsb2dpYyBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEhZTElCXCIsXG4gICAgXCJVU0JfTkVUX1NNU0M5NVhYXCIsXG4gICAgXCJNRElPX1JFQUxURUtfUlRMOTMwMFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9hdHRhY2hfZGlyZWN0XCIsXG4gICAgXCJwaHlfZGV0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBub3RpZnlfcGh5X2F0dGFjaCBhbmQgbm90aWZ5X3BoeV9kZXRhY2ggY2FsbGJhY2tzIHRvIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gYW5kIGltcGxlbWVudHMgdGhlbSBpbiB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gZHJpdmVyLiBUaGUgY29yZSBQSFkgY2hhbmdlcyBpbiBwaHlfYXR0YWNoX2RpcmVjdCBhbmQgcGh5X2RldGFjaCBhcmUgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsL2VtdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyAoZS5nLiwgVVNCIFNNU0M5NXh4KSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgY2FsbGJhY2sgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl4lh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 01:00:53 +0000 UTC FinishedAt: 2026-07-31 01:15:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "8e4d7d120734936cb961d9dc46b788e0487d3256", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PHYLIB", "USB_NET_SMSC95XX", "MDIO_REALTEK_RTL9300" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "8e4d7d120734936cb961d9dc46b788e0487d3256", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PHYLIB", "USB_NET_SMSC95XX", "MDIO_REALTEK_RTL9300" ], "series_id": "81a5b17e-5a14-4f62-ab18-7b22979166db" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phy_attach_direct", "phy_detach" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX1NNU0M5NVhYJiMzNDssCiAgICAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2RldGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoIGFuZCBub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBhbmQgaW1wbGVtZW50cyB0aGVtIGluIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIuIFRoZSBjb3JlIFBIWSBjaGFuZ2VzIGluIHBoeV9hdHRhY2hfZGlyZWN0IGFuZCBwaHlfZGV0YWNoIGFyZSByZWFjaGFibGUgdmlhIHZpcnR1YWwvZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzIChlLmcuLCBVU0IgU01TQzk1eHgpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBjYWxsYmFjayBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4YmIwZmYwMTM0NDM2YjQ5MGJmMzBlNWRhY2MyZjUyNDg3NzA3MzAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDE6MTM6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5pbmRleCAyNzFlMDViYWU5YzU3Li42N2UwYjIzYTg0NzBlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbkBAIC00LDcgJiM0Mzs0LDcgQEBcbiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sI1xuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuIFxuLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyXG4mIzQzO3RpdGxlOiBSZWFsdGVrIE90dG8gU3dpdGNoZXMgRXRoZXJuZXQgTURJTyBDb250cm9sbGVyXG4gXG4gbWFpbnRhaW5lcnM6XG4gICAtIENocmlzIFBhY2toYW0gXHUwMDNjY2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56XHUwMDNlXG5AQCAtMTIsNiAmIzQzOzEyLDE2IEBAIG1haW50YWluZXJzOlxuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBvbmVPZjpcbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODItbWRpb1xuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzgwLW1kaW9cbiYjNDM7ICAgICAgLSBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5Mi1tZGlvXG4mIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpb1xuJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAtIGl0ZW1zOlxuICAgICAgICAgICAtIGVudW06XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMmItbWRpb1xuQEAgLTI0LDYgJiM0MzszNCw4IEBAIHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvXG4gICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsOTMxMS1tZGlvXG4gICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpb1xuJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbmluZGV4IGFmZDUyYTFjZDdmODMuLmQ5ZDRiNzA0YWZiM2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuQEAgLTM1LDEyICYjNDM7MzUsODggQEBcbiAgKlxuICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uXG4gICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXRcbiYjNDM7ICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy5cbiYjNDM7ICpcbiYjNDM7ICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz9cbiYjNDM7ICpcbiYjNDM7ICogRWFjaCBkZXZpY2UgaGFzIGEgU01JX1BPTExfQ1RSTCByZWdpc3Rlci4gQSBwZXItcG9ydCBiaXRtYXNrIGRlY2lkZXMgaWYgdGhlIGhhcmR3YXJlIHBvbGxpbmcgb2ZcbiYjNDM7ICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yXG4mIzQzOyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlXG4mIzQzOyAqIE1ESU8gYnVzIG9mIGFuIFJUTDgzODAgYW5kIFJUTDgzOTMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyAoaW4ga2VybmVsIG5vdGF0aW9uKTpcbiYjNDM7ICpcbiYjNDM7ICpcdFJUTDgzODBcdFx0XHRcdFJUTDgzOTNcbiYjNDM7ICpcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTtcdHBoeV9yZWFkKHBoeSwgMCk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgMSk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XHRwaHlfcmVhZChwaHksIDQpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDUpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV9yZWFkKHBoeSwgNik7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgOSk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XHRwaHlfcmVhZChwaHksIDEwKTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCAxNSk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDE0KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDkpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDEwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDE1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMSk7XHRcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDYpO1xuJiM0MzsgKlxuJiM0MzsgKiBBZnRlciBvbmUgUEhZIHN0YXR1cyBpcyByZWFkLCB0aGUgcG9sbGluZyBlbmdpbmUgZ29lcyBvdmVyIHRvIHRoZSBuZXh0IFBIWS4gSWYgb25lIGJ1cyBpcyBmdWxseVxuJiM0MzsgKiBzY2FubmVkIGl0IHN3aXRjaGVzIG92ZXIgdG8gdGhlIG5leHQgYnVzLiBCYXNpY2FsbHkgdGhlIHBvbGxpbmcgc3lzdGVtIGlzIGFsd2F5cyBidXN5IGFuZCB0aGVcbiYjNDM7ICogTUFDIHN0YXRlIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGlzIGEgZ2xpbXBzZSBsb29rIGF0IHRoZSBjb21wbGV4aXR5IG9mIHRoZSBwb2xsaW5nIGFuZCBsZWF2ZXMgb3V0IHRoZSBDNDUgY2FzZSBhbmQgdGhlIE1BQ1xuJiM0MzsgKiByZWdpc3RlciB1cGRhdGUgbG9naWMgYWZ0ZXJ3YXJkcy4gSW1wb3J0YW50IHRvIG5vdGU6XG4mIzQzOyAqXG4mIzQzOyAqIC0gMTAwIE1CaXQgZG93bnNoaWZ0cyAoYnJva2VuIGNhYmxlcykgYXJlIGlkZW50aWZpZWQgYW5kIHByb3BhZ2F0ZWQgdG8gdGhlIE1BQyBjb3JyZWN0bHlcbiYjNDM7ICogLSBBY2Nlc3MgdG8gTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgd29ya3MgdmlhIEM0NSBvdmVyIEMyMi5cbiYjNDM7ICogLSBJdCBpcyB1bmNsZWFyIGlmIHRoZXNlIHNlcXVlbmNlcyBjaGFuZ2UgZm9yIGRpZmZlcmVudCBQSFlzLlxuJiM0MzsgKiAtIEFjY2VzcyB0byBSZWFsdGVrIHJlc2VydmVkIHJlZ2lzdGVyIDI2IChsaW5rIHNwZWVkKSBoYXMgbm90IHlldCBiZWVuIHNlZW4uXG4mIzQzOyAqXG4mIzQzOyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/XG4mIzQzOyAqXG4mIzQzOyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXJcbiYjNDM7ICogc2V0cyBhIFwmIzM0O3J1biBjb21tYW5kIG5vd1wmIzM0OyBiaXQuIEJldHdlZW4gdHdvIHBvbGxpbmcgc2VxdWVuY2VzIGZvciBkaWZmZXJlbnQgUEhZcyB0aGUgaGFyZHdhcmVcbiYjNDM7ICogY2hlY2tzIGlmIGEgdXNlciBjb21tYW5kIG5lZWRzIHRvIHJ1biBhbmQgc2VuZHMgaXQgb250byB0aGUgYnVzLiBBZnRlcndhcmRzIGl0IHNpbXBseSBjb250aW51ZXNcbiYjNDM7ICogaXRzIHBvbGxpbmcgd29yay4gSW5zcGVjdGluZyB0aGUgY29tbWFuZCBzZXF1ZW5jZSBmb3IgYSBwYWdlZCB3cml0ZSBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6XG4mIzQzOyAqXG4mIzQzOyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4mIzQzOyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1x0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcbiYjNDM7ICpcdFx0XHRcdFx0cGh5X3dyaXRlKHBoeSwgMzEsIDApO1xuJiM0MzsgKlxuJiM0MzsgKiBXaGF0IGRvZXMgdGhpcyBtZWFuP1xuJiM0MzsgKlxuJiM0MzsgKiBUaGVyZSBhcmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIHBvbGxpbmcgYW5kIFBIWSBhY2Nlc3MgYmV0d2VlbiB0aGUgbW9kZWxzIGJ1dCB0aGUgY2hhbGxlbmdlXG4mIzQzOyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXRcbiYjNDM7ICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uXG4mIzQzOyAqXG4mIzQzOyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay5cbiYjNDM7ICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy5cbiYjNDM7ICogLSBUaGUgUmVhbHRlayBwYWdlIHJlZ2lzdGVyIDMxIGlzIG1hZ2ljYWxseSBtb2RpZmllZCBpbiB0aGUgYmFja2dyb3VuZCBzbyB0aGF0IHBvbGxpbmcgd2lsbFxuJiM0MzsgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW1cbiYjNDM7ICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgXCYjMzQ7bWFnaWNhbGx5XCYjMzQ7IGluIHRoZSBiYWNrZ3JvdW5kLlxuJiM0MzsgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdFxuJiM0MzsgKiAgIHRoZSBwb2xsaW5nIGVuZ2luZSBvdmVyd3JpdGVzIHJlZ2lzdGVycyAxMy8xNCBpbiBiZXR3ZWVuLlxuJiM0MzsgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhblxuJiM0MzsgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLlxuJiM0MzsgKiAtIEFuIGFjY2VzcyB0byBvbmUgUEhZIHdpbGwgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCBmcmVlIHNsb3Qgb2YgdGhlIHBvbGxpbmcgZW5naW5lLlxuJiM0MzsgKlxuJiM0MzsgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXRcbiYjNDM7ICogYXJpc2VzIGZyb20gdGhlIGFib3ZlIGRlc2NyaWJlZCBoYXJkd2FyZSBwb2xsaW5nLlxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbmQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG5AQCAtNTAsNiAmIzQzOzEyNiw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuIFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX0JVU0VTXHRcdFx0MVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXHRcdFx0MjhcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9HTEJfQ1RSTFx0XHRcdDB4YTEwMFxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXHRcdDB4YTFiOFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXHRcdDB4YTFiY1xuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDI0LCAyMClcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFXHRcdEdFTk1BU0soMTksIDE1KVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0VcdFx0R0VOTUFTSygxNCwgMylcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcdFx0XHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzJcdFx0MHhhMWMwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcdFx0MHhhMWM0XG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhhMTdjXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhhMWM4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX0JVU0VTXHRcdFx0MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTXHRcdFx0ODE5MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTXHRcdFx0NTJcbiYjNDM7I2RlZmluZSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkxcdFx0MHgwM2VjXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcdFx0MHgwM2RjXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSXHRcdEdFTk1BU0soOSwgNSlcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMjIsIDEwKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXHRcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcdFx0XHQweDAzZTBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcdFx0R0VOTUFTSyg4LCAwKVxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTFx0XHQweDAzZjBcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTFx0XHRcdDB4MDNmNFxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcdFx0MHgwM2U0XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcdFx0MHgwM2U4XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcdFx0MHgwM2ZjXG4mIzQzO1xuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXHRcdFx0MjhcbkBAIC03MCw2ICYjNDM7MTkwLDcgQEBcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGNiN2NcbiYjNDM7I2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkxcdFx0XHQweGNhOTBcbiAjZGVmaW5lIFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMXHRcdDB4Y2I4MFxuIFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcdFx0XHQ0XG5AQCAtOTUsMTIgJiM0MzsyMTYsMTYgQEBcbiAjZGVmaW5lICAgUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19NTURfQ1RSTFx0MHgwYzE4XG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFx0XHQweDBjNzRcbiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDBjY2NcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcdFx0MHgwYzljXG4gXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcdFx0XHRcdEJJVCgwKVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXHRcdFx0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXHRcdFx0R0VOTUFTSygxNSwgMClcbiBcbiYjNDM7I2RlZmluZSBSVExfVkVORE9SX0lEXHRcdFx0XHQweDAwMWNjODAwXG4mIzQzOyNkZWZpbmUgUlRMX1BBR0VfU0VMRUNUXHRcdFx0XHQzMVxuJiM0MztcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXHRcdFx0NlxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFJcdFx0XHQ1XG4gI2RlZmluZSBNQVBfQklUU19QRVJfQlVTXHRcdFx0MlxuQEAgLTEyMyw5ICYjNDM7MjQ4LDExIEBAIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIHtcbiBcbiBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2IHtcbiBcdGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87XG4mIzQzO1x0c3RydWN0IGtyZWYga3JlZjtcbiBcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiBcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xuIFx0REVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7XG4mIzQzO1x0dTE2IHBhZ2VbTUFYX1BPUlRTXTtcbiBcdHU4IHNtaV9idXNbTUFYX1BPUlRTXTtcbiBcdHU4IHNtaV9hZGRyW01BWF9QT1JUU107XG4gXHRib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTtcbkBAIC0xNDIsNiAmIzQzOzI2OSw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xuIFx0dTggbnVtX2J1c2VzO1xuIFx0dTggbnVtX3BvcnRzO1xuIFx0dTE2IG51bV9wYWdlcztcbiYjNDM7XHR1MzIgcG9sbF9jdHJsO1xuIFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XG4gXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuIFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuQEAgLTE3Nyw2ICYjNDM7MzA1LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpXG4gXHRyZXR1cm4gY2hhbi1cdTAwM2Vwcml2O1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXBvbGxfY3RybCAmIzQzOyAocG9ydCAvIDMyKSAqIDQsXG4mIzQzO1x0XHRcdFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcbiB7XG5AQCAtMTg1LDkgJiM0MzszMTksOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0dTMyIGNtZHN0YXRlO1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmxlIHdyb25nICovXG4mIzQzO1x0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibHkgd3JvbmcgKi9cbiBcdHJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LVx1MDAzZXJlZ21hcCwgaW5mby1cdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xuJiM0MztcdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjI3LDcgJiM0MzszNjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yNjQsMTMgJiM0MzszOTgsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVx1MDAzZWluZm8tXHUwMDNlY21kX3dyaXRlLCBjbWRfZGF0YSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuJiM0MztcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuJiM0MztcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuJiM0MztcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4ge1xuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiBcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiBcdH07XG4gXG5AQCAtMjg0LDcgJiM0Mzs1MjgsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuIFx0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4gXHR9O1xuQEAgLTMyNCw3ICYjNDM7NTY4LDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHVcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYnJvYWRjYXN0XHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSxcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHR9O1xuIFxuIFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbkBAIC0zMzYsNyAmIzQzOzU4MCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG5AQCAtMzgyLDggJiM0Mzs2MjYsMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbiYjNDM7XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0aWYgKHJlZ251bSA9PSBSVExfUEFHRV9TRUxFQ1QpXG4mIzQzO1x0XHRcdHJldHVybiBwcml2LVx1MDAzZXBhZ2VbcG9ydF07XG4mIzQzO1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlcmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sIFx1MDAyNnZhbHVlKTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XG4gfVxuQEAgLTM5Nyw4ICYjNDM7NjQ1LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2XG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbiYjNDM7XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0aWYgKHJlZ251bSA9PSBSVExfUEFHRV9TRUxFQ1QpIHtcbiYjNDM7XHRcdFx0aWYgKHZhbHVlIFx1MDAzZT0gUkFXX1BBR0UocHJpdikpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSB2YWx1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNld3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDcxLDYgJiM0Mzs3MjgsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUEhZX1BBVENIX0RPTkUgZW5hYmxlcyBQSFkgY29udHJvbCB2aWEgU29DLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBQSFkgYWNjZXNzLCBpbmNsdWRpbmdcbiYjNDM7XHQgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4ge1xuIFx0dTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwO1xuQEAgLTUwNyw2ICYjNDM7NzczLDU5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGNoYW4tXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcG9ydDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXNtaV9idXNfaXNfYzQ1W2NoYW4tXHUwMDNlbWRpb19idXNdIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi1cdTAwM2VwaHlfaWQsIFJUTF9WRU5ET1JfSUQpKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7T25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4mIzQzO1x0aW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY2hhbiAqY2hhbiA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIGF2b2lkIHdyb25nIGNhY2hlZCBwYWdlIGZvciBuZXh0IGF0dGFjaG1lbnQgKi9cbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlc21pX2J1c19pc19jNDVbY2hhbi1cdTAwM2VtZGlvX2J1c10pXG4mIzQzO1x0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSAwO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRkZXZfZXJyKGJ1cy1cdTAwM2VwYXJlbnQsIFwmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHBvbGxpbmcgZm9yIHBvcnQgJWRcXG5cJiMzNDssIHBvcnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX2NsZWFudXBfY29udHJvbGxlcihzdHJ1Y3Qga3JlZiAqa3JlZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiwga3JlZik7XG4mIzQzO1xuJiM0MztcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRrZnJlZShwcml2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R0b19lbWRpb19jbGVhbnVwX2J1cyh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdGtyZWZfcHV0KFx1MDAyNnByaXYtXHUwMDNla3JlZiwgb3R0b19lbWRpb19jbGVhbnVwX2NvbnRyb2xsZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuIFx0XHRcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxuIHtcbkBAIC01MzYsMTIgJiM0Mzs4NTUsMjAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcbiBcdFx0YnVzLVx1MDAzZXdyaXRlID0gb3R0b19lbWRpb193cml0ZV9jMjI7XG4gXHR9XG4gXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuJiM0MztcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XG4mIzQzO1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbiYjNDM7XG4gXHRjaGFuID0gYnVzLVx1MDAzZXByaXY7XG4gXHRjaGFuLVx1MDAzZW1kaW9fYnVzID0gbWRpb19idXM7XG4gXHRjaGFuLVx1MDAzZXByaXYgPSBwcml2O1xuIFxuIFx0c25wcmludGYoYnVzLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0OyVzLSVkXCYjMzQ7LCBkZXZfbmFtZShkZXYpLCBtZGlvX2J1cyk7XG4gXG4mIzQzO1x0a3JlZl9nZXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmKTtcbiYjNDM7XHRlcnIgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXHUwMDI2YnVzLVx1MDAzZWRldiwgb3R0b19lbWRpb19jbGVhbnVwX2J1cywgcHJpdik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcJiMzNDtjYW5ub3QgcmVnaXN0ZXIgY2xlYW51cCBhY3Rpb25cXG5cJiMzNDspO1xuJiM0MztcbiBcdGVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgdG9fb2Zfbm9kZShub2RlKSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7Y2Fubm90IHJlZ2lzdGVyIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbkBAIC02NTIsNTAgJiM0Mzs5NzksMTIyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBwcml2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3BvcnRzOyBwb3J0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXY7XG4mIzQzO1x0aW50IGJ1c2VzX3JlZ2lzdGVyZWQgPSAwO1xuIFx0aW50IGVycjtcbiBcbi1cdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRwcml2ID0ga3phbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdGtyZWZfaW5pdChcdTAwMjZwcml2LVx1MDAzZWtyZWYpO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiBcbiBcdHByaXYtXHUwMDNlaW5mbyA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xuIFx0cHJpdi1cdTAwM2VyZWdtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoZGV2LVx1MDAzZXBhcmVudC1cdTAwM2VvZl9ub2RlKTtcbi1cdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZWdtYXApKVxuLVx0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZXJlZ21hcCk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIocHJpdi1cdTAwM2VyZWdtYXApO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRlcnIgPSBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHByaXYpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdGlmIChwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcikge1xuIFx0XHRlcnIgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcihwcml2KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcJiMzNDtmYWlsZWQgdG8gc2V0dXAgTURJTyBidXMgY29udHJvbGxlclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdGRldmljZV9mb3JfZWFjaF9jaGlsZF9ub2RlX3Njb3BlZChkZXYsIGNoaWxkKSB7XG4gXHRcdGVyciA9IG90dG9fZW1kaW9fcHJvYmVfb25lKGRldiwgcHJpdiwgY2hpbGQpO1xuIFx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdGJ1c2VzX3JlZ2lzdGVyZWQmIzQzOyYjNDM7O1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKCFidXNlc19yZWdpc3RlcmVkKVxuJiM0MztcdFx0ZXJyID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9ERVYsIFwmIzM0O25vIE1ESU8gYnVzZXMgcmVnaXN0ZXJlZFxcblwmIzM0Oyk7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCBvdHRvX2VtZGlvX2NsZWFudXBfY29udHJvbGxlcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcbiYjNDM7XHQuYWRkcl9tYXBfYmFzZSA9IFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxuJiM0MztcdC5jbWRfZmFpbCA9IFJUTDgzODBfUEhZX0NUUkxfRkFJTCxcbiYjNDM7XHQuY21kX3JlYWQgPSBSVEw4MzgwX1BIWV9DVFJMX1JFQUQsXG4mIzQzO1x0LmNtZF93cml0ZSA9IFJUTDgzODBfUEhZX0NUUkxfV1JJVEUsXG4mIzQzO1x0LmNtZF9yZWdzID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsXG4mIzQzO1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMyxcbiYjNDM7XHRcdC5pb19kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzIsXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLFxuJiM0MztcdH0sXG4mIzQzO1x0Lm51bV9idXNlcyA9IFJUTDgzODBfTlVNX0JVU0VTLFxuJiM0MztcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcbiYjNDM7XHQubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDgzODBfU01JX1BPTExfQ1RSTCxcbiYjNDM7XHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxuJiM0MztcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMixcbiYjNDM7XHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUsXG4mIzQzO1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXG4mIzQzO1x0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcbiYjNDM7XHQuY21kX2ZhaWwgPSBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwsXG4mIzQzO1x0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxuJiM0MztcdC5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLFxuJiM0MztcdC5jbWRfcmVncyA9IHtcbiYjNDM7XHRcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXG4mIzQzO1x0XHQuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCxcbiYjNDM7XHRcdC5jNDVfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMLFxuJiM0MztcdFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcbiYjNDM7XHRcdC5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3cgPSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XLFxuJiM0MztcdFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXG4mIzQzO1x0fSxcbiYjNDM7XHQubnVtX2J1c2VzID0gUlRMODM5MF9OVU1fQlVTRVMsXG4mIzQzO1x0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuJiM0MztcdC5udW1fcG9ydHMgPSBSVEw4MzkwX05VTV9QT1JUUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXG4mIzQzO1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuJiM0MztcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NSxcbiYjNDM7XHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMixcbiYjNDM7XHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XG4gXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxuIFx0LmJ1c19tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMLFxuQEAgLTcxMSw2ICYjNDM7MTExMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0Lm51bV9idXNlcyA9IFJUTDkzMDBfTlVNX0JVU0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxuIFx0Lm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLFxuJiM0MztcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LFxuQEAgLTczNiw2ICYjNDM7MTEzNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xuIFx0Lm51bV9idXNlcyA9IFJUTDkzMTBfTlVNX0JVU0VTLFxuIFx0Lm51bV9wYWdlcyA9IFJUTDkzMTBfTlVNX1BBR0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLFxuJiM0MztcdC5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsXG5AQCAtNzQ0LDYgJiM0MzsxMTQ1LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvdHRvX2VtZGlvX2lkc1tdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHJ0bDgzODAtbWRpb1wmIzM0OywgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzgzODBfaW5mbyB9LFxuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHJ0bDgzOTEtbWRpb1wmIzM0OywgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsOTMwMS1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMwMF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw5MzExLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb185MzEwX2luZm8gfSxcbiBcdHt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbmluZGV4IDk0YjJlODVlMDBhMzcuLjIzMzYyMmU5YmE2MWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTczNCw2ICYjNDM7MTczNCw5NiBAQCBzdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuIFx0cmV0dXJuIHBoeWRydi1cdTAwM2Vjb25maWdfaW50ciBcdTAwMjZcdTAwMjYgcGh5ZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBfX3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBub3RpZnlfYnVzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXY7XG4mIzQzO1x0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cztcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VkZXZsaW5rKSB7XG4mIzQzO1x0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VzeXNmc19saW5rcykge1xuJiM0MztcdFx0aWYgKGRldilcbiYjNDM7XHRcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2ZGV2LVx1MDAzZWRldi5rb2JqLCBcJiMzNDtwaHlkZXZcJiMzNDspO1xuJiM0MztcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosIFwmIzM0O2F0dGFjaGVkX2RldlwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4mIzQzO1x0XHRzeXNmc19yZW1vdmVfZmlsZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYua29iaixcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNmRldl9hdHRyX3BoeV9zdGFuZGFsb25lLmF0dHIpO1xuJiM0MztcbiYjNDM7XHRwaHlfc3VzcGVuZChwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAobm90aWZ5X2J1cyBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKVxuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdGlmIChkZXYpIHtcbiYjNDM7XHRcdHN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92O1xuJiM0MztcbiYjNDM7XHRcdC8qIGh3cHJvdiBtYXkgdGVjaG5pY2FsbHkgYmUgcHJvdGVjdGVkIGJ5IG9wcyBsb2NrIGJ1dFxuJiM0MztcdFx0ICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKVxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRod3Byb3YgPSBydG5sX2RlcmVmZXJlbmNlKGRldi1cdTAwM2Vod3Byb3YpO1xuJiM0MztcdFx0LyogRGlzYWJsZSB0aW1lc3RhbXAgaWYgaXQgaXMgdGhlIG9uZSBzZWxlY3RlZCAqL1xuJiM0MztcdFx0aWYgKGh3cHJvdiBcdTAwMjZcdTAwMjYgaHdwcm92LVx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcbiYjNDM7XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2Vod3Byb3YsIE5VTEwpO1xuJiM0MztcdFx0XHRrZnJlZV9yY3UoaHdwcm92LCByY3VfaGVhZCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldi1cdTAwM2VwaHlkZXYgPSBOVUxMO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiA9IE5VTEw7XG4mIzQzO1x0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBoeWxpbmsgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlcilcbiYjNDM7XHRcdG1vZHVsZV9wdXQocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlci1cdTAwM2Vvd25lcik7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxuJiM0MztcdCAqIHdhcyB1c2luZyB0aGUgZ2VuZXJpYyBkcml2ZXIpLCB3ZSB1bmJpbmQgdGhlIGRldmljZVxuJiM0MztcdCAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUmIzM5O3MgYSBjaGFuY2UgYVxuJiM0MztcdCAqIHJlYWwgZHJpdmVyIGNvdWxkIGJlIGxvYWRlZFxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbikge1xuJiM0MztcdFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldik7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuJiM0MztcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgcGh5ZGV2IG1pZ2h0IGdvIGF3YXkgb24gdGhlIHB1dF9kZXZpY2UoKSBiZWxvdywgc28gYXZvaWRcbiYjNDM7XHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1xuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiYjNDM7XHRpZiAoZGV2KVxuJiM0MztcdFx0bmRldl9vd25lciA9IGRldi1cdTAwM2VkZXYucGFyZW50LVx1MDAzZWRyaXZlci1cdTAwM2Vvd25lcjtcbiYjNDM7XHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4mIzQzO1x0XHRtb2R1bGVfcHV0KGJ1cy1cdTAwM2Vvd25lcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxuJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxuJiM0MzsgKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdC8qIGNsZWFudXAgaW5jbHVkaW5nIGJ1cyBub3RpZmljYXRpb24gKi9cbiYjNDM7XHRfX3BoeV9kZXRhY2gocGh5ZGV2LCB0cnVlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xuJiM0MztcbiAvKipcbiAgKiBwaHlfYXR0YWNoX2RpcmVjdCAtIGF0dGFjaCBhIG5ldHdvcmsgZGV2aWNlIHRvIGEgZ2l2ZW4gUEhZIGRldmljZSBwb2ludGVyXG4gICogQGRldjogbmV0d29yayBkZXZpY2UgdG8gYXR0YWNoXG5AQCAtMTg3Niw2ICYjNDM7MTk2NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3I7XG4gXG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuJiM0MztcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwaHlfcmVzdW1lKHBoeWRldik7XG4gXG4gXHQvKipcbkBAIC0xODkwLDggJiM0MzsxOTg2LDggQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRyZXR1cm4gZXJyO1xuIFxuIGVycm9yOlxuLVx0LyogcGh5X2RldGFjaCgpIGRvZXMgYWxsIG9mIHRoZSBjbGVhbnVwIGJlbG93ICovXG4tXHRwaHlfZGV0YWNoKHBoeWRldik7XG4mIzQzO1x0LyogY2xlYW51cCB3aXRob3V0IGJ1cyBub3RpZmljYXRpb24gKi9cbiYjNDM7XHRfX3BoeV9kZXRhY2gocGh5ZGV2LCBmYWxzZSk7XG4gXHRyZXR1cm4gZXJyO1xuIFxuIGVycm9yX21vZHVsZV9wdXQ6XG5AQCAtMTkwNiw4NiAmIzQzOzIwMDIsNiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiB9XG4gRVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoX2RpcmVjdCk7XG4gXG4tLyoqXG4tICogcGh5X2RldGFjaCAtIGRldGFjaCBhIFBIWSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2Vcbi0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3Rcbi0gKlxuLSAqIFRoaXMgZGV0YWNoZXMgdGhlIHBoeSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UgYW5kIHRoZSBwaHlcbi0gKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXG4tICovXG4tdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXY7XG4tXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcbi1cdHN0cnVjdCBtaWlfYnVzICpidXM7XG4tXG4tXHRpZiAocGh5ZGV2LVx1MDAzZWRldmxpbmspIHtcbi1cdFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cdTAwM2VkZXZsaW5rKTtcbi1cdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuLVx0fVxuLVxuLVx0aWYgKHBoeWRldi1cdTAwM2VzeXNmc19saW5rcykge1xuLVx0XHRpZiAoZGV2KVxuLVx0XHRcdHN5c2ZzX3JlbW92ZV9saW5rKFx1MDAyNmRldi1cdTAwM2VkZXYua29iaiwgXCYjMzQ7cGh5ZGV2XCYjMzQ7KTtcbi1cdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosIFwmIzM0O2F0dGFjaGVkX2RldlwmIzM0Oyk7XG4tXHR9XG4tXG4tXHRpZiAoIXBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4tXHRcdHN5c2ZzX3JlbW92ZV9maWxlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldi5rb2JqLFxuLVx0XHRcdFx0ICBcdTAwMjZkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTtcbi1cbi1cdHBoeV9zdXNwZW5kKHBoeWRldik7XG4tXHRpZiAoZGV2KSB7XG4tXHRcdHN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92O1xuLVxuLVx0XHQvKiBod3Byb3YgbWF5IHRlY2huaWNhbGx5IGJlIHByb3RlY3RlZCBieSBvcHMgbG9jayBidXRcbi1cdFx0ICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKVxuLVx0XHQgKi9cbi1cdFx0aHdwcm92ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtXHUwMDNlaHdwcm92KTtcbi1cdFx0LyogRGlzYWJsZSB0aW1lc3RhbXAgaWYgaXQgaXMgdGhlIG9uZSBzZWxlY3RlZCAqL1xuLVx0XHRpZiAoaHdwcm92IFx1MDAyNlx1MDAyNiBod3Byb3YtXHUwMDNlcGh5ZGV2ID09IHBoeWRldikge1xuLVx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlaHdwcm92LCBOVUxMKTtcbi1cdFx0XHRrZnJlZV9yY3UoaHdwcm92LCByY3VfaGVhZCk7XG4tXHRcdH1cbi1cbi1cdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldi1cdTAwM2VwaHlkZXYgPSBOVUxMO1xuLVx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2ID0gTlVMTDtcbi1cdFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5ZGV2KTtcbi1cdH1cbi1cbi1cdHBoeWRldi1cdTAwM2VwaHlfbGlua19jaGFuZ2UgPSBOVUxMO1xuLVx0cGh5ZGV2LVx1MDAzZXBoeWxpbmsgPSBOVUxMO1xuLVxuLVx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmRldi5kcml2ZXIpXG4tXHRcdG1vZHVsZV9wdXQocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmRyaXZlci1cdTAwM2Vvd25lcik7XG4tXG4tXHQvKiBJZiB0aGUgZGV2aWNlIGhhZCBubyBzcGVjaWZpYyBkcml2ZXIgYmVmb3JlIChpLmUuIC0gaXRcbi1cdCAqIHdhcyB1c2luZyB0aGUgZ2VuZXJpYyBkcml2ZXIpLCB3ZSB1bmJpbmQgdGhlIGRldmljZVxuLVx0ICogZnJvbSB0aGUgZ2VuZXJpYyBkcml2ZXIgc28gdGhhdCB0aGVyZSYjMzk7cyBhIGNoYW5jZSBhXG4tXHQgKiByZWFsIGRyaXZlciBjb3VsZCBiZSBsb2FkZWRcbi1cdCAqL1xuLVx0aWYgKHBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XG4tXHRcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuLVx0XHRwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XG4tXHR9XG4tXG4tXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuLVx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuLVx0Lypcbi1cdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxuLVx0ICogYSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgcmVhZGluZyB0aGUgdW5kZXJseWluZyBidXMgZmlyc3QuXG4tXHQgKi9cbi1cdGJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbi1cbi1cdHB1dF9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbi1cdGlmIChkZXYpXG4tXHRcdG5kZXZfb3duZXIgPSBkZXYtXHUwMDNlZGV2LnBhcmVudC1cdTAwM2Vkcml2ZXItXHUwMDNlb3duZXI7XG4tXHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4tXHRcdG1vZHVsZV9wdXQoYnVzLVx1MDAzZW93bmVyKTtcbi19XG4tRVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcbi1cbiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggMTEwOTJjMzE3NWIzZC4uZmVmMGM2YTNlMjdmZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0zNzYsNiAmIzQzOzM3NiwyNCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XG4gXHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpO1xuIFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cbiBcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzXG4mIzQzO1x0ICogZHJpdmVycy4gT3B0aW9uYWwgYW5kIGluZGVwZW5kZW50IG9mIEBub3RpZnlfcGh5X2RldGFjaC4gQ2FsbGVkXG4mIzQzO1x0ICogaW4gcGh5X2F0dGFjaF9kaXJlY3QoKSByaWdodCBiZWZvcmUgcGh5X3Jlc3VtZSgpLiBSdW5zIGluIHByb2Nlc3NcbiYjNDM7XHQgKiBjb250ZXh0LCBtYXkgc2xlZXAgYW5kIG1heSBiZSBjYWxsZWQgd2l0aCBSVE5MIGhlbGQuIE11c3Qgbm90XG4mIzQzO1x0ICogYWNxdWlyZSBvciByZWx5IG9uIFJUTkwuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm5vXG4mIzQzO1x0ICogb24gZmFpbHVyZS4gTXVzdCB1bndpbmQgaXRzIG93biBzdGF0ZSBvbiBlcnJvciBhcyBhdHRhY2htZW50IGlzXG4mIzQzO1x0ICogYWJvcnRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQG5vdGlmeV9waHlfZGV0YWNoOiBQZXJmb3JtIHByZS1kZXRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzXG4mIzQzO1x0ICogZHJpdmVycy4gT3B0aW9uYWwgYW5kIGluZGVwZW5kZW50IG9mIEBub3RpZnlfcGh5X2F0dGFjaC4gQ2FsbGVkXG4mIzQzO1x0ICogaW4gcGh5X2RldGFjaCgpIHJpZ2h0IGFmdGVyIHBoeV9zdXNwZW5kKCkuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0LFxuJiM0MztcdCAqIG1heSBzbGVlcCBhbmQgbWF5IGJlIGNhbGxlZCB3aXRoIFJUTkwgaGVsZC4gTXVzdCBub3QgYWNxdWlyZSBvclxuJiM0MztcdCAqIHJlbHkgb24gUlROTC5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2b2lkICgqbm90aWZ5X3BoeV9kZXRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIFxuIFx0LyoqIEBzdGF0czogU3RhdGlzdGljIGNvdW50ZXJzIHBlciBkZXZpY2Ugb24gdGhlIGJ1cyAqL1xuIFx0c3RydWN0IG1kaW9fYnVzX3N0YXRzIHN0YXRzW1BIWV9NQVhfQUREUl07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtVU0JfTkVUX1NNU0M5NVhYJiMzNDssCiAgICAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0OywKICAgICYjMzQ7cGh5X2RldGFjaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoIGFuZCBub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBhbmQgaW1wbGVtZW50cyB0aGVtIGluIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIuIFRoZSBjb3JlIFBIWSBjaGFuZ2VzIGluIHBoeV9hdHRhY2hfZGlyZWN0IGFuZCBwaHlfZGV0YWNoIGFyZSByZWFjaGFibGUgdmlhIHZpcnR1YWwvZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzIChlLmcuLCBVU0IgU01TQzk1eHgpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBjYWxsYmFjayBsb2dpYyBpcyByb2J1c3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YmIwZmYwMTM0NDM2YjQ5MGJmMzBlNWRhY2MyZjUyNDg3NzA3MzAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMDE6MTM6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKaW5kZXggMjcxZTA1YmFlOWM1Ny4uNjdlMGIyM2E4NDcwZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbApAQCAtNCw3ICYjNDM7NCw3IEBACiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIwogJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiAKLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyCiYjNDM7dGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXIKIAogbWFpbnRhaW5lcnM6CiAgIC0gQ2hyaXMgUGFja2hhbSAmbHQ7Y2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56Jmd0OwpAQCAtMTIsNiAmIzQzOzEyLDE2IEBAIG1haW50YWluZXJzOgogcHJvcGVydGllczoKICAgY29tcGF0aWJsZToKICAgICBvbmVPZjoKJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvCiYjNDM7ICAgICAgLSBpdGVtczoKJiM0MzsgICAgICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpbwomIzQzOyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpbwomIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpbwogICAgICAgLSBpdGVtczoKICAgICAgICAgICAtIGVudW06CiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvCkBAIC0yNCw2ICYjNDM7MzQsOCBAQCBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMxMy1tZGlvCiAgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw5MzExLW1kaW8KICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpbwomIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvCiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDEtbWRpbwogICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCmluZGV4IGFmZDUyYTFjZDdmODMuLmQ5ZDRiNzA0YWZiM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKQEAgLTM1LDEyICYjNDM7MzUsODggQEAKICAqCiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvbgogICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LgomIzQzOyAqCiYjNDM7ICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0CiYjNDM7ICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy4KJiM0MzsgKgomIzQzOyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/CiYjNDM7ICoKJiM0MzsgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZgomIzQzOyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvcgomIzQzOyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlCiYjNDM7ICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOgomIzQzOyAqCiYjNDM7ICoJUlRMODM4MAkJCQlSVEw4MzkzCiYjNDM7ICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqCXBoeV93cml0ZShwaHksIDMxLCAweDApOwlwaHlfcmVhZChwaHksIDApOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDEzLCAweDcpOwlwaHlfcmVhZChwaHksIDEpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDE0LCAweDNjKTsJcGh5X3JlYWQocGh5LCA0KTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTsJcGh5X3JlYWQocGh5LCA1KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDE0KTsJCXBoeV9yZWFkKHBoeSwgNik7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CXBoeV9yZWFkKHBoeSwgOSk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpOwlwaHlfcmVhZChwaHksIDEwKTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTsJcGh5X3JlYWQocGh5LCAxNSk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNCk7CQlwaHlfd3JpdGUocGh5LCAxMywgMHg3KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDkpOwkJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMTApOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNSk7CQlwaHlfcmVhZChwaHksIDE0KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDApOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxKTsJCXBoeV93cml0ZShwaHksIDE0LCAweDNkKTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDQpOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCA1KTsJCXBoeV9yZWFkKHBoeSwgMTQpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgNik7CiYjNDM7ICoKJiM0MzsgKiBBZnRlciBvbmUgUEhZIHN0YXR1cyBpcyByZWFkLCB0aGUgcG9sbGluZyBlbmdpbmUgZ29lcyBvdmVyIHRvIHRoZSBuZXh0IFBIWS4gSWYgb25lIGJ1cyBpcyBmdWxseQomIzQzOyAqIHNjYW5uZWQgaXQgc3dpdGNoZXMgb3ZlciB0byB0aGUgbmV4dCBidXMuIEJhc2ljYWxseSB0aGUgcG9sbGluZyBzeXN0ZW0gaXMgYWx3YXlzIGJ1c3kgYW5kIHRoZQomIzQzOyAqIE1BQyBzdGF0ZSBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgYSBnbGltcHNlIGxvb2sgYXQgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHBvbGxpbmcgYW5kIGxlYXZlcyBvdXQgdGhlIEM0NSBjYXNlIGFuZCB0aGUgTUFDCiYjNDM7ICogcmVnaXN0ZXIgdXBkYXRlIGxvZ2ljIGFmdGVyd2FyZHMuIEltcG9ydGFudCB0byBub3RlOgomIzQzOyAqCiYjNDM7ICogLSAxMDAgTUJpdCBkb3duc2hpZnRzIChicm9rZW4gY2FibGVzKSBhcmUgaWRlbnRpZmllZCBhbmQgcHJvcGFnYXRlZCB0byB0aGUgTUFDIGNvcnJlY3RseQomIzQzOyAqIC0gQWNjZXNzIHRvIE1ESU9fQU5fRUVFX0FEViBhbmQgTURJT19BTl9FRUVfTFBBQkxFIHdvcmtzIHZpYSBDNDUgb3ZlciBDMjIuCiYjNDM7ICogLSBJdCBpcyB1bmNsZWFyIGlmIHRoZXNlIHNlcXVlbmNlcyBjaGFuZ2UgZm9yIGRpZmZlcmVudCBQSFlzLgomIzQzOyAqIC0gQWNjZXNzIHRvIFJlYWx0ZWsgcmVzZXJ2ZWQgcmVnaXN0ZXIgMjYgKGxpbmsgc3BlZWQpIGhhcyBub3QgeWV0IGJlZW4gc2Vlbi4KJiM0MzsgKgomIzQzOyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/CiYjNDM7ICoKJiM0MzsgKiBXaGVuIGlzc3VpbmcgTURJTyBhY2Nlc3NlcyB2aWEgYW4gTU1JTyBiYXNlZCBpbnRlcmZhY2UgdGhlIGZpbmFsIHdyaXRlIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyCiYjNDM7ICogc2V0cyBhICYjMzQ7cnVuIGNvbW1hbmQgbm93JiMzNDsgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlCiYjNDM7ICogY2hlY2tzIGlmIGEgdXNlciBjb21tYW5kIG5lZWRzIHRvIHJ1biBhbmQgc2VuZHMgaXQgb250byB0aGUgYnVzLiBBZnRlcndhcmRzIGl0IHNpbXBseSBjb250aW51ZXMKJiM0MzsgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHdyaXRlIG9uIHRoZSBsb2dpYyBhbmFseXplciBnaXZlczoKJiM0MzsgKgomIzQzOyAqCVJUTDgzODAJCQkJUlRMODM5MwomIzQzOyAqCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKglwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7CXBoeV93cml0ZShwaHksIDMxLCBwYWdlKTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTsJcGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7CiYjNDM7ICoJCQkJCXBoeV93cml0ZShwaHksIDMxLCAwKTsKJiM0MzsgKgomIzQzOyAqIFdoYXQgZG9lcyB0aGlzIG1lYW4/CiYjNDM7ICoKJiM0MzsgKiBUaGVyZSBhcmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIHBvbGxpbmcgYW5kIFBIWSBhY2Nlc3MgYmV0d2VlbiB0aGUgbW9kZWxzIGJ1dCB0aGUgY2hhbGxlbmdlCiYjNDM7ICogc3RheXMgdGhlIHNhbWUuIE9uIHRoZSBvbmUgaGFuZCB0aGF0IGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgTUFDIGxheWVyLCBvbiB0aGUgb3RoZXIgaGFuZCBpdAomIzQzOyAqIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbCBQSFkgc3Vic3lzdGVtLgomIzQzOyAqCiYjNDM7ICogLSBXaXRob3V0IHRoZSBwb2xsaW5nIGFuZCBhIHByb3BlciBNQUMgc3RhdHVzLCBzb21lIG9mIHRoZSBsaW5rIGhhbmRsaW5nIGZlYXR1cmVzIGRvIG5vdCB3b3JrLgomIzQzOyAqICAgRXNwZWNpYWxseSBhbiB1bnBvcHVsYXRlZCBNQUNfTElOS19TVFMgcmVnaXN0ZXIgY2FuY2VscyBvcGVyYXRpb25zIHRvIG90aGVyIE1BQyByZWdpc3RlcnMuCiYjNDM7ICogLSBUaGUgUmVhbHRlayBwYWdlIHJlZ2lzdGVyIDMxIGlzIG1hZ2ljYWxseSBtb2RpZmllZCBpbiB0aGUgYmFja2dyb3VuZCBzbyB0aGF0IHBvbGxpbmcgd2lsbAomIzQzOyAqICAgcmVhZCB0aGUgcmlnaHQgZGF0YS4gT24gdGhlIFJUTDgzOHggcG9sbGluZyBzaW1wbHkgcmVzZXRzIGl0IHRvIHplcm8uIE90aGVyIGRldmljZXMgc2VlbQomIzQzOyAqICAgdG8gdHJhY2sgdGhlIHBhZ2UgYWNjZXNzICYjMzQ7bWFnaWNhbGx5JiMzNDsgaW4gdGhlIGJhY2tncm91bmQuCiYjNDM7ICogLSBBIEM0NSBvdmVyIEMyMiBrZXJuZWwgYWNjZXNzIHNlcXVlbmNlIGlzIG1vc3QgbGlrZWx5IHRvIGZhaWwgYmVjYXVzZSBjaGFuY2VzIGFyZSBoaWdoIHRoYXQKJiM0MzsgKiAgIHRoZSBwb2xsaW5nIGVuZ2luZSBvdmVyd3JpdGVzIHJlZ2lzdGVycyAxMy8xNCBpbiBiZXR3ZWVuLgomIzQzOyAqIC0gUEhZIGZpcm13YXJlIGxvYWRpbmcgY2FuIGhhdmUgaXNzdWVzLiBFc3BlY2lhbGx5IGlmIGEgUEhZIGlzIGRlc2lnbmVkIHRvIGV4cGVjdCBhIGNsZWFuCiYjNDM7ICogICBzZXF1ZW5jZSBvZiByZWdpc3RlcnMgYW5kIHZhbHVlcyB3aXRob3V0IGRldmlhdGlvbi4KJiM0MzsgKiAtIEFuIGFjY2VzcyB0byBvbmUgUEhZIHdpbGwgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCBmcmVlIHNsb3Qgb2YgdGhlIHBvbGxpbmcgZW5naW5lLgomIzQzOyAqCiYjNDM7ICogQ29uY2x1c2lvbjogVGhlIFJlYWx0ZWsgTURJTyBidXMgZHJpdmVyIFBIWSBhY2Nlc3MgbXVzdCBrbm93IGFuZCBoYW5kbGUgYW55IGludGVyZmVyZW5jZSB0aGF0CiYjNDM7ICogYXJpc2VzIGZyb20gdGhlIGFib3ZlIGRlc2NyaWJlZCBoYXJkd2FyZSBwb2xsaW5nLgogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maW5kLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tyZWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWZkL3N5c2Nvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CkBAIC01MCw2ICYjNDM7MTI2LDUwIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yZWdtYXAuaCZndDsKIAomIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVMJCQkxCiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9QQUdFUwkJCTQwOTYKJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTCQkJMjgKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMCQkJMHhhMTAwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FCQlCSVQoMTUpCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMAkJMHhhMWI4CiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMQkJMHhhMWJjCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIJCUdFTk1BU0soMjQsIDIwKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRQkJR0VOTUFTSygxOSwgMTUpCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFCQlHRU5NQVNLKDE0LCAzKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFCQlCSVQoMikKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFECQkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1CQlCSVQoMSkKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMgkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwJCQkwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMgkJMHhhMWMwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDMxLCAxNikKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBCQkJR0VOTUFTSygxNSwgMCkKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zCQkweGExYzQKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTAkJCTB4YTE3YwomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwJCTB4YTFjOAomIzQzOwomIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVMJCQkyCiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9QQUdFUwkJCTgxOTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTCQkJNTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTAkJMHgwM2VjCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTAkJMHgwM2RjCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIJCUdFTk1BU0soOSwgNSkKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UJCUdFTk1BU0soMjIsIDEwKQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwJCQlCSVQoMSkKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURQkJQklUKDMpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRAkJCTAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NQkJQklUKDIpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIJCTAKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkwJCQkweDAzZTAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRQkJR0VOTUFTSyg4LCAwKQomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMCQkweDAzZjAKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwJCQkweDAzZjQKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1cJCTB4MDNlNAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gJCTB4MDNlOAomIzQzOyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwJCTB4MDNmYwomIzQzOwogI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFUwkJCTQKICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVMJCQk0MDk2CiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTCQkJMjgKQEAgLTcwLDYgJiM0MzsxOTAsNyBAQAogI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDMxLCAxNikKICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQogI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMwkJMHhjYjdjCiYjNDM7I2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwJCQkweGNhOTAKICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkwJCTB4Y2I4MAogCiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTCQkJNApAQCAtOTUsMTIgJiM0MzsyMTYsMTYgQEAKICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQQkJR0VOTUFTSygxNSwgMCkKICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMCTB4MGMxOAogI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTAkJMHgwYzc0CiYjNDM7I2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTAkJMHgwY2NjCiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUwJCTB4MGM5YwogCiAjZGVmaW5lIFBIWV9DVFJMX0NNRAkJCQlCSVQoMCkKICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFECQkJR0VOTUFTSygyMCwgMTYpCiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUcJCQlHRU5NQVNLKDE1LCAwKQogCiYjNDM7I2RlZmluZSBSVExfVkVORE9SX0lECQkJCTB4MDAxY2M4MDAKJiM0MzsjZGVmaW5lIFJUTF9QQUdFX1NFTEVDVAkJCQkzMQomIzQzOwogI2RlZmluZSBNQVBfQUREUlNfUEVSX1JFRwkJCTYKICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFIJCQk1CiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9CVVMJCQkyCkBAIC0xMjMsOSAmIzQzOzI0OCwxMSBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyB7CiAKIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgewogCWNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87CiYjNDM7CXN0cnVjdCBrcmVmIGtyZWY7CiAJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwogCXN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqLwogCURFQ0xBUkVfQklUTUFQKHZhbGlkX3BvcnRzLCBNQVhfUE9SVFMpOwomIzQzOwl1MTYgcGFnZVtNQVhfUE9SVFNdOwogCXU4IHNtaV9idXNbTUFYX1BPUlRTXTsKIAl1OCBzbWlfYWRkcltNQVhfUE9SVFNdOwogCWJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdOwpAQCAtMTQyLDYgJiM0MzsyNjksNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHsKIAl1OCBudW1fYnVzZXM7CiAJdTggbnVtX3BvcnRzOwogCXUxNiBudW1fcGFnZXM7CiYjNDM7CXUzMiBwb2xsX2N0cmw7CiAJaW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7CiAJaW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTsKIAlpbnQgKCpyZWFkX2M0NSkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7CkBAIC0xNzcsNiAmIzQzOzMwNSwxMiBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKQogCXJldHVybiBjaGFuLSZndDtwcml2OwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LSZndDtyZWdtYXAsIHByaXYtJmd0O2luZm8tJmd0O3BvbGxfY3RybCAmIzQzOyAocG9ydCAvIDMyKSAqIDQsCiYjNDM7CQkJCSAgQklUKHBvcnQgJSAzMiksIGFjdGl2ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCwKIAkJCSAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSkKIHsKQEAgLTE4NSw5ICYjNDM7MzE5LDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCwKIAl1MzIgY21kc3RhdGU7CiAJaW50IHJldDsKIAotCS8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmxlIHdyb25nICovCiYjNDM7CS8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmx5IHdyb25nICovCiAJcmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtJmd0O3JlZ21hcCwgaW5mby0mZ3Q7Y21kX3JlZ3MuYzIyX2RhdGEsCi0JCQkJICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlICZhbXA7IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTsKJiM0MzsJCQkJICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlICZhbXA7IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMjI3LDcgJiM0MzszNjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLAogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtJmd0O3JlZ21hcCwgaW5mby0mZ3Q7Y21kX3JlZ3MuYzIyX2RhdGEsCi0JCQkJICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlICZhbXA7IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTsKJiM0MzsJCQkJICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlICZhbXA7IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMjY0LDEzICYjNDM7Mzk4LDEyMyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJcmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtJmd0O2luZm8tJmd0O2NtZF93cml0ZSwgY21kX2RhdGEpOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhLAomIzQzOwkJCQkgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiYjNDM7CQkucG9ydF9tYXNrX2xvdwk9IEJJVChwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzQ1X2RhdGEJPSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsICZhbXA7Y21kX2RhdGEsCiYjNDM7CQkJCSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsCiYjNDM7CQkJCSAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jNDVfZGF0YQk9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAomIzQzOwkJLnBvcnRfbWFza19sb3cJPSBCSVQocG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsICZhbXA7Y21kX2RhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5leHRfcGFnZQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhLAomIzQzOwkJCQkgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiYjNDM7CQkuZXh0X3BhZ2UJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAomIzQzOwkJLnBvcnRfbWFza19oaWdoCT0gKHUzMikoQklUX1VMTChwb3J0KSAmZ3Q7Jmd0OyAzMiksCiYjNDM7CQkucG9ydF9tYXNrX2xvdwk9ICh1MzIpKEJJVF9VTEwocG9ydCkpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsCiYjNDM7CQkJCSAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jNDVfZGF0YQk9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgJmFtcDtjbWRfZGF0YSwKJiM0MzsJCQkJICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmM0NV9kYXRhCT0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiYjNDM7CQkucG9ydF9tYXNrX2hpZ2gJPSAodTMyKShCSVRfVUxMKHBvcnQpICZndDsmZ3Q7IDMyKSwKJiM0MzsJCS5wb3J0X21hc2tfbG93CT0gKHUzMikoQklUX1VMTChwb3J0KSksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsICZhbXA7Y21kX2RhdGEpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQogewogCXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7CiAJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiAJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiAJCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8Ci0JCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksCiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiAJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiAJfTsKIApAQCAtMjg0LDcgJiM0Mzs1MjgsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sCiAJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiAJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiAJCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8Ci0JCQkJICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksCiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiAJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAogCQkucG9ydF9tYXNrX2xvdwk9IEJJVChwb3J0KSwKIAl9OwpAQCAtMzI0LDcgJiM0Mzs1NjgsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdQogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYnJvYWRjYXN0CT0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLAogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCX07CiAKIAlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDkzMTBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEsCkBAIC0zMzYsNyAmIzQzOzU4MCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwKIAlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKIAkJLnBvcnRfbWFza19oaWdoCT0gKHUzMikoQklUX1VMTChwb3J0KSAmZ3Q7Jmd0OyAzMiksCiAJCS5wb3J0X21hc2tfbG93CT0gKHUzMikoQklUX1VMTChwb3J0KSksCkBAIC0zODIsOCAmIzQzOzYyNiwxMiBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSkKIAlpZiAocG9ydCAmbHQ7IDApCiAJCXJldHVybiBwb3J0OwogCi0Jc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spCiYjNDM7CXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKSB7CiYjNDM7CQlpZiAocmVnbnVtID09IFJUTF9QQUdFX1NFTEVDVCkKJiM0MzsJCQlyZXR1cm4gcHJpdi0mZ3Q7cGFnZVtwb3J0XTsKJiM0MzsKIAkJcmV0ID0gcHJpdi0mZ3Q7aW5mby0mZ3Q7cmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sICZhbXA7dmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7CiB9CkBAIC0zOTcsOCAmIzQzOzY0NSwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNgogCWlmIChwb3J0ICZsdDsgMCkKIAkJcmV0dXJuIHBvcnQ7CiAKLQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCWlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKSB7CiYjNDM7CQkJaWYgKHZhbHVlICZndDs9IFJBV19QQUdFKHByaXYpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCQlwcml2LSZndDtwYWdlW3BvcnRdID0gdmFsdWU7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CiAJCXJldCA9IHByaXYtJmd0O2luZm8tJmd0O3dyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDcxLDYgJiM0Mzs3MjgsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZwomIzQzOwkgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtJmd0O3JlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiB7CiAJdTMyIGdsYl9jdHJsX21hc2sgPSAwLCBnbGJfY3RybF92YWwgPSAwOwpAQCAtNTA3LDYgJiM0Mzs3NzMsNTkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LSZndDttZGlvLmJ1cywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGNoYW4tJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChwb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBwb3J0OwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3NtaV9idXNfaXNfYzQ1W2NoYW4tJmd0O21kaW9fYnVzXSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi0mZ3Q7cGh5X2lkLCBSVExfVkVORE9SX0lEKSkgewomIzQzOwkJcGh5ZGV2X2VycihwaHlkZXYsICYjMzQ7T25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LSZndDttZGlvLmJ1cyk7CiYjNDM7CWludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtJmd0O21kaW8uYnVzLCBwaHlkZXYtJmd0O21kaW8uYWRkcik7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBhdm9pZCB3cm9uZyBjYWNoZWQgcGFnZSBmb3IgbmV4dCBhdHRhY2htZW50ICovCiYjNDM7CWlmICghcHJpdi0mZ3Q7c21pX2J1c19pc19jNDVbY2hhbi0mZ3Q7bWRpb19idXNdKQomIzQzOwkJcHJpdi0mZ3Q7cGFnZVtwb3J0XSA9IDA7CiYjNDM7CiYjNDM7CXJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkZXZfZXJyKGJ1cy0mZ3Q7cGFyZW50LCAmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHBvbGxpbmcgZm9yIHBvcnQgJWRcbiYjMzQ7LCBwb3J0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R0b19lbWRpb19jbGVhbnVwX2NvbnRyb2xsZXIoc3RydWN0IGtyZWYgKmtyZWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYsIGtyZWYpOwomIzQzOwomIzQzOwltdXRleF9kZXN0cm95KCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CWtmcmVlKHByaXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX2NsZWFudXBfYnVzKHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gZGF0YTsKJiM0MzsKJiM0MzsJa3JlZl9wdXQoJmFtcDtwcml2LSZndDtrcmVmLCBvdHRvX2VtZGlvX2NsZWFudXBfY29udHJvbGxlcik7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsCiAJCQkJIHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKQogewpAQCAtNTM2LDEyICYjNDM7ODU1LDIwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2CiAJCWJ1cy0mZ3Q7d3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjsKIAl9CiAJYnVzLSZndDtwYXJlbnQgPSBkZXY7CiYjNDM7CWJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoOwomIzQzOwlidXMtJmd0O25vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDsKJiM0MzsKIAljaGFuID0gYnVzLSZndDtwcml2OwogCWNoYW4tJmd0O21kaW9fYnVzID0gbWRpb19idXM7CiAJY2hhbi0mZ3Q7cHJpdiA9IHByaXY7CiAKIAlzbnByaW50ZihidXMtJmd0O2lkLCBNSUlfQlVTX0lEX1NJWkUsICYjMzQ7JXMtJWQmIzM0OywgZGV2X25hbWUoZGV2KSwgbWRpb19idXMpOwogCiYjNDM7CWtyZWZfZ2V0KCZhbXA7cHJpdi0mZ3Q7a3JlZik7CiYjNDM7CWVyciA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldCgmYW1wO2J1cy0mZ3Q7ZGV2LCBvdHRvX2VtZGlvX2NsZWFudXBfYnVzLCBwcml2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCAmIzM0O2Nhbm5vdCByZWdpc3RlciBjbGVhbnVwIGFjdGlvblxuJiMzNDspOwomIzQzOwogCWVyciA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgdG9fb2Zfbm9kZShub2RlKSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsICYjMzQ7Y2Fubm90IHJlZ2lzdGVyIE1ESU8gYnVzXG4mIzM0Oyk7CkBAIC02NTIsNTAgJiM0Mzs5NzksMTIyIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19tYXBfcG9ydHMoc3RydWN0IGRldmljZSAqZGV2KQogCXJldHVybiBlcnI7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlmb3IgKGludCBwb3J0ID0gMDsgcG9ydCAmbHQ7IHByaXYtJmd0O2luZm8tJmd0O251bV9wb3J0czsgcG9ydCYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwZGV2LSZndDtkZXY7CiAJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdjsKJiM0MzsJaW50IGJ1c2VzX3JlZ2lzdGVyZWQgPSAwOwogCWludCBlcnI7CiAKLQlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXByaXYgPSBremFsbG9jX29iaigqcHJpdiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsICZhbXA7cHJpdi0mZ3Q7bG9jayk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJa3JlZl9pbml0KCZhbXA7cHJpdi0mZ3Q7a3JlZik7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwcml2LSZndDtsb2NrKTsKIAogCXByaXYtJmd0O2luZm8gPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKIAlwcml2LSZndDtyZWdtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoZGV2LSZndDtwYXJlbnQtJmd0O29mX25vZGUpOwotCWlmIChJU19FUlIocHJpdi0mZ3Q7cmVnbWFwKSkKLQkJcmV0dXJuIFBUUl9FUlIocHJpdi0mZ3Q7cmVnbWFwKTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDtyZWdtYXApKSB7CiYjNDM7CQllcnIgPSBQVFJfRVJSKHByaXYtJmd0O3JlZ21hcCk7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9vdXQ7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKIAogCWVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gZXJyX291dDsKIAogCWVyciA9IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3kocHJpdik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gZXJyX291dDsKIAogCWlmIChwcml2LSZndDtpbmZvLSZndDtzZXR1cF9jb250cm9sbGVyKSB7CiAJCWVyciA9IHByaXYtJmd0O2luZm8tJmd0O3NldHVwX2NvbnRyb2xsZXIocHJpdik7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgJiMzNDtmYWlsZWQgdG8gc2V0dXAgTURJTyBidXMgY29udHJvbGxlclxuJiMzNDspOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWRldl9lcnJfcHJvYmUoZGV2LCBlcnIsICYjMzQ7ZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CQl9CiAJfQogCiAJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGVfc2NvcGVkKGRldiwgY2hpbGQpIHsKIAkJZXJyID0gb3R0b19lbWRpb19wcm9iZV9vbmUoZGV2LCBwcml2LCBjaGlsZCk7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCWJ1c2VzX3JlZ2lzdGVyZWQmIzQzOyYjNDM7OwogCX0KIAotCXJldHVybiAwOwomIzQzOwlpZiAoIWJ1c2VzX3JlZ2lzdGVyZWQpCiYjNDM7CQllcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwgJiMzNDtubyBNRElPIGJ1c2VzIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKJiM0MztlcnJfb3V0OgomIzQzOwlrcmVmX3B1dCgmYW1wO3ByaXYtJmd0O2tyZWYsIG90dG9fZW1kaW9fY2xlYW51cF9jb250cm9sbGVyKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0gewomIzQzOwkuYWRkcl9tYXBfYmFzZSA9IFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMLAomIzQzOwkuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsCiYjNDM7CS5jbWRfcmVhZCA9IFJUTDgzODBfUEhZX0NUUkxfUkVBRCwKJiM0MzsJLmNtZF93cml0ZSA9IFJUTDgzODBfUEhZX0NUUkxfV1JJVEUsCiYjNDM7CS5jbWRfcmVncyA9IHsKJiM0MzsJCS5jMjJfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xLAomIzQzOwkJLmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsCiYjNDM7CQkuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLAomIzQzOwkJLnBvcnRfbWFza19sb3cgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMCwKJiM0MzsJfSwKJiM0MzsJLm51bV9idXNlcyA9IFJUTDgzODBfTlVNX0JVU0VTLAomIzQzOwkubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsCiYjNDM7CS5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDgzODBfU01JX1BPTExfQ1RSTCwKJiM0MzsJLnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlciwKJiM0MzsJLnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLAomIzQzOwkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUsCiYjNDM7CS53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyLAomIzQzOwkud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0gewomIzQzOwkuY21kX2ZhaWwgPSBSVEw4MzkwX1BIWV9DVFJMX0ZBSUwsCiYjNDM7CS5jbWRfcmVhZCA9IFJUTDgzOTBfUEhZX0NUUkxfUkVBRCwKJiM0MzsJLmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsCiYjNDM7CS5jbWRfcmVncyA9IHsKJiM0MzsJCS5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsCiYjNDM7CQkuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCwKJiM0MzsJCS5jNDVfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMLAomIzQzOwkJLmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCwKJiM0MzsJCS5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLAomIzQzOwkJLnBvcnRfbWFza19sb3cgPSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XLAomIzQzOwkJLnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsCiYjNDM7CX0sCiYjNDM7CS5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUywKJiM0MzsJLm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLAomIzQzOwkubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsCiYjNDM7CS5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCwKJiM0MzsJLnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLAomIzQzOwkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsCiYjNDM7CS53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLAomIzQzOwkud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSwKJiM0Mzt9OwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7CiAJLmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCwKIAkuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsCkBAIC03MTEsNiAmIzQzOzExMTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHsKIAkubnVtX2J1c2VzID0gUlRMOTMwMF9OVU1fQlVTRVMsCiAJLm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLAogCS5udW1fcGFnZXMgPSBSVEw5MzAwX05VTV9QQUdFUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCwKIAkuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLAogCS5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMiwKIAkucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsCkBAIC03MzYsNiAmIzQzOzExMzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHsKIAkubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsCiAJLm51bV9wYWdlcyA9IFJUTDkzMTBfTlVNX1BBR0VTLAogCS5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLAogCS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsCiAJLnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLAogCS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSwKQEAgLTc0NCw2ICYjNDM7MTE0NSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0gewogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxydGw4MzgwLW1kaW8mIzM0OywgLmRhdGEgPSAmYW1wO290dG9fZW1kaW9fODM4MF9pbmZvIH0sCiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsODM5MS1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LAogCXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsOTMwMS1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzkzMDBfaW5mbyB9LAogCXsgLmNvbXBhdGlibGUgPSAmIzM0O3JlYWx0ZWsscnRsOTMxMS1tZGlvJiMzNDssIC5kYXRhID0gJmFtcDtvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LAogCXt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCA5NGIyZTg1ZTAwYTM3Li4yMzM2MjJlOWJhNjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKQEAgLTE3MzQsNiAmIzQzOzE3MzQsOTYgQEAgc3RhdGljIGJvb2wgcGh5X2Rydl9zdXBwb3J0c19pcnEoY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydikKIAlyZXR1cm4gcGh5ZHJ2LSZndDtjb25maWdfaW50ciAmYW1wOyZhbXA7IHBoeWRydi0mZ3Q7aGFuZGxlX2ludGVycnVwdDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIF9fcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIG5vdGlmeV9idXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LSZndDthdHRhY2hlZF9kZXY7CiYjNDM7CXN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMOwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtkZXZsaW5rKSB7CiYjNDM7CQlkZXZpY2VfbGlua19kZWwocGh5ZGV2LSZndDtkZXZsaW5rKTsKJiM0MzsJCXBoeWRldi0mZ3Q7ZGV2bGluayA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7c3lzZnNfbGlua3MpIHsKJiM0MzsJCWlmIChkZXYpCiYjNDM7CQkJc3lzZnNfcmVtb3ZlX2xpbmsoJmFtcDtkZXYtJmd0O2Rldi5rb2JqLCAmIzM0O3BoeWRldiYjMzQ7KTsKJiM0MzsJCXN5c2ZzX3JlbW92ZV9saW5rKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldi5rb2JqLCAmIzM0O2F0dGFjaGVkX2RldiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2KQomIzQzOwkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LmtvYmosCiYjNDM7CQkJCSAgJmFtcDtkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTsKJiM0MzsKJiM0MzsJcGh5X3N1c3BlbmQocGh5ZGV2KTsKJiM0MzsKJiM0MzsJaWYgKG5vdGlmeV9idXMgJmFtcDsmYW1wOyBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2RldGFjaCkKJiM0MzsJCXBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7CiYjNDM7CiYjNDM7CWlmIChkZXYpIHsKJiM0MzsJCXN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92OwomIzQzOwomIzQzOwkJLyogaHdwcm92IG1heSB0ZWNobmljYWxseSBiZSBwcm90ZWN0ZWQgYnkgb3BzIGxvY2sgYnV0CiYjNDM7CQkgKiBub3QgZm9yIGRldmljZXMgd2l0aCBhIHBoeWRldiwgc2VlIHBoeV9saW5rX3RvcG9fYWRkX3BoeSgpCiYjNDM7CQkgKi8KJiM0MzsJCWh3cHJvdiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LSZndDtod3Byb3YpOwomIzQzOwkJLyogRGlzYWJsZSB0aW1lc3RhbXAgaWYgaXQgaXMgdGhlIG9uZSBzZWxlY3RlZCAqLwomIzQzOwkJaWYgKGh3cHJvdiAmYW1wOyZhbXA7IGh3cHJvdi0mZ3Q7cGh5ZGV2ID09IHBoeWRldikgewomIzQzOwkJCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtJmd0O2h3cHJvdiwgTlVMTCk7CiYjNDM7CQkJa2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcGh5ZGV2LSZndDthdHRhY2hlZF9kZXYtJmd0O3BoeWRldiA9IE5VTEw7CiYjNDM7CQlwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiA9IE5VTEw7CiYjNDM7CQlwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cGh5X2xpbmtfY2hhbmdlID0gTlVMTDsKJiM0MzsJcGh5ZGV2LSZndDtwaHlsaW5rID0gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5kZXYuZHJpdmVyKQomIzQzOwkJbW9kdWxlX3B1dChwaHlkZXYtJmd0O21kaW8uZGV2LmRyaXZlci0mZ3Q7b3duZXIpOwomIzQzOwomIzQzOwkvKiBJZiB0aGUgZGV2aWNlIGhhZCBubyBzcGVjaWZpYyBkcml2ZXIgYmVmb3JlIChpLmUuIC0gaXQKJiM0MzsJICogd2FzIHVzaW5nIHRoZSBnZW5lcmljIGRyaXZlciksIHdlIHVuYmluZCB0aGUgZGV2aWNlCiYjNDM7CSAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUmIzM5O3MgYSBjaGFuY2UgYQomIzQzOwkgKiByZWFsIGRyaXZlciBjb3VsZCBiZSBsb2FkZWQKJiM0MzsJICovCiYjNDM7CWlmIChwaHlkZXYtJmd0O2lzX2dlbnBoeV9kcml2ZW4pIHsKJiM0MzsJCWRldmljZV9yZWxlYXNlX2RyaXZlcigmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYpOwomIzQzOwkJcGh5ZGV2LSZndDtpc19nZW5waHlfZHJpdmVuID0gMDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqLwomIzQzOwlwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZAomIzQzOwkgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC4KJiM0MzsJICovCiYjNDM7CWJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7CiYjNDM7CiYjNDM7CXB1dF9kZXZpY2UoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2KTsKJiM0MzsJaWYgKGRldikKJiM0MzsJCW5kZXZfb3duZXIgPSBkZXYtJmd0O2Rldi5wYXJlbnQtJmd0O2RyaXZlci0mZ3Q7b3duZXI7CiYjNDM7CWlmIChuZGV2X293bmVyICE9IGJ1cy0mZ3Q7b3duZXIpCiYjNDM7CQltb2R1bGVfcHV0KGJ1cy0mZ3Q7b3duZXIpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZQomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeQomIzQzOyAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CS8qIGNsZWFudXAgaW5jbHVkaW5nIGJ1cyBub3RpZmljYXRpb24gKi8KJiM0MzsJX19waHlfZGV0YWNoKHBoeWRldiwgdHJ1ZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGh5X2RldGFjaCk7CiYjNDM7CiAvKioKICAqIHBoeV9hdHRhY2hfZGlyZWN0IC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBnaXZlbiBQSFkgZGV2aWNlIHBvaW50ZXIKICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaApAQCAtMTg3Niw2ICYjNDM7MTk2NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogCiYjNDM7CWlmIChwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaCkgewomIzQzOwkJZXJyID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJvcjsKJiM0MzsJfQomIzQzOwogCXBoeV9yZXN1bWUocGh5ZGV2KTsKIAogCS8qKgpAQCAtMTg5MCw4ICYjNDM7MTk4Niw4IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCXJldHVybiBlcnI7CiAKIGVycm9yOgotCS8qIHBoeV9kZXRhY2goKSBkb2VzIGFsbCBvZiB0aGUgY2xlYW51cCBiZWxvdyAqLwotCXBoeV9kZXRhY2gocGh5ZGV2KTsKJiM0MzsJLyogY2xlYW51cCB3aXRob3V0IGJ1cyBub3RpZmljYXRpb24gKi8KJiM0MzsJX19waHlfZGV0YWNoKHBoeWRldiwgZmFsc2UpOwogCXJldHVybiBlcnI7CiAKIGVycm9yX21vZHVsZV9wdXQ6CkBAIC0xOTA2LDg2ICYjNDM7MjAwMiw2IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogfQogRVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoX2RpcmVjdCk7CiAKLS8qKgotICogcGh5X2RldGFjaCAtIGRldGFjaCBhIFBIWSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UKLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAotICoKLSAqIFRoaXMgZGV0YWNoZXMgdGhlIHBoeSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UgYW5kIHRoZSBwaHkKLSAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS4KLSAqLwotdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2OwotCXN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMOwotCXN0cnVjdCBtaWlfYnVzICpidXM7Ci0KLQlpZiAocGh5ZGV2LSZndDtkZXZsaW5rKSB7Ci0JCWRldmljZV9saW5rX2RlbChwaHlkZXYtJmd0O2RldmxpbmspOwotCQlwaHlkZXYtJmd0O2RldmxpbmsgPSBOVUxMOwotCX0KLQotCWlmIChwaHlkZXYtJmd0O3N5c2ZzX2xpbmtzKSB7Ci0JCWlmIChkZXYpCi0JCQlzeXNmc19yZW1vdmVfbGluaygmYW1wO2Rldi0mZ3Q7ZGV2LmtvYmosICYjMzQ7cGh5ZGV2JiMzNDspOwotCQlzeXNmc19yZW1vdmVfbGluaygmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXYua29iaiwgJiMzNDthdHRhY2hlZF9kZXYmIzM0Oyk7Ci0JfQotCi0JaWYgKCFwaHlkZXYtJmd0O2F0dGFjaGVkX2RldikKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2LmtvYmosCi0JCQkJICAmYW1wO2Rldl9hdHRyX3BoeV9zdGFuZGFsb25lLmF0dHIpOwotCi0JcGh5X3N1c3BlbmQocGh5ZGV2KTsKLQlpZiAoZGV2KSB7Ci0JCXN0cnVjdCBod3RzdGFtcF9wcm92aWRlciAqaHdwcm92OwotCi0JCS8qIGh3cHJvdiBtYXkgdGVjaG5pY2FsbHkgYmUgcHJvdGVjdGVkIGJ5IG9wcyBsb2NrIGJ1dAotCQkgKiBub3QgZm9yIGRldmljZXMgd2l0aCBhIHBoeWRldiwgc2VlIHBoeV9saW5rX3RvcG9fYWRkX3BoeSgpCi0JCSAqLwotCQlod3Byb3YgPSBydG5sX2RlcmVmZXJlbmNlKGRldi0mZ3Q7aHdwcm92KTsKLQkJLyogRGlzYWJsZSB0aW1lc3RhbXAgaWYgaXQgaXMgdGhlIG9uZSBzZWxlY3RlZCAqLwotCQlpZiAoaHdwcm92ICZhbXA7JmFtcDsgaHdwcm92LSZndDtwaHlkZXYgPT0gcGh5ZGV2KSB7Ci0JCQlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LSZndDtod3Byb3YsIE5VTEwpOwotCQkJa2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpOwotCQl9Ci0KLQkJcGh5ZGV2LSZndDthdHRhY2hlZF9kZXYtJmd0O3BoeWRldiA9IE5VTEw7Ci0JCXBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2ID0gTlVMTDsKLQkJcGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5ZGV2KTsKLQl9Ci0KLQlwaHlkZXYtJmd0O3BoeV9saW5rX2NoYW5nZSA9IE5VTEw7Ci0JcGh5ZGV2LSZndDtwaHlsaW5rID0gTlVMTDsKLQotCWlmIChwaHlkZXYtJmd0O21kaW8uZGV2LmRyaXZlcikKLQkJbW9kdWxlX3B1dChwaHlkZXYtJmd0O21kaW8uZGV2LmRyaXZlci0mZ3Q7b3duZXIpOwotCi0JLyogSWYgdGhlIGRldmljZSBoYWQgbm8gc3BlY2lmaWMgZHJpdmVyIGJlZm9yZSAoaS5lLiAtIGl0Ci0JICogd2FzIHVzaW5nIHRoZSBnZW5lcmljIGRyaXZlciksIHdlIHVuYmluZCB0aGUgZGV2aWNlCi0JICogZnJvbSB0aGUgZ2VuZXJpYyBkcml2ZXIgc28gdGhhdCB0aGVyZSYjMzk7cyBhIGNoYW5jZSBhCi0JICogcmVhbCBkcml2ZXIgY291bGQgYmUgbG9hZGVkCi0JICovCi0JaWYgKHBoeWRldi0mZ3Q7aXNfZ2VucGh5X2RyaXZlbikgewotCQlkZXZpY2VfcmVsZWFzZV9kcml2ZXIoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2KTsKLQkJcGh5ZGV2LSZndDtpc19nZW5waHlfZHJpdmVuID0gMDsKLQl9Ci0KLQkvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqLwotCXBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTsKLQotCS8qCi0JICogVGhlIHBoeWRldiBtaWdodCBnbyBhd2F5IG9uIHRoZSBwdXRfZGV2aWNlKCkgYmVsb3csIHNvIGF2b2lkCi0JICogYSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgcmVhZGluZyB0aGUgdW5kZXJseWluZyBidXMgZmlyc3QuCi0JICovCi0JYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKLQotCXB1dF9kZXZpY2UoJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2KTsKLQlpZiAoZGV2KQotCQluZGV2X293bmVyID0gZGV2LSZndDtkZXYucGFyZW50LSZndDtkcml2ZXItJmd0O293bmVyOwotCWlmIChuZGV2X293bmVyICE9IGJ1cy0mZ3Q7b3duZXIpCi0JCW1vZHVsZV9wdXQoYnVzLSZndDtvd25lcik7Ci19Ci1FWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpOwotCiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGh5ZGV2LSZndDthdHRhY2hlZF9kZXY7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAxMTA5MmMzMTc1YjNkLi5mZWYwYzZhM2UyN2ZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTM3Niw2ICYjNDM7Mzc2LDI0IEBAIHN0cnVjdCBtaWlfYnVzIHsKIAkJCSBpbnQgcmVnbnVtLCB1MTYgdmFsKTsKIAkvKiogQHJlc2V0OiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGJ1cyAqLwogCWludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTsKJiM0MzsJLyoqCiYjNDM7CSAqIEBub3RpZnlfcGh5X2F0dGFjaDogUGVyZm9ybSBwb3N0LWF0dGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXMKJiM0MzsJICogZHJpdmVycy4gT3B0aW9uYWwgYW5kIGluZGVwZW5kZW50IG9mIEBub3RpZnlfcGh5X2RldGFjaC4gQ2FsbGVkCiYjNDM7CSAqIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkgcmlnaHQgYmVmb3JlIHBoeV9yZXN1bWUoKS4gUnVucyBpbiBwcm9jZXNzCiYjNDM7CSAqIGNvbnRleHQsIG1heSBzbGVlcCBhbmQgbWF5IGJlIGNhbGxlZCB3aXRoIFJUTkwgaGVsZC4gTXVzdCBub3QKJiM0MzsJICogYWNxdWlyZSBvciByZWx5IG9uIFJUTkwuIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm5vCiYjNDM7CSAqIG9uIGZhaWx1cmUuIE11c3QgdW53aW5kIGl0cyBvd24gc3RhdGUgb24gZXJyb3IgYXMgYXR0YWNobWVudCBpcwomIzQzOwkgKiBhYm9ydGVkLgomIzQzOwkgKi8KJiM0MzsJaW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwomIzQzOwkvKioKJiM0MzsJICogQG5vdGlmeV9waHlfZGV0YWNoOiBQZXJmb3JtIHByZS1kZXRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzCiYjNDM7CSAqIGRyaXZlcnMuIE9wdGlvbmFsIGFuZCBpbmRlcGVuZGVudCBvZiBAbm90aWZ5X3BoeV9hdHRhY2guIENhbGxlZAomIzQzOwkgKiBpbiBwaHlfZGV0YWNoKCkgcmlnaHQgYWZ0ZXIgcGh5X3N1c3BlbmQoKS4gUnVucyBpbiBwcm9jZXNzIGNvbnRleHQsCiYjNDM7CSAqIG1heSBzbGVlcCBhbmQgbWF5IGJlIGNhbGxlZCB3aXRoIFJUTkwgaGVsZC4gTXVzdCBub3QgYWNxdWlyZSBvcgomIzQzOwkgKiByZWx5IG9uIFJUTkwuCiYjNDM7CSAqLwomIzQzOwl2b2lkICgqbm90aWZ5X3BoeV9kZXRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogCiAJLyoqIEBzdGF0czogU3RhdGlzdGljIGNvdW50ZXJzIHBlciBkZXZpY2Ugb24gdGhlIGJ1cyAqLwogCXN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI4NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBSZWFsdGVrIE90dG8gU3dpdGNoIE1ESU8gQ29udHJvbGxlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgc3VwcG9ydCBmb3IgUmVhbHRlayBPdHRvIFN3aXRjaGVzLCBzcGVjaWZpY2FsbHkgdGhlIFJUTDgzODAgYW5kIFJUTDgzOTAgZmFtaWxpZXMsIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIFBIWSBjb3JlIHRvIGFkZCBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyB0byB0aGUgYG1paV9idXNgIHN0cnVjdC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3b3J0aCB0aHJvd2luZyBmdXp6aW5nIGF0PwoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgYW5kIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYC4gYHBoeV9kZXZpY2UuY2AsIHRoYXQmIzM5O3MgY29yZSBuZXR3b3JraW5nIGNvZGUsIHRoZSBQSFkgc3Vic3lzdGVtIGl0c2VsZi4gVGhlIGNoYW5nZXMgaW4gYHBoeV9kZXZpY2UuY2AgYWRkIHRoZSBjYWxsYmFja3MgdG8gYG1paV9idXNgIGFuZCBjYWxsIHRoZW0gZHVyaW5nIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYC4gSW1tZWRpYXRlbHksIHRob3NlIGZ1bmN0aW9ucyBzZWVtIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyB0aGluayBkdW1teSBuZXQgZGV2aWNlcywgdmV0aCBpbnRlcmZhY2VzLCBhbnkgZW11bGF0ZWQgTklDIHRoYXQgdXNlcyBQSFlzLiBBbmQgdGhlbiBpdCBoaXRzIG1lOiBgcGh5X2F0dGFjaF9kaXJlY3RgIGlzIGNhbGxlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgYXR0YWNoZXMgdG8gYSBQSFkuCgpDb3VsZCBzeXprYWxsZXIgcmVhY2ggdGhhdD8gQWJzb2x1dGVseS4gSXQgY2FuIGNyZWF0ZSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcywgdXNpbmcgbmV0bGluaywgdHVuL3RhcCwgb3IgZHVtbXksIGFuZCBzb21lIG9mIHRob3NlIGNvdWxkIHZlcnkgd2VsbCBhdHRhY2ggUEhZcy4gT3IsIGl0IGNhbiBpbnRlcmFjdCB3aXRoIE1ESU8gYnVzZXMuIFRoZSBrZXkgcGFydHMgYXJlIGNoYW5nZXMgbWFkZSB0byBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIExvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCB0aGUgY29yZSBjaGFuZ2VzIHRoYXQgYXJlIG1hZGUsIHNwZWNpZmljYWxseToKCmBgYGMKJiM0MztzdGF0aWMgdm9pZCBfX3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBub3RpZnlfYnVzKQouLi4KJiM0MzsJaWYgKG5vdGlmeV9idXMgJmFtcDsmYW1wOyBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2RldGFjaCkKJiM0MzsJCXBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7Ci4uLgpgYGAKQW5kIGluIGBwaHlfYXR0YWNoX2RpcmVjdGA6CmBgYGMKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfYXR0YWNoKSB7CiYjNDM7CQllcnIgPSBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGVycm9yOwomIzQzOwl9CmBgYAoKVGhpcyAqaXMqIGNvcmUgYXR0YWNobWVudC9kZXRhY2htZW50IGxvZ2ljLCBzbyB5ZXMsIHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byB0aGUgd2F5IFBIWXMgYXJlIGhhbmRsZWQuCgpXaGF0IGFib3V0IHRoZSBNRElPIGRyaXZlciAoYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgKT8gTURJTyBkcml2ZXJzIGFyZSB1c3VhbGx5IHBsYXRmb3JtIGRyaXZlcnMsIG1lYW5pbmcgdGhleSBtaWdodCBub3QgYmUgZWFzaWx5IHJlYWNoYWJsZSB3aXRob3V0IHRoZSBwbGF0Zm9ybSBkZXZpY2UgYmVpbmcgaW5zdGFudGlhdGVkLiBTdGlsbCwgdGhlIGNvcmUgUEhZIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSByZWdhcmRsZXNzLgoKU28sIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhvc2UgdHdvIGZ1bmN0aW9ucy4gVGltZSB0byBsb29rIGZvciBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgdXNhZ2VzIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgZW50cnkgcG9pbnRzIGFuZCBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgY2FuIGJlc3QgaW50ZXJhY3Qgd2l0aCB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2F0dGFjaF9kaXJlY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdD04NT1UaGVzZSBmdW5jdGlvbiBhcmUgYWxyZWFkeSBob29rZWQgaW50byB0aGUgcGh5bGliIHN1YnN5c3RlbSwgc28gYWxsIFBIWXMgdGhhdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdDo4NjphcmUgbGlua2VkIHRvIGEgbmV0X2RldmljZSB0aHJvdWdoIDpjOmZ1bmM6YHBoeV9hdHRhY2hfZGlyZWN0YCB3aWxsIGF1dG9tYXRpY2FsbHlcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktbGluay10b3BvbG9neS5yc3QtODctam9pbiB0aGUgbmV0ZGV2JiMzOTtzIHRvcG9sb2d5LlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3Q9NzQ9dGhpcyBkb2N1bWVudGF0aW9uLlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3QtMTY1LSAgIEZvciB0aGUgbW9zdCBwYXJ0LCBgYGZsYWdzYGAgY2FuIGJlIHplcm87IHRoZXNlIGZsYWdzIGFyZSBwYXNzZWQgdG9cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3Q6MTY2OiAgIHRoZSBwaHlfYXR0YWNoX2RpcmVjdCgpIGluc2lkZSB0aGlzIGZ1bmN0aW9uIGNhbGwgaWYgYSBQSFkgaXMgc3BlY2lmaWVkXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2ZwLXBoeWxpbmsucnN0LTE2Ny0gICBpbiB0aGUgRFQgbm9kZSBgYG5vZGVgYC5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTkzMT1zdGF0aWMgaW50IHhnYmVfcGh5X2ZpbmRfcGh5X2RldmljZShzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjk4MzpcdHJldCA9IHBoeV9hdHRhY2hfZGlyZWN0KHBkYXRhLVx1MDAzZW5ldGRldiwgcGh5ZGV2LCBwaHlkZXYtXHUwMDNlZGV2X2ZsYWdzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODQtXHRcdFx0XHRQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODUtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjk4NjpcdFx0bmV0ZGV2X2VycihwZGF0YS1cdTAwM2VuZXRkZXYsIFwmIzM0O3BoeV9hdHRhY2hfZGlyZWN0IGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk4Ny1cdFx0cGh5X2RldmljZV9yZW1vdmUocGh5ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmM9MTE1OT1pbnQgaG5zX25pY19pbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGhuYWVfaGFuZGxlICpoKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYy0xMTgwLVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYzoxMTgxOlx0XHRyZXQgPSBwaHlfYXR0YWNoX2RpcmVjdChuZGV2LCBwaHlfZGV2LCAwLCBoLVx1MDAzZXBoeV9pZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmMtMTE4Mi1cdH1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyMjU9aW50IHBoeV9jb25uZWN0X2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTIzMy1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTIzNDpcdHJjID0gcGh5X2F0dGFjaF9kaXJlY3QoZGV2LCBwaHlkZXYsIHBoeWRldi1cdTAwM2VkZXZfZmxhZ3MsIGludGVyZmFjZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyMzUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzM3PXN0YXRpYyB2b2lkIF9fcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIG5vdGlmeV9idXMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODE3LSAqIFRoaXMgZGV0YWNoZXMgdGhlIHBoeSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UgYW5kIHRoZSBwaHlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTgxODogKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MTktICovXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xODI1PUVYUE9SVF9TWU1CT0wocGh5X2RldGFjaCk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODI3LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODI4OiAqIHBoeV9hdHRhY2hfZGlyZWN0IC0gYXR0YWNoIGEgbmV0d29yayBkZXZpY2UgdG8gYSBnaXZlbiBQSFkgZGV2aWNlIHBvaW50ZXJcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgyOS0gKiBAZGV2OiBuZXR3b3JrIGRldmljZSB0byBhdHRhY2hcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4NDEtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4NDI6aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4NDMtXHRcdCAgICAgIHUzMiBmbGFncywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwMDItfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoyMDAzOkVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaF9kaXJlY3QpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMDA0LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjIwND1zdGF0aWMgaW50IHBoeWxpbmtfYXR0YWNoX3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjE5LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMjIwOlx0cmV0dXJuIHBoeV9hdHRhY2hfZGlyZWN0KHBsLVx1MDAzZW5ldGRldiwgcGh5LCBmbGFncywgaW50ZXJmYWNlKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIyMS19XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjI4LSAqIENvbm5lY3QgQHBoeSB0byB0aGUgcGh5bGluayBpbnN0YW5jZSBzcGVjaWZpZWQgYnkgQHBsIGJ5IGNhbGxpbmdcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjIyOTogKiBwaHlfYXR0YWNoX2RpcmVjdCgpLiBDb25maWd1cmUgdGhlIEBwaHkgYWNjb3JkaW5nIHRvIHRoZSBNQUMgZHJpdmVyJiMzOTtzXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyMzAtICogY2FwYWJpbGl0aWVzLCBzdGFydCB0aGUgUEhZTElCIHN0YXRlIG1hY2hpbmUgYW5kIGVuYWJsZSBhbnkgaW50ZXJydXB0c1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjI5MD1pbnQgcGh5bGlua19md25vZGVfcGh5X2Nvbm5lY3Qoc3RydWN0IHBoeWxpbmsgKnBsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjMyMy1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjMyNDpcdHJldCA9IHBoeV9hdHRhY2hfZGlyZWN0KHBsLVx1MDAzZW5ldGRldiwgcGh5X2RldiwgZmxhZ3MsXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzMjUtXHRcdFx0XHRwbC1cdTAwM2VsaW5rX2ludGVyZmFjZSk7XG4tLVxuaW5jbHVkZS9saW51eC9waHkuaD0zNjM9c3RydWN0IG1paV9idXMge1xuLS1cbmluY2x1ZGUvbGludXgvcGh5LmgtMzgxLVx0ICogZHJpdmVycy4gT3B0aW9uYWwgYW5kIGluZGVwZW5kZW50IG9mIEBub3RpZnlfcGh5X2RldGFjaC4gQ2FsbGVkXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjM4MjpcdCAqIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkgcmlnaHQgYmVmb3JlIHBoeV9yZXN1bWUoKS4gUnVucyBpbiBwcm9jZXNzXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTM4My1cdCAqIGNvbnRleHQsIG1heSBzbGVlcCBhbmQgbWF5IGJlIGNhbGxlZCB3aXRoIFJUTkwgaGVsZC4gTXVzdCBub3Rcbi0tXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIxODc9c3RydWN0IHBoeV9kZXZpY2UgKnBoeV9maW5kX25leHQoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IHBoeV9kZXZpY2UgKnBvcyk7XG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIxODg6aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTIxODktXHRcdCAgICAgIHUzMiBmbGFncywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyOTQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBwaHlfYXR0YWNoX2RpcmVjdGAqKgoKT2theSwgc28gYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyBhIGtleSBmdW5jdGlvbiwgY2FsbGVkIGJ5IHRoaW5ncyBsaWtlIGBwaHlfY29ubmVjdF9kaXJlY3RgLCBgcGh5bGlua19hdHRhY2hfcGh5YCwgYW5kIGBwaHlsaW5rX2Z3bm9kZV9waHlfY29ubmVjdGAuIFRoZSBxdWVzdGlvbiB0aGF0JiMzOTtzIHBpcXVpbmcgbXkgaW50ZXJlc3QgaXMgd2hldGhlciBhIHZpcnR1YWwgZGV2aWNlIGNhbiB0cmlnZ2VyIGl0cyB1c2UuIE15IGluc3RpbmN0IGlzIHRoYXQgUEhZcyBhcmUgcHJpbWFyaWx5IGhhcmR3YXJlLWJvdW5kLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUuCgpMZXQmIzM5O3MgcnVuIHRocm91Z2ggc29tZSBjb21tb24gdmlydHVhbCBuZXR3b3JrIGRldmljZXMuIENvdWxkIGBtYWNzZWNgLCBgdmV0aGAsIGBkdW1teWAsIG9yIGB0dW5gIGRldmljZXMgZXZlciB0b3VjaCB0aGlzIGZ1bmN0aW9uPyBNeSBndXQgc2F5cyBubywgZ2l2ZW4gdGhlaXIgbmF0dXJlLiBUaGV5JiMzOTtyZSB1c3VhbGx5IGxheWVycyBhYm92ZSB0aGUgcGh5c2ljYWwgaW50ZXJmYWNlLCBhYnN0cmFjdGluZyBhd2F5IHRoZSBQSFkgaW50ZXJhY3Rpb24uIFRoaW5raW5nIGFib3V0IGl0LCBldmVuIHRob3VnaCBQSFlzIGFyZSB0eXBpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIGhhcmR3YXJlIGxpa2UgaW4gYG1hY2JgLCBgZmVjYCwgb3IgYGUxMDAwYCBkcml2ZXJzLCBhcmUgYW55IG9mIHRoZXNlIHBhdGh3YXlzIHJlbGV2YW50PyBJIGRvbiYjMzk7dCBzZWUgaXQuIGB0dW5gIGFuZCBgdmV0aGAgZGVmaW5pdGVseSBkb24mIzM5O3QgZGVhbCB3aXRoIHRoZSBwaHlzaWNhbCBsYXllci4KCk9rYXksIGxldCYjMzk7cyBrZWVwIGdvaW5nLiBXaGF0IGFib3V0IHNvbWV0aGluZyBsaWtlIGBtYWM4MDIxMV9od3NpbWA/IE5vLCBpdCYjMzk7cyBub3QgYSBkaXJlY3QgbWF0Y2guIGB2a21zYCBpcyBEUk0sIHNvIG5vIHRoZXJlIGVpdGhlci4gYGR1bW15YCBpcyBhbHNvIG91dC4gQWxyaWdodCwgdGltZSB0byBjaGVjayBgbmV0ZGV2c2ltYC4gKlRoYXQmIzM5O3MqIHRoZSBvbmUgdGhhdCBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIGludGVyZXN0aW5nIHRvIGxvb2sgaW50by4gTGV0IG1lIHNlZSBpZiBgbmV0ZGV2c2ltYCBoYXMgYW55IGludGVyYWN0aW9uIHdpdGggUEhZcywgYXMgdGhhdCB3b3VsZCBiZSB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9hdHRhY2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc4MCBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdD04NT1UaGVzZSBmdW5jdGlvbiBhcmUgYWxyZWFkeSBob29rZWQgaW50byB0aGUgcGh5bGliIHN1YnN5c3RlbSwgc28gYWxsIFBIWXMgdGhhdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdDo4NjphcmUgbGlua2VkIHRvIGEgbmV0X2RldmljZSB0aHJvdWdoIDpjOmZ1bmM6YHBoeV9hdHRhY2hfZGlyZWN0YCB3aWxsIGF1dG9tYXRpY2FsbHlcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktbGluay10b3BvbG9neS5yc3QtODctam9pbiB0aGUgbmV0ZGV2JiMzOTtzIHRvcG9sb2d5LlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0PTM2Mz1ldmVyeSBzZWNvbmQgYmVmb3JlIHRoZSBzdGF0ZSBtYWNoaW5lIHJlYWN0cyB0byBhbnkgY2hhbmdlcy4gIFRvIGRvIHRoaXMsIHlvdVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q6MzY0Om5lZWQgdG8gbWFudWFsbHkgY2FsbCBwaHlfYXR0YWNoKCkgYW5kIHBoeV9wcmVwYXJlX2xpbmsoKSwgYW5kIHRoZW4gY2FsbFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtMzY1LXBoeV9zdGFydF9tYWNoaW5lKCkgd2l0aCB0aGUgc2Vjb25kIGFyZ3VtZW50IHNldCB0byBwb2ludCB0byB5b3VyIHNwZWNpYWxcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdD0zNzY9dGhlIGNvbXBsZXggaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFBIWSBhbmQgeW91ciBuZXR3b3JrIGRldmljZS4gIElmIHRoaXMgaXNcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0OjM3NzpzbywgeW91IGNhbiBzaW1wbHkgY2FsbCBwaHlfYXR0YWNoKCksIGFuZCBub3QgY2FsbCBwaHlfc3RhcnRfbWFjaGluZSBvclxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtMzc4LXBoeV9wcmVwYXJlX2xpbmsoKS4gIFRoaXMgd2lsbCBtZWFuIHRoYXQgcGh5ZGV2LVx1MDAzZXN0YXRlIGlzIGVudGlyZWx5IHlvdXJzIHRvXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q9NDA0PVJlcXVlc3RzIHRoZSBJUlEgZm9yIHRoZSBQSFkgaW50ZXJydXB0cy5cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC00MDYtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDo0MDc6IHN0cnVjdCBwaHlfZGV2aWNlICogcGh5X2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpwaHlfaWQsXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC00MDgtXHRcdCAgICAgICAgICAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2ZwLXBoeWxpbmsucnN0PTc0PXRoaXMgZG9jdW1lbnRhdGlvbi5cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2ZwLXBoeWxpbmsucnN0LTE2NS0gICBGb3IgdGhlIG1vc3QgcGFydCwgYGBmbGFnc2BgIGNhbiBiZSB6ZXJvOyB0aGVzZSBmbGFncyBhcmUgcGFzc2VkIHRvXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2ZwLXBoeWxpbmsucnN0OjE2NjogICB0aGUgcGh5X2F0dGFjaF9kaXJlY3QoKSBpbnNpZGUgdGhpcyBmdW5jdGlvbiBjYWxsIGlmIGEgUEhZIGlzIHNwZWNpZmllZFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NmcC1waHlsaW5rLnJzdC0xNjctICAgaW4gdGhlIERUIG5vZGUgYGBub2RlYGAuXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jPTEzNTM9c3RhdGljIGludCBvd2xfZW1hY19waHlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FjdGlvbnMvb3dsLWVtYWMuYy0xMzY2LVx0aWYgKG5ldGlmX21zZ19saW5rKHByaXYpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jOjEzNjc6XHRcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM2OC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYz02NTA9c3RhdGljIGludCBhZGluMTE0MF9waHlfaW5pdChzdHJ1Y3QgYWRpbjExNDBfcHJpdiAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02NzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYzo2Nzc6XHRwaHlfYXR0YWNoZWRfaW5mbyhwcml2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZGkvYWRpbjExNDAuYy02NzgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM9MzI3Mz1zdGF0aWMgaW50IGV0MTMxeF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy0zMjk4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvZXQxMzF4LmM6MzI5OTpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy0zMzAwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmM9NDcyPXN0YXRpYyBpbnQgYXUxMDAwX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtNTUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYzo1NTM6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYy01NTQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYz05MzE9c3RhdGljIGludCB4Z2JlX3BoeV9maW5kX3BoeV9kZXZpY2Uoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5ODM6XHRyZXQgPSBwaHlfYXR0YWNoX2RpcmVjdChwZGF0YS1cdTAwM2VuZXRkZXYsIHBoeWRldiwgcGh5ZGV2LVx1MDAzZWRldl9mbGFncyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTg0LVx0XHRcdFx0UEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTg1LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5ODY6XHRcdG5ldGRldl9lcnIocGRhdGEtXHUwMDNlbmV0ZGV2LCBcJiMzNDtwaHlfYXR0YWNoX2RpcmVjdCBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODctXHRcdHBoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmM9OTY2PXN0YXRpYyBpbnQgYXg4ODc5NmNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYy0xMDk0LVx0XHQgICBkZXZfbmFtZShcdTAwMjZzcGktXHUwMDNlZGV2KSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYzoxMDk1Olx0cGh5X2F0dGFjaGVkX2luZm8oYXhfbG9jYWwtXHUwMDNlcGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwOTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jPTEwMzc9c3RhdGljIHBoeV9pbnRlcmZhY2VfdCBiY21hc3BfcGh5X2lmYWNlX2Zvcl9jb25uZWN0KHBoeV9pbnRlcmZhY2VfdCBtb2RlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYy0xMDczLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jOjEwNzQ6c3RhdGljIGludCBiY21hc3BfcGh5X2F0dGFjaChzdHJ1Y3QgYmNtYXNwX2ludGYgKmludGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTA3NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jPTExMjE9c3RhdGljIGludCBiY21hc3Bfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYy0xMTM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jOjExNDA6XHRyZXQgPSBiY21hc3BfcGh5X2F0dGFjaChpbnRmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYy0xMTQxLVx0aWYgKHJldClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYzoxMTQyOlx0XHRnb3RvIGVycl9waHlfYXR0YWNoO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jLTExNDMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jLTExNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmM6MTE1NjplcnJfcGh5X2F0dGFjaDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYy0xMTU3LVx0YmNtYXNwX3BoeV9od191bnByZXBhcmUoaW50Zik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM9MjIzND1zdGF0aWMgaW50IGI0NF9yZWdpc3Rlcl9waHlfb25lKHN0cnVjdCBiNDQgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyOTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iNDQuYzoyMjk5Olx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIzMDAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM9ODkwPXN0YXRpYyBpbnQgYmNtX2VuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTkyMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jOjkyNDpcdFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JjbTYzeHhfZW5ldC5jLTkyNS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9zYjEyNTAtbWFjLmM9MjMyND1zdGF0aWMgaW50IHNibWFjX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMzQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jOjIzNDY6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMzQ3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jPTIwODQ9c3RhdGljIGludCB0ZzNfcGh5X2luaXQoc3RydWN0IHRnMyAqdHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMjEyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jOjIxMjU6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmMtMjEyNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jb3J0aW5hL2dlbWluaS5jPTM2MD1zdGF0aWMgaW50IGdtYWNfc2V0dXBfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY29ydGluYS9nZW1pbmkuYy00MDUtXHRpZiAobmV0aWZfbXNnX2xpbmsocG9ydCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jb3J0aW5hL2dlbWluaS5jOjQwNjpcdFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NvcnRpbmEvZ2VtaW5pLmMtNDA3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTQ5Nz1zdGF0aWMgaW50IGZ0Z21hYzEwMF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE1NTUtXHQvKiBEaXNwbGF5IHdoYXQgd2UgZm91bmQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTU1NjpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE1NTctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYz0xODkwPXN0YXRpYyBpbnQgZnRnbWFjMTAwX3Byb2JlX2R0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZmFyYWRheS9mdGdtYWMxMDAuYy0xOTIxLVx0XHQvKiBEaXNwbGF5IHdoYXQgd2UgZm91bmQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM6MTkyMjpcdFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTkyMy1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM9Mjk4MT1zdGF0aWMgaW50IGZlY19lbmV0X21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYy0zMDM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmM6MzAzNzpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeV9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAzOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jPTIwMT1zdGF0aWMgaW50IGhiZ19waHlfY29ubmVjdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYy0yMTctXHRwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jOjIxODpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIxOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlzaV9mZW1hYy5jPTc2OD1zdGF0aWMgaW50IGhpc2lfZmVtYWNfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpc2lfZmVtYWMuYy04MzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlzaV9mZW1hYy5jOjg0MDpcdHBoeV9hdHRhY2hlZF9wcmludChwaHksIFwmIzM0O3BoeV9pZD0weCUuOGx4LCBwaHlfbW9kZT0lc1xcblwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXNpX2ZlbWFjLmMtODQxLVx0XHRcdCAgICh1bnNpZ25lZCBsb25nKXBoeS1cdTAwM2VwaHlfaWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZW5ldC5jPTExNTk9aW50IGhuc19uaWNfaW5pdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBobmFlX2hhbmRsZSAqaClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmMtMTE4MC1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmM6MTE4MTpcdFx0cmV0ID0gcGh5X2F0dGFjaF9kaXJlY3QobmRldiwgcGh5X2RldiwgMCwgaC1cdTAwM2VwaHlfaWYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZW5ldC5jLTExODItXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZW5ldC5jLTExODUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmM6MTE4NjpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeV9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZW5ldC5jLTExODctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0yMDI9aW50IGhjbGdlX21hY19jb25uZWN0X3BoeShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYy0yMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jOjIzNzpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTIzOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jPTM1Nz1sdHFfZXRvcF9tZGlvX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy0zNzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jOjM3OTpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTM4MC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWFpbi5jPTM4NT1zdGF0aWMgaW50IG1seGJmX2dpZ2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWFpbi5jLTQ4Ny1cdC8qIERpc3BsYXkgaW5mb3JtYXRpb24gYWJvdXQgYXR0YWNoZWQgUEhZIGRldmljZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21haW4uYzo0ODg6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21haW4uYy00ODktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYz03NTE9c3RhdGljIGludCBscGNfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L254cC9scGNfZXRoLmMtNzg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYzo3ODU6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYy03ODYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmM9NTc4PXN0YXRpYyBpbnQgb2FfdGM2X3BoeV9pbml0KHN0cnVjdCBvYV90YzYgKnRjNilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy02MTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYzo2MTQ6XHRwaHlfYXR0YWNoZWRfaW5mbyh0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy02MTUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vZW1hYy9lbWFjLW1hYy5jPTkzMT1pbnQgZW1hY19tYWNfdXAoc3RydWN0IGVtYWNfYWRhcHRlciAqYWRwdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMtbWFjLmMtOTQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vZW1hYy9lbWFjLW1hYy5jOjk0ODpcdHBoeV9hdHRhY2hlZF9wcmludChhZHB0LVx1MDAzZXBoeWRldiwgTlVMTCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMtbWFjLmMtOTQ5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JkYy9yNjA0MC5jPTk5OD1zdGF0aWMgaW50IHI2MDQwX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JkYy9yNjA0MC5jLTEwMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZGMvcjYwNDAuYzoxMDIyOlx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JkYy9yNjA0MC5jLTEwMjMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NDk4Mj1zdGF0aWMgaW50IHI4MTY5X3BoeV9jb25uZWN0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTQ5OTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo0OTk5Olx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTUwMDAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYz0xNDkyPXN0YXRpYyBpbnQgcmF2Yl9waHlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jLTE1NDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jOjE1NDI6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYy0xNTQzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcnN3aXRjaF9tYWluLmM9MTQ2MD1zdGF0aWMgaW50IHJzd2l0Y2hfcGh5X2RldmljZV9pbml0KHN0cnVjdCByc3dpdGNoX2RldmljZSAqcmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3Jzd2l0Y2hfbWFpbi5jLTE0OTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3Jzd2l0Y2hfbWFpbi5jOjE0OTQ6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYy0xNDk1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcnRzbi5jPTg5NT1zdGF0aWMgaW50IHJ0c25fcGh5X2luaXQoc3RydWN0IHJ0c25fcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3J0c24uYy05MTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3J0c24uYzo5MTg6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmMtOTE5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmM9MTk4Nz1zdGF0aWMgaW50IHNoX2V0aF9waHlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jLTIwMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jOjIwMjg6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYy0yMDI5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzkxMXguYz0xMDE1PXN0YXRpYyBpbnQgc21zYzkxMXhfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTExeC5jLTEwMzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmM6MTAzOTpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmMtMTA0MC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5NDIwLmM9MTEwMj1zdGF0aWMgaW50IHNtc2M5NDIwX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzk0MjAuYy0xMTI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTQyMC5jOjExMjk6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTQyMC5jLTExMzAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L3NuaV9hdmUuYz0xMTYzPXN0YXRpYyBpbnQgYXZlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L3NuaV9hdmUuYy0xMjMyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L3NuaV9hdmUuYzoxMjMzOlx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9zbmlfYXZlLmMtMTIzNC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmM9MTU5Nz1zdGF0aWMgaW50IGVtYWNfcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3BhY2VtaXQvazFfZW1hYy5jLTE2NDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmM6MTY0OTpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmMtMTY1MC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTU5NT1pbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy03MDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjcwNTpcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTcwNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW5wbHVzL3NwbDJzd19waHkuYz01Nj1pbnQgc3BsMnN3X3BoeV9jb25uZWN0KHN0cnVjdCBzcGwyc3dfY29tbW9uICpjb21tKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bnBsdXMvc3BsMnN3X3BoeS5jLTcyLVx0XHRcdHBoeV9zdXBwb3J0X2FzeW1fcGF1c2UocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bnBsdXMvc3BsMnN3X3BoeS5jOjczOlx0XHRcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW5wbHVzL3NwbDJzd19waHkuYy03NC1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3cuYz01ODU9c3RhdGljIHZvaWQgY3Bzd19zbGF2ZV9vcGVuKHN0cnVjdCBjcHN3X3NsYXZlICpzbGF2ZSwgc3RydWN0IGNwc3dfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmMtNjYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5jOjY2MzpcdHBoeV9hdHRhY2hlZF9pbmZvKHNsYXZlLVx1MDAzZXBoeSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmMtNjY0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3dfbmV3LmM9NzQwPXN0YXRpYyB2b2lkIGNwc3dfc2xhdmVfb3BlbihzdHJ1Y3QgY3Bzd19zbGF2ZSAqc2xhdmUsIHN0cnVjdCBjcHN3X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19uZXcuYy04MDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X25ldy5jOjgwNTpcdHBoeV9hdHRhY2hlZF9pbmZvKHNsYXZlLVx1MDAzZXBoeSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X25ldy5jLTgwNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX2VtYWMuYz0xNDAyPXN0YXRpYyBpbnQgZW1hY19kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX2VtYWMuYy0xNTI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvZGF2aW5jaV9lbWFjLmM6MTUyOTpcdFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfZW1hYy5jLTE1MzAtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM9MjE3OD1zdGF0aWMgaW50IHBydWV0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI0MTYtXHRcdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jOjI0MTc6XHRcdHBoeV9hdHRhY2hlZF9pbmZvKHBydWV0aC1cdTAwM2VlbWFjW1BSVUVUSF9NQUMwXS1cdTAwM2VuZGV2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYy0yNDE4LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI0MzMtXHRcdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jOjI0MzQ6XHRcdHBoeV9hdHRhY2hlZF9pbmZvKHBydWV0aC1cdTAwM2VlbWFjW1BSVUVUSF9NQUMxXS1cdTAwM2VuZGV2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGguYy0yNDM1LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aF9zcjEuYz04ODk9c3RhdGljIGludCBwcnVldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmMtMTA5MC1cdFx0ZW1hY19waHlfY29ubmVjdChwcnVldGgtXHUwMDNlZW1hY1tQUlVFVEhfTUFDMF0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jOjEwOTE6XHRcdHBoeV9hdHRhY2hlZF9pbmZvKHBydWV0aC1cdTAwM2VlbWFjW1BSVUVUSF9NQUMwXS1cdTAwM2VuZGV2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmMtMTA5Mi1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmMtMTEwMi1cdFx0ZW1hY19waHlfY29ubmVjdChwcnVldGgtXHUwMDNlZW1hY1tQUlVFVEhfTUFDMV0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jOjExMDM6XHRcdHBoeV9hdHRhY2hlZF9pbmZvKHBydWV0aC1cdTAwM2VlbWFjW1BSVUVUSF9NQUMxXS1cdTAwM2VuZGV2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmMtMTEwNC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90b3NoaWJhL3RjMzU4MTUuYz02MDc9c3RhdGljIGludCB0Y19taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90b3NoaWJhL3RjMzU4MTUuYy02MjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90b3NoaWJhL3RjMzU4MTUuYzo2Mjg6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdG9zaGliYS90YzM1ODE1LmMtNjI5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYz0xNTk9aW50IG5nYmVfbWRpb19pbml0KHN0cnVjdCB3eCAqd3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTE4OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzoxOTA6XHRwaHlfYXR0YWNoZWRfaW5mbyh3eC1cdTAwM2VwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTE5MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUyND1zdGF0aWMgaW50IHR4Z2JlX2V4dF9waHlfaW5pdChzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmMtNTU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1NTk6XHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01NjAtXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTc2MD1zdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc3NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo3NzY6c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNzc3LXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9ODI5PXN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04NTctXHRidXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjg1ODpcdGJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2g7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODU5LVx0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTEyMjU9aW50IHBoeV9jb25uZWN0X2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTIzMy1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTIzNDpcdHJjID0gcGh5X2F0dGFjaF9kaXJlY3QoZGV2LCBwaHlkZXYsIHBoeWRldi1cdTAwM2VkZXZfZmxhZ3MsIGludGVyZmFjZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEyMzUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMzg4PUVYUE9SVF9TWU1CT0wocGh5X2luaXRfaHcpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzg5LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzkwOnZvaWQgcGh5X2F0dGFjaGVkX2luZm8oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM5MS17XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzOTI6XHRwaHlfYXR0YWNoZWRfcHJpbnQocGh5ZGV2LCBOVUxMKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM5My19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzOTQ6RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoZWRfaW5mbyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTUtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTYtI2RlZmluZSBBVFRBQ0hFRF9GTVQgXCYjMzQ7YXR0YWNoZWQgUEhZIGRyaXZlciAlcyhtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JXMpXCYjMzQ7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEzOTc6Y2hhciAqcGh5X2F0dGFjaGVkX2luZm9faXJxKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTgte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQxNi19XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE0MTc6RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoZWRfaW5mb19pcnEpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDE4LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNDE5OnZvaWQgcGh5X2F0dGFjaGVkX3ByaW50KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDIwLXtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQyMS1cdGNvbnN0IGNoYXIgKnVuYm91bmQgPSBwaHlkZXYtXHUwMDNlZHJ2ID8gXCYjMzQ7XCYjMzQ7IDogXCYjMzQ7W3VuYm91bmRdIFwmIzM0OztcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTQyMjpcdGNoYXIgKmlycV9zdHIgPSBwaHlfYXR0YWNoZWRfaW5mb19pcnEocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQyMy1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0MzgtfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNDM5OkVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaGVkX3ByaW50KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ0MC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE3Mzc9c3RhdGljIHZvaWQgX19waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgbm90aWZ5X2J1cylcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MTctICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODE4OiAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS5cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgxOS0gKi9cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE4MjU9RVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MjctLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4Mjg6ICogcGh5X2F0dGFjaF9kaXJlY3QgLSBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBhIGdpdmVuIFBIWSBkZXZpY2UgcG9pbnRlclxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODI5LSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg0MS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg0MjppbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg0My1cdFx0ICAgICAgdTMyIGZsYWdzLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk2OC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTk2OTpcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTk3MDpcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE5NzEtXHRcdGlmIChlcnIpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMDAyLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjAwMzpFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMjAwNC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIwODc9c3RhdGljIGludCBwaHlsaW5rX2JyaW5ndXBfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIxMjEtXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIxMjI6XHRpcnFfc3RyID0gcGh5X2F0dGFjaGVkX2luZm9faXJxKHBoeSk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIxMjMtXHRwaHlsaW5rX2luZm8ocGwsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMjA0PXN0YXRpYyBpbnQgcGh5bGlua19hdHRhY2hfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyMTktXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyMjA6XHRyZXR1cm4gcGh5X2F0dGFjaF9kaXJlY3QocGwtXHUwMDNlbmV0ZGV2LCBwaHksIGZsYWdzLCBpbnRlcmZhY2UpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjIxLX1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyMjgtICogQ29ubmVjdCBAcGh5IHRvIHRoZSBwaHlsaW5rIGluc3RhbmNlIHNwZWNpZmllZCBieSBAcGwgYnkgY2FsbGluZ1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMjI5OiAqIHBoeV9hdHRhY2hfZGlyZWN0KCkuIENvbmZpZ3VyZSB0aGUgQHBoeSBhY2NvcmRpbmcgdG8gdGhlIE1BQyBkcml2ZXImIzM5O3NcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIzMC0gKiBjYXBhYmlsaXRpZXMsIHN0YXJ0IHRoZSBQSFlMSUIgc3RhdGUgbWFjaGluZSBhbmQgZW5hYmxlIGFueSBpbnRlcnJ1cHRzXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMjkwPWludCBwaHlsaW5rX2Z3bm9kZV9waHlfY29ubmVjdChzdHJ1Y3QgcGh5bGluayAqcGwsXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMzIzLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMzI0Olx0cmV0ID0gcGh5X2F0dGFjaF9kaXJlY3QocGwtXHUwMDNlbmV0ZGV2LCBwaHlfZGV2LCBmbGFncyxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjMyNS1cdFx0XHRcdHBsLVx1MDAzZWxpbmtfaW50ZXJmYWNlKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NzAzPXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X3BoeShzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcyMi1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo3MjM6XHRwaHlfYXR0YWNoZWRfaW5mbyhwcml2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNzI0LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5Mi1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyOTM6XHRwaHlfYXR0YWNoZWRfaW5mbyhkZXYtXHUwMDNlbmV0LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjk0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWluLmM9NDM0NT1zdGF0aWMgaW50IGJyY21zX2JfYXR0YWNoKHN0cnVjdCBicmNtc19jX2luZm8gKndsYywgc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWluLmMtNDUzOC1cdFx0d2xjX2h3LVx1MDAzZWJhbmQtXHUwMDNlcGkgPVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21haW4uYzo0NTM5Olx0XHRcdHdsY19waHlfYXR0YWNoKHdsY19ody1cdTAwM2VwaHlfc2gsIGNvcmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFpbi5jLTQ1NDAtXHRcdFx0XHQgICAgICAgd2xjX2h3LVx1MDAzZWJhbmQtXHUwMDNlYmFuZHR5cGUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfY21uLmM9Mzk2PXN0cnVjdCBicmNtc19waHlfcHViICpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jOjM5Nzp3bGNfcGh5X2F0dGFjaChzdHJ1Y3Qgc2hhcmVkX3BoeSAqc2gsIHN0cnVjdCBiY21hX2RldmljZSAqZDExY29yZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jLTM5OC1cdCAgICAgICBpbnQgYmFuZHR5cGUsIHN0cnVjdCB3aXBoeSAqd2lwaHkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfY21uLmMtNTMyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfY21uLmM6NTMzOlx0XHR3bGNfcGh5X2F0dGFjaF9ucGh5KHBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jLTUzNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jLTUzNS1cdH0gZWxzZSBpZiAoSVNMQ05QSFkocGkpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9jbW4uYzo1MzY6XHRcdGlmICghd2xjX3BoeV9hdHRhY2hfbGNucGh5KHBpKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jLTUzNy1cdFx0XHRnb3RvIGVycjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9oYWwuaD0xNjY9c3RydWN0IHNoYXJlZF9waHkgKndsY19waHlfc2hhcmVkX2F0dGFjaChzdHJ1Y3Qgc2hhcmVkX3BoeV9wYXJhbXMgKnNocCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9oYWwuaDoxNjc6c3RydWN0IGJyY21zX3BoeV9wdWIgKndsY19waHlfYXR0YWNoKHN0cnVjdCBzaGFyZWRfcGh5ICpzaCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2hhbC5oLTE2OC1cdFx0XHRcdCAgICAgc3RydWN0IGJjbWFfZGV2aWNlICpkMTFjb3JlLCBpbnQgYmFuZHR5cGUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfaW50Lmg9OTM5PXZvaWQgd2xjX3BoeV9jYWxfcGVyaWNhbF9tcGhhc2VfcmVzdGFydChzdHJ1Y3QgYnJjbXNfcGh5ICpwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9pbnQuaC05NDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9pbnQuaDo5NDE6dm9pZCB3bGNfcGh5X2F0dGFjaF9ucGh5KHN0cnVjdCBicmNtc19waHkgKnBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2ludC5oOjk0Mjpib29sIHdsY19waHlfYXR0YWNoX2xjbnBoeShzdHJ1Y3QgYnJjbXNfcGh5ICpwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9pbnQuaC05NDMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfbGNuLmM9NDk1Mz12b2lkIHdsY19waHlfZGV0YWNoX2xjbnBoeShzdHJ1Y3QgYnJjbXNfcGh5ICpwaSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9sY24uYy00OTU3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfbGNuLmM6NDk1ODpib29sIHdsY19waHlfYXR0YWNoX2xjbnBoeShzdHJ1Y3QgYnJjbXNfcGh5ICpwaSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2xjbi5jLTQ5NTkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X24uYz0xNDU0OT1zdGF0aWMgdm9pZCB3bGNfcGh5X3R4cHdyX3Nyb21fcmVhZF9ucGh5KHN0cnVjdCBicmNtc19waHkgKnBpKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X24uYy0xNDU5OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X24uYzoxNDYwMDp2b2lkIHdsY19waHlfYXR0YWNoX25waHkoc3RydWN0IGJyY21zX3BoeSAqcGkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9uLmMtMTQ2MDEte1xuLS1cbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYz0xNTQ9c3RhdGljIHZvaWRcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYzoxNTU6YmZhX2NvbV9waHlfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG1pbmNmZylcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYy0xNTYte1xuLS1cbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYy0xNTktXG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmM6MTYwOlx0YmZhX3BoeV9hdHRhY2gocGh5LCBcdTAwMjZiZmEtXHUwMDNlaW9jLCBiZmEsIGJmYS1cdTAwM2V0cmNtb2QsIG1pbmNmZyk7XG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMtMTYxLVx0YmZhX3BoeV9tZW1jbGFpbShwaHksIHBoeV9kbWEtXHUwMDNla3ZhX2N1cnAsIHBoeV9kbWEtXHUwMDNlZG1hX2N1cnAsIG1pbmNmZyk7XG4tLVxuZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jPTE4Mjc9YmZhX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLFxuLS1cbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYy0xODcyLVx0YmZhX2NvbV9kaWFnX2F0dGFjaChiZmEpO1xuZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jOjE4NzM6XHRiZmFfY29tX3BoeV9hdHRhY2goYmZhLCBjZmctXHUwMDNlZHJ2Y2ZnLm1pbl9jZmcpO1xuZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jLTE4NzQtXHRiZmFfY29tX2ZydV9hdHRhY2goYmZhLCBjZmctXHUwMDNlZHJ2Y2ZnLm1pbl9jZmcpO1xuLS1cbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jPTU0MzY9dm9pZFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmM6NTQzNzpiZmFfcGh5X2F0dGFjaChzdHJ1Y3QgYmZhX3BoeV9zICpwaHksIHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqZGV2LFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmMtNTQzOC1cdFx0c3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwgYmZhX2Jvb2xlYW5fdCBtaW5jZmcpXG4tLVxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmg9NzI5PXUzMlx0YmZhX3BoeV9tZW1pbmZvKGJmYV9ib29sZWFuX3QgbWluY2ZnKTtcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5oOjczMDp2b2lkIGJmYV9waHlfYXR0YWNoKHN0cnVjdCBiZmFfcGh5X3MgKnBoeSwgc3RydWN0IGJmYV9pb2NfcyAqaW9jLFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgtNzMxLVx0XHR2b2lkICpkZXYsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsIGJmYV9ib29sZWFuX3QgbWluY2ZnKTtcbi0tXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXMuaD0xODE9c3RydWN0IGhpc2lfc2FzX3BoeSB7XG4tLVxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzLmgtMTkyLVx0dThcdFx0ZnJhbWVfcmN2ZFtGUkFNRV9SQ1ZEX0JVRl07XG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXMuaDoxOTM6XHR1OFx0XHRwaHlfYXR0YWNoZWQ7XG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXMuaC0xOTQtXHR1OFx0XHRpbl9yZXNldDtcbi0tXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jPTY0OT1zdGF0aWMgdm9pZCBoaXNpX3Nhc19ieXRlc19kbWFlZChzdHJ1Y3QgaGlzaV9oYmEgKmhpc2lfaGJhLCBpbnQgcGh5X25vLFxuLS1cbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtNjU0LVxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYzo2NTU6XHRpZiAoIXBoeS1cdTAwM2VwaHlfYXR0YWNoZWQpXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jLTY1Ni1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmM9MTAzMD12b2lkIGhpc2lfc2FzX3BoeV9vb2JfcmVhZHkoc3RydWN0IGhpc2lfaGJhICpoaXNpX2hiYSwgaW50IHBoeV9ubylcbi0tXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jLTEwMzctXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwaHktXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYzoxMDM4Olx0aWYgKHBoeS1cdTAwM2VwaHlfYXR0YWNoZWQpIHtcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtMTAzOS1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwaHktXHUwMDNlbG9jaywgZmxhZ3MpO1xuLS1cbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmM9MTI4MD1zdGF0aWMgaW50IGhpc2lfc2FzX2NvbnRyb2xfcGh5KHN0cnVjdCBhc2Rfc2FzX3BoeSAqc2FzX3BoeSwgZW51bSBwaHlfZnVuYyBmdW5jLFxuLS1cbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtMTI4OS1cdGludCBwaHlfbm8gPSBzYXNfcGh5LVx1MDAzZWlkO1xuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYzoxMjkwOlx0dTggc3RzID0gcGh5LVx1MDAzZXBoeV9hdHRhY2hlZDtcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDkyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEludmVzdGlnYXRpb24gaW50byBgcGh5X2F0dGFjaF9kaXJlY3RgIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIHN5emthbGxlciBjYW4gdHJpZ2dlciB0aGUgYHBoeV9hdHRhY2hfZGlyZWN0YCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiwgSSBrbm93LCBpcyBjYWxsZWQgYnkgYHBoeV9jb25uZWN0X2RpcmVjdGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBwaHlfY29ubmVjdGAuIFRoZSBjb25uZWN0aW9uIGNoYWluIGlzIGltcG9ydGFudCwgYmVjYXVzZSBgcGh5X2Nvbm5lY3RgIGlzIGNhbGxlZCBieSBhIGxvdCBvZiBuZXR3b3JrIGRyaXZlcnMuIFNvLCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgc29tZWhvdyBnZXQgdGhlcmU/CgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBmb3IgYSB3YXkgc3l6a2FsbGVyIGNvdWxkIGNyZWF0ZSBhIHZpcnR1YWwgZGV2aWNlIHRoYXQgaW50ZXJhY3RzIHdpdGggYHBoeWxpYmAuIEkgY29uc2lkZXJlZCB0aGUgcG9zc2liaWxpdHkgb2YgdXNpbmcgYG5ldGxpbmtgIHRvIGFjY29tcGxpc2ggdGhpcy4gVGhlbiwgSSBoYWQgYSBicmllZiwgaW5jb3JyZWN0IHRob3VnaHQgYWJvdXQgYG1hY3NlY2AgdXNpbmcgUEhZcywgYnV0IHF1aWNrbHkgZGlzbWlzc2VkIGl04oCUYG1hY3NlY2AgaXMgcHVyZWx5IGEgc29mdHdhcmUgZGV2aWNlLgoKSSBzdGFydGVkIHNjYW5uaW5nIHBvdGVudGlhbCB2aXJ0dWFsIGRldmljZXMgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLiBJIGNoZWNrZWQgYGRyaXZlcnMvbmV0L2R1bW15LmNgLCBgZHJpdmVycy9uZXQvdmV0aC5jYCwgYGRyaXZlcnMvbmV0L3R1bi5jYCwgYW5kIGBkcml2ZXJzL25ldC9tYWN2bGFuLmNgLiBOb25lIG9mIHRob3NlIHVzZSBQSFlzLiBJIHRob3VnaHQgYWJvdXQgTURJTyBidXNlcywgc28gSSBnbGFuY2VkIGF0IGBkcml2ZXJzL25ldC9waHkvbWRpb19idXMuY2AuIEkga25vdyBzeXprYWxsZXIgY2FuIGludGVyYWN0IHdpdGggdGhvc2UgdGhyb3VnaCBpb2N0bHMgbGlrZSBgU0lPQ1NNSUlSRUdgIGFuZCBgU0lPQ0dNSUlQSFlgLiBIb3dldmVyLCB0aGlzIGRvZXNuJiMzOTt0IGRpcmVjdGx5IHRyaWdnZXIgYHBoeV9hdHRhY2hfZGlyZWN0YDsgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIGBuZXRfZGV2aWNlYCBhdHRhY2hlcyB0byBhIFBIWS4KClRoYXQmIzM5O3Mgd2hlbiBpdCBoaXQgbWU6IGBwaHlfYXR0YWNoX2RpcmVjdGAgaXMgY2FsbGVkIHdoZW4gYSBgbmV0X2RldmljZWAgaXMgb3BlbmVkLCBzYXksIHZpYSB0aGUgYG5kb19vcGVuYCBtZXRob2QsIGFuZCBvbmx5IHdoZW4gdGhlIGRldmljZSBhY3R1YWxseSBoYXMgYSBQSFkgYXNzb2NpYXRlZCB3aXRoIGl0LiBTbywgaWYgdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRoIHRoaW5ncyBsaWtlIGBDT05GSUdfRFVNTVlgIG9yIGBDT05GSUdfVkVUSGAsIEkgY2FuJiMzOTt0IHRyaWdnZXIgaXQsIGJlY2F1c2UgdGhvc2UgZGV2aWNlcyBkb24mIzM5O3QgaGF2ZSBQSFlzLgoKU28sIEkgbmVlZCB0byBmaW5kIGEgbmV0d29yayBkcml2ZXIsIHJlYWNoYWJsZSBieSBzeXprYWxsZXIsIHdoaWNoICpkb2VzKiB1c2UgUEhZcy4gVGhhdCYjMzk7cyB0aGUga2V5LiBBaGEhIFN5emthbGxlciBjYW4gdXNlIGBuZXRkZXZzaW1gLiBJJiMzOTtsbCBnbyBjaGVjayB3aGV0aGVyIG9yIG5vdCBgbmV0ZGV2c2ltYCB1c2VzIFBIWXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzAwMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVTQiBOZXR3b3JrIERyaXZlcnMgYW5kIFBIWXM6IEEgU3l6a2FsbGVyIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gYnJvYWRlbiB0aGUgY292ZXJhZ2Ugb2YgbXkgZnV6emluZyBlZmZvcnRzLCBhbmQgYGRyaXZlcnMvbmV0L3VzYmAgY29tZXMgdG8gbWluZC4gU3l6a2FsbGVyJiMzOTtzIGFiaWxpdHkgdG8gZW11bGF0ZSBVU0IgZGV2aWNlcyB1c2luZyBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSB3YW50IHRvIGxldmVyYWdlLiBUaGUgcXVlc3Rpb24gaXMsIHdoYXQgdnVsbmVyYWJpbGl0aWVzIGFyZSBsaWtlbHkgdG8gYmUgbHVya2luZyB0aGVyZT8KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB3aGV0aGVyIGFueSBVU0IgbmV0d29yayBkcml2ZXJzIGFjdHVhbGx5IHJlbHkgb24gUEhZcy4gVGhpcyBjb3VsZCBvcGVuIHVwIGEgbmV3IGF2ZW51ZSBmb3IgdGVzdGluZyBhbmQgZXhwbG9pdCBkaXNjb3ZlcnkuIFNvLCBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGxpbmsgYmV0d2VlbiB0aGUgVVNCIG5ldHdvcmsgZHJpdmVycyBhbmQgYW55IFBoeXNpY2FsIExheWVyIGltcGxlbWVudGF0aW9ucy4gVGhpcyBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz03MDM9c3RhdGljIGludCBheDg4NzcyX2luaXRfcGh5KHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNzIyLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjcyMzpcdHBoeV9hdHRhY2hlZF9pbmZvKHByaXYtXHUwMDNlcGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MjQtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjkyLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI5MzpcdHBoeV9hdHRhY2hlZF9pbmZvKGRldi1cdTAwM2VuZXQtXHUwMDNlcGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyOTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDgxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipOZXR3b3JrIERyaXZlciBJbnZlc3RpZ2F0aW9uOiBgcGh5X2Nvbm5lY3RgIHZzLiBgcGh5X2F0dGFjaF9kaXJlY3RgKioKClJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBxdWlja2x5IGFzY2VydGFpbiBob3cgdGhlIGBzbXNjOTV4eGAgYW5kIGBhc2l4YCBkcml2ZXJzIGhhbmRsZSB0aGVpciBQSFkgY29ubmVjdGlvbnMuIFRoZSBrZXkgdGhpbmcgSSYjMzk7bSBsb29raW5nIGZvciBpcyB3aGV0aGVyIHRoZXkmIzM5O3JlIGVtcGxveWluZyB0aGUgbGVnYWN5IGBwaHlfY29ubmVjdGAgZnVuY3Rpb24sIG9yIGlmIHRoZXkmIzM5O3ZlIG1pZ3JhdGVkIHRvIHRoZSBuZXdlciBgcGh5X2F0dGFjaF9kaXJlY3RgIGFwcHJvYWNoLiBLbm93aW5nIHRoaXMgaW1wYWN0cyBzbyBtYW55IHRoaW5ncywgZnJvbSB0aGUgb3ZlcmFsbCBkcml2ZXIgYXJjaGl0ZWN0dXJlIHRvIHBvdGVudGlhbCBxdWlya3MgaW4gaGFuZGxpbmcgc3BlY2lmaWMgUEhZIGNoYXJhY3RlcmlzdGljcy4gSXQgd2lsbCBoZWxwIG1lIGRpYWdub3NlIGNlcnRhaW4gaXNzdWVzLCBjb21wYXJlIHRoZWlyIG1ldGhvZHMgZm9yIGZ1dHVyZSByZWZlcmVuY2UsIGFuZCB1bmRlcnN0YW5kIGlmIHRoZXkgaGF2ZSB0YWtlbiBhZHZhbnRhZ2Ugb2YgdGhlIG1vZGVybiBhcHByb2FjaC4gSXQmIzM5O3MgcmVhbGx5IHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciBQSFkgaW50ZXJhY3Rpb24gbW9kZWwgYW5kIHdoZXJlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBwcm9ibGVtcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBUaW1lIHRvIGdldCBkaWdnaW5nIHRocm91Z2ggdGhlIGNvZGUuLi4gbGV0JiMzOTtzIHNlZSB3aGljaCBwYXRoIHRoZXNlIGRyaXZlcnMgYXJlIHRha2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2Nvbm5lY3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MjYxPXN0YXRpYyBpbnQgYXg4ODE3MmFfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTMxMy1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjMxNDpcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LVx1MDAzZW5ldCwgcHJpdi1cdTAwM2VwaHlfbmFtZSxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTMxNS1cdFx0XHRcdCAgIFx1MDAyNmF4ODgxNzJhX2FkanVzdF9saW5rLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4NC1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyODU6XHRyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QoZGV2LVx1MDAzZW5ldCwgcGRhdGEtXHUwMDNlcGh5ZGV2LFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4Ni1cdFx0XHRcdCBcdTAwMjZzbXNjOTV4eF9oYW5kbGVfbGlua19jaGFuZ2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDM4CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiB0aGUgTmV3IE1ESU8gQnVzIENhbGxiYWNrcyoqCgpPa2F5LCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIGZvbGxvd2luZyB0aGUgcG90ZW50aWFsIGNhbGwgY2hhaW4gaGVyZS4gSXQgbG9va3MgbGlrZSBib3RoIGBzbXNjOTV4eGAgYW5kIGBheDg4MTcyYWAgdXNlIGBwaHlfY29ubmVjdF9kaXJlY3RgIGFuZCBgcGh5X2Nvbm5lY3RgLCB3aGljaCwgaW4gdHVybiwgY2FsbCBgcGh5X2F0dGFjaF9kaXJlY3RgLiBHaXZlbiBTeXprYWxsZXImIzM5O3MgVVNCIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMsIGl0IGNvdWxkIHRyaWdnZXIgZWl0aGVyIGBzbXNjOTV4eF9iaW5kYCBvciBgYXg4ODE3MmFfcmVzZXRgLiBUaGF0IHdvdWxkIGJlIHRoZSBlbnRyeSBwb2ludCB0byBnZXQgaW50byB0aGUgZnVuY3Rpb25zLCBgcGh5X2Nvbm5lY3RfZGlyZWN0YCBhbmQgYHBoeV9jb25uZWN0YCwgZXZlbnR1YWxseSBsZWFkaW5nIHRvIGBwaHlfYXR0YWNoX2RpcmVjdGAuCgpBbmQgdGhlbiwgY3J1Y2lhbGx5LCBgcGh5X2F0dGFjaF9kaXJlY3RgIGNhbGxzIGBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpYC4gVGhhdCYjMzk7cyB3aGVyZSBpdCBjb25uZWN0cy4KCkFoYSEgVGhlIHBhdGNoICphZGRzKiBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIHRvIHRoZSBgc3RydWN0IG1paV9idXNgLCB3aGljaCBpcyBrZXkuIEFuZCB0aGVuIGl0IGFjdHVhbGx5IGltcGxlbWVudHMgdGhlc2UgY2FsbGJhY2tzIHdpdGhpbiBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gQnV0IGhlcmUmIzM5O3MgdGhlIHNuYWc6IGBzbXNjOTV4eGAgYW5kIGBheDg4MTcyYWAgdXNlICp0aGVpciBvd24qIE1ESU8gYnVzZXMsIG5vdCB0aGUgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGltcGxlbWVudGF0aW9uLiBUaGlzIG1lYW5zIHRoZSBgbm90aWZ5X3BoeV9hdHRhY2hgIGNhbGxiYWNrIGluIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCB3aWxsICpvbmx5KiBiZSBjYWxsZWQgaWYgdGhlIFBIWSBpcyBhdHRhY2hlZCB0byB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gYnVzLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcyB3aGV0aGVyIFN5emthbGxlciBjYW4gaW5zdGFudGlhdGUgdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGJ1cy4gSXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIHN1Z2dlc3RzIGl0IG1pZ2h0IHJlcXVpcmUgc3BlY2lmaWMgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBob3cgdG8gdHJpZ2dlciB0aGF0IHBsYXRmb3JtIGRyaXZlciwgdG8gc2VlIGlmIEkgY2FuIGZvcmNlIGl0IHRvIHVzZSB0aGlzIGRyaXZlci4gVGhhdCB3b3VsZCBiZSB0aGUgcGF0aCB0byBtYWtpbmcgdGhpcyBjYWxsIGNoYWluIGFjdHVhbGx5IGZpcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BsYXRmb3JtX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9MTE1ND1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvdHRvX2VtZGlvX2lkcyk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTE1NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoxMTU2OnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG90dG9fZW1kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTExNTctXHQucHJvYmUgPSBvdHRvX2VtZGlvX3Byb2JlLFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTYzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjExNjQ6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihvdHRvX2VtZGlvX2RyaXZlcik7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTE2NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwOTMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggaG93IGEgcGxhdGZvcm0gZHJpdmVyIGdldHMgbG9hZGVkLiBUeXBpY2FsbHksIGl0JiMzOTtzIHRoZSBEZXZpY2UgVHJlZSB0aGF0IGtpY2tzIHRoaW5ncyBvZmYsIHJpZ2h0PyBUaGF0JiMzOTtzIGhvdyB0aGUga2VybmVsIGtub3dzIGFib3V0IHRoZSBoYXJkd2FyZSBhbmQgd2hhdCBkcml2ZXJzIHRvIGxvYWQsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBkZXZpY2UgdHJlZSBoYXMgdGhhdCBhbGwtaW1wb3J0YW50ICYjMzQ7Y29tcGF0aWJsZSYjMzQ7IHN0cmluZywgdGhlIG9uZSB0aGF0IHRlbGxzIHRoZSBrZXJuZWwgJiMzNDtoZXksIHVzZSB0aGlzIGRyaXZlciYjMzQ7IOKAkyB0aGluZ3MgbGlrZSBgJiMzNDtyZWFsdGVrLHJ0bDgzODAtbWRpbyYjMzQ7YC4gSWYgaXQmIzM5O3MgbWlzc2luZywgYG90dG9fZW1kaW9fcHJvYmVgIGlzbiYjMzk7dCBnb2luZyB0byBnZXQgY2FsbGVkLCBhbmQgdGhhdCYjMzk7cyBhIHByb2JsZW0uCgpOb3csIG15IG1pbmQgd2FuZGVycyB0byBzeXprYWxsZXIuLi4gY2FuIEkgZm9yY2UgYSBwbGF0Zm9ybSBkZXZpY2UgaW50byBleGlzdGVuY2UgdGhyb3VnaCBgc3l6X2Rldm1lbWAgb3Igb25lIG9mIHRob3NlIHBzZXVkby1zeXNjYWxscz8gTm8sIHdhaXQsIHRoYXQmIzM5O3Mgbm90IHF1aXRlIHJpZ2h0LiBTeXprYWxsZXIgaGFzIGBzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZGAsIG9yIGl0IGNhbiB1c2UgYG5ldGxpbmtgIHRvIGNyZWF0ZSBkZXZpY2VzLCBidXQgZ2VuZXJhbGx5IGl0JiMzOTtzIGEgYml0IHRyaWNreSB0byBzcGluIHVwIHBsYXRmb3JtIGRldmljZXMgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUgc3BlY2lhbCBzeXprYWxsZXIgZGVzY3JpcHRpb24gZm9yIHRoYXQgc3BlY2lmaWMgZGV2aWNlLgoKQnV0IHRoZW4sIHRoYXQgc3BhcmtzIGEgbmV3IHRob3VnaHQuIERvZXMgc3l6a2FsbGVyIGhhdmUgYSBtb3JlIGdlbmVyYWwgbWVjaGFuaXNtIHRvIGluc3RhbnRpYXRlICphcmJpdHJhcnkqIHBsYXRmb3JtIGRldmljZXM/IElzIHRoZXJlIGEgYnJvYWRlciB3YXkgdG8gZGVmaW5lIGFuZCB0cmlnZ2VyIHRoZSBjcmVhdGlvbiBvZiBhIHBsYXRmb3JtIGRldmljZSB3aXRob3V0IHJlbHlpbmcgb24gdGhlIERldmljZSBUcmVlIG9yIGEgc3BlY2lmaWMgZGV2aWNlLXJlbGF0ZWQgY2FsbD8KCkkgbmVlZCB0byBkaWcgaW50byB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gYW5kIGNvZGUgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgZ2VuZXJhbGl6ZWQgJiMzNDtwbGF0Zm9ybSBkZXZpY2UmIzM0OyBkZXNjcmlwdGlvbiBzb21ld2hlcmUuIFRpbWUgdG8gY2hlY2sgaWYgdGhlcmUmIzM5O3MgYSBzeXprYWxsZXIgZGVzY3JpcHRpb24gZm9yIHBsYXRmb3JtIGRldmljZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6X3BsYXRmb3JtX2RldmljZV9hZGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTY2MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGggRnV6emluZyBEZWNpc2lvbjogWUVTKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGRpdGNoIHRoZSBpZGVhIG9mIHVzaW5nIGBnaXQgZ3JlcGAgZm9yIHNlYXJjaGluZyBzeXprYWxsZXIgcHNldWRvLXN5c2NhbGxzOyBgcmVhZC1maWxlYCBvciBteSBleGlzdGluZyBrbm93bGVkZ2UgaXMgdGhlIHdheSB0byBnby4KClRoaXMgcGF0Y2gsIGl0JiMzOTtzIGdvdCBtZSB0aGlua2luZy4gSXQgdG91Y2hlcyBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AsIHdoaWNoIGlzIGNvcmUgUEhZIGNvZGUuIFRoZSBjaGFuZ2VzIHRoZXJlIGFyZSBzaW1wbGU6IGFkZGluZyBhIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gb24gUEhZIGF0dGFjaC9kZXRhY2gg4oCTIGNoZWNraW5nIGZvciBhIGZ1bmN0aW9uIHBvaW50ZXIgYW5kIGNhbGxpbmcgaXQuIFZlcnkgYmFzaWMuIFRoZSBidWxrIG9mIHRoZSBjaGFuZ2VzIGFyZSBpbiBhIFJlYWx0ZWsgTURJTyBjb250cm9sbGVyIGRyaXZlci4gVGhhdCYjMzk7cyBwbGF0Zm9ybS1zcGVjaWZpYyBhbmQgZm9yIHZlcnkgc3BlY2lmaWMgUmVhbHRlayBoYXJkd2FyZS4gQ2FuIEkgaGl0IHRoYXQgaW4gUUVNVT8gUHJvYmFibHkgbm90IHdpdGhvdXQgc3BlY2lmaWMgcGxhdGZvcm0gaW5zdGFudGlhdGlvbiwgd2hpY2ggc3l6a2FsbGVyIGRvZXNuJiMzOTt0IHVzdWFsbHkgZG8gdW5sZXNzIGl0JiMzOTtzIGV4cGxpY2l0bHkgc2V0IHVwLiBTbywgdGhhdCBSZWFsdGVrIHN0dWZmIGlzIHByb2JhYmx5IGEgZGVhZCBlbmQgZm9yIG1lLgoKQnV0IHRob3NlIGNvcmUgUEhZIGNoYW5nZXM/IFRoZXkmIzM5O3JlIGV4ZWN1dGVkIG9uICpldmVyeSogUEhZIGF0dGFjaG1lbnQgYW5kIGRldGFjaG1lbnQuIEV2ZW4gaWYgdGhlIGBub3RpZnlfcGh5X2F0dGFjaGAgaXMgTlVMTCwgdGhhdCBjb2RlIHN0aWxsIHJ1bnMuIFNvIGlmIEkgZnV6eiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAsIEkmIzM5O20gZnV6emluZyB0aGUgY29yZSwgcmVnYXJkbGVzcyBvZiB0aGUgdGFyZ2V0LgoKSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgcHJvbXB0IHNheXMgaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBJIHNob3VsZCB2ZXJpZnkgZXhlY3V0aW9uIGFuZCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4KCkkmIzM5O20gdGhpbmtpbmc6IGlzIHRoZXJlIHNvbWUgb3RoZXIgd2F5IHRvIHJlYWNoIHRoZSBSZWFsdGVrIGNoYW5nZXM/IE5vcGUsIHRoYXQmIzM5O3Mgc3BlY2lmaWMgaGFyZHdhcmUuIEJVVCB0aG9zZSBjb3JlIGNoYW5nZXMgYXJlIGluZGVlZCB0cml2aWFsLCBqdXN0IGEgbnVsbCBjaGVjayBhbmQgYSBmdW5jdGlvbiBjYWxsLiBJdCYjMzk7cyBhIHZlcnkgc2ltcGxlIGJyYW5jaC4gVGhlIHJlYWwgbG9naWMgaXMgaW4gdGhhdCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLCBzbyB0aGF0IHNwZWNpZmljIGNvbnRyb2xsZXIgaXMgbm90IHJlYWNoYWJsZS4gU28gaXQgc2hvdWxkIGJlIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKV2FpdCEgVGhlIHByb21wdCBhbHNvIHNheXM6ICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OwoKSSBjYW4gcmVhY2ggdGhpcywgdXNpbmcgYSBVU0IgbmV0d29ya2luZyBnYWRnZXQsIHN1Y2ggYXMgYHNtc2M5NXh4YC4KClNvIGl0IHNlZW1zIGxpa2UgZnV6emluZyBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgaXMgYWN0dWFsbHkgYSBnb29kIHBsYW4uIFRob3NlIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIGNvbW1vbiBVU0IgbmV0d29ya2luZyBnYWRnZXRzLiBTbywgbXkgZm9jdXMgc2hvdWxkIGJlIHRob3NlIGZ1bmN0aW9ucy4gT2theSwgc28gSSBzaG91bGQgYmUgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAgYW5kIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4gVGhvc2Ugd2lsbCBleGVjdXRlIGJlY2F1c2Ugb2YgdGhlIFVTQiBuZXR3b3JraW5nIGdhZGdldC4KCkFsc28sIGlzIHRoaXMgY29yZSBwYXRoIGEgaG90LXBhdGg/IE5vdCByZWFsbHksIGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgZGV2aWNlIG9wZW4vaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uIFRoaXMgd2lsbCBiZSBhbiBlZGdlIGNhc2UuCgpPbmUgbGFzdCBjaGVjay4gYF9fcGh5X2RldGFjaGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0ICptaWdodCogYmUgaW5saW5lZC4gQnV0IGl0JiMzOTtzIGNhbGxlZCBieSBgcGh5X2RldGFjaGAgYW5kIGBwaHlfYXR0YWNoX2RpcmVjdGAgKG9uIGVycm9yKS4gTG9va3MgbGlrZSB0aGF0IHdpbGwgbmVlZCB0byBiZSBjaGVja2VkLiBMZXQgbWUgY29uZmlybSwgeWVzLCBgX19waHlfZGV0YWNoYCBpcyBzdGF0aWMuCgpBbHJpZ2h0LCB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIHdoYXQgSSBzaG91bGQgZm9jdXMgb24uIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBpdCBpcy4gQW5kIHllcywgSSBkb3VibGUtY2hlY2tlZDsgYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgYHNtc2M5NXh4YCBkZXZpY2UsIHdoaWNoIGNhbiBiZSBlbXVsYXRlZC4KClNvIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9jb25uZWN0X2RpcmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4NC1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyODU6XHRyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QoZGV2LVx1MDAzZW5ldCwgcGRhdGEtXHUwMDNlcGh5ZGV2LFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4Ni1cdFx0XHRcdCBcdTAwMjZzbXNjOTV4eF9oYW5kbGVfbGlua19jaGFuZ2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3OTQzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgUGh5IEF0dGFjaCBEaXJlY3QqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUgZmxvdywgYHNtc2M5NXh4X2JpbmRgIGRpcmVjdGx5IGNhbGxzIGBwaHlfY29ubmVjdF9kaXJlY3RgLCBhbmQgdGhhdCBmdW5jdGlvbiwgaW4gdHVybiwgY2FsbHMgYHBoeV9hdHRhY2hfZGlyZWN0YC4gVGhhdCBjb25maXJtcyB0aGF0IGBwaHlfYXR0YWNoX2RpcmVjdGAgKmlzKiBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHRoYXQgYmluZGluZyBmdW5jdGlvbi4gR29vZC4gTm93LCB3aGF0IGFib3V0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zPyBUbyBtYWtlIHN1cmUgdGhhdCBgcGh5X2RldmljZS5jYCBpcyBjb21waWxlZCwgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgYENPTkZJR19QSFlMSUJgIGVuYWJsZWQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlYCB0byBjb25maXJtIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9kZXZpY2VcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjQ6bGlicGh5LXlcdFx0XHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS01LVx0XHRcdFx0ICAgbGlua21vZGUubyBwaHlfbGlua190b3BvbG9neS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjY5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmc6CgoqKlBIWSBMaWJyYXJ5IERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IHByb2Nlc3NlZCB0aGF0IGBsaWJwaHkteWAgZ2V0cyBjb25zdHJ1Y3RlZCBvbmx5IHdoZW4gdGhlIGBDT05GSUdfUEhZTElCYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IGltcGxpZXMgdGhhdCB0aGUgUEhZIGxpYnJhcnksIG9yIHNvbWUgY29yZSBwYXJ0IG9mIGl0LCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBUaGlzIHRlbGxzIG1lIHRoYXQgaWYgYENPTkZJR19QSFlMSUJgIGlzbiYjMzk7dCBlbmFibGVkLCB0aGVuIHRoZSBQSFkgZnVuY3Rpb25hbGl0eSBpcyBlaXRoZXIgYWJzZW50IGVudGlyZWx5IGZyb20gdGhlIGtlcm5lbCwgaW1wbGVtZW50ZWQgZGlmZmVyZW50bHksIG9yIGhhbmRsZWQgYnkgYSBzZXBhcmF0ZSBtb2R1bGUuIFRoaXMgaXMgZnVuZGFtZW50YWwgdG8gbXkga25vd2xlZGdlIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uOyBlbmFibGluZyBpdCBlc3NlbnRpYWxseSBpbmNsdWRlcyB0aGUgY29yZSBQSFkgc3VwcG9ydC4gSSBuZWVkIHRvIG5vdyBjb25zaWRlciBob3cgdGhlIFBIWSBsaWJyYXJ5IGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29yayBzdGFjaywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaWJwaHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMtXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NDpsaWJwaHkteVx0XHRcdDo9IHBoeS5vIHBoeS1jNDUubyBwaHktY29yZS5vIHBoeV9kZXZpY2UubyBcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTUtXHRcdFx0XHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTI9ZW5kaWZcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xMy1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNDpsaWJwaHktJChDT05GSUdfU1dQSFkpXHRcdCYjNDM7PSBzd3BoeS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MTU6bGlicGh5LSQoQ09ORklHX0xFRF9UUklHR0VSX1BIWSlcdCYjNDM7PSBwaHlfbGVkX3RyaWdnZXJzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNjpsaWJwaHktJChDT05GSUdfT1BFTl9BTExJQU5DRV9IRUxQRVJTKSAmIzQzOz0gb3Blbl9hbGxpYW5jZV9oZWxwZXJzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xNy1cbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX1BIWUxJTkspXHRcdCYjNDM7PSBwaHlsaW5rLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfUEhZTElCKVx0XHQmIzQzOz0gbGlicGh5Lm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfUEhZTElCKVx0XHQmIzQzOz0gbWRpb19kZXZyZXMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc3OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVVNCIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBjb25maWd1cmluZyB0aGlzIG5ldHdvcmsgZHJpdmVyLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgc29ydGVkIG91dC4gRmlyc3QsIEkmIzM5O20gY29uZmlybWluZyB0aGF0IGBDT05GSUdfUEhZTElCYCBpcyBlbmFibGVkOyB0aGF0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LiBUaGVuLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgc21zYzk1eHhgIGRyaXZlciwgSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgYENPTkZJR19VU0JfTkVUX1NNU0M5NVhYYCBpcyBlbmFibGVkLiBUbyBkb3VibGUtY2hlY2sgdGhvc2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfTkVUX1NNU0M5NVhYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzQxPWNvbmZpZyBVU0JfTkVUX1NNU0M3NVhYXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzUwLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzUxOmNvbmZpZyBVU0JfTkVUX1NNU0M5NVhYXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNTItXHR0cmlzdGF0ZSBcJiMzNDtTTVNDIExBTjk1WFggYmFzZWQgVVNCIDIuMCAxMC8xMDAgZXRoZXJuZXQgZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTEwNwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGZyYW1lZCBhcyBpZiBJJiMzOTttIHdvcmtpbmcgdGhyb3VnaCBpdCBteXNlbGY6CgoqKk5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24gRGVjaXNpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGJhc2VkIG9uIHRoZSBuZXR3b3JrIHJlcXVpcmVtZW50cywgYFBIWUxJQmAgYW5kIGBVU0JfTkVUX1NNU0M5NVhYYCBhcmUgZGVmaW5pdGVseSBnb29kIGNhbmRpZGF0ZXMgdG8gZW5hYmxlLiBUaG9zZSBjb3ZlciBhIGJyb2FkIHJhbmdlIG9mIFBIWSBhbmQgVVNCIG5ldHdvcmsgYWRhcHRlciBzY2VuYXJpb3MsIHJlc3BlY3RpdmVseS4gSSB0aGluayB0aGF0JiMzOTtzIGEgc29saWQgc3RhcnQuCgpIbW0sIGJ1dCB3YWl0IGEgc2Vjb25kLi4uIGlzbiYjMzk7dCB0aGUgUmVhbHRlayBkcml2ZXIgdXNpbmcgYENPTkZJR19SRUFMVEVLX01ESU9gPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcgY3J1Y2lhbC4gTGV0IG1lIGdvIHB1bGwgdXAgdGhlIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIGZpbGUgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEp1c3QgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgcmVsZXZhbnQgUmVhbHRlay1zcGVjaWZpYyBzZXR0aW5ncywgb3IgYW55IGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gdGFrZSBjYXJlIG9mIGFzIHdlbGwuIFRoYXQgUmVhbHRlayBkcml2ZXIgbWlnaHQgYnJpbmcgaW4gb3RoZXIgY29uZmlndXJhdGlvbnMuIEJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTY2PWNvbmZpZyBNRElPX0lQUTgwNjRcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTczLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3NDpjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzUtXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTU0NAoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA5OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgUEhZIENvcmUgYW5kIFJUTDkzMDAgTURJTyBDb250cm9sbGVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYC4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBhbiBSZWFsdGVrIFNvQywgc28gaXQgd29uJiMzOTt0IGJlIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAgd2l0aG91dCBhIHNwZWNpZmljIGRldmljZSB0cmVlLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpcyBpbmNsdWRpbmcgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBpbiBgRW5hYmxlQ29uZmlnc2Agd29ydGh3aGlsZT8gWWVzLCBhYnNvbHV0ZWx5LiBJdCYjMzk7cyB0aGUgcHJpbWFyeSB0YXJnZXQgb2YgdGhlIHBhdGNoLCBhbmQgd2hpbGUgaXQgbWlnaHQgbm90IGJlIGRpcmVjdGx5IGZ1enplZCwgaXQgZG9lc24mIzM5O3QgaHVydCB0byBpbmNsdWRlIGl0LgoKVGhlIHByb21wdCBzcGVjaWZpZWQgdGhhdCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyBhcmUgbm90IGxpa2VseSB0byBiZSBlbXVsYXRlZC4gQnV0IHRoaXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBpcyBub3QgYSBQQ0llIGRldmljZTsgaXQmIzM5O3MgYW4gTU1JTyBkZXZpY2UsIGEgc3lzY29uLCBhbiBTb0MgYmxvY2suIFNvIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIG5vdCBhIFBDSWUgZGV2aWNlLCB0aGUgcHJvbXB0IGlzIHN0aWxsIGFwcGxpY2FibGUgaWYgdGhlIGRldmljZSBpcyBub3QgaW5zdGFudGlhdGVkLiAKCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQuIEl0JiMzOTtzIHVubGlrZWx5IHN5emthbGxlciBjYW4gZWFzaWx5IGZ1enogaXQgdW5sZXNzIGl0JiMzOTtzIGluc3RhbnRpYXRlZC4gSG93ZXZlciwgdGhlIGNvcmUgUEhZIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBzbyB0aGF0JiMzOTtzIHRoZSBhbmdsZS4KClRodXMsIEkmIzM5O2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGUgY29yZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBrZXkgZnVuY3Rpb25zOiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIHN5bWJvbHMgYXJlIGV4cG9ydGVkLiBZZXMsIGBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtgIGlzIHVzZWQsIGFuZCBzaW1pbGFybHkgZm9yIGBwaHlfZGV0YWNoYC4KClRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBJZiB0aGUgUmVhbHRlayBkZXZpY2UgKndlcmUqIGluc3RhbnRpYXRlZCBzb21laG93LCB0aGVyZSBhcmUgZnVuY3Rpb25zIGhlcmUgdGhhdCBtaWdodCBiZSBpbnRlcmVzdGluZzogYG90dG9fZW1kaW9fcHJvYmVgLCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaGAsIGFuZCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaGAuIEJ1dCB0aGUgU29DIGJsb2NrIGluc3RhbnRpYXRpb24gaXMgdmVyeSB1bmxpa2VseSwgc28gSSB3aWxsIGZvY3VzIG9uIHRoZSBjb3JlIFBIWSBmdW5jdGlvbnMuCgpJIHJldmlld2VkIHRoZSBjaGFuZ2VzIHRvIGBwaHlfZGV2aWNlLmNgLiBUaGUgcGF0Y2ggcmVmYWN0b3JzIGBwaHlfZGV0YWNoYCB0byBgX19waHlfZGV0YWNoYCBhbmQgYWRkcyBhIGBub3RpZnlfYnVzYCBwYXJhbWV0ZXIuIEl0IGFsc28gY2FsbHMgYG5vdGlmeV9waHlfYXR0YWNoYCB3aXRoaW4gYHBoeV9hdHRhY2hfZGlyZWN0YC4gSWYgYG5vdGlmeV9waHlfYXR0YWNoYCBmYWlscywgaXQgY2FsbHMgYF9fcGh5X2RldGFjaChwaHlkZXYsIGZhbHNlKWAgdG8gcm9sbGJhY2suIFRoaXMgaXMgYSBzbWFsbCBidXQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbS4KCkhvdyBvZnRlbiBpcyBgcGh5X2F0dGFjaF9kaXJlY3RgIGNhbGxlZD8gTm90IG9uIGEgaG90IHBhdGguIEl0JiMzOTtzIGNhbGxlZCB3aGVuIGEgbmV0d29yayBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cCAoYGlwIGxpbmsgc2V0IGV0aDAgdXBgKS4gU2FmZSB0byBmb2N1cyBvbi4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4gYENPTkZJR19QSFlMSUJgIGlzIHRyaXN0YXRlLiBgQ09ORklHX1VTQl9ORVRfU01TQzk1WFhgIGlzIGFsc28gdHJpc3RhdGUuIGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgIGlzIGFsc28gdHJpc3RhdGUuCgpUaGVyZWZvcmUsIGhlcmUgaXMgdGhlIHN0cmF0ZWd5OgoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgCiogICBgRm9jdXNTeW1ib2xzOiBbJiMzNDtwaHlfYXR0YWNoX2RpcmVjdCYjMzQ7LCAmIzM0O3BoeV9kZXRhY2gmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnczogWyYjMzQ7UEhZTElCJiMzNDssICYjMzQ7VVNCX05FVF9TTVNDOTVYWCYjMzQ7LCAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDtdYAoqICAgYFJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBub3RpZnlfcGh5X2F0dGFjaCBhbmQgbm90aWZ5X3BoeV9kZXRhY2ggY2FsbGJhY2tzIHRvIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gYW5kIGltcGxlbWVudHMgdGhlbSBpbiB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gZHJpdmVyLiBUaGUgY29yZSBQSFkgY2hhbmdlcyBpbiBwaHlfYXR0YWNoX2RpcmVjdCBhbmQgcGh5X2RldGFjaCBhcmUgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsL2VtdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyAoZS5nLiwgVVNCIFNNU0M5NXh4KSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgY2FsbGJhY2sgbG9naWMgaXMgcm9idXN0LiYjMzQ7YAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfU01TQzk1WFgmIzM0OywKICAgICYjMzQ7TURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfYXR0YWNoX2RpcmVjdCYjMzQ7LAogICAgJiMzNDtwaHlfZGV0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbm90aWZ5X3BoeV9hdHRhY2ggYW5kIG5vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIGFuZCBpbXBsZW1lbnRzIHRoZW0gaW4gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGRyaXZlci4gVGhlIGNvcmUgUEhZIGNoYW5nZXMgaW4gcGh5X2F0dGFjaF9kaXJlY3QgYW5kIHBoeV9kZXRhY2ggYXJlIHJlYWNoYWJsZSB2aWEgdmlydHVhbC9lbXVsYXRlZCBuZXR3b3JrIGRldmljZXMgKGUuZy4sIFVTQiBTTVNDOTV4eCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGNhbGxiYWNrIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfU01TQzk1WFgmIzM0OywKICAgICYjMzQ7TURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfYXR0YWNoX2RpcmVjdCYjMzQ7LAogICAgJiMzNDtwaHlfZGV0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbm90aWZ5X3BoeV9hdHRhY2ggYW5kIG5vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIGFuZCBpbXBsZW1lbnRzIHRoZW0gaW4gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGRyaXZlci4gVGhlIGNvcmUgUEhZIGNoYW5nZXMgaW4gcGh5X2F0dGFjaF9kaXJlY3QgYW5kIHBoeV9kZXRhY2ggYXJlIHJlYWNoYWJsZSB2aWEgdmlydHVhbC9lbXVsYXRlZCBuZXR3b3JrIGRldmljZXMgKGUuZy4sIFVTQiBTTVNDOTV4eCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGNhbGxiYWNrIGxvZ2ljIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjEzOjM2LjgwODAzMzExM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTYwNDAxNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiVVNCX05FVF9TTVNDOTVYWFwiLFxuICAgIFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfYXR0YWNoX2RpcmVjdFwiLFxuICAgIFwicGh5X2RldGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbm90aWZ5X3BoeV9hdHRhY2ggYW5kIG5vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIGFuZCBpbXBsZW1lbnRzIHRoZW0gaW4gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGRyaXZlci4gVGhlIGNvcmUgUEhZIGNoYW5nZXMgaW4gcGh5X2F0dGFjaF9kaXJlY3QgYW5kIHBoeV9kZXRhY2ggYXJlIHJlYWNoYWJsZSB2aWEgdmlydHVhbC9lbXVsYXRlZCBuZXR3b3JrIGRldmljZXMgKGUuZy4sIFVTQiBTTVNDOTV4eCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGNhbGxiYWNrIGxvZ2ljIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTM6MzYuODA4MDQwMzMzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTcxNDkzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4YmIwZmYwMTM0NDM2YjQ5MGJmMzBlNWRhY2MyZjUyNDg3NzA3MzAyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMxIDAxOjEzOjM2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxcbmluZGV4IDI3MWUwNWJhZTljNTcuLjY3ZTBiMjNhODQ3MGUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuQEAgLTQsNyArNCw3IEBAXFxuICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjXFxuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbiBcXG4tdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXJcXG4rdGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXJcXG4gXFxuIG1haW50YWluZXJzOlxcbiAgIC0gQ2hyaXMgUGFja2hhbSBcXHUwMDNjY2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56XFx1MDAzZVxcbkBAIC0xMiw2ICsxMiwxNiBAQCBtYWludGFpbmVyczpcXG4gcHJvcGVydGllczpcXG4gICBjb21wYXRpYmxlOlxcbiAgICAgb25lT2Y6XFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW9cXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvXFxuICAgICAgIC0gaXRlbXM6XFxuICAgICAgICAgICAtIGVudW06XFxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW9cXG5AQCAtMjQsNiArMzQsOCBAQCBwcm9wZXJ0aWVzOlxcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW9cXG4gICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsOTMxMS1tZGlvXFxuICAgICAgIC0gZW51bTpcXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xcbmluZGV4IGFmZDUyYTFjZDdmODMuLmQ5ZDRiNzA0YWZiM2QgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuKysrIGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXFxuQEAgLTM1LDEyICszNSw4OCBAQFxcbiAgKlxcbiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvblxcbiAgKiB0aGUgZXRoZXJuZXQtcG9ydHMgcHJvcGVydHkuXFxuKyAqXFxuKyAqIFRoZSBkZXZpY2VzIGhhdmUgYSBoYXJkd2FyZSBwb2xsaW5nIHVuaXQgdGhhdCBydW5zIGluIHRoZSBiYWNrZ3JvdW5kIHdpdGhvdXQgYW55IENQVSBsb2FkLiBJdFxcbisgKiBjb25zdGFudGx5IHNjYW5zIHRoZSBNRElPIGJ1cyBhbmQgdGhlIGF0dGFjaGVkIFBIWXMgYW5kIHVwZGF0ZXMgdGhlIE1BQyBzdGF0dXMgcmVnaXN0ZXJzLlxcbisgKlxcbisgKiBIb3cgZG9lcyB0aGUgcG9sbGluZyB3b3JrP1xcbisgKlxcbisgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZlxcbisgKiB0aGUgYXNzb2NpYXRlZCBidXMvYWRkcmVzcyBpcyBhY3RpdmUgb3Igbm90LiBUaGUgaGFyZHdhcmUgcnVucyBhIHRpZ2h0IGxvb3Agb3ZlciB0aGlzIGFuZCBmb3JcXG4rICogZWFjaCBzZXQgcG9sbGluZyBiaXQgaXQgaXNzdWVzIGEgc3RhdHVzIGNoZWNrIGZvciB0aGUgUEhZLiBBdHRhY2hpbmcgYSBsb2dpYyBhbmFseXplciB0byB0aGVcXG4rICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOlxcbisgKlxcbisgKlxcdFJUTDgzODBcXHRcXHRcXHRcXHRSVEw4MzkzXFxuKyAqXFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMzEsIDB4MCk7XFx0cGh5X3JlYWQocGh5LCAwKTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcXHRwaHlfcmVhZChwaHksIDEpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcXHRwaHlfcmVhZChwaHksIDQpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1xcdHBoeV9yZWFkKHBoeSwgNSk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxNCk7XFx0XFx0cGh5X3JlYWQocGh5LCA2KTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcXHRwaHlfcmVhZChwaHksIDkpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcXHRwaHlfcmVhZChwaHksIDEwKTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcXHRwaHlfcmVhZChwaHksIDE1KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDE0KTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDkpO1xcdFxcdHBoeV93cml0ZShwaHksIDE0LCAweDNjKTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDEwKTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDE1KTtcXHRcXHRwaHlfcmVhZChwaHksIDE0KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDApO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMSk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgNCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA1KTtcXHRcXHRwaHlfcmVhZChwaHksIDE0KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDYpO1xcbisgKlxcbisgKiBBZnRlciBvbmUgUEhZIHN0YXR1cyBpcyByZWFkLCB0aGUgcG9sbGluZyBlbmdpbmUgZ29lcyBvdmVyIHRvIHRoZSBuZXh0IFBIWS4gSWYgb25lIGJ1cyBpcyBmdWxseVxcbisgKiBzY2FubmVkIGl0IHN3aXRjaGVzIG92ZXIgdG8gdGhlIG5leHQgYnVzLiBCYXNpY2FsbHkgdGhlIHBvbGxpbmcgc3lzdGVtIGlzIGFsd2F5cyBidXN5IGFuZCB0aGVcXG4rICogTUFDIHN0YXRlIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLlxcbisgKlxcbisgKiBUaGlzIGlzIGEgZ2xpbXBzZSBsb29rIGF0IHRoZSBjb21wbGV4aXR5IG9mIHRoZSBwb2xsaW5nIGFuZCBsZWF2ZXMgb3V0IHRoZSBDNDUgY2FzZSBhbmQgdGhlIE1BQ1xcbisgKiByZWdpc3RlciB1cGRhdGUgbG9naWMgYWZ0ZXJ3YXJkcy4gSW1wb3J0YW50IHRvIG5vdGU6XFxuKyAqXFxuKyAqIC0gMTAwIE1CaXQgZG93bnNoaWZ0cyAoYnJva2VuIGNhYmxlcykgYXJlIGlkZW50aWZpZWQgYW5kIHByb3BhZ2F0ZWQgdG8gdGhlIE1BQyBjb3JyZWN0bHlcXG4rICogLSBBY2Nlc3MgdG8gTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgd29ya3MgdmlhIEM0NSBvdmVyIEMyMi5cXG4rICogLSBJdCBpcyB1bmNsZWFyIGlmIHRoZXNlIHNlcXVlbmNlcyBjaGFuZ2UgZm9yIGRpZmZlcmVudCBQSFlzLlxcbisgKiAtIEFjY2VzcyB0byBSZWFsdGVrIHJlc2VydmVkIHJlZ2lzdGVyIDI2IChsaW5rIHNwZWVkKSBoYXMgbm90IHlldCBiZWVuIHNlZW4uXFxuKyAqXFxuKyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/XFxuKyAqXFxuKyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXJcXG4rICogc2V0cyBhIFxcXCJydW4gY29tbWFuZCBub3dcXFwiIGJpdC4gQmV0d2VlbiB0d28gcG9sbGluZyBzZXF1ZW5jZXMgZm9yIGRpZmZlcmVudCBQSFlzIHRoZSBoYXJkd2FyZVxcbisgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlc1xcbisgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHdyaXRlIG9uIHRoZSBsb2dpYyBhbmFseXplciBnaXZlczpcXG4rICpcXG4rICpcXHRSVEw4MzgwXFx0XFx0XFx0XFx0UlRMODM5M1xcbisgKlxcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKlxcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcXHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XFx0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XFxuKyAqXFx0XFx0XFx0XFx0XFx0cGh5X3dyaXRlKHBoeSwgMzEsIDApO1xcbisgKlxcbisgKiBXaGF0IGRvZXMgdGhpcyBtZWFuP1xcbisgKlxcbisgKiBUaGVyZSBhcmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIHBvbGxpbmcgYW5kIFBIWSBhY2Nlc3MgYmV0d2VlbiB0aGUgbW9kZWxzIGJ1dCB0aGUgY2hhbGxlbmdlXFxuKyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXRcXG4rICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uXFxuKyAqXFxuKyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay5cXG4rICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy5cXG4rICogLSBUaGUgUmVhbHRlayBwYWdlIHJlZ2lzdGVyIDMxIGlzIG1hZ2ljYWxseSBtb2RpZmllZCBpbiB0aGUgYmFja2dyb3VuZCBzbyB0aGF0IHBvbGxpbmcgd2lsbFxcbisgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW1cXG4rICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgXFxcIm1hZ2ljYWxseVxcXCIgaW4gdGhlIGJhY2tncm91bmQuXFxuKyAqIC0gQSBDNDUgb3ZlciBDMjIga2VybmVsIGFjY2VzcyBzZXF1ZW5jZSBpcyBtb3N0IGxpa2VseSB0byBmYWlsIGJlY2F1c2UgY2hhbmNlcyBhcmUgaGlnaCB0aGF0XFxuKyAqICAgdGhlIHBvbGxpbmcgZW5naW5lIG92ZXJ3cml0ZXMgcmVnaXN0ZXJzIDEzLzE0IGluIGJldHdlZW4uXFxuKyAqIC0gUEhZIGZpcm13YXJlIGxvYWRpbmcgY2FuIGhhdmUgaXNzdWVzLiBFc3BlY2lhbGx5IGlmIGEgUEhZIGlzIGRlc2lnbmVkIHRvIGV4cGVjdCBhIGNsZWFuXFxuKyAqICAgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgd2l0aG91dCBkZXZpYXRpb24uXFxuKyAqIC0gQW4gYWNjZXNzIHRvIG9uZSBQSFkgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyZWUgc2xvdCBvZiB0aGUgcG9sbGluZyBlbmdpbmUuXFxuKyAqXFxuKyAqIENvbmNsdXNpb246IFRoZSBSZWFsdGVrIE1ESU8gYnVzIGRyaXZlciBQSFkgYWNjZXNzIG11c3Qga25vdyBhbmQgaGFuZGxlIGFueSBpbnRlcmZlcmVuY2UgdGhhdFxcbisgKiBhcmlzZXMgZnJvbSB0aGUgYWJvdmUgZGVzY3JpYmVkIGhhcmR3YXJlIHBvbGxpbmcuXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRtYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpbmQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tyZWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuQEAgLTUwLDYgKzEyNiw1MCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbiBcXG4rI2RlZmluZSBSVEw4MzgwX05VTV9CVVNFU1xcdFxcdFxcdDFcXG4rI2RlZmluZSBSVEw4MzgwX05VTV9QQUdFU1xcdFxcdFxcdDQwOTZcXG4rI2RlZmluZSBSVEw4MzgwX05VTV9QT1JUU1xcdFxcdFxcdDI4XFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfR0xCX0NUUkxcXHRcXHRcXHQweGExMDBcXG4rI2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FXFx0XFx0QklUKDE1KVxcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXFx0XFx0MHhhMWI4XFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcXHRcXHQweGExYmNcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFJcXHRcXHRHRU5NQVNLKDI0LCAyMClcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFXFx0XFx0R0VOTUFTSygxOSwgMTUpXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRVxcdFxcdEdFTk1BU0soMTQsIDMpXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQURcXHRcXHRcXHQwXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1XFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyXFx0XFx0MFxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9GQUlMXFx0XFx0XFx0MCAvKiBubyBmYWlsIGluZGljYXRvciAqL1xcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yXFx0XFx0MHhhMWMwXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMzEsIDE2KVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1xcdFxcdDB4YTFjNFxcbisjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTFxcdFxcdFxcdDB4YTE3Y1xcbisjZGVmaW5lIFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMXFx0XFx0MHhhMWM4XFxuK1xcbisjZGVmaW5lIFJUTDgzOTBfTlVNX0JVU0VTXFx0XFx0XFx0MlxcbisjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTXFx0XFx0XFx0ODE5MlxcbisjZGVmaW5lIFJUTDgzOTBfTlVNX1BPUlRTXFx0XFx0XFx0NTJcXG4rI2RlZmluZSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkxcXHRcXHQweDAzZWNcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTFxcdFxcdDB4MDNkY1xcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUlxcdFxcdEdFTk1BU0soOSwgNSlcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFXFx0XFx0R0VOTUFTSygyMiwgMTApXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUxcXHRcXHRcXHRCSVQoMSlcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfV1JJVEVcXHRcXHRCSVQoMylcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRFxcdFxcdFxcdDBcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDVcXHRcXHRCSVQoMilcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjJcXHRcXHQwXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQ1RSTFxcdFxcdFxcdDB4MDNlMFxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRVxcdFxcdEdFTk1BU0soOCwgMClcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkxcXHRcXHQweDAzZjBcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygzMSwgMTYpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEFcXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMXFx0XFx0XFx0MHgwM2Y0XFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPV1xcdFxcdDB4MDNlNFxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdIXFx0XFx0MHgwM2U4XFxuKyNkZWZpbmUgUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcXHRcXHQweDAzZmNcXG4rXFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcXHRcXHRcXHQ0XFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVNcXHRcXHRcXHQ0MDk2XFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFNcXHRcXHRcXHQyOFxcbkBAIC03MCw2ICsxOTAsNyBAQFxcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEFcXHRcXHRHRU5NQVNLKDMxLCAxNilcXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcXHRcXHQweGNiN2NcXG4rI2RlZmluZSBSVEw5MzAwX1NNSV9QT0xMX0NUUkxcXHRcXHRcXHQweGNhOTBcXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFxcdFxcdDB4Y2I4MFxcbiBcXG4gI2RlZmluZSBSVEw5MzEwX05VTV9CVVNFU1xcdFxcdFxcdDRcXG5AQCAtOTUsMTIgKzIxNiwxNiBAQFxcbiAjZGVmaW5lICAgUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEFcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19NTURfQ1RSTFxcdDB4MGMxOFxcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfQUREUl9DVFJMXFx0XFx0MHgwYzc0XFxuKyNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkxcXHRcXHQweDBjY2NcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfU0VMXFx0XFx0MHgwYzljXFxuIFxcbiAjZGVmaW5lIFBIWV9DVFJMX0NNRFxcdFxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9ERVZBRFxcdFxcdFxcdEdFTk1BU0soMjAsIDE2KVxcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUdcXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbiBcXG4rI2RlZmluZSBSVExfVkVORE9SX0lEXFx0XFx0XFx0XFx0MHgwMDFjYzgwMFxcbisjZGVmaW5lIFJUTF9QQUdFX1NFTEVDVFxcdFxcdFxcdFxcdDMxXFxuK1xcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXFx0XFx0XFx0NlxcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSXFx0XFx0XFx0NVxcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9CVVNcXHRcXHRcXHQyXFxuQEAgLTEyMyw5ICsyNDgsMTEgQEAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3Mge1xcbiBcXG4gc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87XFxuK1xcdHN0cnVjdCBrcmVmIGtyZWY7XFxuIFxcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcXG4gXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3QgSFcgYWNjZXNzICovXFxuIFxcdERFQ0xBUkVfQklUTUFQKHZhbGlkX3BvcnRzLCBNQVhfUE9SVFMpO1xcbitcXHR1MTYgcGFnZVtNQVhfUE9SVFNdO1xcbiBcXHR1OCBzbWlfYnVzW01BWF9QT1JUU107XFxuIFxcdHU4IHNtaV9hZGRyW01BWF9QT1JUU107XFxuIFxcdGJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdO1xcbkBAIC0xNDIsNiArMjY5LDcgQEAgc3RydWN0IG90dG9fZW1kaW9faW5mbyB7XFxuIFxcdHU4IG51bV9idXNlcztcXG4gXFx0dTggbnVtX3BvcnRzO1xcbiBcXHR1MTYgbnVtX3BhZ2VzO1xcbitcXHR1MzIgcG9sbF9jdHJsO1xcbiBcXHRpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTtcXG4gXFx0aW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcXG4gXFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xcbkBAIC0xNzcsNiArMzA1LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpXFxuIFxcdHJldHVybiBjaGFuLVxcdTAwM2Vwcml2O1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCBpbnQgcG9ydCwgYm9vbCBhY3RpdmUpXFxuK3tcXG4rXFx0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXBvbGxfY3RybCArIChwb3J0IC8gMzIpICogNCxcXG4rXFx0XFx0XFx0XFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxcbiB7XFxuQEAgLTE4NSw5ICszMTksOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbiBcXHR1MzIgY21kc3RhdGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqL1xcbitcXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xcbiBcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlcmVnbWFwLCBpbmZvLVxcdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjI3LDcgKzM2MSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlcmVnbWFwLCBpbmZvLVxcdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjY0LDEzICszOTgsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9IEJJVChwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFxcdTAwMjZjbWRfZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jNDVfZGF0YVxcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gQklUKHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmV4dF9wYWdlXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbitcXHRcXHQuZXh0X3BhZ2VcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbitcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmM0NV9kYXRhXFx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoXFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFxcdTAwM2VcXHUwMDNlIDMyKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuIHtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuIFxcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4gXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXFxuIFxcdH07XFxuIFxcbkBAIC0yODQsNyArNTI4LDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbiBcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4tXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuIFxcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXFxuIFxcdFxcdC5wb3J0X21hc2tfbG93XFx0PSBCSVQocG9ydCksXFxuIFxcdH07XFxuQEAgLTMyNCw3ICs1NjgsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdVxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmJyb2FkY2FzdFxcdD0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLFxcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHR9O1xcbiBcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuQEAgLTMzNiw3ICs1ODAsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuQEAgLTM4Miw4ICs2MjYsMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXFxuIFxcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKVxcbitcXHRcXHRcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcGFnZVtwb3J0XTtcXG4rXFxuIFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXJlYWRfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCBcXHUwMDI2dmFsdWUpO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7XFxuIH1cXG5AQCAtMzk3LDggKzY0NSwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNlxcbiBcXHRpZiAocG9ydCBcXHUwMDNjIDApXFxuIFxcdFxcdHJldHVybiBwb3J0O1xcbiBcXG4tXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaylcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRpZiAocmVnbnVtID09IFJUTF9QQUdFX1NFTEVDVCkge1xcbitcXHRcXHRcXHRpZiAodmFsdWUgXFx1MDAzZT0gUkFXX1BBR0UocHJpdikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlcGFnZVtwb3J0XSA9IHZhbHVlO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNld3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtNDcxLDYgKzcyOCwxNSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBQSFlfUEFUQ0hfRE9ORSBlbmFibGVzIFBIWSBjb250cm9sIHZpYSBTb0MuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIFBIWSBhY2Nlc3MsIGluY2x1ZGluZ1xcbitcXHQgKiBwYXRjaGluZyBhbmQgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBQSFlzIGFyZSBwcm9iZWQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gcmVnbWFwX3NldF9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiB7XFxuIFxcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcXG5AQCAtNTA3LDYgKzc3Myw1OSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IGNoYW4tXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAocG9ydCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBwb3J0O1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVxcdTAwM2VtZGlvX2J1c10gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LVxcdTAwM2VwaHlfaWQsIFJUTF9WRU5ET1JfSUQpKSB7XFxuK1xcdFxcdHBoeWRldl9lcnIocGh5ZGV2LCBcXFwiT25seSBSZWFsdGVrIFBIWXMgYWxsb3dlZCBvbiBDMjIgYnVzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyk7XFxuK1xcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vwcml2O1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogYXZvaWQgd3JvbmcgY2FjaGVkIHBhZ2UgZm9yIG5leHQgYXR0YWNobWVudCAqL1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXNtaV9idXNfaXNfYzQ1W2NoYW4tXFx1MDAzZW1kaW9fYnVzXSlcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcGFnZVtwb3J0XSA9IDA7XFxuK1xcbitcXHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZXJyKGJ1cy1cXHUwMDNlcGFyZW50LCBcXFwiZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcXFxuXFxcIiwgcG9ydCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fY2xlYW51cF9jb250cm9sbGVyKHN0cnVjdCBrcmVmICprcmVmKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiwga3JlZik7XFxuK1xcbitcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0a2ZyZWUocHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fY2xlYW51cF9idXModm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gZGF0YTtcXG4rXFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZwcml2LVxcdTAwM2VrcmVmLCBvdHRvX2VtZGlvX2NsZWFudXBfY29udHJvbGxlcik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXFxuIHtcXG5AQCAtNTM2LDEyICs4NTUsMjAgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcXG4gXFx0XFx0YnVzLVxcdTAwM2V3cml0ZSA9IG90dG9fZW1kaW9fd3JpdGVfYzIyO1xcbiBcXHR9XFxuIFxcdGJ1cy1cXHUwMDNlcGFyZW50ID0gZGV2O1xcbitcXHRidXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcXG4rXFx0YnVzLVxcdTAwM2Vub3RpZnlfcGh5X2RldGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2g7XFxuK1xcbiBcXHRjaGFuID0gYnVzLVxcdTAwM2Vwcml2O1xcbiBcXHRjaGFuLVxcdTAwM2VtZGlvX2J1cyA9IG1kaW9fYnVzO1xcbiBcXHRjaGFuLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4gXFxuIFxcdHNucHJpbnRmKGJ1cy1cXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXFxcIiVzLSVkXFxcIiwgZGV2X25hbWUoZGV2KSwgbWRpb19idXMpO1xcbiBcXG4rXFx0a3JlZl9nZXQoXFx1MDAyNnByaXYtXFx1MDAzZWtyZWYpO1xcbitcXHRlcnIgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2LCBvdHRvX2VtZGlvX2NsZWFudXBfYnVzLCBwcml2KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFxcXCJjYW5ub3QgcmVnaXN0ZXIgY2xlYW51cCBhY3Rpb25cXFxcblxcXCIpO1xcbitcXG4gXFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCB0b19vZl9ub2RlKG5vZGUpKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFxcXCJjYW5ub3QgcmVnaXN0ZXIgTURJTyBidXNcXFxcblxcXCIpO1xcbkBAIC02NTIsNTAgKzk3OSwxMjIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXFx1MDAzYyBwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VudW1fcG9ydHM7IHBvcnQrKykge1xcbitcXHRcXHRlcnIgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdjtcXG4rXFx0aW50IGJ1c2VzX3JlZ2lzdGVyZWQgPSAwO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRwcml2ID0ga3phbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0ZXJyID0gZGV2bV9tdXRleF9pbml0KGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRrcmVmX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZWtyZWYpO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdHByaXYtXFx1MDAzZWluZm8gPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcXG4gXFx0cHJpdi1cXHUwMDNlcmVnbWFwID0gc3lzY29uX25vZGVfdG9fcmVnbWFwKGRldi1cXHUwMDNlcGFyZW50LVxcdTAwM2VvZl9ub2RlKTtcXG4tXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZWdtYXApKVxcbi1cXHRcXHRyZXR1cm4gUFRSX0VSUihwcml2LVxcdTAwM2VyZWdtYXApO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXJlZ21hcCkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihwcml2LVxcdTAwM2VyZWdtYXApO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTtcXG4gXFxuIFxcdGVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdGVyciA9IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3kocHJpdik7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdGlmIChwcml2LVxcdTAwM2VpbmZvLVxcdTAwM2VzZXR1cF9jb250cm9sbGVyKSB7XFxuIFxcdFxcdGVyciA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXNldHVwX2NvbnRyb2xsZXIocHJpdik7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcXFwiZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFxcblxcXCIpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFxcXCJmYWlsZWQgdG8gc2V0dXAgTURJTyBidXMgY29udHJvbGxlclxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRkZXZpY2VfZm9yX2VhY2hfY2hpbGRfbm9kZV9zY29wZWQoZGV2LCBjaGlsZCkge1xcbiBcXHRcXHRlcnIgPSBvdHRvX2VtZGlvX3Byb2JlX29uZShkZXYsIHByaXYsIGNoaWxkKTtcXG4gXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHRcXHRidXNlc19yZWdpc3RlcmVkKys7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRpZiAoIWJ1c2VzX3JlZ2lzdGVyZWQpXFxuK1xcdFxcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLCBcXFwibm8gTURJTyBidXNlcyByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4rZXJyX291dDpcXG4rXFx0a3JlZl9wdXQoXFx1MDAyNnByaXYtXFx1MDAzZWtyZWYsIG90dG9fZW1kaW9fY2xlYW51cF9jb250cm9sbGVyKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM4MF9pbmZvID0ge1xcbitcXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDgzODBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxcbitcXHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXFxuK1xcdC5jbWRfcmVhZCA9IFJUTDgzODBfUEhZX0NUUkxfUkVBRCxcXG4rXFx0LmNtZF93cml0ZSA9IFJUTDgzODBfUEhZX0NUUkxfV1JJVEUsXFxuK1xcdC5jbWRfcmVncyA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsXFxuK1xcdFxcdC5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLFxcbitcXHRcXHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLFxcbitcXHR9LFxcbitcXHQubnVtX2J1c2VzID0gUlRMODM4MF9OVU1fQlVTRVMsXFxuK1xcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcXG4rXFx0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMODM4MF9TTUlfUE9MTF9DVFJMLFxcbitcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxcbitcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXFxuK1xcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NSxcXG4rXFx0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXFxuK1xcdC53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1LFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7XFxuK1xcdC5jbWRfZmFpbCA9IFJUTDgzOTBfUEhZX0NUUkxfRkFJTCxcXG4rXFx0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxcbitcXHQuY21kX3dyaXRlID0gUlRMODM5MF9QSFlfQ1RSTF9XUklURSxcXG4rXFx0LmNtZF9yZWdzID0ge1xcbitcXHRcXHQuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLFxcbitcXHRcXHQuYzIyX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTCxcXG4rXFx0XFx0LmM0NV9kYXRhID0gUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwsXFxuK1xcdFxcdC5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsXFxuK1xcdFxcdC5pb19kYXRhID0gUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1csXFxuK1xcdFxcdC5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILFxcbitcXHR9LFxcbitcXHQubnVtX2J1c2VzID0gUlRMODM5MF9OVU1fQlVTRVMsXFxuK1xcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcXG4rXFx0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMODM5MF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXFxuK1xcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMixcXG4rXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxcbitcXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMixcXG4rXFx0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcXG4gXFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcXG4gXFx0LmJ1c19tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzE1X1BPTExJTkdfU0VMLFxcbkBAIC03MTEsNiArMTExMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xcbiBcXHQubnVtX2J1c2VzID0gUlRMOTMwMF9OVU1fQlVTRVMsXFxuIFxcdC5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUyxcXG4gXFx0Lm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLFxcbiBcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMwMF9zZXR1cF9jb250cm9sbGVyLFxcbiBcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXFxuIFxcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSxcXG5AQCAtNzM2LDYgKzExMzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcXG4gXFx0Lm51bV9idXNlcyA9IFJUTDkzMTBfTlVNX0JVU0VTLFxcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsXFxuIFxcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcXG4rXFx0LnBvbGxfY3RybCA9IFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxcbiBcXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLFxcbiBcXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXFxuIFxcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NSxcXG5AQCAtNzQ0LDYgKzExNDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcXG4gfTtcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw4MzgwLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzgzODBfaW5mbyB9LFxcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscnRsODM5MS1tZGlvXFxcIiwgLmRhdGEgPSBcXHUwMDI2b3R0b19lbWRpb184MzkwX2luZm8gfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDkzMDEtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fOTMwMF9pbmZvIH0sXFxuIFxcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw5MzExLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzkzMTBfaW5mbyB9LFxcbiBcXHR7fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDk0YjJlODVlMDBhMzcuLjIzMzYyMmU5YmE2MWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG5AQCAtMTczNCw2ICsxNzM0LDk2IEBAIHN0YXRpYyBib29sIHBoeV9kcnZfc3VwcG9ydHNfaXJxKGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuIFxcdHJldHVybiBwaHlkcnYtXFx1MDAzZWNvbmZpZ19pbnRyIFxcdTAwMjZcXHUwMDI2IHBoeWRydi1cXHUwMDNlaGFuZGxlX2ludGVycnVwdDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgX19waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgbm90aWZ5X2J1cylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXY7XFxuK1xcdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlZGV2bGluaykge1xcbitcXHRcXHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVxcdTAwM2VkZXZsaW5rKTtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VkZXZsaW5rID0gTlVMTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlc3lzZnNfbGlua3MpIHtcXG4rXFx0XFx0aWYgKGRldilcXG4rXFx0XFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNmRldi1cXHUwMDNlZGV2LmtvYmosIFxcXCJwaHlkZXZcXFwiKTtcXG4rXFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYua29iaiwgXFxcImF0dGFjaGVkX2RldlxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2KVxcbitcXHRcXHRzeXNmc19yZW1vdmVfZmlsZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5rb2JqLFxcbitcXHRcXHRcXHRcXHQgIFxcdTAwMjZkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTtcXG4rXFxuK1xcdHBoeV9zdXNwZW5kKHBoeWRldik7XFxuK1xcbitcXHRpZiAobm90aWZ5X2J1cyBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2RldGFjaClcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gocGh5ZGV2KTtcXG4rXFxuK1xcdGlmIChkZXYpIHtcXG4rXFx0XFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XFxuK1xcbitcXHRcXHQvKiBod3Byb3YgbWF5IHRlY2huaWNhbGx5IGJlIHByb3RlY3RlZCBieSBvcHMgbG9jayBidXRcXG4rXFx0XFx0ICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aHdwcm92ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtXFx1MDAzZWh3cHJvdik7XFxuK1xcdFxcdC8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi9cXG4rXFx0XFx0aWYgKGh3cHJvdiBcXHUwMDI2XFx1MDAyNiBod3Byb3YtXFx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcXG4rXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cXHUwMDNlaHdwcm92LCBOVUxMKTtcXG4rXFx0XFx0XFx0a2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2Rldi1cXHUwMDNlcGh5ZGV2ID0gTlVMTDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xcbitcXHRcXHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XFxuK1xcdHBoeWRldi1cXHUwMDNlcGh5bGluayA9IE5VTEw7XFxuK1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5kcml2ZXIpXFxuK1xcdFxcdG1vZHVsZV9wdXQocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5kcml2ZXItXFx1MDAzZW93bmVyKTtcXG4rXFxuK1xcdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxcbitcXHQgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2VcXG4rXFx0ICogZnJvbSB0aGUgZ2VuZXJpYyBkcml2ZXIgc28gdGhhdCB0aGVyZSdzIGEgY2hhbmNlIGFcXG4rXFx0ICogcmVhbCBkcml2ZXIgY291bGQgYmUgbG9hZGVkXFxuK1xcdCAqL1xcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XFxuK1xcdFxcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXFxuK1xcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxcbitcXHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cXG4rXFx0ICovXFxuK1xcdGJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuK1xcbitcXHRwdXRfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4rXFx0aWYgKGRldilcXG4rXFx0XFx0bmRldl9vd25lciA9IGRldi1cXHUwMDNlZGV2LnBhcmVudC1cXHUwMDNlZHJpdmVyLVxcdTAwM2Vvd25lcjtcXG4rXFx0aWYgKG5kZXZfb3duZXIgIT0gYnVzLVxcdTAwM2Vvd25lcilcXG4rXFx0XFx0bW9kdWxlX3B1dChidXMtXFx1MDAzZW93bmVyKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHBoeV9kZXRhY2ggLSBkZXRhY2ggYSBQSFkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlXFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxcbisgKlxcbisgKiBUaGlzIGRldGFjaGVzIHRoZSBwaHkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcGh5XFxuKyAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS5cXG4rICovXFxuK3ZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdC8qIGNsZWFudXAgaW5jbHVkaW5nIGJ1cyBub3RpZmljYXRpb24gKi9cXG4rXFx0X19waHlfZGV0YWNoKHBoeWRldiwgdHJ1ZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcXG4rXFxuIC8qKlxcbiAgKiBwaHlfYXR0YWNoX2RpcmVjdCAtIGF0dGFjaCBhIG5ldHdvcmsgZGV2aWNlIHRvIGEgZ2l2ZW4gUEhZIGRldmljZSBwb2ludGVyXFxuICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxcbkBAIC0xODc2LDYgKzE5NjYsMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcbitcXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcXG4rXFx0XFx0ZXJyID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBlcnJvcjtcXG4rXFx0fVxcbitcXG4gXFx0cGh5X3Jlc3VtZShwaHlkZXYpO1xcbiBcXG4gXFx0LyoqXFxuQEAgLTE4OTAsOCArMTk4Niw4IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiBcXHRyZXR1cm4gZXJyO1xcbiBcXG4gZXJyb3I6XFxuLVxcdC8qIHBoeV9kZXRhY2goKSBkb2VzIGFsbCBvZiB0aGUgY2xlYW51cCBiZWxvdyAqL1xcbi1cXHRwaHlfZGV0YWNoKHBoeWRldik7XFxuK1xcdC8qIGNsZWFudXAgd2l0aG91dCBidXMgbm90aWZpY2F0aW9uICovXFxuK1xcdF9fcGh5X2RldGFjaChwaHlkZXYsIGZhbHNlKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gXFxuIGVycm9yX21vZHVsZV9wdXQ6XFxuQEAgLTE5MDYsODYgKzIwMDIsNiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcXG4gXFxuLS8qKlxcbi0gKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxcbi0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tICpcXG4tICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxcbi0gKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXFxuLSAqL1xcbi12b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4te1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXY7XFxuLVxcdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbi1cXG4tXFx0aWYgKHBoeWRldi1cXHUwMDNlZGV2bGluaykge1xcbi1cXHRcXHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVxcdTAwM2VkZXZsaW5rKTtcXG4tXFx0XFx0cGh5ZGV2LVxcdTAwM2VkZXZsaW5rID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKHBoeWRldi1cXHUwMDNlc3lzZnNfbGlua3MpIHtcXG4tXFx0XFx0aWYgKGRldilcXG4tXFx0XFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNmRldi1cXHUwMDNlZGV2LmtvYmosIFxcXCJwaHlkZXZcXFwiKTtcXG4tXFx0XFx0c3lzZnNfcmVtb3ZlX2xpbmsoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYua29iaiwgXFxcImF0dGFjaGVkX2RldlxcXCIpO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIXBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2KVxcbi1cXHRcXHRzeXNmc19yZW1vdmVfZmlsZShcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5rb2JqLFxcbi1cXHRcXHRcXHRcXHQgIFxcdTAwMjZkZXZfYXR0cl9waHlfc3RhbmRhbG9uZS5hdHRyKTtcXG4tXFxuLVxcdHBoeV9zdXNwZW5kKHBoeWRldik7XFxuLVxcdGlmIChkZXYpIHtcXG4tXFx0XFx0c3RydWN0IGh3dHN0YW1wX3Byb3ZpZGVyICpod3Byb3Y7XFxuLVxcbi1cXHRcXHQvKiBod3Byb3YgbWF5IHRlY2huaWNhbGx5IGJlIHByb3RlY3RlZCBieSBvcHMgbG9jayBidXRcXG4tXFx0XFx0ICogbm90IGZvciBkZXZpY2VzIHdpdGggYSBwaHlkZXYsIHNlZSBwaHlfbGlua190b3BvX2FkZF9waHkoKVxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aHdwcm92ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtXFx1MDAzZWh3cHJvdik7XFxuLVxcdFxcdC8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi9cXG4tXFx0XFx0aWYgKGh3cHJvdiBcXHUwMDI2XFx1MDAyNiBod3Byb3YtXFx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcXG4tXFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cXHUwMDNlaHdwcm92LCBOVUxMKTtcXG4tXFx0XFx0XFx0a2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2Rldi1cXHUwMDNlcGh5ZGV2ID0gTlVMTDtcXG4tXFx0XFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xcbi1cXHRcXHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xcbi1cXHR9XFxuLVxcbi1cXHRwaHlkZXYtXFx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XFxuLVxcdHBoeWRldi1cXHUwMDNlcGh5bGluayA9IE5VTEw7XFxuLVxcbi1cXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5kcml2ZXIpXFxuLVxcdFxcdG1vZHVsZV9wdXQocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5kcml2ZXItXFx1MDAzZW93bmVyKTtcXG4tXFxuLVxcdC8qIElmIHRoZSBkZXZpY2UgaGFkIG5vIHNwZWNpZmljIGRyaXZlciBiZWZvcmUgKGkuZS4gLSBpdFxcbi1cXHQgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2VcXG4tXFx0ICogZnJvbSB0aGUgZ2VuZXJpYyBkcml2ZXIgc28gdGhhdCB0aGVyZSdzIGEgY2hhbmNlIGFcXG4tXFx0ICogcmVhbCBkcml2ZXIgY291bGQgYmUgbG9hZGVkXFxuLVxcdCAqL1xcbi1cXHRpZiAocGh5ZGV2LVxcdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XFxuLVxcdFxcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuLVxcdFxcdHBoeWRldi1cXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XFxuLVxcdH1cXG4tXFxuLVxcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXFxuLVxcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcXG4tXFxuLVxcdC8qXFxuLVxcdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxcbi1cXHQgKiBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBieSByZWFkaW5nIHRoZSB1bmRlcmx5aW5nIGJ1cyBmaXJzdC5cXG4tXFx0ICovXFxuLVxcdGJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuLVxcbi1cXHRwdXRfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2KTtcXG4tXFx0aWYgKGRldilcXG4tXFx0XFx0bmRldl9vd25lciA9IGRldi1cXHUwMDNlZGV2LnBhcmVudC1cXHUwMDNlZHJpdmVyLVxcdTAwM2Vvd25lcjtcXG4tXFx0aWYgKG5kZXZfb3duZXIgIT0gYnVzLVxcdTAwM2Vvd25lcilcXG4tXFx0XFx0bW9kdWxlX3B1dChidXMtXFx1MDAzZW93bmVyKTtcXG4tfVxcbi1FWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xcbi1cXG4gaW50IHBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDExMDkyYzMxNzViM2QuLmZlZjBjNmEzZTI3ZmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMzc2LDYgKzM3NiwyNCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XFxuIFxcdFxcdFxcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKTtcXG4gXFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cXG4gXFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xcbitcXHQvKipcXG4rXFx0ICogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nIGZvciBNRElPIGJ1c1xcbitcXHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfZGV0YWNoLiBDYWxsZWRcXG4rXFx0ICogaW4gcGh5X2F0dGFjaF9kaXJlY3QoKSByaWdodCBiZWZvcmUgcGh5X3Jlc3VtZSgpLiBSdW5zIGluIHByb2Nlc3NcXG4rXFx0ICogY29udGV4dCwgbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdFxcbitcXHQgKiBhY3F1aXJlIG9yIHJlbHkgb24gUlROTC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJybm9cXG4rXFx0ICogb24gZmFpbHVyZS4gTXVzdCB1bndpbmQgaXRzIG93biBzdGF0ZSBvbiBlcnJvciBhcyBhdHRhY2htZW50IGlzXFxuK1xcdCAqIGFib3J0ZWQuXFxuK1xcdCAqL1xcbitcXHRpbnQgKCpub3RpZnlfcGh5X2F0dGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuK1xcdC8qKlxcbitcXHQgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcXG4rXFx0ICogZHJpdmVycy4gT3B0aW9uYWwgYW5kIGluZGVwZW5kZW50IG9mIEBub3RpZnlfcGh5X2F0dGFjaC4gQ2FsbGVkXFxuK1xcdCAqIGluIHBoeV9kZXRhY2goKSByaWdodCBhZnRlciBwaHlfc3VzcGVuZCgpLiBSdW5zIGluIHByb2Nlc3MgY29udGV4dCxcXG4rXFx0ICogbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdCBhY3F1aXJlIG9yXFxuK1xcdCAqIHJlbHkgb24gUlROTC5cXG4rXFx0ICovXFxuK1xcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIFxcbiBcXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXFxuIFxcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxMzozNy4xMjU5MDc3MzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4OTI0MjUxOTMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlVTQl9ORVRfU01TQzk1WFhcIixcbiAgICBcIk1ESU9fUkVBTFRFS19SVEw5MzAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5X2F0dGFjaF9kaXJlY3RcIixcbiAgICBcInBoeV9kZXRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoIGFuZCBub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBhbmQgaW1wbGVtZW50cyB0aGVtIGluIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIuIFRoZSBjb3JlIFBIWSBjaGFuZ2VzIGluIHBoeV9hdHRhY2hfZGlyZWN0IGFuZCBwaHlfZGV0YWNoIGFyZSByZWFjaGFibGUgdmlhIHZpcnR1YWwvZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzIChlLmcuLCBVU0IgU01TQzk1eHgpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBjYWxsYmFjayBsb2dpYyBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhiYjBmZjAxMzQ0MzZiNDkwYmYzMGU1ZGFjYzJmNTI0ODc3MDczMDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwMToxMzozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuaW5kZXggMjcxZTA1YmFlOWM1Ny4uNjdlMGIyM2E4NDcwZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5AQCAtNCw3ICs0LDcgQEBcbiAkaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sI1xuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuIFxuLXRpdGxlOiBSZWFsdGVrIFJUTDkzMDAgTURJTyBDb250cm9sbGVyXG4rdGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXJcbiBcbiBtYWludGFpbmVyczpcbiAgIC0gQ2hyaXMgUGFja2hhbSBcdTAwM2NjaHJpcy5wYWNraGFtQGFsbGllZHRlbGVzaXMuY28ubnpcdTAwM2VcbkBAIC0xMiw2ICsxMiwxNiBAQCBtYWludGFpbmVyczpcbiBwcm9wZXJ0aWVzOlxuICAgY29tcGF0aWJsZTpcbiAgICAgb25lT2Y6XG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODItbWRpb1xuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzODAtbWRpb1xuKyAgICAgIC0gaXRlbXM6XG4rICAgICAgICAgIC0gZW51bTpcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cbisgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzkxLW1kaW9cbiAgICAgICAtIGl0ZW1zOlxuICAgICAgICAgICAtIGVudW06XG4gICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMmItbWRpb1xuQEAgLTI0LDYgKzM0LDggQEAgcHJvcGVydGllczpcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW9cbiAgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw5MzExLW1kaW9cbiAgICAgICAtIGVudW06XG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cbisgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbmluZGV4IGFmZDUyYTFjZDdmODMuLmQ5ZDRiNzA0YWZiM2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuQEAgLTM1LDEyICszNSw4OCBAQFxuICAqXG4gICogVGhlIGRyaXZlciB3b3JrcyBvdXQgdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIE1ESU8gYnVzIGRlc2NyaWJlZCBpbiBkZXZpY2UgdHJlZSBhbmQgcGhhbmRsZXMgb25cbiAgKiB0aGUgZXRoZXJuZXQtcG9ydHMgcHJvcGVydHkuXG4rICpcbisgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXRcbisgKiBjb25zdGFudGx5IHNjYW5zIHRoZSBNRElPIGJ1cyBhbmQgdGhlIGF0dGFjaGVkIFBIWXMgYW5kIHVwZGF0ZXMgdGhlIE1BQyBzdGF0dXMgcmVnaXN0ZXJzLlxuKyAqXG4rICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz9cbisgKlxuKyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mXG4rICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yXG4rICogZWFjaCBzZXQgcG9sbGluZyBiaXQgaXQgaXNzdWVzIGEgc3RhdHVzIGNoZWNrIGZvciB0aGUgUEhZLiBBdHRhY2hpbmcgYSBsb2dpYyBhbmFseXplciB0byB0aGVcbisgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6XG4rICpcbisgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuKyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTtcdHBoeV9yZWFkKHBoeSwgMCk7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1x0cGh5X3JlYWQocGh5LCAxKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1x0cGh5X3JlYWQocGh5LCA0KTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDUpO1xuKyAqXHRwaHlfcmVhZChwaHksIDE0KTtcdFx0cGh5X3JlYWQocGh5LCA2KTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDkpO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XHRwaHlfcmVhZChwaHksIDEwKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDE1KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xuKyAqXHRwaHlfcmVhZChwaHksIDkpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuKyAqXHRwaHlfcmVhZChwaHksIDApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1xuKyAqXHRwaHlfcmVhZChwaHksIDQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbisgKlx0cGh5X3JlYWQocGh5LCA1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4rICpcdHBoeV9yZWFkKHBoeSwgNik7XG4rICpcbisgKiBBZnRlciBvbmUgUEhZIHN0YXR1cyBpcyByZWFkLCB0aGUgcG9sbGluZyBlbmdpbmUgZ29lcyBvdmVyIHRvIHRoZSBuZXh0IFBIWS4gSWYgb25lIGJ1cyBpcyBmdWxseVxuKyAqIHNjYW5uZWQgaXQgc3dpdGNoZXMgb3ZlciB0byB0aGUgbmV4dCBidXMuIEJhc2ljYWxseSB0aGUgcG9sbGluZyBzeXN0ZW0gaXMgYWx3YXlzIGJ1c3kgYW5kIHRoZVxuKyAqIE1BQyBzdGF0ZSBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS5cbisgKlxuKyAqIFRoaXMgaXMgYSBnbGltcHNlIGxvb2sgYXQgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIHBvbGxpbmcgYW5kIGxlYXZlcyBvdXQgdGhlIEM0NSBjYXNlIGFuZCB0aGUgTUFDXG4rICogcmVnaXN0ZXIgdXBkYXRlIGxvZ2ljIGFmdGVyd2FyZHMuIEltcG9ydGFudCB0byBub3RlOlxuKyAqXG4rICogLSAxMDAgTUJpdCBkb3duc2hpZnRzIChicm9rZW4gY2FibGVzKSBhcmUgaWRlbnRpZmllZCBhbmQgcHJvcGFnYXRlZCB0byB0aGUgTUFDIGNvcnJlY3RseVxuKyAqIC0gQWNjZXNzIHRvIE1ESU9fQU5fRUVFX0FEViBhbmQgTURJT19BTl9FRUVfTFBBQkxFIHdvcmtzIHZpYSBDNDUgb3ZlciBDMjIuXG4rICogLSBJdCBpcyB1bmNsZWFyIGlmIHRoZXNlIHNlcXVlbmNlcyBjaGFuZ2UgZm9yIGRpZmZlcmVudCBQSFlzLlxuKyAqIC0gQWNjZXNzIHRvIFJlYWx0ZWsgcmVzZXJ2ZWQgcmVnaXN0ZXIgMjYgKGxpbmsgc3BlZWQpIGhhcyBub3QgeWV0IGJlZW4gc2Vlbi5cbisgKlxuKyAqIEhvdyBkb2VzIE1ESU8gYWNjZXNzIGZyb20ga2VybmVsIHdvcms/XG4rICpcbisgKiBXaGVuIGlzc3VpbmcgTURJTyBhY2Nlc3NlcyB2aWEgYW4gTU1JTyBiYXNlZCBpbnRlcmZhY2UgdGhlIGZpbmFsIHdyaXRlIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyXG4rICogc2V0cyBhIFwicnVuIGNvbW1hbmQgbm93XCIgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXG4rICogY2hlY2tzIGlmIGEgdXNlciBjb21tYW5kIG5lZWRzIHRvIHJ1biBhbmQgc2VuZHMgaXQgb250byB0aGUgYnVzLiBBZnRlcndhcmRzIGl0IHNpbXBseSBjb250aW51ZXNcbisgKiBpdHMgcG9sbGluZyB3b3JrLiBJbnNwZWN0aW5nIHRoZSBjb21tYW5kIHNlcXVlbmNlIGZvciBhIHBhZ2VkIHdyaXRlIG9uIHRoZSBsb2dpYyBhbmFseXplciBnaXZlczpcbisgKlxuKyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4rICpcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICpcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcdHBoeV93cml0ZShwaHksIDMxLCBwYWdlKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcbisgKlx0XHRcdFx0XHRwaHlfd3JpdGUocGh5LCAzMSwgMCk7XG4rICpcbisgKiBXaGF0IGRvZXMgdGhpcyBtZWFuP1xuKyAqXG4rICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZVxuKyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXRcbisgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS5cbisgKlxuKyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay5cbisgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLlxuKyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGxcbisgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW1cbisgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyBcIm1hZ2ljYWxseVwiIGluIHRoZSBiYWNrZ3JvdW5kLlxuKyAqIC0gQSBDNDUgb3ZlciBDMjIga2VybmVsIGFjY2VzcyBzZXF1ZW5jZSBpcyBtb3N0IGxpa2VseSB0byBmYWlsIGJlY2F1c2UgY2hhbmNlcyBhcmUgaGlnaCB0aGF0XG4rICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi5cbisgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhblxuKyAqICAgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgd2l0aG91dCBkZXZpYXRpb24uXG4rICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS5cbisgKlxuKyAqIENvbmNsdXNpb246IFRoZSBSZWFsdGVrIE1ESU8gYnVzIGRyaXZlciBQSFkgYWNjZXNzIG11c3Qga25vdyBhbmQgaGFuZGxlIGFueSBpbnRlcmZlcmVuY2UgdGhhdFxuKyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0bWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maW5kLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG5AQCAtNTAsNiArMTI2LDUwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4gXG4rI2RlZmluZSBSVEw4MzgwX05VTV9CVVNFU1x0XHRcdDFcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFNcdFx0XHQyOFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfR0xCX0NUUkxcdFx0XHQweGExMDBcbisjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkVcdFx0QklUKDE1KVxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzBcdFx0MHhhMWI4XG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMVx0XHQweGExYmNcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDI0LCAyMClcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0VcdFx0R0VOTUFTSygxOSwgMTUpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMTQsIDMpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDIpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVBRFx0XHRcdDBcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMSlcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTFx0XHRcdDAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi9cbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yXHRcdDB4YTFjMFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXHRcdDB4YTFjNFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhhMTdjXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFx0XHQweGExYzhcbitcbisjZGVmaW5lIFJUTDgzOTBfTlVNX0JVU0VTXHRcdFx0MlxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUEFHRVNcdFx0XHQ4MTkyXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QT1JUU1x0XHRcdDUyXG4rI2RlZmluZSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkxcdFx0MHgwM2VjXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTFx0XHQweDAzZGNcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUlx0XHRHRU5NQVNLKDksIDUpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFXHRcdEdFTk1BU0soMjIsIDEwKVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUxcdFx0XHRCSVQoMSlcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9XUklURVx0XHRCSVQoMylcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFEXHRcdFx0MFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgyKVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyXHRcdDBcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcdFx0XHQweDAzZTBcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRVx0XHRHRU5NQVNLKDgsIDApXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkxcdFx0MHgwM2YwXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfTU1EX0NUUkxcdFx0XHQweDAzZjRcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcdFx0MHgwM2U0XG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSFx0XHQweDAzZThcbisjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MDNmY1xuK1xuICNkZWZpbmUgUlRMOTMwMF9OVU1fQlVTRVNcdFx0XHQ0XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFU1x0XHRcdDQwOTZcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXHRcdFx0MjhcbkBAIC03MCw2ICsxOTAsNyBAQFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXHRcdDB4Y2I3Y1xuKyNkZWZpbmUgUlRMOTMwMF9TTUlfUE9MTF9DVFJMXHRcdFx0MHhjYTkwXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFx0XHQweGNiODBcbiBcbiAjZGVmaW5lIFJUTDkzMTBfTlVNX0JVU0VTXHRcdFx0NFxuQEAgLTk1LDEyICsyMTYsMTYgQEBcbiAjZGVmaW5lICAgUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMTBfU01JX0lORFJUX0FDQ0VTU19NTURfQ1RSTFx0MHgwYzE4XG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFx0XHQweDBjNzRcbisjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MGNjY1xuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTFx0XHQweDBjOWNcbiBcbiAjZGVmaW5lIFBIWV9DVFJMX0NNRFx0XHRcdFx0QklUKDApXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQURcdFx0XHRHRU5NQVNLKDIwLCAxNilcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUdcdFx0XHRHRU5NQVNLKDE1LCAwKVxuIFxuKyNkZWZpbmUgUlRMX1ZFTkRPUl9JRFx0XHRcdFx0MHgwMDFjYzgwMFxuKyNkZWZpbmUgUlRMX1BBR0VfU0VMRUNUXHRcdFx0XHQzMVxuK1xuICNkZWZpbmUgTUFQX0FERFJTX1BFUl9SRUdcdFx0XHQ2XG4gI2RlZmluZSBNQVBfQklUU19QRVJfQUREUlx0XHRcdDVcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9CVVNcdFx0XHQyXG5AQCAtMTIzLDkgKzI0OCwxMSBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyB7XG4gXG4gc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XG4gXHRjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvICppbmZvO1xuK1x0c3RydWN0IGtyZWYga3JlZjtcbiBcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiBcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xuIFx0REVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7XG4rXHR1MTYgcGFnZVtNQVhfUE9SVFNdO1xuIFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xuIFx0dTggc21pX2FkZHJbTUFYX1BPUlRTXTtcbiBcdGJvb2wgc21pX2J1c19pc19jNDVbTUFYX1NNSV9CVVNTRVNdO1xuQEAgLTE0Miw2ICsyNjksNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcbiBcdHU4IG51bV9idXNlcztcbiBcdHU4IG51bV9wb3J0cztcbiBcdHUxNiBudW1fcGFnZXM7XG4rXHR1MzIgcG9sbF9jdHJsO1xuIFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XG4gXHRpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuIFx0aW50ICgqcmVhZF9jNDUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpO1xuQEAgLTE3Nyw2ICszMDUsMTIgQEAgc3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcbiBcdHJldHVybiBjaGFuLVx1MDAzZXByaXY7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcbit7XG4rXHRyZXR1cm4gcmVnbWFwX2Fzc2lnbl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBwcml2LVx1MDAzZWluZm8tXHUwMDNlcG9sbF9jdHJsICsgKHBvcnQgLyAzMikgKiA0LFxuK1x0XHRcdFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpXG4ge1xuQEAgLTE4NSw5ICszMTksOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0dTMyIGNtZHN0YXRlO1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmxlIHdyb25nICovXG4rXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4rXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyNyw3ICszNjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4rXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwMCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTI2NCwxMyArMzk4LDEyMyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRyZXR1cm4gb3R0b19lbWRpb19ydW5fY21kKGJ1cywgY21kIHwgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4rXHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuK1x0XHRcdFx0ICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5leHRfcGFnZVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuK1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuK1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiB7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuIFx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4gXHR9O1xuIFxuQEAgLTI4NCw3ICs1MjgsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9IEJJVChwb3J0KSxcbiBcdH07XG5AQCAtMzI0LDcgKzU2OCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmJyb2FkY2FzdFx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfQkNfUE9SVF9JRCwgcG9ydCksXG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHR9O1xuIFxuIFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbkBAIC0zMzYsNyArNTgwLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4gXHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4gXHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuQEAgLTM4Miw4ICs2MjYsMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdGlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKVxuK1x0XHRcdHJldHVybiBwcml2LVx1MDAzZXBhZ2VbcG9ydF07XG4rXG4gXHRcdHJldCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2VyZWFkX2MyMihidXMsIHBvcnQsIHJlZ251bSwgXHUwMDI2dmFsdWUpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHJldCA/IHJldCA6IHZhbHVlO1xuIH1cbkBAIC0zOTcsOCArNjQ1LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2XG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdGlmIChyZWdudW0gPT0gUlRMX1BBR0VfU0VMRUNUKSB7XG4rXHRcdFx0aWYgKHZhbHVlIFx1MDAzZT0gUkFXX1BBR0UocHJpdikpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSB2YWx1ZTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNld3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XG4rXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00NzEsNiArNzI4LDE1IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbit7XG4rXHQvKlxuK1x0ICogUEhZX1BBVENIX0RPTkUgZW5hYmxlcyBQSFkgY29udHJvbCB2aWEgU29DLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBQSFkgYWNjZXNzLCBpbmNsdWRpbmdcbitcdCAqIHBhdGNoaW5nIGFuZCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIFBIWXMgYXJlIHByb2JlZC5cbitcdCAqL1xuK1x0cmV0dXJuIHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIHtcbiBcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcbkBAIC01MDcsNiArNzczLDU5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBjaGFuLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAocG9ydCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHBvcnQ7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlc21pX2J1c19pc19jNDVbY2hhbi1cdTAwM2VtZGlvX2J1c10gXHUwMDI2XHUwMDI2XG4rXHQgICAgIXBoeV9pZF9jb21wYXJlX3ZlbmRvcihwaHlkZXYtXHUwMDNlcGh5X2lkLCBSVExfVkVORE9SX0lEKSkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgdHJ1ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtXHUwMDNlbWRpby5idXMpO1xuK1x0aW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwb3J0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBhdm9pZCB3cm9uZyBjYWNoZWQgcGFnZSBmb3IgbmV4dCBhdHRhY2htZW50ICovXG4rXHRpZiAoIXByaXYtXHUwMDNlc21pX2J1c19pc19jNDVbY2hhbi1cdTAwM2VtZGlvX2J1c10pXG4rXHRcdHByaXYtXHUwMDNlcGFnZVtwb3J0XSA9IDA7XG4rXG4rXHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuK1x0aWYgKHJldClcbitcdFx0ZGV2X2VycihidXMtXHUwMDNlcGFyZW50LCBcImZhaWxlZCB0byBkaXNhYmxlIHBvbGxpbmcgZm9yIHBvcnQgJWRcXG5cIiwgcG9ydCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90dG9fZW1kaW9fY2xlYW51cF9jb250cm9sbGVyKHN0cnVjdCBrcmVmICprcmVmKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiwga3JlZik7XG4rXG4rXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4rXHRrZnJlZShwcml2KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R0b19lbWRpb19jbGVhbnVwX2J1cyh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBkYXRhO1xuK1xuK1x0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCBvdHRvX2VtZGlvX2NsZWFudXBfY29udHJvbGxlcik7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxuIFx0XHRcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxuIHtcbkBAIC01MzYsMTIgKzg1NSwyMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFx0XHRidXMtXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcbiBcdH1cbiBcdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4rXHRidXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoO1xuK1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbitcbiBcdGNoYW4gPSBidXMtXHUwMDNlcHJpdjtcbiBcdGNoYW4tXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcbiBcdGNoYW4tXHUwMDNlcHJpdiA9IHByaXY7XG4gXG4gXHRzbnByaW50ZihidXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCIlcy0lZFwiLCBkZXZfbmFtZShkZXYpLCBtZGlvX2J1cyk7XG4gXG4rXHRrcmVmX2dldChcdTAwMjZwcml2LVx1MDAzZWtyZWYpO1xuK1x0ZXJyID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KFx1MDAyNmJ1cy1cdTAwM2VkZXYsIG90dG9fZW1kaW9fY2xlYW51cF9idXMsIHByaXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwiY2Fubm90IHJlZ2lzdGVyIGNsZWFudXAgYWN0aW9uXFxuXCIpO1xuK1xuIFx0ZXJyID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCB0b19vZl9ub2RlKG5vZGUpKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcImNhbm5vdCByZWdpc3RlciBNRElPIGJ1c1xcblwiKTtcbkBAIC02NTIsNTAgKzk3OSwxMjIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBwcml2LVx1MDAzZWluZm8tXHUwMDNlbnVtX3BvcnRzOyBwb3J0KyspIHtcbitcdFx0ZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdjtcbitcdGludCBidXNlc19yZWdpc3RlcmVkID0gMDtcbiBcdGludCBlcnI7XG4gXG4tXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRwcml2ID0ga3phbGxvY19vYmooKnByaXYsIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0a3JlZl9pbml0KFx1MDAyNnByaXYtXHUwMDNla3JlZik7XG4rXHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4gXG4gXHRwcml2LVx1MDAzZWluZm8gPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcbiBcdHByaXYtXHUwMDNlcmVnbWFwID0gc3lzY29uX25vZGVfdG9fcmVnbWFwKGRldi1cdTAwM2VwYXJlbnQtXHUwMDNlb2Zfbm9kZSk7XG4tXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcmVnbWFwKSlcbi1cdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VyZWdtYXApO1xuK1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpIHtcbitcdFx0ZXJyID0gUFRSX0VSUihwcml2LVx1MDAzZXJlZ21hcCk7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfb3V0O1xuIFxuIFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XG4gXG4gXHRlcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBlcnJfb3V0O1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShwcml2KTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdGlmIChwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcikge1xuIFx0XHRlcnIgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcihwcml2KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCJmYWlsZWQgdG8gc2V0dXAgTURJTyBidXMgY29udHJvbGxlclxcblwiKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwiZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcXG5cIik7XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRkZXZpY2VfZm9yX2VhY2hfY2hpbGRfbm9kZV9zY29wZWQoZGV2LCBjaGlsZCkge1xuIFx0XHRlcnIgPSBvdHRvX2VtZGlvX3Byb2JlX29uZShkZXYsIHByaXYsIGNoaWxkKTtcbiBcdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbitcdFx0YnVzZXNfcmVnaXN0ZXJlZCsrO1xuIFx0fVxuIFxuLVx0cmV0dXJuIDA7XG4rXHRpZiAoIWJ1c2VzX3JlZ2lzdGVyZWQpXG4rXHRcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRU5PREVWLCBcIm5vIE1ESU8gYnVzZXMgcmVnaXN0ZXJlZFxcblwiKTtcbitlcnJfb3V0OlxuK1x0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCBvdHRvX2VtZGlvX2NsZWFudXBfY29udHJvbGxlcik7XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcbitcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4rXHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXG4rXHQuY21kX3JlYWQgPSBSVEw4MzgwX1BIWV9DVFJMX1JFQUQsXG4rXHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcbitcdC5jbWRfcmVncyA9IHtcbitcdFx0LmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsXG4rXHRcdC5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLFxuK1x0XHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxuK1x0XHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLFxuK1x0fSxcbitcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcbitcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcbitcdC5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4rXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLFxuK1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXG4rXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NSxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0ge1xuK1x0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxuK1x0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxuK1x0LmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsXG4rXHQuY21kX3JlZ3MgPSB7XG4rXHRcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXG4rXHRcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxuK1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcbitcdFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcbitcdFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXG4rXHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcbitcdFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXG4rXHR9LFxuK1x0Lm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLFxuK1x0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuK1x0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuK1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG4rXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSxcbit9O1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiBcdC5idXNfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTCxcbkBAIC03MTEsNiArMTExMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0Lm51bV9idXNlcyA9IFJUTDkzMDBfTlVNX0JVU0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxuIFx0Lm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXG5AQCAtNzM2LDYgKzExMzYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzEwX05VTV9CVVNFUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsXG5AQCAtNzQ0LDYgKzExNDUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDgzOTEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM5MF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDkzMDEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMwMF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDkzMTEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXG4gXHR7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCA5NGIyZTg1ZTAwYTM3Li4yMzM2MjJlOWJhNjFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE3MzQsNiArMTczNCw5NiBAQCBzdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxuIFx0cmV0dXJuIHBoeWRydi1cdTAwM2Vjb25maWdfaW50ciBcdTAwMjZcdTAwMjYgcGh5ZHJ2LVx1MDAzZWhhbmRsZV9pbnRlcnJ1cHQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIF9fcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIG5vdGlmeV9idXMpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXY7XG4rXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcbitcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWRldmxpbmspIHtcbitcdFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cdTAwM2VkZXZsaW5rKTtcbitcdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuK1x0fVxuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VzeXNmc19saW5rcykge1xuK1x0XHRpZiAoZGV2KVxuK1x0XHRcdHN5c2ZzX3JlbW92ZV9saW5rKFx1MDAyNmRldi1cdTAwM2VkZXYua29iaiwgXCJwaHlkZXZcIik7XG4rXHRcdHN5c2ZzX3JlbW92ZV9saW5rKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldi5rb2JqLCBcImF0dGFjaGVkX2RldlwiKTtcbitcdH1cbitcbitcdGlmICghcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldilcbitcdFx0c3lzZnNfcmVtb3ZlX2ZpbGUoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosXG4rXHRcdFx0XHQgIFx1MDAyNmRldl9hdHRyX3BoeV9zdGFuZGFsb25lLmF0dHIpO1xuK1xuK1x0cGh5X3N1c3BlbmQocGh5ZGV2KTtcbitcbitcdGlmIChub3RpZnlfYnVzIFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gpXG4rXHRcdHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xuK1xuK1x0aWYgKGRldikge1xuK1x0XHRzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXIgKmh3cHJvdjtcbitcbitcdFx0LyogaHdwcm92IG1heSB0ZWNobmljYWxseSBiZSBwcm90ZWN0ZWQgYnkgb3BzIGxvY2sgYnV0XG4rXHRcdCAqIG5vdCBmb3IgZGV2aWNlcyB3aXRoIGEgcGh5ZGV2LCBzZWUgcGh5X2xpbmtfdG9wb19hZGRfcGh5KClcbitcdFx0ICovXG4rXHRcdGh3cHJvdiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZWh3cHJvdik7XG4rXHRcdC8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi9cbitcdFx0aWYgKGh3cHJvdiBcdTAwMjZcdTAwMjYgaHdwcm92LVx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcbitcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZWh3cHJvdiwgTlVMTCk7XG4rXHRcdFx0a2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpO1xuK1x0XHR9XG4rXG4rXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYtXHUwMDNlcGh5ZGV2ID0gTlVMTDtcbitcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiA9IE5VTEw7XG4rXHRcdHBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7XG4rXHR9XG4rXG4rXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gTlVMTDtcbitcdHBoeWRldi1cdTAwM2VwaHlsaW5rID0gTlVMTDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZHJpdmVyKVxuK1x0XHRtb2R1bGVfcHV0KHBoeWRldi1cdTAwM2VtZGlvLmRldi5kcml2ZXItXHUwMDNlb3duZXIpO1xuK1xuK1x0LyogSWYgdGhlIGRldmljZSBoYWQgbm8gc3BlY2lmaWMgZHJpdmVyIGJlZm9yZSAoaS5lLiAtIGl0XG4rXHQgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2VcbitcdCAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUncyBhIGNoYW5jZSBhXG4rXHQgKiByZWFsIGRyaXZlciBjb3VsZCBiZSBsb2FkZWRcbitcdCAqL1xuK1x0aWYgKHBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XG4rXHRcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuK1x0XHRwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XG4rXHR9XG4rXG4rXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuK1x0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuK1xuK1x0LypcbitcdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxuK1x0ICogYSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgcmVhZGluZyB0aGUgdW5kZXJseWluZyBidXMgZmlyc3QuXG4rXHQgKi9cbitcdGJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbitcbitcdHB1dF9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbitcdGlmIChkZXYpXG4rXHRcdG5kZXZfb3duZXIgPSBkZXYtXHUwMDNlZGV2LnBhcmVudC1cdTAwM2Vkcml2ZXItXHUwMDNlb3duZXI7XG4rXHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4rXHRcdG1vZHVsZV9wdXQoYnVzLVx1MDAzZW93bmVyKTtcbit9XG4rXG4rLyoqXG4rICogcGh5X2RldGFjaCAtIGRldGFjaCBhIFBIWSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2VcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIFRoaXMgZGV0YWNoZXMgdGhlIHBoeSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UgYW5kIHRoZSBwaHlcbisgKiBkcml2ZXIsIGFuZCBkcm9wcyB0aGUgcmVmZXJlbmNlIGNvdW50IHRha2VuIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkuXG4rICovXG4rdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0LyogY2xlYW51cCBpbmNsdWRpbmcgYnVzIG5vdGlmaWNhdGlvbiAqL1xuK1x0X19waHlfZGV0YWNoKHBoeWRldiwgdHJ1ZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGh5X2RldGFjaCk7XG4rXG4gLyoqXG4gICogcGh5X2F0dGFjaF9kaXJlY3QgLSBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBhIGdpdmVuIFBIWSBkZXZpY2UgcG9pbnRlclxuICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxuQEAgLTE4NzYsNiArMTk2NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3I7XG4gXG4rXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKSB7XG4rXHRcdGVyciA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gZXJyb3I7XG4rXHR9XG4rXG4gXHRwaHlfcmVzdW1lKHBoeWRldik7XG4gXG4gXHQvKipcbkBAIC0xODkwLDggKzE5ODYsOCBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdHJldHVybiBlcnI7XG4gXG4gZXJyb3I6XG4tXHQvKiBwaHlfZGV0YWNoKCkgZG9lcyBhbGwgb2YgdGhlIGNsZWFudXAgYmVsb3cgKi9cbi1cdHBoeV9kZXRhY2gocGh5ZGV2KTtcbitcdC8qIGNsZWFudXAgd2l0aG91dCBidXMgbm90aWZpY2F0aW9uICovXG4rXHRfX3BoeV9kZXRhY2gocGh5ZGV2LCBmYWxzZSk7XG4gXHRyZXR1cm4gZXJyO1xuIFxuIGVycm9yX21vZHVsZV9wdXQ6XG5AQCAtMTkwNiw4NiArMjAwMiw2IEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIH1cbiBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcbiBcbi0vKipcbi0gKiBwaHlfZGV0YWNoIC0gZGV0YWNoIGEgUEhZIGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZVxuLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuLSAqXG4tICogVGhpcyBkZXRhY2hlcyB0aGUgcGh5IGRldmljZSBmcm9tIGl0cyBuZXR3b3JrIGRldmljZSBhbmQgdGhlIHBoeVxuLSAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS5cbi0gKi9cbi12b2lkIHBoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldjtcbi1cdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xuLVx0c3RydWN0IG1paV9idXMgKmJ1cztcbi1cbi1cdGlmIChwaHlkZXYtXHUwMDNlZGV2bGluaykge1xuLVx0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuLVx0XHRwaHlkZXYtXHUwMDNlZGV2bGluayA9IE5VTEw7XG4tXHR9XG4tXG4tXHRpZiAocGh5ZGV2LVx1MDAzZXN5c2ZzX2xpbmtzKSB7XG4tXHRcdGlmIChkZXYpXG4tXHRcdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2ZGV2LVx1MDAzZWRldi5rb2JqLCBcInBoeWRldlwiKTtcbi1cdFx0c3lzZnNfcmVtb3ZlX2xpbmsoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmtvYmosIFwiYXR0YWNoZWRfZGV2XCIpO1xuLVx0fVxuLVxuLVx0aWYgKCFwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2KVxuLVx0XHRzeXNmc19yZW1vdmVfZmlsZShcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYua29iaixcbi1cdFx0XHRcdCAgXHUwMDI2ZGV2X2F0dHJfcGh5X3N0YW5kYWxvbmUuYXR0cik7XG4tXG4tXHRwaHlfc3VzcGVuZChwaHlkZXYpO1xuLVx0aWYgKGRldikge1xuLVx0XHRzdHJ1Y3QgaHd0c3RhbXBfcHJvdmlkZXIgKmh3cHJvdjtcbi1cbi1cdFx0LyogaHdwcm92IG1heSB0ZWNobmljYWxseSBiZSBwcm90ZWN0ZWQgYnkgb3BzIGxvY2sgYnV0XG4tXHRcdCAqIG5vdCBmb3IgZGV2aWNlcyB3aXRoIGEgcGh5ZGV2LCBzZWUgcGh5X2xpbmtfdG9wb19hZGRfcGh5KClcbi1cdFx0ICovXG4tXHRcdGh3cHJvdiA9IHJ0bmxfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZWh3cHJvdik7XG4tXHRcdC8qIERpc2FibGUgdGltZXN0YW1wIGlmIGl0IGlzIHRoZSBvbmUgc2VsZWN0ZWQgKi9cbi1cdFx0aWYgKGh3cHJvdiBcdTAwMjZcdTAwMjYgaHdwcm92LVx1MDAzZXBoeWRldiA9PSBwaHlkZXYpIHtcbi1cdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZWh3cHJvdiwgTlVMTCk7XG4tXHRcdFx0a2ZyZWVfcmN1KGh3cHJvdiwgcmN1X2hlYWQpO1xuLVx0XHR9XG4tXG4tXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYtXHUwMDNlcGh5ZGV2ID0gTlVMTDtcbi1cdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiA9IE5VTEw7XG4tXHRcdHBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7XG4tXHR9XG4tXG4tXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gTlVMTDtcbi1cdHBoeWRldi1cdTAwM2VwaHlsaW5rID0gTlVMTDtcbi1cbi1cdGlmIChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZHJpdmVyKVxuLVx0XHRtb2R1bGVfcHV0KHBoeWRldi1cdTAwM2VtZGlvLmRldi5kcml2ZXItXHUwMDNlb3duZXIpO1xuLVxuLVx0LyogSWYgdGhlIGRldmljZSBoYWQgbm8gc3BlY2lmaWMgZHJpdmVyIGJlZm9yZSAoaS5lLiAtIGl0XG4tXHQgKiB3YXMgdXNpbmcgdGhlIGdlbmVyaWMgZHJpdmVyKSwgd2UgdW5iaW5kIHRoZSBkZXZpY2Vcbi1cdCAqIGZyb20gdGhlIGdlbmVyaWMgZHJpdmVyIHNvIHRoYXQgdGhlcmUncyBhIGNoYW5jZSBhXG4tXHQgKiByZWFsIGRyaXZlciBjb3VsZCBiZSBsb2FkZWRcbi1cdCAqL1xuLVx0aWYgKHBoeWRldi1cdTAwM2Vpc19nZW5waHlfZHJpdmVuKSB7XG4tXHRcdGRldmljZV9yZWxlYXNlX2RyaXZlcihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuLVx0XHRwaHlkZXYtXHUwMDNlaXNfZ2VucGh5X2RyaXZlbiA9IDA7XG4tXHR9XG4tXG4tXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xuLVx0cGh5X2RldmljZV9yZXNldChwaHlkZXYsIDEpO1xuLVxuLVx0Lypcbi1cdCAqIFRoZSBwaHlkZXYgbWlnaHQgZ28gYXdheSBvbiB0aGUgcHV0X2RldmljZSgpIGJlbG93LCBzbyBhdm9pZFxuLVx0ICogYSB1c2UtYWZ0ZXItZnJlZSBidWcgYnkgcmVhZGluZyB0aGUgdW5kZXJseWluZyBidXMgZmlyc3QuXG4tXHQgKi9cbi1cdGJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbi1cbi1cdHB1dF9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbi1cdGlmIChkZXYpXG4tXHRcdG5kZXZfb3duZXIgPSBkZXYtXHUwMDNlZGV2LnBhcmVudC1cdTAwM2Vkcml2ZXItXHUwMDNlb3duZXI7XG4tXHRpZiAobmRldl9vd25lciAhPSBidXMtXHUwMDNlb3duZXIpXG4tXHRcdG1vZHVsZV9wdXQoYnVzLVx1MDAzZW93bmVyKTtcbi19XG4tRVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcbi1cbiBpbnQgcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggMTEwOTJjMzE3NWIzZC4uZmVmMGM2YTNlMjdmZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0zNzYsNiArMzc2LDI0IEBAIHN0cnVjdCBtaWlfYnVzIHtcbiBcdFx0XHQgaW50IHJlZ251bSwgdTE2IHZhbCk7XG4gXHQvKiogQHJlc2V0OiBQZXJmb3JtIGEgcmVzZXQgb2YgdGhlIGJ1cyAqL1xuIFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xuK1x0LyoqXG4rXHQgKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgZm9yIE1ESU8gYnVzXG4rXHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfZGV0YWNoLiBDYWxsZWRcbitcdCAqIGluIHBoeV9hdHRhY2hfZGlyZWN0KCkgcmlnaHQgYmVmb3JlIHBoeV9yZXN1bWUoKS4gUnVucyBpbiBwcm9jZXNzXG4rXHQgKiBjb250ZXh0LCBtYXkgc2xlZXAgYW5kIG1heSBiZSBjYWxsZWQgd2l0aCBSVE5MIGhlbGQuIE11c3Qgbm90XG4rXHQgKiBhY3F1aXJlIG9yIHJlbHkgb24gUlROTC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJybm9cbitcdCAqIG9uIGZhaWx1cmUuIE11c3QgdW53aW5kIGl0cyBvd24gc3RhdGUgb24gZXJyb3IgYXMgYXR0YWNobWVudCBpc1xuK1x0ICogYWJvcnRlZC5cbitcdCAqL1xuK1x0aW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuK1x0LyoqXG4rXHQgKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyBmb3IgTURJTyBidXNcbitcdCAqIGRyaXZlcnMuIE9wdGlvbmFsIGFuZCBpbmRlcGVuZGVudCBvZiBAbm90aWZ5X3BoeV9hdHRhY2guIENhbGxlZFxuK1x0ICogaW4gcGh5X2RldGFjaCgpIHJpZ2h0IGFmdGVyIHBoeV9zdXNwZW5kKCkuIFJ1bnMgaW4gcHJvY2VzcyBjb250ZXh0LFxuK1x0ICogbWF5IHNsZWVwIGFuZCBtYXkgYmUgY2FsbGVkIHdpdGggUlROTCBoZWxkLiBNdXN0IG5vdCBhY3F1aXJlIG9yXG4rXHQgKiByZWx5IG9uIFJUTkwuXG4rXHQgKi9cbitcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4gXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXG4gXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjEzOjM3LjEyNTkwOTA0OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNjA1MzY0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogUmVhbHRlayBPdHRvIFN3aXRjaCBNRElPIENvbnRyb2xsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBzdXBwb3J0IGZvciBSZWFsdGVrIE90dG8gU3dpdGNoZXMsIHNwZWNpZmljYWxseSB0aGUgUlRMODM4MCBhbmQgUlRMODM5MCBmYW1pbGllcywgYW5kIGl0J3MgbW9kaWZ5aW5nIHRoZSBQSFkgY29yZSB0byBhZGQgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGBtaWlfYnVzYCBzdHJ1Y3QuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBzb21ldGhpbmcgd29ydGggdGhyb3dpbmcgZnV6emluZyBhdD9cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLiBgcGh5X2RldmljZS5jYCwgdGhhdCdzIGNvcmUgbmV0d29ya2luZyBjb2RlLCB0aGUgUEhZIHN1YnN5c3RlbSBpdHNlbGYuIFRoZSBjaGFuZ2VzIGluIGBwaHlfZGV2aWNlLmNgIGFkZCB0aGUgY2FsbGJhY2tzIHRvIGBtaWlfYnVzYCBhbmQgY2FsbCB0aGVtIGR1cmluZyBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIEltbWVkaWF0ZWx5LCB0aG9zZSBmdW5jdGlvbnMgc2VlbSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgdGhpbmsgZHVtbXkgbmV0IGRldmljZXMsIHZldGggaW50ZXJmYWNlcywgYW55IGVtdWxhdGVkIE5JQyB0aGF0IHVzZXMgUEhZcy4gQW5kIHRoZW4gaXQgaGl0cyBtZTogYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyBjYWxsZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGF0dGFjaGVzIHRvIGEgUEhZLlxuXG5Db3VsZCBzeXprYWxsZXIgcmVhY2ggdGhhdD8gQWJzb2x1dGVseS4gSXQgY2FuIGNyZWF0ZSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcywgdXNpbmcgbmV0bGluaywgdHVuL3RhcCwgb3IgZHVtbXksIGFuZCBzb21lIG9mIHRob3NlIGNvdWxkIHZlcnkgd2VsbCBhdHRhY2ggUEhZcy4gT3IsIGl0IGNhbiBpbnRlcmFjdCB3aXRoIE1ESU8gYnVzZXMuIFRoZSBrZXkgcGFydHMgYXJlIGNoYW5nZXMgbWFkZSB0byBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIExvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCB0aGUgY29yZSBjaGFuZ2VzIHRoYXQgYXJlIG1hZGUsIHNwZWNpZmljYWxseTpcblxuYGBgY1xuK3N0YXRpYyB2b2lkIF9fcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIG5vdGlmeV9idXMpXG4uLi5cbitcdGlmIChub3RpZnlfYnVzIFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2gpXG4rXHRcdHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xuLi4uXG5gYGBcbkFuZCBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgOlxuYGBgY1xuK1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuK1x0XHRlcnIgPSBwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gocGh5ZGV2KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycm9yO1xuK1x0fVxuYGBgXG5cblRoaXMgKmlzKiBjb3JlIGF0dGFjaG1lbnQvZGV0YWNobWVudCBsb2dpYywgc28geWVzLCB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSXQncyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byB0aGUgd2F5IFBIWXMgYXJlIGhhbmRsZWQuXG5cbldoYXQgYWJvdXQgdGhlIE1ESU8gZHJpdmVyIChgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2ApPyBNRElPIGRyaXZlcnMgYXJlIHVzdWFsbHkgcGxhdGZvcm0gZHJpdmVycywgbWVhbmluZyB0aGV5IG1pZ2h0IG5vdCBiZSBlYXNpbHkgcmVhY2hhYmxlIHdpdGhvdXQgdGhlIHBsYXRmb3JtIGRldmljZSBiZWluZyBpbnN0YW50aWF0ZWQuIFN0aWxsLCB0aGUgY29yZSBQSFkgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHJlZ2FyZGxlc3MuXG5cblNvLCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhvc2UgdHdvIGZ1bmN0aW9ucy4gVGltZSB0byBsb29rIGZvciBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgdXNhZ2VzIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgZW50cnkgcG9pbnRzIGFuZCBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgY2FuIGJlc3QgaW50ZXJhY3Qgd2l0aCB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjg0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTM6NDYuMjg2NDQ4NTk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDc3NTYyMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2F0dGFjaF9kaXJlY3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdD04NT1UaGVzZSBmdW5jdGlvbiBhcmUgYWxyZWFkeSBob29rZWQgaW50byB0aGUgcGh5bGliIHN1YnN5c3RlbSwgc28gYWxsIFBIWXMgdGhhdFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktbGluay10b3BvbG9neS5yc3Q6ODY6YXJlIGxpbmtlZCB0byBhIG5ldF9kZXZpY2UgdGhyb3VnaCA6YzpmdW5jOmBwaHlfYXR0YWNoX2RpcmVjdGAgd2lsbCBhdXRvbWF0aWNhbGx5XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdC04Ny1qb2luIHRoZSBuZXRkZXYncyB0b3BvbG9neS5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3Q9NzQ9dGhpcyBkb2N1bWVudGF0aW9uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NmcC1waHlsaW5rLnJzdC0xNjUtICAgRm9yIHRoZSBtb3N0IHBhcnQsIGBgZmxhZ3NgYCBjYW4gYmUgemVybzsgdGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0b1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3Q6MTY2OiAgIHRoZSBwaHlfYXR0YWNoX2RpcmVjdCgpIGluc2lkZSB0aGlzIGZ1bmN0aW9uIGNhbGwgaWYgYSBQSFkgaXMgc3BlY2lmaWVkXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NmcC1waHlsaW5rLnJzdC0xNjctICAgaW4gdGhlIERUIG5vZGUgYGBub2RlYGAuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTkzMT1zdGF0aWMgaW50IHhnYmVfcGh5X2ZpbmRfcGh5X2RldmljZShzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjk4MzpcXHRyZXQgPSBwaHlfYXR0YWNoX2RpcmVjdChwZGF0YS1cXHUwMDNlbmV0ZGV2LCBwaHlkZXYsIHBoeWRldi1cXHUwMDNlZGV2X2ZsYWdzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTg0LVxcdFxcdFxcdFxcdFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODUtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6OTg2OlxcdFxcdG5ldGRldl9lcnIocGRhdGEtXFx1MDAzZW5ldGRldiwgXFxcInBoeV9hdHRhY2hfZGlyZWN0IGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODctXFx0XFx0cGh5X2RldmljZV9yZW1vdmUocGh5ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYz0xMTU5PWludCBobnNfbmljX2luaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaG5hZV9oYW5kbGUgKmgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmMtMTE4MC1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYzoxMTgxOlxcdFxcdHJldCA9IHBoeV9hdHRhY2hfZGlyZWN0KG5kZXYsIHBoeV9kZXYsIDAsIGgtXFx1MDAzZXBoeV9pZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZW5ldC5jLTExODItXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjI1PWludCBwaHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTIzMy1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyMzQ6XFx0cmMgPSBwaHlfYXR0YWNoX2RpcmVjdChkZXYsIHBoeWRldiwgcGh5ZGV2LVxcdTAwM2VkZXZfZmxhZ3MsIGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjM1LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTczNz1zdGF0aWMgdm9pZCBfX3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBub3RpZnlfYnVzKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODE3LSAqIFRoaXMgZGV0YWNoZXMgdGhlIHBoeSBkZXZpY2UgZnJvbSBpdHMgbmV0d29yayBkZXZpY2UgYW5kIHRoZSBwaHlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4MTg6ICogZHJpdmVyLCBhbmQgZHJvcHMgdGhlIHJlZmVyZW5jZSBjb3VudCB0YWtlbiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpLlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgxOS0gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTgyNT1FWFBPUlRfU1lNQk9MKHBoeV9kZXRhY2gpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODI3LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTgyODogKiBwaHlfYXR0YWNoX2RpcmVjdCAtIGF0dGFjaCBhIG5ldHdvcmsgZGV2aWNlIHRvIGEgZ2l2ZW4gUEhZIGRldmljZSBwb2ludGVyXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODI5LSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODQxLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTg0MjppbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4NDMtXFx0XFx0ICAgICAgdTMyIGZsYWdzLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMDAyLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjIwMDM6RVhQT1JUX1NZTUJPTChwaHlfYXR0YWNoX2RpcmVjdCk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0yMDA0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0yMjA0PXN0YXRpYyBpbnQgcGh5bGlua19hdHRhY2hfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIxOS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyMjA6XFx0cmV0dXJuIHBoeV9hdHRhY2hfZGlyZWN0KHBsLVxcdTAwM2VuZXRkZXYsIHBoeSwgZmxhZ3MsIGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjIxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIyOC0gKiBDb25uZWN0IEBwaHkgdG8gdGhlIHBoeWxpbmsgaW5zdGFuY2Ugc3BlY2lmaWVkIGJ5IEBwbCBieSBjYWxsaW5nXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoyMjI5OiAqIHBoeV9hdHRhY2hfZGlyZWN0KCkuIENvbmZpZ3VyZSB0aGUgQHBoeSBhY2NvcmRpbmcgdG8gdGhlIE1BQyBkcml2ZXInc1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjIzMC0gKiBjYXBhYmlsaXRpZXMsIHN0YXJ0IHRoZSBQSFlMSUIgc3RhdGUgbWFjaGluZSBhbmQgZW5hYmxlIGFueSBpbnRlcnJ1cHRzXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIyOTA9aW50IHBoeWxpbmtfZndub2RlX3BoeV9jb25uZWN0KHN0cnVjdCBwaHlsaW5rICpwbCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjMyMy1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIzMjQ6XFx0cmV0ID0gcGh5X2F0dGFjaF9kaXJlY3QocGwtXFx1MDAzZW5ldGRldiwgcGh5X2RldiwgZmxhZ3MsXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMzI1LVxcdFxcdFxcdFxcdHBsLVxcdTAwM2VsaW5rX2ludGVyZmFjZSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTM2Mz1zdHJ1Y3QgbWlpX2J1cyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oLTM4MS1cXHQgKiBkcml2ZXJzLiBPcHRpb25hbCBhbmQgaW5kZXBlbmRlbnQgb2YgQG5vdGlmeV9waHlfZGV0YWNoLiBDYWxsZWRcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjM4MjpcXHQgKiBpbiBwaHlfYXR0YWNoX2RpcmVjdCgpIHJpZ2h0IGJlZm9yZSBwaHlfcmVzdW1lKCkuIFJ1bnMgaW4gcHJvY2Vzc1xcbmluY2x1ZGUvbGludXgvcGh5LmgtMzgzLVxcdCAqIGNvbnRleHQsIG1heSBzbGVlcCBhbmQgbWF5IGJlIGNhbGxlZCB3aXRoIFJUTkwgaGVsZC4gTXVzdCBub3RcXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5Lmg9MjE4Nz1zdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2ZpbmRfbmV4dChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBzdHJ1Y3QgcGh5X2RldmljZSAqcG9zKTtcXG5pbmNsdWRlL2xpbnV4L3BoeS5oOjIxODg6aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuaW5jbHVkZS9saW51eC9waHkuaC0yMTg5LVxcdFxcdCAgICAgIHUzMiBmbGFncywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjEzOjQ3Ljk5NDIwOTcxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MDY1NTUxNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBwaHlfYXR0YWNoX2RpcmVjdGAqKlxuXG5Pa2F5LCBzbyBgcGh5X2F0dGFjaF9kaXJlY3RgIGlzIGEga2V5IGZ1bmN0aW9uLCBjYWxsZWQgYnkgdGhpbmdzIGxpa2UgYHBoeV9jb25uZWN0X2RpcmVjdGAsIGBwaHlsaW5rX2F0dGFjaF9waHlgLCBhbmQgYHBoeWxpbmtfZndub2RlX3BoeV9jb25uZWN0YC4gVGhlIHF1ZXN0aW9uIHRoYXQncyBwaXF1aW5nIG15IGludGVyZXN0IGlzIHdoZXRoZXIgYSB2aXJ0dWFsIGRldmljZSBjYW4gdHJpZ2dlciBpdHMgdXNlLiBNeSBpbnN0aW5jdCBpcyB0aGF0IFBIWXMgYXJlIHByaW1hcmlseSBoYXJkd2FyZS1ib3VuZCwgYnV0IEkgbmVlZCB0byBiZSBzdXJlLlxuXG5MZXQncyBydW4gdGhyb3VnaCBzb21lIGNvbW1vbiB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcy4gQ291bGQgYG1hY3NlY2AsIGB2ZXRoYCwgYGR1bW15YCwgb3IgYHR1bmAgZGV2aWNlcyBldmVyIHRvdWNoIHRoaXMgZnVuY3Rpb24/IE15IGd1dCBzYXlzIG5vLCBnaXZlbiB0aGVpciBuYXR1cmUuIFRoZXkncmUgdXN1YWxseSBsYXllcnMgYWJvdmUgdGhlIHBoeXNpY2FsIGludGVyZmFjZSwgYWJzdHJhY3RpbmcgYXdheSB0aGUgUEhZIGludGVyYWN0aW9uLiBUaGlua2luZyBhYm91dCBpdCwgZXZlbiB0aG91Z2ggUEhZcyBhcmUgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBoYXJkd2FyZSBsaWtlIGluIGBtYWNiYCwgYGZlY2AsIG9yIGBlMTAwMGAgZHJpdmVycywgYXJlIGFueSBvZiB0aGVzZSBwYXRod2F5cyByZWxldmFudD8gSSBkb24ndCBzZWUgaXQuIGB0dW5gIGFuZCBgdmV0aGAgZGVmaW5pdGVseSBkb24ndCBkZWFsIHdpdGggdGhlIHBoeXNpY2FsIGxheWVyLlxuXG5Pa2F5LCBsZXQncyBrZWVwIGdvaW5nLiBXaGF0IGFib3V0IHNvbWV0aGluZyBsaWtlIGBtYWM4MDIxMV9od3NpbWA/IE5vLCBpdCdzIG5vdCBhIGRpcmVjdCBtYXRjaC4gYHZrbXNgIGlzIERSTSwgc28gbm8gdGhlcmUgZWl0aGVyLiBgZHVtbXlgIGlzIGFsc28gb3V0LiBBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIGBuZXRkZXZzaW1gLiAqVGhhdCdzKiB0aGUgb25lIHRoYXQgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBpbnRlcmVzdGluZyB0byBsb29rIGludG8uIExldCBtZSBzZWUgaWYgYG5ldGRldnNpbWAgaGFzIGFueSBpbnRlcmFjdGlvbiB3aXRoIFBIWXMsIGFzIHRoYXQgd291bGQgYmUgdGhlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyOTQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTM6NTMuNzAwNzY3MzY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDM2NTkwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2F0dGFjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc4MCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdD04NT1UaGVzZSBmdW5jdGlvbiBhcmUgYWxyZWFkeSBob29rZWQgaW50byB0aGUgcGh5bGliIHN1YnN5c3RlbSwgc28gYWxsIFBIWXMgdGhhdFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktbGluay10b3BvbG9neS5yc3Q6ODY6YXJlIGxpbmtlZCB0byBhIG5ldF9kZXZpY2UgdGhyb3VnaCA6YzpmdW5jOmBwaHlfYXR0YWNoX2RpcmVjdGAgd2lsbCBhdXRvbWF0aWNhbGx5XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1saW5rLXRvcG9sb2d5LnJzdC04Ny1qb2luIHRoZSBuZXRkZXYncyB0b3BvbG9neS5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0PTM2Mz1ldmVyeSBzZWNvbmQgYmVmb3JlIHRoZSBzdGF0ZSBtYWNoaW5lIHJlYWN0cyB0byBhbnkgY2hhbmdlcy4gIFRvIGRvIHRoaXMsIHlvdVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0OjM2NDpuZWVkIHRvIG1hbnVhbGx5IGNhbGwgcGh5X2F0dGFjaCgpIGFuZCBwaHlfcHJlcGFyZV9saW5rKCksIGFuZCB0aGVuIGNhbGxcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdC0zNjUtcGh5X3N0YXJ0X21hY2hpbmUoKSB3aXRoIHRoZSBzZWNvbmQgYXJndW1lbnQgc2V0IHRvIHBvaW50IHRvIHlvdXIgc3BlY2lhbFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q9Mzc2PXRoZSBjb21wbGV4IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBQSFkgYW5kIHlvdXIgbmV0d29yayBkZXZpY2UuICBJZiB0aGlzIGlzXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q6Mzc3OnNvLCB5b3UgY2FuIHNpbXBseSBjYWxsIHBoeV9hdHRhY2goKSwgYW5kIG5vdCBjYWxsIHBoeV9zdGFydF9tYWNoaW5lIG9yXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtMzc4LXBoeV9wcmVwYXJlX2xpbmsoKS4gIFRoaXMgd2lsbCBtZWFuIHRoYXQgcGh5ZGV2LVxcdTAwM2VzdGF0ZSBpcyBlbnRpcmVseSB5b3VycyB0b1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3Q9NDA0PVJlcXVlc3RzIHRoZSBJUlEgZm9yIHRoZSBQSFkgaW50ZXJydXB0cy5cXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkucnN0LTQwNi1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LnJzdDo0MDc6IHN0cnVjdCBwaHlfZGV2aWNlICogcGh5X2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpwaHlfaWQsXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS5yc3QtNDA4LVxcdFxcdCAgICAgICAgICAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3Q9NzQ9dGhpcyBkb2N1bWVudGF0aW9uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NmcC1waHlsaW5rLnJzdC0xNjUtICAgRm9yIHRoZSBtb3N0IHBhcnQsIGBgZmxhZ3NgYCBjYW4gYmUgemVybzsgdGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0b1xcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zZnAtcGh5bGluay5yc3Q6MTY2OiAgIHRoZSBwaHlfYXR0YWNoX2RpcmVjdCgpIGluc2lkZSB0aGlzIGZ1bmN0aW9uIGNhbGwgaWYgYSBQSFkgaXMgc3BlY2lmaWVkXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NmcC1waHlsaW5rLnJzdC0xNjctICAgaW4gdGhlIERUIG5vZGUgYGBub2RlYGAuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmM9MTM1Mz1zdGF0aWMgaW50IG93bF9lbWFjX3BoeV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM2Ni1cXHRpZiAobmV0aWZfbXNnX2xpbmsocHJpdikpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWN0aW9ucy9vd2wtZW1hYy5jOjEzNjc6XFx0XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hY3Rpb25zL293bC1lbWFjLmMtMTM2OC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jPTY1MD1zdGF0aWMgaW50IGFkaW4xMTQwX3BoeV9pbml0KHN0cnVjdCBhZGluMTE0MF9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWRpL2FkaW4xMTQwLmMtNjc2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jOjY3NzpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FkaS9hZGluMTE0MC5jLTY3OC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jPTMyNzM9c3RhdGljIGludCBldDEzMXhfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy0zMjk4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FnZXJlL2V0MTMxeC5jOjMyOTk6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9ldDEzMXguYy0zMzAwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F1MTAwMF9ldGguYz00NzI9c3RhdGljIGludCBhdTEwMDBfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jLTU1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXUxMDAwX2V0aC5jOjU1MzpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdTEwMDBfZXRoLmMtNTU0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYz05MzE9c3RhdGljIGludCB4Z2JlX3BoeV9maW5kX3BoeV9kZXZpY2Uoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05ODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5ODM6XFx0cmV0ID0gcGh5X2F0dGFjaF9kaXJlY3QocGRhdGEtXFx1MDAzZW5ldGRldiwgcGh5ZGV2LCBwaHlkZXYtXFx1MDAzZWRldl9mbGFncyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk4NC1cXHRcXHRcXHRcXHRQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTg1LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjk4NjpcXHRcXHRuZXRkZXZfZXJyKHBkYXRhLVxcdTAwM2VuZXRkZXYsIFxcXCJwaHlfYXR0YWNoX2RpcmVjdCBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTg3LVxcdFxcdHBoeV9kZXZpY2VfcmVtb3ZlKHBoeWRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYz05NjY9c3RhdGljIGludCBheDg4Nzk2Y19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYXNpeC9heDg4Nzk2Y19tYWluLmMtMTA5NC1cXHRcXHQgICBkZXZfbmFtZShcXHUwMDI2c3BpLVxcdTAwM2VkZXYpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hc2l4L2F4ODg3OTZjX21haW4uYzoxMDk1OlxcdHBoeV9hdHRhY2hlZF9pbmZvKGF4X2xvY2FsLVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FzaXgvYXg4ODc5NmNfbWFpbi5jLTEwOTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmM9MTAzNz1zdGF0aWMgcGh5X2ludGVyZmFjZV90IGJjbWFzcF9waHlfaWZhY2VfZm9yX2Nvbm5lY3QocGh5X2ludGVyZmFjZV90IG1vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTA3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmM6MTA3NDpzdGF0aWMgaW50IGJjbWFzcF9waHlfYXR0YWNoKHN0cnVjdCBiY21hc3BfaW50ZiAqaW50ZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTA3NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmM9MTEyMT1zdGF0aWMgaW50IGJjbWFzcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTEzOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmM6MTE0MDpcXHRyZXQgPSBiY21hc3BfcGh5X2F0dGFjaChpbnRmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTE0MS1cXHRpZiAocmV0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2FzcDIvYmNtYXNwX2ludGYuYzoxMTQyOlxcdFxcdGdvdG8gZXJyX3BoeV9hdHRhY2g7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYXNwMi9iY21hc3BfaW50Zi5jLTExNDMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTE1NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmM6MTE1NjplcnJfcGh5X2F0dGFjaDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9hc3AyL2JjbWFzcF9pbnRmLmMtMTE1Ny1cXHRiY21hc3BfcGh5X2h3X3VucHJlcGFyZShpbnRmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jPTIyMzQ9c3RhdGljIGludCBiNDRfcmVnaXN0ZXJfcGh5X29uZShzdHJ1Y3QgYjQ0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIyOTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYjQ0LmM6MjI5OTpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2I0NC5jLTIzMDAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYz04OTA9c3RhdGljIGludCBiY21fZW5ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iY202M3h4X2VuZXQuYy05MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmM6OTI0OlxcdFxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmNtNjN4eF9lbmV0LmMtOTI1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vc2IxMjUwLW1hYy5jPTIzMjQ9c3RhdGljIGludCBzYm1hY19taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMzQ1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYzoyMzQ2OlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeV9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3NiMTI1MC1tYWMuYy0yMzQ3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM9MjA4ND1zdGF0aWMgaW50IHRnM19waHlfaW5pdChzdHJ1Y3QgdGczICp0cClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTIxMjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vdGczLmM6MjEyNTpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jLTIxMjYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jb3J0aW5hL2dlbWluaS5jPTM2MD1zdGF0aWMgaW50IGdtYWNfc2V0dXBfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jb3J0aW5hL2dlbWluaS5jLTQwNS1cXHRpZiAobmV0aWZfbXNnX2xpbmsocG9ydCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY29ydGluYS9nZW1pbmkuYzo0MDY6XFx0XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jb3J0aW5hL2dlbWluaS5jLTQwNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmM9MTQ5Nz1zdGF0aWMgaW50IGZ0Z21hYzEwMF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTU1NS1cXHQvKiBEaXNwbGF5IHdoYXQgd2UgZm91bmQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE1NTY6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE1NTctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jPTE4OTA9c3RhdGljIGludCBmdGdtYWMxMDBfcHJvYmVfZHQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZhcmFkYXkvZnRnbWFjMTAwLmMtMTkyMS1cXHRcXHQvKiBEaXNwbGF5IHdoYXQgd2UgZm91bmQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jOjE5MjI6XFx0XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mYXJhZGF5L2Z0Z21hYzEwMC5jLTE5MjMtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYz0yOTgxPXN0YXRpYyBpbnQgZmVjX2VuZXRfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMtMzAzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYzozMDM3OlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeV9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfbWFpbi5jLTMwMzgtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jPTIwMT1zdGF0aWMgaW50IGhiZ19waHlfY29ubmVjdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIxNy1cXHRwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX21kaW8uYzoyMTg6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfbWRpby5jLTIxOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXNpX2ZlbWFjLmM9NzY4PXN0YXRpYyBpbnQgaGlzaV9mZW1hY19kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXNpX2ZlbWFjLmMtODM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXNpX2ZlbWFjLmM6ODQwOlxcdHBoeV9hdHRhY2hlZF9wcmludChwaHksIFxcXCJwaHlfaWQ9MHglLjhseCwgcGh5X21vZGU9JXNcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpc2lfZmVtYWMuYy04NDEtXFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcpcGh5LVxcdTAwM2VwaHlfaWQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmM9MTE1OT1pbnQgaG5zX25pY19pbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGhuYWVfaGFuZGxlICpoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZW5ldC5jLTExODAtXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19lbmV0LmM6MTE4MTpcXHRcXHRyZXQgPSBwaHlfYXR0YWNoX2RpcmVjdChuZGV2LCBwaHlfZGV2LCAwLCBoLVxcdTAwM2VwaHlfaWYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYy0xMTgyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYy0xMTg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYzoxMTg2OlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeV9kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2VuZXQuYy0xMTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21kaW8uYz0yMDI9aW50IGhjbGdlX21hY19jb25uZWN0X3BoeShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jLTIzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWRpby5jOjIzNzpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tZGlvLmMtMjM4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYz0zNTc9bHRxX2V0b3BfbWRpb19wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYy0zNzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbGFudGlxX2V0b3AuYzozNzk6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9sYW50aXFfZXRvcC5jLTM4MC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tYWluLmM9Mzg1PXN0YXRpYyBpbnQgbWx4YmZfZ2lnZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21haW4uYy00ODctXFx0LyogRGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBhdHRhY2hlZCBQSFkgZGV2aWNlICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21haW4uYzo0ODg6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWFpbi5jLTQ4OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L254cC9scGNfZXRoLmM9NzUxPXN0YXRpYyBpbnQgbHBjX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L254cC9scGNfZXRoLmMtNzg0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L254cC9scGNfZXRoLmM6Nzg1OlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL2xwY19ldGguYy03ODYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYz01Nzg9c3RhdGljIGludCBvYV90YzZfcGh5X2luaXQoc3RydWN0IG9hX3RjNiAqdGM2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMtNjEzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jOjYxNDpcXHRwaHlfYXR0YWNoZWRfaW5mbyh0YzYtXFx1MDAzZW5ldGRldi1cXHUwMDNlcGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYy02MTUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMtbWFjLmM9OTMxPWludCBlbWFjX21hY191cChzdHJ1Y3QgZW1hY19hZGFwdGVyICphZHB0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vZW1hYy9lbWFjLW1hYy5jLTk0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9lbWFjL2VtYWMtbWFjLmM6OTQ4OlxcdHBoeV9hdHRhY2hlZF9wcmludChhZHB0LVxcdTAwM2VwaHlkZXYsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL2VtYWMvZW1hYy1tYWMuYy05NDktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZGMvcjYwNDAuYz05OTg9c3RhdGljIGludCByNjA0MF9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JkYy9yNjA0MC5jLTEwMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmRjL3I2MDQwLmM6MTAyMjpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JkYy9yNjA0MC5jLTEwMjMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz00OTgyPXN0YXRpYyBpbnQgcjgxNjlfcGh5X2Nvbm5lY3Qoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy00OTk4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjQ5OTk6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01MDAwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yYXZiX21haW4uYz0xNDkyPXN0YXRpYyBpbnQgcmF2Yl9waHlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcmF2Yl9tYWluLmMtMTU0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jOjE1NDI6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3JhdmJfbWFpbi5jLTE1NDMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3Jzd2l0Y2hfbWFpbi5jPTE0NjA9c3RhdGljIGludCByc3dpdGNoX3BoeV9kZXZpY2VfaW5pdChzdHJ1Y3QgcnN3aXRjaF9kZXZpY2UgKnJkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3Jzd2l0Y2hfbWFpbi5jLTE0OTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYzoxNDk0OlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9yc3dpdGNoX21haW4uYy0xNDk1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmM9ODk1PXN0YXRpYyBpbnQgcnRzbl9waHlfaW5pdChzdHJ1Y3QgcnRzbl9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9ydHNuLmMtOTE3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcnRzbi5jOjkxODpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvcnRzbi5jLTkxOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmM9MTk4Nz1zdGF0aWMgaW50IHNoX2V0aF9waHlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMtMjAyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jOjIwMjg6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jLTIwMjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmM9MTAxNT1zdGF0aWMgaW50IHNtc2M5MTF4X21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTExeC5jLTEwMzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbXNjOTExeC5jOjEwMzk6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5MTF4LmMtMTA0MC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzk0MjAuYz0xMTAyPXN0YXRpYyBpbnQgc21zYzk0MjBfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5NDIwLmMtMTEyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3Ntc2M5NDIwLmM6MTEyOTpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21zYzk0MjAuYy0xMTMwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L3NuaV9hdmUuYz0xMTYzPXN0YXRpYyBpbnQgYXZlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvc25pX2F2ZS5jLTEyMzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L3NuaV9hdmUuYzoxMjMzOlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L3NuaV9hdmUuYy0xMjM0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3BhY2VtaXQvazFfZW1hYy5jPTE1OTc9c3RhdGljIGludCBlbWFjX3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3BhY2VtaXQvazFfZW1hYy5jLTE2NDgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3BhY2VtaXQvazFfZW1hYy5jOjE2NDk6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zcGFjZW1pdC9rMV9lbWFjLmMtMTY1MC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM9NTk1PWludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNzA0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NzA1OlxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy03MDYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW5wbHVzL3NwbDJzd19waHkuYz01Nj1pbnQgc3BsMnN3X3BoeV9jb25uZWN0KHN0cnVjdCBzcGwyc3dfY29tbW9uICpjb21tKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VucGx1cy9zcGwyc3dfcGh5LmMtNzItXFx0XFx0XFx0cGh5X3N1cHBvcnRfYXN5bV9wYXVzZShwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N1bnBsdXMvc3BsMnN3X3BoeS5jOjczOlxcdFxcdFxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VucGx1cy9zcGwyc3dfcGh5LmMtNzQtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5jPTU4NT1zdGF0aWMgdm9pZCBjcHN3X3NsYXZlX29wZW4oc3RydWN0IGNwc3dfc2xhdmUgKnNsYXZlLCBzdHJ1Y3QgY3Bzd19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5jLTY2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmM6NjYzOlxcdHBoeV9hdHRhY2hlZF9pbmZvKHNsYXZlLVxcdTAwM2VwaHkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3cuYy02NjQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X25ldy5jPTc0MD1zdGF0aWMgdm9pZCBjcHN3X3NsYXZlX29wZW4oc3RydWN0IGNwc3dfc2xhdmUgKnNsYXZlLCBzdHJ1Y3QgY3Bzd19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19uZXcuYy04MDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19uZXcuYzo4MDU6XFx0cGh5X2F0dGFjaGVkX2luZm8oc2xhdmUtXFx1MDAzZXBoeSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19uZXcuYy04MDYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX2VtYWMuYz0xNDAyPXN0YXRpYyBpbnQgZW1hY19kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfZW1hYy5jLTE1MjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvZGF2aW5jaV9lbWFjLmM6MTUyOTpcXHRcXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfZW1hYy5jLTE1MzAtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM9MjE3OD1zdGF0aWMgaW50IHBydWV0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMtMjQxNi1cXHRcXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM6MjQxNzpcXHRcXHRwaHlfYXR0YWNoZWRfaW5mbyhwcnVldGgtXFx1MDAzZWVtYWNbUFJVRVRIX01BQzBdLVxcdTAwM2VuZGV2LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI0MTgtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmMtMjQzMy1cXHRcXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoLmM6MjQzNDpcXHRcXHRwaHlfYXR0YWNoZWRfaW5mbyhwcnVldGgtXFx1MDAzZWVtYWNbUFJVRVRIX01BQzFdLVxcdTAwM2VuZGV2LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aC5jLTI0MzUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jPTg4OT1zdGF0aWMgaW50IHBydWV0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jLTEwOTAtXFx0XFx0ZW1hY19waHlfY29ubmVjdChwcnVldGgtXFx1MDAzZWVtYWNbUFJVRVRIX01BQzBdKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmM6MTA5MTpcXHRcXHRwaHlfYXR0YWNoZWRfaW5mbyhwcnVldGgtXFx1MDAzZWVtYWNbUFJVRVRIX01BQzBdLVxcdTAwM2VuZGV2LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aF9zcjEuYy0xMDkyLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2ljc3NnL2ljc3NnX3BydWV0aF9zcjEuYy0xMTAyLVxcdFxcdGVtYWNfcGh5X2Nvbm5lY3QocHJ1ZXRoLVxcdTAwM2VlbWFjW1BSVUVUSF9NQUMxXSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvaWNzc2cvaWNzc2dfcHJ1ZXRoX3NyMS5jOjExMDM6XFx0XFx0cGh5X2F0dGFjaGVkX2luZm8ocHJ1ZXRoLVxcdTAwM2VlbWFjW1BSVUVUSF9NQUMxXS1cXHUwMDNlbmRldi1cXHUwMDNlcGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9pY3NzZy9pY3NzZ19wcnVldGhfc3IxLmMtMTEwNC1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90b3NoaWJhL3RjMzU4MTUuYz02MDc9c3RhdGljIGludCB0Y19taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Rvc2hpYmEvdGMzNTgxNS5jLTYyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90b3NoaWJhL3RjMzU4MTUuYzo2Mjg6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90b3NoaWJhL3RjMzU4MTUuYy02MjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM9MTU5PWludCBuZ2JlX21kaW9faW5pdChzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTE4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTkwOlxcdHBoeV9hdHRhY2hlZF9pbmZvKHd4LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0xOTEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jPTUyND1zdGF0aWMgaW50IHR4Z2JlX2V4dF9waHlfaW5pdChzdHJ1Y3QgdHhnYmUgKnR4Z2JlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy01NTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYzo1NTk6XFx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTU2MC1cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz03NjA9c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc3NS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6Nzc2OnN0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03Nzcte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTgyOT1zdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04NTctXFx0YnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjg1ODpcXHRidXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODU5LVxcdGJ1cy1cXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMjI1PWludCBwaHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTIzMy1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjEyMzQ6XFx0cmMgPSBwaHlfYXR0YWNoX2RpcmVjdChkZXYsIHBoeWRldiwgcGh5ZGV2LVxcdTAwM2VkZXZfZmxhZ3MsIGludGVyZmFjZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMjM1LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTM4OD1FWFBPUlRfU1lNQk9MKHBoeV9pbml0X2h3KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzODktXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzkwOnZvaWQgcGh5X2F0dGFjaGVkX2luZm8oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTEte1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM5MjpcXHRwaHlfYXR0YWNoZWRfcHJpbnQocGh5ZGV2LCBOVUxMKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTMtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTM5NDpFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hlZF9pbmZvKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTEzOTUtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMzk2LSNkZWZpbmUgQVRUQUNIRURfRk1UIFxcXCJhdHRhY2hlZCBQSFkgZHJpdmVyICVzKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lcylcXFwiXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxMzk3OmNoYXIgKnBoeV9hdHRhY2hlZF9pbmZvX2lycShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTM5OC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0MTYtfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTQxNzpFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hlZF9pbmZvX2lycSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDE4LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTQxOTp2b2lkIHBoeV9hdHRhY2hlZF9wcmludChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBjb25zdCBjaGFyICpmbXQsIC4uLilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0MjAte1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQyMS1cXHRjb25zdCBjaGFyICp1bmJvdW5kID0gcGh5ZGV2LVxcdTAwM2VkcnYgPyBcXFwiXFxcIiA6IFxcXCJbdW5ib3VuZF0gXFxcIjtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE0MjI6XFx0Y2hhciAqaXJxX3N0ciA9IHBoeV9hdHRhY2hlZF9pbmZvX2lycShwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQyMy1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQzOC19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNDM5OkVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaGVkX3ByaW50KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0NDAtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE3Mzc9c3RhdGljIHZvaWQgX19waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgbm90aWZ5X2J1cylcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgxNy0gKiBUaGlzIGRldGFjaGVzIHRoZSBwaHkgZGV2aWNlIGZyb20gaXRzIG5ldHdvcmsgZGV2aWNlIGFuZCB0aGUgcGh5XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODE4OiAqIGRyaXZlciwgYW5kIGRyb3BzIHRoZSByZWZlcmVuY2UgY291bnQgdGFrZW4gaW4gcGh5X2F0dGFjaF9kaXJlY3QoKS5cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MTktICovXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE4MjU9RVhQT1JUX1NZTUJPTChwaHlfZGV0YWNoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgyNy0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4Mjg6ICogcGh5X2F0dGFjaF9kaXJlY3QgLSBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBhIGdpdmVuIFBIWSBkZXZpY2UgcG9pbnRlclxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgyOS0gKiBAZGV2OiBuZXR3b3JrIGRldmljZSB0byBhdHRhY2hcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTg0MS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE4NDI6aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xODQzLVxcdFxcdCAgICAgIHUzMiBmbGFncywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTk2OC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE5Njk6XFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKSB7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxOTcwOlxcdFxcdGVyciA9IHBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xOTcxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwMDItfVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MjAwMzpFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTIwMDQtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIwODc9c3RhdGljIGludCBwaHlsaW5rX2JyaW5ndXBfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjEyMS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIxMjI6XFx0aXJxX3N0ciA9IHBoeV9hdHRhY2hlZF9pbmZvX2lycShwaHkpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMjEyMy1cXHRwaHlsaW5rX2luZm8ocGwsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTIyMDQ9c3RhdGljIGludCBwaHlsaW5rX2F0dGFjaF9waHkoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjE5LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjIyMDpcXHRyZXR1cm4gcGh5X2F0dGFjaF9kaXJlY3QocGwtXFx1MDAzZW5ldGRldiwgcGh5LCBmbGFncywgaW50ZXJmYWNlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIyMjEtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjI4LSAqIENvbm5lY3QgQHBoeSB0byB0aGUgcGh5bGluayBpbnN0YW5jZSBzcGVjaWZpZWQgYnkgQHBsIGJ5IGNhbGxpbmdcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjIyMjk6ICogcGh5X2F0dGFjaF9kaXJlY3QoKS4gQ29uZmlndXJlIHRoZSBAcGh5IGFjY29yZGluZyB0byB0aGUgTUFDIGRyaXZlcidzXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMjMwLSAqIGNhcGFiaWxpdGllcywgc3RhcnQgdGhlIFBIWUxJQiBzdGF0ZSBtYWNoaW5lIGFuZCBlbmFibGUgYW55IGludGVycnVwdHNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MjI5MD1pbnQgcGh5bGlua19md25vZGVfcGh5X2Nvbm5lY3Qoc3RydWN0IHBoeWxpbmsgKnBsLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0yMzIzLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MjMyNDpcXHRyZXQgPSBwaHlfYXR0YWNoX2RpcmVjdChwbC1cXHUwMDNlbmV0ZGV2LCBwaHlfZGV2LCBmbGFncyxcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTIzMjUtXFx0XFx0XFx0XFx0cGwtXFx1MDAzZWxpbmtfaW50ZXJmYWNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz03MDM9c3RhdGljIGludCBheDg4NzcyX2luaXRfcGh5KHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MjItXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjcyMzpcXHRwaHlfYXR0YWNoZWRfaW5mbyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MjQtXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMTQ3PXN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5Mi1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjkzOlxcdHBoeV9hdHRhY2hlZF9pbmZvKGRldi1cXHUwMDNlbmV0LVxcdTAwM2VwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyOTQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFpbi5jPTQzNDU9c3RhdGljIGludCBicmNtc19iX2F0dGFjaChzdHJ1Y3QgYnJjbXNfY19pbmZvICp3bGMsIHN0cnVjdCBiY21hX2RldmljZSAqY29yZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9tYWluLmMtNDUzOC1cXHRcXHR3bGNfaHctXFx1MDAzZWJhbmQtXFx1MDAzZXBpID1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvbWFpbi5jOjQ1Mzk6XFx0XFx0XFx0d2xjX3BoeV9hdHRhY2god2xjX2h3LVxcdTAwM2VwaHlfc2gsIGNvcmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL21haW4uYy00NTQwLVxcdFxcdFxcdFxcdCAgICAgICB3bGNfaHctXFx1MDAzZWJhbmQtXFx1MDAzZWJhbmR0eXBlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfY21uLmM9Mzk2PXN0cnVjdCBicmNtc19waHlfcHViICpcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9jbW4uYzozOTc6d2xjX3BoeV9hdHRhY2goc3RydWN0IHNoYXJlZF9waHkgKnNoLCBzdHJ1Y3QgYmNtYV9kZXZpY2UgKmQxMWNvcmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfY21uLmMtMzk4LVxcdCAgICAgICBpbnQgYmFuZHR5cGUsIHN0cnVjdCB3aXBoeSAqd2lwaHkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9jbW4uYy01MzItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfY21uLmM6NTMzOlxcdFxcdHdsY19waHlfYXR0YWNoX25waHkocGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jLTUzNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9jbW4uYy01MzUtXFx0fSBlbHNlIGlmIChJU0xDTlBIWShwaSkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9jbW4uYzo1MzY6XFx0XFx0aWYgKCF3bGNfcGh5X2F0dGFjaF9sY25waHkocGkpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2Ntbi5jLTUzNy1cXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2hhbC5oPTE2Nj1zdHJ1Y3Qgc2hhcmVkX3BoeSAqd2xjX3BoeV9zaGFyZWRfYXR0YWNoKHN0cnVjdCBzaGFyZWRfcGh5X3BhcmFtcyAqc2hwKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9oYWwuaDoxNjc6c3RydWN0IGJyY21zX3BoeV9wdWIgKndsY19waHlfYXR0YWNoKHN0cnVjdCBzaGFyZWRfcGh5ICpzaCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9oYWwuaC0xNjgtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYmNtYV9kZXZpY2UgKmQxMWNvcmUsIGludCBiYW5kdHlwZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2ludC5oPTkzOT12b2lkIHdsY19waHlfY2FsX3BlcmljYWxfbXBoYXNlX3Jlc3RhcnQoc3RydWN0IGJyY21zX3BoeSAqcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2ludC5oLTk0MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9pbnQuaDo5NDE6dm9pZCB3bGNfcGh5X2F0dGFjaF9ucGh5KHN0cnVjdCBicmNtc19waHkgKnBpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9pbnQuaDo5NDI6Ym9vbCB3bGNfcGh5X2F0dGFjaF9sY25waHkoc3RydWN0IGJyY21zX3BoeSAqcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2ludC5oLTk0My1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2xjbi5jPTQ5NTM9dm9pZCB3bGNfcGh5X2RldGFjaF9sY25waHkoc3RydWN0IGJyY21zX3BoeSAqcGkpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9sY24uYy00OTU3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X2xjbi5jOjQ5NTg6Ym9vbCB3bGNfcGh5X2F0dGFjaF9sY25waHkoc3RydWN0IGJyY21zX3BoeSAqcGkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL3BoeS9waHlfbGNuLmMtNDk1OS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9uLmM9MTQ1NDk9c3RhdGljIHZvaWQgd2xjX3BoeV90eHB3cl9zcm9tX3JlYWRfbnBoeShzdHJ1Y3QgYnJjbXNfcGh5ICpwaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X24uYy0xNDU5OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvcGh5L3BoeV9uLmM6MTQ2MDA6dm9pZCB3bGNfcGh5X2F0dGFjaF9ucGh5KHN0cnVjdCBicmNtc19waHkgKnBpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9waHkvcGh5X24uYy0xNDYwMS17XFxuLS1cXG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmM9MTU0PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jOjE1NTpiZmFfY29tX3BoeV9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgbWluY2ZnKVxcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYy0xNTYte1xcbi0tXFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jLTE1OS1cXG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmM6MTYwOlxcdGJmYV9waHlfYXR0YWNoKHBoeSwgXFx1MDAyNmJmYS1cXHUwMDNlaW9jLCBiZmEsIGJmYS1cXHUwMDNldHJjbW9kLCBtaW5jZmcpO1xcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYy0xNjEtXFx0YmZhX3BoeV9tZW1jbGFpbShwaHksIHBoeV9kbWEtXFx1MDAzZWt2YV9jdXJwLCBwaHlfZG1hLVxcdTAwM2VkbWFfY3VycCwgbWluY2ZnKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYz0xODI3PWJmYV9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZyxcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2NvcmUuYy0xODcyLVxcdGJmYV9jb21fZGlhZ19hdHRhY2goYmZhKTtcXG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmM6MTg3MzpcXHRiZmFfY29tX3BoeV9hdHRhY2goYmZhLCBjZmctXFx1MDAzZWRydmNmZy5taW5fY2ZnKTtcXG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMtMTg3NC1cXHRiZmFfY29tX2ZydV9hdHRhY2goYmZhLCBjZmctXFx1MDAzZWRydmNmZy5taW5fY2ZnKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jPTU0MzY9dm9pZFxcbmRyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jOjU0Mzc6YmZhX3BoeV9hdHRhY2goc3RydWN0IGJmYV9waHlfcyAqcGh5LCBzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmRldixcXG5kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuYy01NDM4LVxcdFxcdHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsIGJmYV9ib29sZWFuX3QgbWluY2ZnKVxcbi0tXFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmg9NzI5PXUzMlxcdGJmYV9waHlfbWVtaW5mbyhiZmFfYm9vbGVhbl90IG1pbmNmZyk7XFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmg6NzMwOnZvaWQgYmZhX3BoeV9hdHRhY2goc3RydWN0IGJmYV9waHlfcyAqcGh5LCBzdHJ1Y3QgYmZhX2lvY19zICppb2MsXFxuZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmgtNzMxLVxcdFxcdHZvaWQgKmRldiwgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwgYmZhX2Jvb2xlYW5fdCBtaW5jZmcpO1xcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzLmg9MTgxPXN0cnVjdCBoaXNpX3Nhc19waHkge1xcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzLmgtMTkyLVxcdHU4XFx0XFx0ZnJhbWVfcmN2ZFtGUkFNRV9SQ1ZEX0JVRl07XFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzLmg6MTkzOlxcdHU4XFx0XFx0cGh5X2F0dGFjaGVkO1xcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhcy5oLTE5NC1cXHR1OFxcdFxcdGluX3Jlc2V0O1xcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYz02NDk9c3RhdGljIHZvaWQgaGlzaV9zYXNfYnl0ZXNfZG1hZWQoc3RydWN0IGhpc2lfaGJhICpoaXNpX2hiYSwgaW50IHBoeV9ubyxcXG4tLVxcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmMtNjU0LVxcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmM6NjU1OlxcdGlmICghcGh5LVxcdTAwM2VwaHlfYXR0YWNoZWQpXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYy02NTYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYz0xMDMwPXZvaWQgaGlzaV9zYXNfcGh5X29vYl9yZWFkeShzdHJ1Y3QgaGlzaV9oYmEgKmhpc2lfaGJhLCBpbnQgcGh5X25vKVxcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYy0xMDM3LVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwaHktXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jOjEwMzg6XFx0aWYgKHBoeS1cXHUwMDNlcGh5X2F0dGFjaGVkKSB7XFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYy0xMDM5LVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBoeS1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi0tXFxuZHJpdmVycy9zY3NpL2hpc2lfc2FzL2hpc2lfc2FzX21haW4uYz0xMjgwPXN0YXRpYyBpbnQgaGlzaV9zYXNfY29udHJvbF9waHkoc3RydWN0IGFzZF9zYXNfcGh5ICpzYXNfcGh5LCBlbnVtIHBoeV9mdW5jIGZ1bmMsXFxuLS1cXG5kcml2ZXJzL3Njc2kvaGlzaV9zYXMvaGlzaV9zYXNfbWFpbi5jLTEyODktXFx0aW50IHBoeV9ubyA9IHNhc19waHktXFx1MDAzZWlkO1xcbmRyaXZlcnMvc2NzaS9oaXNpX3Nhcy9oaXNpX3Nhc19tYWluLmM6MTI5MDpcXHR1OCBzdHMgPSBwaHktXFx1MDAzZXBoeV9hdHRhY2hlZDtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTM6NTUuNDA0NDMyMjkzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYxNzMzNDQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnZlc3RpZ2F0aW9uIGludG8gYHBoeV9hdHRhY2hfZGlyZWN0YCBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgc3l6a2FsbGVyIGNhbiB0cmlnZ2VyIHRoZSBgcGh5X2F0dGFjaF9kaXJlY3RgIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uLCBJIGtub3csIGlzIGNhbGxlZCBieSBgcGh5X2Nvbm5lY3RfZGlyZWN0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYHBoeV9jb25uZWN0YC4gVGhlIGNvbm5lY3Rpb24gY2hhaW4gaXMgaW1wb3J0YW50LCBiZWNhdXNlIGBwaHlfY29ubmVjdGAgaXMgY2FsbGVkIGJ5IGEgbG90IG9mIG5ldHdvcmsgZHJpdmVycy4gU28sIHRoZSBxdWVzdGlvbiBpcywgY2FuIHN5emthbGxlciBzb21laG93IGdldCB0aGVyZT9cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGxvb2sgZm9yIGEgd2F5IHN5emthbGxlciBjb3VsZCBjcmVhdGUgYSB2aXJ0dWFsIGRldmljZSB0aGF0IGludGVyYWN0cyB3aXRoIGBwaHlsaWJgLiBJIGNvbnNpZGVyZWQgdGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIGBuZXRsaW5rYCB0byBhY2NvbXBsaXNoIHRoaXMuIFRoZW4sIEkgaGFkIGEgYnJpZWYsIGluY29ycmVjdCB0aG91Z2h0IGFib3V0IGBtYWNzZWNgIHVzaW5nIFBIWXMsIGJ1dCBxdWlja2x5IGRpc21pc3NlZCBpdOKAlGBtYWNzZWNgIGlzIHB1cmVseSBhIHNvZnR3YXJlIGRldmljZS5cblxuSSBzdGFydGVkIHNjYW5uaW5nIHBvdGVudGlhbCB2aXJ0dWFsIGRldmljZXMgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uIEkgY2hlY2tlZCBgZHJpdmVycy9uZXQvZHVtbXkuY2AsIGBkcml2ZXJzL25ldC92ZXRoLmNgLCBgZHJpdmVycy9uZXQvdHVuLmNgLCBhbmQgYGRyaXZlcnMvbmV0L21hY3ZsYW4uY2AuIE5vbmUgb2YgdGhvc2UgdXNlIFBIWXMuIEkgdGhvdWdodCBhYm91dCBNRElPIGJ1c2VzLCBzbyBJIGdsYW5jZWQgYXQgYGRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jYC4gSSBrbm93IHN5emthbGxlciBjYW4gaW50ZXJhY3Qgd2l0aCB0aG9zZSB0aHJvdWdoIGlvY3RscyBsaWtlIGBTSU9DU01JSVJFR2AgYW5kIGBTSU9DR01JSVBIWWAuIEhvd2V2ZXIsIHRoaXMgZG9lc24ndCBkaXJlY3RseSB0cmlnZ2VyIGBwaHlfYXR0YWNoX2RpcmVjdGA7IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBgbmV0X2RldmljZWAgYXR0YWNoZXMgdG8gYSBQSFkuXG5cblRoYXQncyB3aGVuIGl0IGhpdCBtZTogYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyBjYWxsZWQgd2hlbiBhIGBuZXRfZGV2aWNlYCBpcyBvcGVuZWQsIHNheSwgdmlhIHRoZSBgbmRvX29wZW5gIG1ldGhvZCwgYW5kIG9ubHkgd2hlbiB0aGUgZGV2aWNlIGFjdHVhbGx5IGhhcyBhIFBIWSBhc3NvY2lhdGVkIHdpdGggaXQuIFNvLCBpZiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGggdGhpbmdzIGxpa2UgYENPTkZJR19EVU1NWWAgb3IgYENPTkZJR19WRVRIYCwgSSBjYW4ndCB0cmlnZ2VyIGl0LCBiZWNhdXNlIHRob3NlIGRldmljZXMgZG9uJ3QgaGF2ZSBQSFlzLlxuXG5TbywgSSBuZWVkIHRvIGZpbmQgYSBuZXR3b3JrIGRyaXZlciwgcmVhY2hhYmxlIGJ5IHN5emthbGxlciwgd2hpY2ggKmRvZXMqIHVzZSBQSFlzLiBUaGF0J3MgdGhlIGtleS4gQWhhISBTeXprYWxsZXIgY2FuIHVzZSBgbmV0ZGV2c2ltYC4gSSdsbCBnbyBjaGVjayB3aGV0aGVyIG9yIG5vdCBgbmV0ZGV2c2ltYCB1c2VzIFBIWXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMDkyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjAzLjAyMTc2OTQzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY4Mzg3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjAzLjA3MjQ2MjIwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTE2MDg3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVVNCIE5ldHdvcmsgRHJpdmVycyBhbmQgUEhZczogQSBTeXprYWxsZXIgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gYnJvYWRlbiB0aGUgY292ZXJhZ2Ugb2YgbXkgZnV6emluZyBlZmZvcnRzLCBhbmQgYGRyaXZlcnMvbmV0L3VzYmAgY29tZXMgdG8gbWluZC4gU3l6a2FsbGVyJ3MgYWJpbGl0eSB0byBlbXVsYXRlIFVTQiBkZXZpY2VzIHVzaW5nIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gbGV2ZXJhZ2UuIFRoZSBxdWVzdGlvbiBpcywgd2hhdCB2dWxuZXJhYmlsaXRpZXMgYXJlIGxpa2VseSB0byBiZSBsdXJraW5nIHRoZXJlP1xuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgd2hldGhlciBhbnkgVVNCIG5ldHdvcmsgZHJpdmVycyBhY3R1YWxseSByZWx5IG9uIFBIWXMuIFRoaXMgY291bGQgb3BlbiB1cCBhIG5ldyBhdmVudWUgZm9yIHRlc3RpbmcgYW5kIGV4cGxvaXQgZGlzY292ZXJ5LiBTbywgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZSBhbmQgc2VlIGlmIHRoZXJlJ3MgYW55IGxpbmsgYmV0d2VlbiB0aGUgVVNCIG5ldHdvcmsgZHJpdmVycyBhbmQgYW55IFBoeXNpY2FsIExheWVyIGltcGxlbWVudGF0aW9ucy4gVGhpcyBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzAwMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjA2LjEyNDA3MzE5NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI5OTMwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2F0dGFjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTcwMz1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9waHkoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcyMi1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzIzOlxcdHBoeV9hdHRhY2hlZF9pbmZvKHByaXYtXFx1MDAzZXBoeWRldik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcyNC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjkyLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyOTM6XFx0cGh5X2F0dGFjaGVkX2luZm8oZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXBoeWRldik7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MDYuMTY3MDcyNTY1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjI1MzMxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqTmV0d29yayBEcml2ZXIgSW52ZXN0aWdhdGlvbjogYHBoeV9jb25uZWN0YCB2cy4gYHBoeV9hdHRhY2hfZGlyZWN0YCoqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGhvdyB0aGUgYHNtc2M5NXh4YCBhbmQgYGFzaXhgIGRyaXZlcnMgaGFuZGxlIHRoZWlyIFBIWSBjb25uZWN0aW9ucy4gVGhlIGtleSB0aGluZyBJJ20gbG9va2luZyBmb3IgaXMgd2hldGhlciB0aGV5J3JlIGVtcGxveWluZyB0aGUgbGVnYWN5IGBwaHlfY29ubmVjdGAgZnVuY3Rpb24sIG9yIGlmIHRoZXkndmUgbWlncmF0ZWQgdG8gdGhlIG5ld2VyIGBwaHlfYXR0YWNoX2RpcmVjdGAgYXBwcm9hY2guIEtub3dpbmcgdGhpcyBpbXBhY3RzIHNvIG1hbnkgdGhpbmdzLCBmcm9tIHRoZSBvdmVyYWxsIGRyaXZlciBhcmNoaXRlY3R1cmUgdG8gcG90ZW50aWFsIHF1aXJrcyBpbiBoYW5kbGluZyBzcGVjaWZpYyBQSFkgY2hhcmFjdGVyaXN0aWNzLiBJdCB3aWxsIGhlbHAgbWUgZGlhZ25vc2UgY2VydGFpbiBpc3N1ZXMsIGNvbXBhcmUgdGhlaXIgbWV0aG9kcyBmb3IgZnV0dXJlIHJlZmVyZW5jZSwgYW5kIHVuZGVyc3RhbmQgaWYgdGhleSBoYXZlIHRha2VuIGFkdmFudGFnZSBvZiB0aGUgbW9kZXJuIGFwcHJvYWNoLiBJdCdzIHJlYWxseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlaXIgUEhZIGludGVyYWN0aW9uIG1vZGVsIGFuZCB3aGVyZSB0byBsb29rIGZvciBwb3RlbnRpYWwgcHJvYmxlbXMgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGltZSB0byBnZXQgZGlnZ2luZyB0aHJvdWdoIHRoZSBjb2RlLi4uIGxldCdzIHNlZSB3aGljaCBwYXRoIHRoZXNlIGRyaXZlcnMgYXJlIHRha2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0ODEsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDowOS44ODk2MDg5OTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTMxMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0yNjE9c3RhdGljIGludCBheDg4MTcyYV9yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zMTMtXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6MzE0OlxcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeV9jb25uZWN0KGRldi1cXHUwMDNlbmV0LCBwcml2LVxcdTAwM2VwaHlfbmFtZSxcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zMTUtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmF4ODgxNzJhX2FkanVzdF9saW5rLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyODQtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI4NTpcXHRyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QoZGV2LVxcdTAwM2VuZXQsIHBkYXRhLVxcdTAwM2VwaHlkZXYsXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4Ni1cXHRcXHRcXHRcXHQgXFx1MDAyNnNtc2M5NXh4X2hhbmRsZV9saW5rX2NoYW5nZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MDkuOTM4NTQ1MTk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODkzNDU2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIHRoZSBOZXcgTURJTyBCdXMgQ2FsbGJhY2tzKipcblxuT2theSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIGZvbGxvd2luZyB0aGUgcG90ZW50aWFsIGNhbGwgY2hhaW4gaGVyZS4gSXQgbG9va3MgbGlrZSBib3RoIGBzbXNjOTV4eGAgYW5kIGBheDg4MTcyYWAgdXNlIGBwaHlfY29ubmVjdF9kaXJlY3RgIGFuZCBgcGh5X2Nvbm5lY3RgLCB3aGljaCwgaW4gdHVybiwgY2FsbCBgcGh5X2F0dGFjaF9kaXJlY3RgLiBHaXZlbiBTeXprYWxsZXIncyBVU0IgZW11bGF0aW9uIGNhcGFiaWxpdGllcywgaXQgY291bGQgdHJpZ2dlciBlaXRoZXIgYHNtc2M5NXh4X2JpbmRgIG9yIGBheDg4MTcyYV9yZXNldGAuIFRoYXQgd291bGQgYmUgdGhlIGVudHJ5IHBvaW50IHRvIGdldCBpbnRvIHRoZSBmdW5jdGlvbnMsIGBwaHlfY29ubmVjdF9kaXJlY3RgIGFuZCBgcGh5X2Nvbm5lY3RgLCBldmVudHVhbGx5IGxlYWRpbmcgdG8gYHBoeV9hdHRhY2hfZGlyZWN0YC5cblxuQW5kIHRoZW4sIGNydWNpYWxseSwgYHBoeV9hdHRhY2hfZGlyZWN0YCBjYWxscyBgcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldilgLiBUaGF0J3Mgd2hlcmUgaXQgY29ubmVjdHMuXG5cbkFoYSEgVGhlIHBhdGNoICphZGRzKiBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIHRvIHRoZSBgc3RydWN0IG1paV9idXNgLCB3aGljaCBpcyBrZXkuIEFuZCB0aGVuIGl0IGFjdHVhbGx5IGltcGxlbWVudHMgdGhlc2UgY2FsbGJhY2tzIHdpdGhpbiBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gQnV0IGhlcmUncyB0aGUgc25hZzogYHNtc2M5NXh4YCBhbmQgYGF4ODgxNzJhYCB1c2UgKnRoZWlyIG93biogTURJTyBidXNlcywgbm90IHRoZSBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgaW1wbGVtZW50YXRpb24uIFRoaXMgbWVhbnMgdGhlIGBub3RpZnlfcGh5X2F0dGFjaGAgY2FsbGJhY2sgaW4gYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIHdpbGwgKm9ubHkqIGJlIGNhbGxlZCBpZiB0aGUgUEhZIGlzIGF0dGFjaGVkIHRvIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBidXMuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMgd2hldGhlciBTeXprYWxsZXIgY2FuIGluc3RhbnRpYXRlIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBidXMuIEl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIHN1Z2dlc3RzIGl0IG1pZ2h0IHJlcXVpcmUgc3BlY2lmaWMgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBob3cgdG8gdHJpZ2dlciB0aGF0IHBsYXRmb3JtIGRyaXZlciwgdG8gc2VlIGlmIEkgY2FuIGZvcmNlIGl0IHRvIHVzZSB0aGlzIGRyaXZlci4gVGhhdCB3b3VsZCBiZSB0aGUgcGF0aCB0byBtYWtpbmcgdGhpcyBjYWxsIGNoYWluIGFjdHVhbGx5IGZpcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MDM4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjE1LjkyNzg5MzM3M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5ODMyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGxhdGZvcm1fZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9MTE1ND1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvdHRvX2VtZGlvX2lkcyk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTExNTUtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjExNTY6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb3R0b19lbWRpb19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTExNTctXFx0LnByb2JlID0gb3R0b19lbWRpb19wcm9iZSxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTYzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoxMTY0Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIob3R0b19lbWRpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTY1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDoxNS45Njg4ODA4MTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI5OTQyMzgxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHRocm91Z2ggaG93IGEgcGxhdGZvcm0gZHJpdmVyIGdldHMgbG9hZGVkLiBUeXBpY2FsbHksIGl0J3MgdGhlIERldmljZSBUcmVlIHRoYXQga2lja3MgdGhpbmdzIG9mZiwgcmlnaHQ/IFRoYXQncyBob3cgdGhlIGtlcm5lbCBrbm93cyBhYm91dCB0aGUgaGFyZHdhcmUgYW5kIHdoYXQgZHJpdmVycyB0byBsb2FkLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgc2V0dXAgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZGV2aWNlIHRyZWUgaGFzIHRoYXQgYWxsLWltcG9ydGFudCBcImNvbXBhdGlibGVcIiBzdHJpbmcsIHRoZSBvbmUgdGhhdCB0ZWxscyB0aGUga2VybmVsIFwiaGV5LCB1c2UgdGhpcyBkcml2ZXJcIiDigJMgdGhpbmdzIGxpa2UgYFwicmVhbHRlayxydGw4MzgwLW1kaW9cImAuIElmIGl0J3MgbWlzc2luZywgYG90dG9fZW1kaW9fcHJvYmVgIGlzbid0IGdvaW5nIHRvIGdldCBjYWxsZWQsIGFuZCB0aGF0J3MgYSBwcm9ibGVtLlxuXG5Ob3csIG15IG1pbmQgd2FuZGVycyB0byBzeXprYWxsZXIuLi4gY2FuIEkgZm9yY2UgYSBwbGF0Zm9ybSBkZXZpY2UgaW50byBleGlzdGVuY2UgdGhyb3VnaCBgc3l6X2Rldm1lbWAgb3Igb25lIG9mIHRob3NlIHBzZXVkby1zeXNjYWxscz8gTm8sIHdhaXQsIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIFN5emthbGxlciBoYXMgYHN5el9wbGF0Zm9ybV9kZXZpY2VfYWRkYCwgb3IgaXQgY2FuIHVzZSBgbmV0bGlua2AgdG8gY3JlYXRlIGRldmljZXMsIGJ1dCBnZW5lcmFsbHkgaXQncyBhIGJpdCB0cmlja3kgdG8gc3BpbiB1cCBwbGF0Zm9ybSBkZXZpY2VzIHVubGVzcyB0aGVyZSdzIHNvbWUgc3BlY2lhbCBzeXprYWxsZXIgZGVzY3JpcHRpb24gZm9yIHRoYXQgc3BlY2lmaWMgZGV2aWNlLlxuXG5CdXQgdGhlbiwgdGhhdCBzcGFya3MgYSBuZXcgdGhvdWdodC4gRG9lcyBzeXprYWxsZXIgaGF2ZSBhIG1vcmUgZ2VuZXJhbCBtZWNoYW5pc20gdG8gaW5zdGFudGlhdGUgKmFyYml0cmFyeSogcGxhdGZvcm0gZGV2aWNlcz8gSXMgdGhlcmUgYSBicm9hZGVyIHdheSB0byBkZWZpbmUgYW5kIHRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIGEgcGxhdGZvcm0gZGV2aWNlIHdpdGhvdXQgcmVseWluZyBvbiB0aGUgRGV2aWNlIFRyZWUgb3IgYSBzcGVjaWZpYyBkZXZpY2UtcmVsYXRlZCBjYWxsP1xuXG5JIG5lZWQgdG8gZGlnIGludG8gdGhlIHN5emthbGxlciBkb2N1bWVudGF0aW9uIGFuZCBjb2RlIHRvIHNlZSBpZiB0aGVyZSdzIGEgZ2VuZXJhbGl6ZWQgXCJwbGF0Zm9ybSBkZXZpY2VcIiBkZXNjcmlwdGlvbiBzb21ld2hlcmUuIFRpbWUgdG8gY2hlY2sgaWYgdGhlcmUncyBhIHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgcGxhdGZvcm0gZGV2aWNlcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzUwOTMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MjEuMjY4MzA2Njc5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM3MTM3Njg1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfcGxhdGZvcm1fZGV2aWNlX2FkZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6MjIuODA1NDU1MzE1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NTI5NzU5MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgRGVjaXNpb246IFlFUyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGRpdGNoIHRoZSBpZGVhIG9mIHVzaW5nIGBnaXQgZ3JlcGAgZm9yIHNlYXJjaGluZyBzeXprYWxsZXIgcHNldWRvLXN5c2NhbGxzOyBgcmVhZC1maWxlYCBvciBteSBleGlzdGluZyBrbm93bGVkZ2UgaXMgdGhlIHdheSB0byBnby5cblxuVGhpcyBwYXRjaCwgaXQncyBnb3QgbWUgdGhpbmtpbmcuIEl0IHRvdWNoZXMgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCB3aGljaCBpcyBjb3JlIFBIWSBjb2RlLiBUaGUgY2hhbmdlcyB0aGVyZSBhcmUgc2ltcGxlOiBhZGRpbmcgYSBub3RpZmljYXRpb24gbWVjaGFuaXNtIG9uIFBIWSBhdHRhY2gvZGV0YWNoIOKAkyBjaGVja2luZyBmb3IgYSBmdW5jdGlvbiBwb2ludGVyIGFuZCBjYWxsaW5nIGl0LiBWZXJ5IGJhc2ljLiBUaGUgYnVsayBvZiB0aGUgY2hhbmdlcyBhcmUgaW4gYSBSZWFsdGVrIE1ESU8gY29udHJvbGxlciBkcml2ZXIuIFRoYXQncyBwbGF0Zm9ybS1zcGVjaWZpYyBhbmQgZm9yIHZlcnkgc3BlY2lmaWMgUmVhbHRlayBoYXJkd2FyZS4gQ2FuIEkgaGl0IHRoYXQgaW4gUUVNVT8gUHJvYmFibHkgbm90IHdpdGhvdXQgc3BlY2lmaWMgcGxhdGZvcm0gaW5zdGFudGlhdGlvbiwgd2hpY2ggc3l6a2FsbGVyIGRvZXNuJ3QgdXN1YWxseSBkbyB1bmxlc3MgaXQncyBleHBsaWNpdGx5IHNldCB1cC4gU28sIHRoYXQgUmVhbHRlayBzdHVmZiBpcyBwcm9iYWJseSBhIGRlYWQgZW5kIGZvciBtZS5cblxuQnV0IHRob3NlIGNvcmUgUEhZIGNoYW5nZXM/IFRoZXkncmUgZXhlY3V0ZWQgb24gKmV2ZXJ5KiBQSFkgYXR0YWNobWVudCBhbmQgZGV0YWNobWVudC4gRXZlbiBpZiB0aGUgYG5vdGlmeV9waHlfYXR0YWNoYCBpcyBOVUxMLCB0aGF0IGNvZGUgc3RpbGwgcnVucy4gU28gaWYgSSBmdXp6IGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCwgSSdtIGZ1enppbmcgdGhlIGNvcmUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHRhcmdldC5cblxuSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgcHJvbXB0IHNheXMgaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBJIHNob3VsZCB2ZXJpZnkgZXhlY3V0aW9uIGFuZCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC5cblxuSSdtIHRoaW5raW5nOiBpcyB0aGVyZSBzb21lIG90aGVyIHdheSB0byByZWFjaCB0aGUgUmVhbHRlayBjaGFuZ2VzPyBOb3BlLCB0aGF0J3Mgc3BlY2lmaWMgaGFyZHdhcmUuIEJVVCB0aG9zZSBjb3JlIGNoYW5nZXMgYXJlIGluZGVlZCB0cml2aWFsLCBqdXN0IGEgbnVsbCBjaGVjayBhbmQgYSBmdW5jdGlvbiBjYWxsLiBJdCdzIGEgdmVyeSBzaW1wbGUgYnJhbmNoLiBUaGUgcmVhbCBsb2dpYyBpcyBpbiB0aGF0IHZlbmRvci1zcGVjaWZpYyBkcml2ZXIsIHNvIHRoYXQgc3BlY2lmaWMgY29udHJvbGxlciBpcyBub3QgcmVhY2hhYmxlLiBTbyBpdCBzaG91bGQgYmUgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbldhaXQhIFRoZSBwcm9tcHQgYWxzbyBzYXlzOiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXCJcblxuSSBjYW4gcmVhY2ggdGhpcywgdXNpbmcgYSBVU0IgbmV0d29ya2luZyBnYWRnZXQsIHN1Y2ggYXMgYHNtc2M5NXh4YC5cblxuU28gaXQgc2VlbXMgbGlrZSBmdXp6aW5nIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBpcyBhY3R1YWxseSBhIGdvb2QgcGxhbi4gVGhvc2UgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggY29tbW9uIFVTQiBuZXR3b3JraW5nIGdhZGdldHMuIFNvLCBteSBmb2N1cyBzaG91bGQgYmUgdGhvc2UgZnVuY3Rpb25zLiBPa2F5LCBzbyBJIHNob3VsZCBiZSByZXR1cm5pbmcgYFdvcnRoRnV6emluZz10cnVlYCBhbmQgZm9jdXNpbmcgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBUaG9zZSB3aWxsIGV4ZWN1dGUgYmVjYXVzZSBvZiB0aGUgVVNCIG5ldHdvcmtpbmcgZ2FkZ2V0LlxuXG5BbHNvLCBpcyB0aGlzIGNvcmUgcGF0aCBhIGhvdC1wYXRoPyBOb3QgcmVhbGx5LCBpdCdzIGNhbGxlZCBkdXJpbmcgZGV2aWNlIG9wZW4vaW5pdGlhbGl6YXRpb24vdGVhcmRvd24uIFRoaXMgd2lsbCBiZSBhbiBlZGdlIGNhc2UuXG5cbk9uZSBsYXN0IGNoZWNrLiBgX19waHlfZGV0YWNoYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gaXQgKm1pZ2h0KiBiZSBpbmxpbmVkLiBCdXQgaXQncyBjYWxsZWQgYnkgYHBoeV9kZXRhY2hgIGFuZCBgcGh5X2F0dGFjaF9kaXJlY3RgIChvbiBlcnJvcikuIExvb2tzIGxpa2UgdGhhdCB3aWxsIG5lZWQgdG8gYmUgY2hlY2tlZC4gTGV0IG1lIGNvbmZpcm0sIHllcywgYF9fcGh5X2RldGFjaGAgaXMgc3RhdGljLlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBmdW5jdGlvbnMgYXJlIHdoYXQgSSBzaG91bGQgZm9jdXMgb24uIGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYCBpdCBpcy4gQW5kIHllcywgSSBkb3VibGUtY2hlY2tlZDsgYHBoeV9hdHRhY2hfZGlyZWN0YCBpcyByZWFjaGFibGUgdGhyb3VnaCB0aGUgYHNtc2M5NXh4YCBkZXZpY2UsIHdoaWNoIGNhbiBiZSBlbXVsYXRlZC5cblxuU28gSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWBcblxuXG4iLCJJbnB1dFRva2VucyI6MzU2NjEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjM4LjMzNTIxNjgyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE2MDgzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2Nvbm5lY3RfZGlyZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTExNDc9c3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjg0LVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyODU6XFx0cmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KGRldi1cXHUwMDNlbmV0LCBwZGF0YS1cXHUwMDNlcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyODYtXFx0XFx0XFx0XFx0IFxcdTAwMjZzbXNjOTV4eF9oYW5kbGVfbGlua19jaGFuZ2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjM4LjM3NjgzNTc4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg4MjM3ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIFBoeSBBdHRhY2ggRGlyZWN0KipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUgZmxvdywgYHNtc2M5NXh4X2JpbmRgIGRpcmVjdGx5IGNhbGxzIGBwaHlfY29ubmVjdF9kaXJlY3RgLCBhbmQgdGhhdCBmdW5jdGlvbiwgaW4gdHVybiwgY2FsbHMgYHBoeV9hdHRhY2hfZGlyZWN0YC4gVGhhdCBjb25maXJtcyB0aGF0IGBwaHlfYXR0YWNoX2RpcmVjdGAgKmlzKiBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIHRoYXQgYmluZGluZyBmdW5jdGlvbi4gR29vZC4gTm93LCB3aGF0IGFib3V0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zPyBUbyBtYWtlIHN1cmUgdGhhdCBgcGh5X2RldmljZS5jYCBpcyBjb21waWxlZCwgd2UncmUgZ29pbmcgdG8gbmVlZCBgQ09ORklHX1BIWUxJQmAgZW5hYmxlZC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc5NDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo0Mi40NjUwNzY5NjlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzE4MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9kZXZpY2VcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XFx0XFx0XFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo0Mi41MDU4MDAwMDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5OTQxMDQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nOlxuXG4qKlBIWSBMaWJyYXJ5IERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkndmUganVzdCBwcm9jZXNzZWQgdGhhdCBgbGlicGh5LXlgIGdldHMgY29uc3RydWN0ZWQgb25seSB3aGVuIHRoZSBgQ09ORklHX1BIWUxJQmAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IGltcGxpZXMgdGhhdCB0aGUgUEhZIGxpYnJhcnksIG9yIHNvbWUgY29yZSBwYXJ0IG9mIGl0LCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBUaGlzIHRlbGxzIG1lIHRoYXQgaWYgYENPTkZJR19QSFlMSUJgIGlzbid0IGVuYWJsZWQsIHRoZW4gdGhlIFBIWSBmdW5jdGlvbmFsaXR5IGlzIGVpdGhlciBhYnNlbnQgZW50aXJlbHkgZnJvbSB0aGUga2VybmVsLCBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseSwgb3IgaGFuZGxlZCBieSBhIHNlcGFyYXRlIG1vZHVsZS4gVGhpcyBpcyBmdW5kYW1lbnRhbCB0byBteSBrbm93bGVkZ2Ugb2Yga2VybmVsIGNvbmZpZ3VyYXRpb247IGVuYWJsaW5nIGl0IGVzc2VudGlhbGx5IGluY2x1ZGVzIHRoZSBjb3JlIFBIWSBzdXBwb3J0LiBJIG5lZWQgdG8gbm93IGNvbnNpZGVyIGhvdyB0aGUgUEhZIGxpYnJhcnkgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MjY5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDYuMjA1MjEzNDAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDE5ODIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsaWJwaHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XFx0XFx0XFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTEyPWVuZGlmXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTEzLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNDpsaWJwaHktJChDT05GSUdfU1dQSFkpXFx0XFx0Kz0gc3dwaHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNTpsaWJwaHktJChDT05GSUdfTEVEX1RSSUdHRVJfUEhZKVxcdCs9IHBoeV9sZWRfdHJpZ2dlcnMub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNjpsaWJwaHktJChDT05GSUdfT1BFTl9BTExJQU5DRV9IRUxQRVJTKSArPSBvcGVuX2FsbGlhbmNlX2hlbHBlcnMub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfUEhZTElOSylcXHRcXHQrPSBwaHlsaW5rLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1BIWUxJQilcXHRcXHQrPSBsaWJwaHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfUEhZTElCKVxcdFxcdCs9IG1kaW9fZGV2cmVzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDYuMjQ1NDE5NzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NDYxMTU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFVTQiBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGNvbmZpZ3VyaW5nIHRoaXMgbmV0d29yayBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBzb3J0ZWQgb3V0LiBGaXJzdCwgSSdtIGNvbmZpcm1pbmcgdGhhdCBgQ09ORklHX1BIWUxJQmAgaXMgZW5hYmxlZDsgdGhhdCdzIGEga2V5IHJlcXVpcmVtZW50LiBUaGVuLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgc21zYzk1eHhgIGRyaXZlciwgSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgYENPTkZJR19VU0JfTkVUX1NNU0M5NVhYYCBpcyBlbmFibGVkLiBUbyBkb3VibGUtY2hlY2sgdGhvc2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGl0IGxvb2tzIGxpa2UgYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYCBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4Nzc4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDE6MTQ6NDkuOTIwMDMzNzgzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjAwMTk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX05FVF9TTVNDOTVYWFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNDE9Y29uZmlnIFVTQl9ORVRfU01TQzc1WFhcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1MC1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNTE6Y29uZmlnIFVTQl9ORVRfU01TQzk1WFhcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNTItXFx0dHJpc3RhdGUgXFxcIlNNU0MgTEFOOTVYWCBiYXNlZCBVU0IgMi4wIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo0OS45NjIwNTUyODJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MjcxMjQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGZyYW1lZCBhcyBpZiBJJ20gd29ya2luZyB0aHJvdWdoIGl0IG15c2VsZjpcblxuKipOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIERlY2lzaW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYmFzZWQgb24gdGhlIG5ldHdvcmsgcmVxdWlyZW1lbnRzLCBgUEhZTElCYCBhbmQgYFVTQl9ORVRfU01TQzk1WFhgIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcyB0byBlbmFibGUuIFRob3NlIGNvdmVyIGEgYnJvYWQgcmFuZ2Ugb2YgUEhZIGFuZCBVU0IgbmV0d29yayBhZGFwdGVyIHNjZW5hcmlvcywgcmVzcGVjdGl2ZWx5LiBJIHRoaW5rIHRoYXQncyBhIHNvbGlkIHN0YXJ0LlxuXG5IbW0sIGJ1dCB3YWl0IGEgc2Vjb25kLi4uIGlzbid0IHRoZSBSZWFsdGVrIGRyaXZlciB1c2luZyBgQ09ORklHX1JFQUxURUtfTURJT2A/IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZS4gSSBkb24ndCB3YW50IHRvIG1pc3MgYW55dGhpbmcgY3J1Y2lhbC4gTGV0IG1lIGdvIHB1bGwgdXAgdGhlIGBkcml2ZXJzL25ldC9tZGlvL0tjb25maWdgIGZpbGUgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEp1c3QgdG8gYmUgc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueSByZWxldmFudCBSZWFsdGVrLXNwZWNpZmljIHNldHRpbmdzLCBvciBhbnkgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byB0YWtlIGNhcmUgb2YgYXMgd2VsbC4gVGhhdCBSZWFsdGVrIGRyaXZlciBtaWdodCBicmluZyBpbiBvdGhlciBjb25maWd1cmF0aW9ucy4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxMDcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwMToxNDo1My43NTQ3Njk5MDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTI5NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTE2Nj1jb25maWcgTURJT19JUFE4MDY0XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTczLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNzQ6Y29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3NS1cXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE0OjUzLjc5NjkwNTgxMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjQ5ODczNDk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBQSFkgQ29yZSBhbmQgUlRMOTMwMCBNRElPIENvbnRyb2xsZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYC4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciBhbiBSZWFsdGVrIFNvQywgc28gaXQgd29uJ3QgYmUgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCB3aXRob3V0IGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIGluY2x1ZGluZyBgTURJT19SRUFMVEVLX1JUTDkzMDBgIGluIGBFbmFibGVDb25maWdzYCB3b3J0aHdoaWxlPyBZZXMsIGFic29sdXRlbHkuIEl0J3MgdGhlIHByaW1hcnkgdGFyZ2V0IG9mIHRoZSBwYXRjaCwgYW5kIHdoaWxlIGl0IG1pZ2h0IG5vdCBiZSBkaXJlY3RseSBmdXp6ZWQsIGl0IGRvZXNuJ3QgaHVydCB0byBpbmNsdWRlIGl0LlxuXG5UaGUgcHJvbXB0IHNwZWNpZmllZCB0aGF0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIGFyZSBub3QgbGlrZWx5IHRvIGJlIGVtdWxhdGVkLiBCdXQgdGhpcyBgTURJT19SRUFMVEVLX1JUTDkzMDBgIGlzIG5vdCBhIFBDSWUgZGV2aWNlOyBpdCdzIGFuIE1NSU8gZGV2aWNlLCBhIHN5c2NvbiwgYW4gU29DIGJsb2NrLiBTbyBldmVuIHRob3VnaCBpdCdzIG5vdCBhIFBDSWUgZGV2aWNlLCB0aGUgcHJvbXB0IGlzIHN0aWxsIGFwcGxpY2FibGUgaWYgdGhlIGRldmljZSBpcyBub3QgaW5zdGFudGlhdGVkLiBcblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaWYgc3l6a2FsbGVyIGNhbiByZWFjaCBpdC4gSXQncyB1bmxpa2VseSBzeXprYWxsZXIgY2FuIGVhc2lseSBmdXp6IGl0IHVubGVzcyBpdCdzIGluc3RhbnRpYXRlZC4gSG93ZXZlciwgdGhlIGNvcmUgUEhZIGNoYW5nZXMgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBzbyB0aGF0J3MgdGhlIGFuZ2xlLlxuXG5UaHVzLCBJJ2xsIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLiBUaGUgY29yZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBrZXkgZnVuY3Rpb25zOiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIHN5bWJvbHMgYXJlIGV4cG9ydGVkLiBZZXMsIGBFWFBPUlRfU1lNQk9MKHBoeV9hdHRhY2hfZGlyZWN0KTtgIGlzIHVzZWQsIGFuZCBzaW1pbGFybHkgZm9yIGBwaHlfZGV0YWNoYC5cblxuVGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYGRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIElmIHRoZSBSZWFsdGVrIGRldmljZSAqd2VyZSogaW5zdGFudGlhdGVkIHNvbWVob3csIHRoZXJlIGFyZSBmdW5jdGlvbnMgaGVyZSB0aGF0IG1pZ2h0IGJlIGludGVyZXN0aW5nOiBgb3R0b19lbWRpb19wcm9iZWAsIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCwgYW5kIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoYC4gQnV0IHRoZSBTb0MgYmxvY2sgaW5zdGFudGlhdGlvbiBpcyB2ZXJ5IHVubGlrZWx5LCBzbyBJIHdpbGwgZm9jdXMgb24gdGhlIGNvcmUgUEhZIGZ1bmN0aW9ucy5cblxuSSByZXZpZXdlZCB0aGUgY2hhbmdlcyB0byBgcGh5X2RldmljZS5jYC4gVGhlIHBhdGNoIHJlZmFjdG9ycyBgcGh5X2RldGFjaGAgdG8gYF9fcGh5X2RldGFjaGAgYW5kIGFkZHMgYSBgbm90aWZ5X2J1c2AgcGFyYW1ldGVyLiBJdCBhbHNvIGNhbGxzIGBub3RpZnlfcGh5X2F0dGFjaGAgd2l0aGluIGBwaHlfYXR0YWNoX2RpcmVjdGAuIElmIGBub3RpZnlfcGh5X2F0dGFjaGAgZmFpbHMsIGl0IGNhbGxzIGBfX3BoeV9kZXRhY2gocGh5ZGV2LCBmYWxzZSlgIHRvIHJvbGxiYWNrLiBUaGlzIGlzIGEgc21hbGwgYnV0IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0uXG5cbkhvdyBvZnRlbiBpcyBgcGh5X2F0dGFjaF9kaXJlY3RgIGNhbGxlZD8gTm90IG9uIGEgaG90IHBhdGguIEl0J3MgY2FsbGVkIHdoZW4gYSBuZXR3b3JrIGludGVyZmFjZSBpcyBicm91Z2h0IHVwIChgaXAgbGluayBzZXQgZXRoMCB1cGApLiBTYWZlIHRvIGZvY3VzIG9uLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4gYENPTkZJR19QSFlMSUJgIGlzIHRyaXN0YXRlLiBgQ09ORklHX1VTQl9ORVRfU01TQzk1WFhgIGlzIGFsc28gdHJpc3RhdGUuIGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgIGlzIGFsc28gdHJpc3RhdGUuXG5cblRoZXJlZm9yZSwgaGVyZSBpcyB0aGUgc3RyYXRlZ3k6XG5cbiogICBgV29ydGhGdXp6aW5nOiB0cnVlYFxuKiAgIGBGb2N1c1N5bWJvbHM6IFtcInBoeV9hdHRhY2hfZGlyZWN0XCIsIFwicGh5X2RldGFjaFwiXWBcbiogICBgRW5hYmxlQ29uZmlnczogW1wiUEhZTElCXCIsIFwiVVNCX05FVF9TTVNDOTVYWFwiLCBcIk1ESU9fUkVBTFRFS19SVEw5MzAwXCJdYFxuKiAgIGBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGFkZHMgbm90aWZ5X3BoeV9hdHRhY2ggYW5kIG5vdGlmeV9waHlfZGV0YWNoIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIGFuZCBpbXBsZW1lbnRzIHRoZW0gaW4gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGRyaXZlci4gVGhlIGNvcmUgUEhZIGNoYW5nZXMgaW4gcGh5X2F0dGFjaF9kaXJlY3QgYW5kIHBoeV9kZXRhY2ggYXJlIHJlYWNoYWJsZSB2aWEgdmlydHVhbC9lbXVsYXRlZCBuZXR3b3JrIGRldmljZXMgKGUuZy4sIFVTQiBTTVNDOTV4eCkgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZXJyb3IgaGFuZGxpbmcgYW5kIGNhbGxiYWNrIGxvZ2ljIGlzIHJvYnVzdC5cImBcblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1NDQsIk91dHB1dFRva2VucyI6MTY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDAxOjE1OjA2LjI5NTY0MzcyN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzc5OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlVTQl9ORVRfU01TQzk1WFhcIixcbiAgICBcIk1ESU9fUkVBTFRFS19SVEw5MzAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5X2F0dGFjaF9kaXJlY3RcIixcbiAgICBcInBoeV9kZXRhY2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG5vdGlmeV9waHlfYXR0YWNoIGFuZCBub3RpZnlfcGh5X2RldGFjaCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbSBhbmQgaW1wbGVtZW50cyB0aGVtIGluIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIuIFRoZSBjb3JlIFBIWSBjaGFuZ2VzIGluIHBoeV9hdHRhY2hfZGlyZWN0IGFuZCBwaHlfZGV0YWNoIGFyZSByZWFjaGFibGUgdmlhIHZpcnR1YWwvZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzIChlLmcuLCBVU0IgU01TQzk1eHgpIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIGFuZCBjYWxsYmFjayBsb2dpYyBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEhZTElCXCIsXG4gICAgXCJVU0JfTkVUX1NNU0M5NVhYXCIsXG4gICAgXCJNRElPX1JFQUxURUtfUlRMOTMwMFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9hdHRhY2hfZGlyZWN0XCIsXG4gICAgXCJwaHlfZGV0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBub3RpZnlfcGh5X2F0dGFjaCBhbmQgbm90aWZ5X3BoeV9kZXRhY2ggY2FsbGJhY2tzIHRvIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0gYW5kIGltcGxlbWVudHMgdGhlbSBpbiB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gZHJpdmVyLiBUaGUgY29yZSBQSFkgY2hhbmdlcyBpbiBwaHlfYXR0YWNoX2RpcmVjdCBhbmQgcGh5X2RldGFjaCBhcmUgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsL2VtdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyAoZS5nLiwgVVNCIFNNU0M5NXh4KSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBlcnJvciBoYW5kbGluZyBhbmQgY2FsbGJhY2sgbG9naWMgaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl4lh[1] Phase: Succeeded StartedAt: 2026-07-31 01:15:17 +0000 UTC FinishedAt: 2026-07-31 01:15:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 01:15:17 +0000 UTC FinishedAt: 2026-07-31 01:15:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2] Phase: Succeeded StartedAt: 2026-07-31 01:15:17 +0000 UTC FinishedAt: 2026-07-31 02:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 01:15:17 +0000 UTC FinishedAt: 2026-07-31 02:51:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 01:15:17 +0000 UTC FinishedAt: 2026-07-31 01:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 01:15:17 +0000 UTC FinishedAt: 2026-07-31 01:15:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgl4lh/series-workflowgl4lh-convert-artifact-819564960/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 01:15:27 +0000 UTC FinishedAt: 2026-07-31 01:32:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 01:15:27 +0000 UTC FinishedAt: 2026-07-31 01:32:03 +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:*c49aa6d2-d36b-4c6a-9f43-0703b43e3de0,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-workflowgl4lh/series-workflowgl4lh-convert-artifact-819564960/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": "fb0c9ef9-41a4-4a03-a015-ee116f466ffd", "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-workflowgl4lh/series-workflowgl4lh-build-action-1212837990/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 01:15:27 +0000 UTC FinishedAt: 2026-07-31 01:31:53 +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:*c49aa6d2-d36b-4c6a-9f43-0703b43e3de0,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-workflowgl4lh/series-workflowgl4lh-convert-artifact-819564960/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": "fb0c9ef9-41a4-4a03-a015-ee116f466ffd", "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-workflowgl4lh/series-workflowgl4lh-build-action-1212837990/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 01:32:03 +0000 UTC FinishedAt: 2026-07-31 01:32:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 01:32:03 +0000 UTC FinishedAt: 2026-07-31 01:32:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 01:32:03 +0000 UTC FinishedAt: 2026-07-31 01:32:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 01:32:03 +0000 UTC FinishedAt: 2026-07-31 01:32:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgl4lh/series-workflowgl4lh-convert-artifact-3541614791/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 01:32:13 +0000 UTC FinishedAt: 2026-07-31 01:34:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 01:32:13 +0000 UTC FinishedAt: 2026-07-31 01:34:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fb0c9ef9-41a4-4a03-a015-ee116f466ffd,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-workflowgl4lh/series-workflowgl4lh-build-action-1212837990/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-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 01:34:32 +0000 UTC FinishedAt: 2026-07-31 01:34:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 01:34:32 +0000 UTC FinishedAt: 2026-07-31 01:34:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 01:34:32 +0000 UTC FinishedAt: 2026-07-31 01:56:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 01:34:32 +0000 UTC FinishedAt: 2026-07-31 01:56:26 +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:*c49aa6d2-d36b-4c6a-9f43-0703b43e3de0,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-workflowgl4lh/series-workflowgl4lh-convert-artifact-3541614791/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": "2686b970-0b66-4ee9-9551-a1ea97fd9276", "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-workflowgl4lh/series-workflowgl4lh-build-action-3019178059/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 01:34:32 +0000 UTC FinishedAt: 2026-07-31 01:56:16 +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:*c49aa6d2-d36b-4c6a-9f43-0703b43e3de0,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-workflowgl4lh/series-workflowgl4lh-convert-artifact-3541614791/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": "2686b970-0b66-4ee9-9551-a1ea97fd9276", "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-workflowgl4lh/series-workflowgl4lh-build-action-3019178059/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 01:56:26 +0000 UTC FinishedAt: 2026-07-31 01:56:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 01:56:26 +0000 UTC FinishedAt: 2026-07-31 01:56:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 01:56:26 +0000 UTC FinishedAt: 2026-07-31 01:58:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 01:56:26 +0000 UTC FinishedAt: 2026-07-31 01:58:38 +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:*2686b970-0b66-4ee9-9551-a1ea97fd9276,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-workflowgl4lh/series-workflowgl4lh-build-action-3019178059/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-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 01:58:53 +0000 UTC FinishedAt: 2026-07-31 02:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 01:58:53 +0000 UTC FinishedAt: 2026-07-31 02:51:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"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:*fb0c9ef9-41a4-4a03-a015-ee116f466ffd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2686b970-0b66-4ee9-9551-a1ea97fd9276,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-workflowgl4lh/series-workflowgl4lh-build-action-1212837990/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-workflowgl4lh/series-workflowgl4lh-build-action-3019178059/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 01:58:53 +0000 UTC FinishedAt: 2026-07-31 01:59:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 01:58:53 +0000 UTC FinishedAt: 2026-07-31 01:58:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"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-workflowgl4lh/series-workflowgl4lh-convert-artifact-75102368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 01:58:53 +0000 UTC FinishedAt: 2026-07-31 01:58:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 01:58:53 +0000 UTC FinishedAt: 2026-07-31 01:58:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 01:58:53 +0000 UTC FinishedAt: 2026-07-31 01:58:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 01:59:05 +0000 UTC FinishedAt: 2026-07-31 02:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgl4lh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_attach_direct","phy_detach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8e4d7d120734936cb961d9dc46b788e0487d3256","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","USB_NET_SMSC95XX","MDIO_REALTEK_RTL9300"],"series_id":"81a5b17e-5a14-4f62-ab18-7b22979166db","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 01:59:05 +0000 UTC FinishedAt: 2026-07-31 02:51:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fb0c9ef9-41a4-4a03-a015-ee116f466ffd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2686b970-0b66-4ee9-9551-a1ea97fd9276,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-workflowgl4lh/series-workflowgl4lh-build-action-1212837990/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-workflowgl4lh/series-workflowgl4lh-build-action-3019178059/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-workflowgl4lh/series-workflowgl4lh-convert-artifact-75102368/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,}