Name: series-workflowlg8s7 Phase: Succeeded StartedAt: 2026-06-24 18:36:10 +0000 UTC FinishedAt: 2026-06-24 22:41:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[0] Phase: Succeeded StartedAt: 2026-06-24 18:36:10 +0000 UTC FinishedAt: 2026-06-24 18:45:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[0].run-triage Phase: Succeeded StartedAt: 2026-06-24 18:36:10 +0000 UTC FinishedAt: 2026-06-24 18:45:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d87363b0edfc7504ff2b144fe4cdd8154f90f42e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "BONDING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d87363b0edfc7504ff2b144fe4cdd8154f90f42e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "BONDING" ], "series_id": "181fc8f6-6f07-4299-893b-0835ffdfaa53" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netdev_work_sched", "netdev_work_cancel", "netdev_work_proc", "netdev_work_run", "vlan_dev_work", "vlan_device_event" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI0IDE4OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7Qk9ORElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGRldl93b3JrX3NjaGVkJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfd29ya19wcm9jJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3J1biYjMzQ7LAogICAgJiMzNDt2bGFuX2Rldl93b3JrJiMzNDssCiAgICAmIzM0O3ZsYW5fZGV2aWNlX2V2ZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGFzeW5jaHJvbm91cyB3b3JrIG1lY2hhbmlzbSAoYG5ldGRldl93b3JrYCkgZm9yIG5ldHdvcmsgZGV2aWNlcyBhbmQgbW9kaWZpZXMgdGhlIFZMQU4gZHJpdmVyIHRvIHVzZSBpdCBmb3Igc3RhdGUgcHJvcGFnYXRpb24gKE1UVSwgZmVhdHVyZXMsIGxpbmsgc3RhdGUpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgbmVzdGVkIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG5ldHdvcmtpbmcgYW5kIFZMQU4gbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBtb2RpZnlpbmcgZGV2aWNlIHN0YXRlcyAoZS5nLiwgYnJpbmdpbmcgZGV2aWNlcyB1cC9kb3duLCBjaGFuZ2luZyBNVFUpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGFzeW5jaHJvbm91cyBtZWNoYW5pc20gZG9lc24mIzM5O3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIGNvbmN1cnJlbmN5IGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTg6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzN2UwOGU4YTEyZTNiNTU3MWZiNzdlM2U5OWQwY2YwNjE3NGE5YzFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTg6NDU6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XG5pbmRleCBmZGU2MDFhY2QxZDI1YS4uZDJhMjM4ZjhjYzhiOTEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxuQEAgLTQzMyw2ICYjNDM7NDMzLDggQEAgZXhjZXB0aW9ucykgbm90aWZpZXJzIHJ1biB1bmRlciB0aGUgaW5zdGFuY2UgbG9jay4gUGxlYXNlIGV4dGVuZCB0aGlzXG4gZG9jdW1lbnRhdGlvbiB3aGVuZXZlciB5b3UgbWFrZSBleHBsaWNpdCBhc3N1bXB0aW9uIGFib3V0IGxvY2sgYmVpbmcgaGVsZFxuIGZyb20gYSBub3RpZmllci5cbiBcbiYjNDM7RHJpdmVycyAqKm11c3Qgbm90KiogZ2VuZXJhdGUgbmVzdGVkIG5vdGlmaWNhdGlvbnMgb2YgdGhlIG9wcy1sb2NrZWQgdHlwZXMuXG4mIzQzO1xuIE5FVERFVl9JTlRFUk5BTCBzeW1ib2wgbmFtZXNwYWNlXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggYjY3YTEyNTQxZWFjMjguLjk5ODFkNjM3ZjhiNTQ2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTExMzEsNiAmIzQzOzExMzEsOSBAQCBzdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XG4gICpcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKS4gUmV0dXJuIDAgb24gc3VjY2VzcyBvciBhXG4gICpcdG5lZ2F0aXZlIGVycm5vIHRvIHJlcXVlc3QgYSByZXRyeSB2aWEgdGhlIGNvcmUgYmFja29mZi5cbiAgKlxuJiM0MzsgKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcbiYjNDM7ICpcdFJ1biBkZWZlcnJlZCB3b3JrIHNjaGVkdWxlZCB3aXRoIG5ldGRldl93b3JrX3NjaGVkKEBldmVudHMpLlxuJiM0MzsgKlxuICAqIGludCAoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpO1xuICAqXHRUaGlzIGZ1bmN0aW9uICBpcyBjYWxsZWQgd2hlbiB0aGUgTWVkaWEgQWNjZXNzIENvbnRyb2wgYWRkcmVzc1xuICAqXHRuZWVkcyB0byBiZSBjaGFuZ2VkLiBJZiB0aGlzIGludGVyZmFjZSBpcyBub3QgZGVmaW5lZCwgdGhlXG5AQCAtMTQ2MCw2ICYjNDM7MTQ2Myw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XG4gXHRcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcbiBcdFx0XHRcdFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKTtcbiYjNDM7XHR2b2lkXHRcdFx0KCpuZG9fd29yaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGV2ZW50cyk7XG4gXHRpbnRcdFx0XHQoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdFx0ICAgICAgIHZvaWQgKmFkZHIpO1xuIFx0aW50XHRcdFx0KCpuZG9fdmFsaWRhdGVfYWRkcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5AQCAtMTkzMCw4ICYjNDM7MTkzNSwxMSBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuICAqXHRcdFx0XHRoYXMgYmVlbiBlbmFibGVkIGR1ZSB0byB0aGUgbmVlZCB0byBsaXN0ZW4gdG9cbiAgKlx0XHRcdFx0YWRkaXRpb25hbCB1bmljYXN0IGFkZHJlc3NlcyBpbiBhIGRldmljZSB0aGF0XG4gICpcdFx0XHRcdGRvZXMgbm90IGltcGxlbWVudCBuZG9fc2V0X3J4X21vZGUoKVxuLSAqXHRAcnhfbW9kZV9ub2RlOlx0XHRMaXN0IGVudHJ5IGZvciByeF9tb2RlIHdvcmsgcHJvY2Vzc2luZ1xuLSAqXHRAcnhfbW9kZV90cmFja2VyOlx0UmVmY291bnQgdHJhY2tlciBmb3IgcnhfbW9kZSB3b3JrXG4mIzQzOyAqXHRAd29ya19ub2RlOlx0XHRMaXN0IGVudHJ5IGZvciBhc3luYyBuZXRkZXZfd29yayBwcm9jZXNzaW5nXG4mIzQzOyAqXHRAd29ya190cmFja2VyOlx0XHRSZWZjb3VudCB0cmFja2VyIGZvciBhc3luYyBuZXRkZXZfd29ya1xuJiM0MzsgKlx0QHdvcmtfcGVuZGluZzpcdFx0RHJpdmVyLWRlZmluZWQgcGVuZGluZyBuZXRkZXZfd29yaywgcGFzc2VkIHRvXG4mIzQzOyAqXHRcdFx0XHRuZG9fd29yaygpIChzZWUgbmV0ZGV2X3dvcmtfc2NoZWQoKSlcbiYjNDM7ICpcdEB3b3JrX2NvcmVfcGVuZGluZzpcdENvcmUtZGVmaW5lZCBwZW5kaW5nIG5ldGRldl93b3JrIChORVRERVZfV09SS18qKVxuICAqXHRAcnhfbW9kZV9hZGRyX2NhY2hlOlx0UmVjeWNsZWQgc25hcHNob3QgZW50cmllcyBmb3IgcnhfbW9kZSB3b3JrXG4gICpcdEByeF9tb2RlX3JldHJ5X3RpbWVyOlx0VGltZXIgdGhhdCByZS1xdWV1ZXMgcnhfbW9kZSB3b3JrIGFmdGVyIGZhaWx1cmVcbiAgKlx0QHJ4X21vZGVfcmV0cnlfY291bnQ6XHROdW1iZXIgb2YgY29uc2VjdXRpdmUgcmV0cmllcyBhbHJlYWR5IHNjaGVkdWxlZFxuQEAgLTIzMjYsOCAmIzQzOzIzMzQsMTAgQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50XHRcdHByb21pc2N1aXR5O1xuIFx0dW5zaWduZWQgaW50XHRcdGFsbG11bHRpO1xuIFx0Ym9vbFx0XHRcdHVjX3Byb21pc2M7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkXHRyeF9tb2RlX25vZGU7XG4tXHRuZXRkZXZpY2VfdHJhY2tlclx0cnhfbW9kZV90cmFja2VyO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdHdvcmtfbm9kZTtcbiYjNDM7XHRuZXRkZXZpY2VfdHJhY2tlclx0d29ya190cmFja2VyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0d29ya19wZW5kaW5nO1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0d29ya19jb3JlX3BlbmRpbmc7XG4gXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdFx0cnhfbW9kZV9hZGRyX2NhY2hlO1xuIFx0c3RydWN0IHRpbWVyX2xpc3RcdHJ4X21vZGVfcmV0cnlfdGltZXI7XG4gXHR1bnNpZ25lZCBpbnRcdFx0cnhfbW9kZV9yZXRyeV9jb3VudDtcbkBAIC01MTc2LDYgJiM0Mzs1MTg2LDkgQEAgdm9pZCBkZXZfZmV0Y2hfc3dfbmV0c3RhdHMoc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzLFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzIF9fcGVyY3B1ICpuZXRzdGF0cyk7XG4gdm9pZCBkZXZfZ2V0X3RzdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqcyk7XG4gXG4mIzQzO3ZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spO1xuJiM0MztcbiBlbnVtIHtcbiBcdE5FU1RFRF9TWU5DX0lNTV9CSVQsXG4gXHRORVNURURfU1lOQ19UT0RPX0JJVCxcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uY1xuaW5kZXggMmI3NGVkNTZlYjE2NmQuLjJkMmVmYjg3Nzk3NWQ1IDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0LzgwMjFxL3ZsYW4uY1xuQEAgLTc3LDkgJiM0Mzs3Nyw5IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RkZXYsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pXG4mIzQzO3ZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbilcbiB7XG4gXHRpZiAoISh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfQlJJREdFX0JJTkRJTkcpKVxuIFx0XHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpO1xuQEAgLTMxNiwyOSAmIzQzOzMxNiw2IEBAIHN0YXRpYyB2b2lkIHZsYW5fc3luY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRldGhlcl9hZGRyX2NvcHkodmxhbi1cdTAwM2VyZWFsX2Rldl9hZGRyLCBkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldilcbi17XG4tXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XG4tXG4tXHRuZXRpZl9pbmhlcml0X3Rzb19tYXgodmxhbmRldiwgZGV2KTtcbi1cbi1cdGlmICh2bGFuX2h3X29mZmxvYWRfY2FwYWJsZShkZXYtXHUwMDNlZmVhdHVyZXMsIHZsYW4tXHUwMDNldmxhbl9wcm90bykpXG4tXHRcdHZsYW5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbi1cdGVsc2Vcbi1cdFx0dmxhbmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7IFZMQU5fSExFTjtcbi1cbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfRkNPRSlcbi1cdHZsYW5kZXYtXHUwMDNlZmNvZV9kZHBfeGlkID0gZGV2LVx1MDAzZWZjb2VfZGRwX3hpZDtcbi0jZW5kaWZcbi1cbi1cdHZsYW5kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfWE1JVF9EU1RfUkVMRUFTRTtcbi1cdHZsYW5kZXYtXHUwMDNlcHJpdl9mbGFncyB8PSAodmxhbi1cdTAwM2VyZWFsX2Rldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBJRkZfWE1JVF9EU1RfUkVMRUFTRSk7XG4tXHR2bGFuZGV2LVx1MDAzZWh3X2VuY19mZWF0dXJlcyA9IHZsYW5fdG5sX2ZlYXR1cmVzKHZsYW4tXHUwMDNlcmVhbF9kZXYpO1xuLVxuLVx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyh2bGFuZGV2KTtcbi19XG4tXG4gc3RhdGljIGludCBfX3ZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpXG4ge1xuIFx0aW50IGVyciA9IDA7XG5AQCAtMzkxLDEzICYjNDM7MzY4LDExIEBAIHN0YXRpYyB2b2lkIHZsYW5fdmlkMF9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW50IHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuIFx0XHRcdCAgICAgdm9pZCAqcHRyKVxuIHtcbi1cdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2V4dGFjayhwdHIpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFx0c3RydWN0IHZsYW5fZ3JvdXAgKmdycDtcbiBcdHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbztcbiBcdGludCBpLCBmbGdzO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXY7XG4tXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbjtcbiBcdGJvb2wgbGFzdCA9IGZhbHNlO1xuIFx0TElTVF9IRUFEKGxpc3QpO1xuIFx0aW50IGVycjtcbkBAIC00NDcsNTQgJiM0Mzs0MjIsMTkgQEAgc3RhdGljIGludCB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCxcbiBcdFx0XHRpZiAodmxhbmRldi1cdTAwM2VtdHUgXHUwMDNjPSBkZXYtXHUwMDNlbXR1KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0ZGV2X3NldF9tdHUodmxhbmRldiwgZGV2LVx1MDAzZW10dSk7XG4mIzQzO1x0XHRcdG5ldGRldl93b3JrX3NjaGVkKHZsYW5kZXYsIFZMQU5fV09SS19NVFUpO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBORVRERVZfRkVBVF9DSEFOR0U6XG4tXHRcdC8qIFByb3BhZ2F0ZSBkZXZpY2UgZmVhdHVyZXMgdG8gdW5kZXJseWluZyBkZXZpY2UgKi9cbiBcdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KVxuLVx0XHRcdHZsYW5fdHJhbnNmZXJfZmVhdHVyZXMoZGV2LCB2bGFuZGV2KTtcbiYjNDM7XHRcdFx0bmV0ZGV2X3dvcmtfc2NoZWQodmxhbmRldiwgVkxBTl9XT1JLX0ZFQVRVUkVTKTtcbiBcdFx0YnJlYWs7XG4gXG4tXHRjYXNlIE5FVERFVl9ET1dOOiB7XG4tXHRcdHN0cnVjdCBuZXRfZGV2aWNlICp0bXA7XG4tXHRcdExJU1RfSEVBRChjbG9zZV9saXN0KTtcbi1cbi1cdFx0LyogUHV0IGFsbCBWTEFOcyBmb3IgdGhpcyBkZXYgaW4gdGhlIGRvd24gc3RhdGUgdG9vLiAgKi9cbi1cdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KSB7XG4tXHRcdFx0ZmxncyA9IHZsYW5kZXYtXHUwMDNlZmxhZ3M7XG4tXHRcdFx0aWYgKCEoZmxncyBcdTAwMjYgSUZGX1VQKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdHZsYW4gPSB2bGFuX2Rldl9wcml2KHZsYW5kZXYpO1xuLVx0XHRcdGlmICghKHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFZMQU5fRkxBR19MT09TRV9CSU5ESU5HKSlcbi1cdFx0XHRcdGxpc3RfYWRkKFx1MDAyNnZsYW5kZXYtXHUwMDNlY2xvc2VfbGlzdCwgXHUwMDI2Y2xvc2VfbGlzdCk7XG4tXHRcdH1cbi1cbi1cdFx0bmV0aWZfY2xvc2VfbWFueShcdTAwMjZjbG9zZV9saXN0LCBmYWxzZSk7XG4tXG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuZGV2LCB0bXAsIFx1MDAyNmNsb3NlX2xpc3QsIGNsb3NlX2xpc3QpIHtcbi1cdFx0XHR2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGRldiwgdmxhbmRldixcbi1cdFx0XHRcdFx0XHRcdHZsYW5fZGV2X3ByaXYodmxhbmRldikpO1xuLVx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2dmxhbmRldi1cdTAwM2VjbG9zZV9saXN0KTtcbi1cdFx0fVxuLVx0XHRsaXN0X2RlbChcdTAwMjZjbG9zZV9saXN0KTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4mIzQzO1x0Y2FzZSBORVRERVZfRE9XTjpcbiBcdGNhc2UgTkVUREVWX1VQOlxuLVx0XHQvKiBQdXQgYWxsIFZMQU5zIGZvciB0aGlzIGRldiBpbiB0aGUgdXAgc3RhdGUgdG9vLiAgKi9cbi1cdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KSB7XG4tXHRcdFx0ZmxncyA9IG5ldGlmX2dldF9mbGFncyh2bGFuZGV2KTtcbi1cdFx0XHRpZiAoZmxncyBcdTAwMjYgSUZGX1VQKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0dmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XG4tXHRcdFx0aWYgKCEodmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgVkxBTl9GTEFHX0xPT1NFX0JJTkRJTkcpKVxuLVx0XHRcdFx0ZGV2X2NoYW5nZV9mbGFncyh2bGFuZGV2LCBmbGdzIHwgSUZGX1VQLFxuLVx0XHRcdFx0XHRcdCBleHRhY2spO1xuLVx0XHRcdHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoZGV2LCB2bGFuZGV2LCB2bGFuKTtcbi1cdFx0fVxuJiM0MztcdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KVxuJiM0MztcdFx0XHRuZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfTElOS19TVEFURSk7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaFxuaW5kZXggYzdmZmU1OTFkNTkzNjYuLmM0MWNhYWY5NDA5NWYzIDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0LzgwMjFxL3ZsYW4uaFxuQEAgLTEyNSw2ICYjNDM7MTI1LDE3IEBAIHN0YXRpYyBpbmxpbmUgbmV0ZGV2X2ZlYXR1cmVzX3Qgdmxhbl90bmxfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2KVxuIGludCB2bGFuX2ZpbHRlcl9wdXNoX3ZpZHMoc3RydWN0IHZsYW5faW5mbyAqdmxhbl9pbmZvLCBfX2JlMTYgcHJvdG8pO1xuIHZvaWQgdmxhbl9maWx0ZXJfZHJvcF92aWRzKHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbywgX19iZTE2IHByb3RvKTtcbiBcbiYjNDM7LyogbmV0ZGV2X3dvcmsgZXZlbnRzIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcmVhbCBkZXZpY2UsIHNlZSB2bGFuX2Rldl93b3JrKCkuICovXG4mIzQzO2VudW0ge1xuJiM0MztcdFZMQU5fV09SS19MSU5LX1NUQVRFXHQ9IEJJVCgwKSwgLyogc3luYyB1cC9kb3duIHdpdGggcmVhbF9kZXYgKi9cbiYjNDM7XHRWTEFOX1dPUktfTVRVXHRcdD0gQklUKDEpLCAvKiBjbGFtcCBtdHUgdG8gcmVhbF9kZXYmIzM5O3MgKi9cbiYjNDM7XHRWTEFOX1dPUktfRkVBVFVSRVNcdD0gQklUKDIpLCAvKiByZS1pbmhlcml0IHJlYWxfZGV2IGZlYXR1cmVzICovXG4mIzQzO307XG4mIzQzO1xuJiM0Mzt2b2lkIHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pO1xuJiM0MztcbiAvKiBmb3VuZCBpbiB2bGFuX2Rldi5jICovXG4gdm9pZCB2bGFuX2Rldl9zZXRfaW5ncmVzc19wcmlvcml0eShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgdTMyIHNrYl9wcmlvLCB1MTYgdmxhbl9wcmlvKTtcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jXG5pbmRleCA3YWEzYWY4YjEwZWFkMC4uZWMyNTY5YjNmOGRhYzYgMTAwNjQ0XG4tLS0gYS9uZXQvODAyMXEvdmxhbl9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmNcbkBAIC0yNzAsNiAmIzQzOzI3MCw5IEBAIHN0YXRpYyBpbnQgdmxhbl9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ICAgICEodmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgVkxBTl9GTEFHX0xPT1NFX0JJTkRJTkcpKVxuIFx0XHRyZXR1cm4gLUVORVRET1dOO1xuIFxuJiM0MztcdC8qIFRoZSBleHBsaWNpdCBvcGVuIHN1cGVyc2VkZXMgYW55IGRlZmVycmVkIGxpbmstc3RhdGUgc3luYyAqL1xuJiM0MztcdG5ldGRldl93b3JrX2NhbmNlbChkZXYsIFZMQU5fV09SS19MSU5LX1NUQVRFKTtcbiYjNDM7XG4gXHRpZiAoIWV0aGVyX2FkZHJfZXF1YWwoZGV2LVx1MDAzZWRldl9hZGRyLCByZWFsX2Rldi1cdTAwM2VkZXZfYWRkcikgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXZsYW5fZGV2X2luaGVyaXRfYWRkcmVzcyhkZXYsIHJlYWxfZGV2KSkge1xuIFx0XHRlcnIgPSBkZXZfdWNfYWRkKHJlYWxfZGV2LCBkZXYtXHUwMDNlZGV2X2FkZHIpO1xuQEAgLTMwMCw2ICYjNDM7MzAzLDkgQEAgc3RhdGljIGludCB2bGFuX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tXHUwMDNlcmVhbF9kZXY7XG4gXG4mIzQzO1x0LyogVGhlIGV4cGxpY2l0IGNsb3NlIHN1cGVyc2VkZXMgYW55IGRlZmVycmVkIGxpbmstc3RhdGUgc3luYyAqL1xuJiM0MztcdG5ldGRldl93b3JrX2NhbmNlbChkZXYsIFZMQU5fV09SS19MSU5LX1NUQVRFKTtcbiYjNDM7XG4gXHRkZXZfbWNfdW5zeW5jKHJlYWxfZGV2LCBkZXYpO1xuIFx0ZGV2X3VjX3Vuc3luYyhyZWFsX2RldiwgZGV2KTtcbiBcbkBAIC0xMDE2LDYgJiM0MzsxMDIyLDU5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdmxhbl9ldGh0b29sX29wcyA9IHtcbiBcdC5nZXRfdHNfaW5mb1x0XHQ9IHZsYW5fZXRodG9vbF9nZXRfdHNfaW5mbyxcbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCB2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XG4mIzQzO1xuJiM0MztcdG5ldGlmX2luaGVyaXRfdHNvX21heCh2bGFuZGV2LCBkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAodmxhbl9od19vZmZsb2FkX2NhcGFibGUoZGV2LVx1MDAzZWZlYXR1cmVzLCB2bGFuLVx1MDAzZXZsYW5fcHJvdG8pKVxuJiM0MztcdFx0dmxhbmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZsYW5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyBWTEFOX0hMRU47XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfRkNPRSlcbiYjNDM7XHR2bGFuZGV2LVx1MDAzZWZjb2VfZGRwX3hpZCA9IGRldi1cdTAwM2VmY29lX2RkcF94aWQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHR2bGFuZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2PSB+SUZGX1hNSVRfRFNUX1JFTEVBU0U7XG4mIzQzO1x0dmxhbmRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9ICh2bGFuLVx1MDAzZXJlYWxfZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9YTUlUX0RTVF9SRUxFQVNFKTtcbiYjNDM7XHR2bGFuZGV2LVx1MDAzZWh3X2VuY19mZWF0dXJlcyA9IHZsYW5fdG5sX2ZlYXR1cmVzKHZsYW4tXHUwMDNlcmVhbF9kZXYpO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKHZsYW5kZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2bGFuX2Rldl93b3JrKHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdih2bGFuZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLVx1MDAzZXJlYWxfZGV2O1xuJiM0MztcdGJvb2wgbG9vc2UgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfTE9PU0VfQklORElORztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxncztcbiYjNDM7XG4mIzQzO1x0aWYgKGV2ZW50cyBcdTAwMjYgVkxBTl9XT1JLX0xJTktfU1RBVEUpIHtcbiYjNDM7XHRcdGZsZ3MgPSBuZXRpZl9nZXRfZmxhZ3ModmxhbmRldik7XG4mIzQzO1x0XHRpZiAocmVhbF9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkge1xuJiM0MztcdFx0XHRpZiAoIShmbGdzIFx1MDAyNiBJRkZfVVApKSB7XG4mIzQzO1x0XHRcdFx0aWYgKCFsb29zZSlcbiYjNDM7XHRcdFx0XHRcdG5ldGlmX2NoYW5nZV9mbGFncyh2bGFuZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIGZsZ3MgfCBJRkZfVVAsIE5VTEwpO1xuJiM0MztcdFx0XHRcdHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocmVhbF9kZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHR2bGFuZGV2LCB2bGFuKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIGlmICgoZmxncyBcdTAwMjYgSUZGX1VQKSBcdTAwMjZcdTAwMjYgIWxvb3NlKSB7XG4mIzQzO1x0XHRcdG5ldGlmX2NoYW5nZV9mbGFncyh2bGFuZGV2LCBmbGdzIFx1MDAyNiB+SUZGX1VQLCBOVUxMKTtcbiYjNDM7XHRcdFx0dmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyZWFsX2RldiwgdmxhbmRldiwgdmxhbik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoKGV2ZW50cyBcdTAwMjYgVkxBTl9XT1JLX01UVSkgXHUwMDI2XHUwMDI2IHZsYW5kZXYtXHUwMDNlbXR1IFx1MDAzZSByZWFsX2Rldi1cdTAwM2VtdHUpXG4mIzQzO1x0XHRuZXRpZl9zZXRfbXR1KHZsYW5kZXYsIHJlYWxfZGV2LVx1MDAzZW10dSk7XG4mIzQzO1xuJiM0MztcdGlmIChldmVudHMgXHUwMDI2IFZMQU5fV09SS19GRUFUVVJFUylcbiYjNDM7XHRcdHZsYW5fdHJhbnNmZXJfZmVhdHVyZXMocmVhbF9kZXYsIHZsYW5kZXYpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gdmxhbl9kZXZfY2hhbmdlX210dSxcbiBcdC5uZG9faW5pdFx0XHQ9IHZsYW5fZGV2X2luaXQsXG5AQCAtMTAyNyw2ICYjNDM7MTA4Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gdmxhbl9kZXZfc2V0X21hY19hZGRyZXNzLFxuIFx0Lm5kb19zZXRfcnhfbW9kZVx0PSB2bGFuX2Rldl9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fY2hhbmdlX3J4X2ZsYWdzXHQ9IHZsYW5fZGV2X2NoYW5nZV9yeF9mbGFncyxcbiYjNDM7XHQubmRvX3dvcmtcdFx0PSB2bGFuX2Rldl93b3JrLFxuIFx0Lm5kb19ldGhfaW9jdGxcdFx0PSB2bGFuX2Rldl9pb2N0bCxcbiBcdC5uZG9fbmVpZ2hfc2V0dXBcdD0gdmxhbl9kZXZfbmVpZ2hfc2V0dXAsXG4gXHQubmRvX2dldF9zdGF0czY0XHQ9IHZsYW5fZGV2X2dldF9zdGF0czY0LFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGVcbmluZGV4IGRjMTdjNWE2MWU5YTRhLi5iM2ZkY2I0ZTM1NWZhNiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9NYWtlZmlsZVxuQEAgLTEzLDcgJiM0MzsxMyw3IEBAIG9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbiBcdFx0XHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxuIFx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbiBcdFx0XHRmaWJfbm90aWZpZXIubyB4ZHAubyBmbG93X29mZmxvYWQubyBncm8ubyBcXFxuLVx0XHRcdG5ldGRldi1nZW5sLm8gbmV0ZGV2LWdlbmwtZ2VuLm8gZ3NvLm9cbiYjNDM7XHRcdFx0bmV0ZGV2LWdlbmwubyBuZXRkZXYtZ2VubC1nZW4ubyBuZXRkZXZfd29yay5vIGdzby5vXG4gXG4gb2JqLSQoQ09ORklHX05FVERFVl9BRERSX0xJU1RfVEVTVCkgJiM0Mzs9IGRldl9hZGRyX2xpc3RzX3Rlc3Qub1xuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDVjMDFkZmFhNmM0NDUwLi40YjNkNWNmZGY2ZTAwZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTk4MjIsNiAmIzQzOzk4MjIsNyBAQCBpbnQgbmV0aWZfY2hhbmdlX2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmbGFncyxcbiBcdF9fZGV2X25vdGlmeV9mbGFncyhkZXYsIG9sZF9mbGFncywgY2hhbmdlcywgMCwgTlVMTCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTChuZXRpZl9jaGFuZ2VfZmxhZ3MpO1xuIFxuIGludCBfX25ldGlmX3NldF9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuQEAgLTEyMDkzLDYgJiM0MzsxMjA5NCw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VwdHlwZV9hbGwpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXB0eXBlX3NwZWNpZmljKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VuZXRfbm90aWZpZXJfbGlzdCk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSk7XG4gI2lmZGVmIENPTkZJR19ORVRfU0NIRURcbiBcdGhhc2hfaW5pdChkZXYtXHUwMDNlcWRpc2NfaGFzaCk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmggYi9uZXQvY29yZS9kZXYuaFxuaW5kZXggNDEyMWM1MGU3Yzg4YmUuLjVkMGIwMzA1ZDNiYWFmIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5oXG5AQCAtMTY3LDEwICYjNDM7MTY3LDE5IEBAIGludCBkZXZfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcik7XG4gdm9pZCBfX2Rldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgX19kZXZfc2V0X3Byb21pc2N1aXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMsIGJvb2wgbm90aWZ5KTtcbiB2b2lkIG5ldGlmX3J4X21vZGVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi1ib29sIG5ldGlmX3J4X21vZGVfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBuZXRpZl9yeF9tb2RlX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBuZXRpZl9yeF9tb2RlX2NhbmNlbF9yZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBcbiYjNDM7LyogRXZlbnRzIGZvciB0aGUgYXN5bmMgbmV0ZGV2IHdvcmssIHRyYWNrZWQgaW4gbmV0ZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nLiAqL1xuJiM0MztlbnVtIG5ldGRldl93b3JrX2NvcmUge1xuJiM0MztcdE5FVERFVl9XT1JLX1JYX01PREVcdD0gQklUKDApLFx0LyogcnVuIHRoZSByeF9tb2RlIHVwZGF0ZSAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZCBfX25ldGRldl93b3JrX2NvcmVfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCk7XG4mIzQzO3Vuc2lnbmVkIGxvbmdcbiYjNDM7X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spO1xuJiM0MztcbiB2b2lkIF9fZGV2X25vdGlmeV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2xkX2ZsYWdzLFxuIFx0XHRcdHVuc2lnbmVkIGludCBnY2hhbmdlcywgdTMyIHBvcnRpZCxcbiBcdFx0XHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcbmluZGV4IGUxN2Y2NGE2NWUxN2JlLi4wODUyOGNhMGE4YjMxNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcbkBAIC0xMiwxNyAmIzQzOzEyLDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtkZXYuaFwmIzM0O1xuIFxuLXN0YXRpYyB2b2lkIG5ldGRldl9yeF9tb2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbi1cbi1zdGF0aWMgTElTVF9IRUFEKHJ4X21vZGVfbGlzdCk7XG4tc3RhdGljIERFRklORV9TUElOTE9DSyhyeF9tb2RlX2xvY2spO1xuLXN0YXRpYyBERUNMQVJFX1dPUksocnhfbW9kZV93b3JrLCBuZXRkZXZfcnhfbW9kZV93b3JrKTtcbi1cbiAvKlxuICAqIEdlbmVyYWwgbGlzdCBoYW5kbGluZyBmdW5jdGlvbnNcbiAgKi9cbkBAIC0xMjgxLDcgJiM0MzsxMjc0LDcgQEAgdm9pZCBuZXRpZl9yeF9tb2RlX2NhbmNlbF9yZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZXJ4X21vZGVfcmV0cnlfY291bnQgPSAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt2b2lkIG5ldGlmX3J4X21vZGVfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgdWNfc25hcCwgbWNfc25hcCwgdWNfcmVmLCBtY19yZWY7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuQEAgLTEzMzksNDkgJiM0MzsxMzMyLDkgQEAgc3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgbmV0ZGV2X3J4X21vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbi1cbi1cdHJ0bmxfbG9jaygpO1xuLVxuLVx0d2hpbGUgKHRydWUpIHtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4X21vZGVfbG9jayk7XG4tXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnJ4X21vZGVfbGlzdCkpIHtcbi1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZyeF9tb2RlX2xvY2spO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2cnhfbW9kZV9saXN0LCBzdHJ1Y3QgbmV0X2RldmljZSxcbi1cdFx0XHRcdCAgICAgICByeF9tb2RlX25vZGUpO1xuLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX25vZGUpO1xuLVx0XHQvKiBXZSBtdXN0IGZyZWUgbmV0ZGV2IHRyYWNrZXIgdW5kZXJcbi1cdFx0ICogdGhlIHNwaW5sb2NrIHByb3RlY3Rpb24uXG4tXHRcdCAqL1xuLVx0XHRuZXRkZXZfdHJhY2tlcl9mcmVlKGRldiwgXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfdHJhY2tlcik7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4X21vZGVfbG9jayk7XG4tXG4tXHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuLVx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuLVx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuLVx0XHQvKiBVc2UgX19kZXZfcHV0KCkgYmVjYXVzZSBuZXRkZXZfdHJhY2tlcl9mcmVlKCkgd2FzIGFscmVhZHlcbi1cdFx0ICogY2FsbGVkIGFib3ZlLiBNdXN0IGJlIGFmdGVyIG5ldGRldl91bmxvY2tfb3BzKCkgdG8gcHJldmVudFxuLVx0XHQgKiBuZXRkZXZfcnVuX3RvZG8oKSBmcm9tIGZyZWVpbmcgdGhlIGRldmljZSB3aGlsZSBzdGlsbCBpbiB1c2UuXG4tXHRcdCAqL1xuLVx0XHRfX2Rldl9wdXQoZGV2KTtcbi1cdH1cbi1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2cnhfbW9kZV9sb2NrKTtcbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX25vZGUpKSB7XG4tXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfbm9kZSwgXHUwMDI2cnhfbW9kZV9saXN0KTtcbi1cdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV90cmFja2VyLCBHRlBfQVRPTUlDKTtcbi1cdH1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4X21vZGVfbG9jayk7XG4tXHRzY2hlZHVsZV93b3JrKFx1MDAyNnJ4X21vZGVfd29yayk7XG4mIzQzO1x0X19uZXRkZXZfd29ya19jb3JlX3NjaGVkKGRldiwgTkVUREVWX1dPUktfUlhfTU9ERSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcmV0cnkoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5AQCAtMTM5NCw3ICYjNDM7MTM0Nyw2IEBAIHN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcmV0cnkoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXG4gdm9pZCBuZXRpZl9yeF9tb2RlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9ub2RlKTtcbiBcdF9faHdfYWRkcl9pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfcmV0cnlfdGltZXIsIG5ldGlmX3J4X21vZGVfcmV0cnksIDApO1xuIH1cbkBAIC0xNDQyLDI0ICYjNDM7MTM5NCw2IEBAIHZvaWQgZGV2X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuIH1cbiBcbi1ib29sIG5ldGlmX3J4X21vZGVfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi17XG4tXHRib29sIGNsZWFuID0gZmFsc2U7XG4tXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2cnhfbW9kZV9sb2NrKTtcbi1cdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9ub2RlKSkge1xuLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX25vZGUpO1xuLVx0XHRjbGVhbiA9IHRydWU7XG4tXHRcdC8qIFdlIG11c3QgcmVsZWFzZSBuZXRkZXYgdHJhY2tlciB1bmRlclxuLVx0XHQgKiB0aGUgc3BpbmxvY2sgcHJvdGVjdGlvbi5cbi1cdFx0ICovXG4tXHRcdG5ldGRldl90cmFja2VyX2ZyZWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV90cmFja2VyKTtcbi1cdH1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4X21vZGVfbG9jayk7XG4tXG4tXHRyZXR1cm4gY2xlYW47XG4tfVxuLVxuIC8qKlxuICAqIG5ldGlmX3J4X21vZGVfc3luYygpIC0gc3luYyByeCBtb2RlIGlubGluZVxuICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlXG5AQCAtMTQ3MywxMSAmIzQzOzE0MDcsNiBAQCBib29sIG5ldGlmX3J4X21vZGVfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgKi9cbiB2b2lkIG5ldGlmX3J4X21vZGVfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdGlmIChuZXRpZl9yeF9tb2RlX2NsZWFuKGRldikpIHtcbiYjNDM7XHRpZiAoX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpKVxuIFx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuLVx0XHQvKiBVc2UgX19kZXZfcHV0KCkgYmVjYXVzZSBuZXRkZXZfdHJhY2tlcl9mcmVlKCkgd2FzIGFscmVhZHlcbi1cdFx0ICogY2FsbGVkIGluc2lkZSBuZXRpZl9yeF9tb2RlX2NsZWFuKCkuXG4tXHRcdCAqL1xuLVx0XHRfX2Rldl9wdXQoZGV2KTtcbi1cdH1cbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuYyBiL25ldC9jb3JlL25ldGRldl93b3JrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzEwOWZhZTEzMmFkMThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldGRldl93b3JrLmNcbkBAIC0wLDAgJiM0MzsxLDE2MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2Rldi5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4mIzQzO1xuJiM0MzsvKiBAbmV0ZGV2X3dvcmtfbG9jayBwcm90ZWN0czpcbiYjNDM7ICogIC0gQG5ldGRldl93b3JrX2xpc3RcbiYjNDM7ICogIC0gd2l0aGluIHRoZSBsaXN0IGVudHJpZXMgKHN0cnVjdCBuZXRfZGV2aWNlIGZpZWxkcyk6XG4mIzQzOyAqXHQtIHdvcmtfbm9kZVxuJiM0MzsgKlx0LSB3b3JrX3RyYWNrZXJcbiYjNDM7ICpcdC0gd29ya19wZW5kaW5nXG4mIzQzOyAqXHQtIHdvcmtfY29yZV9wZW5kaW5nXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgTElTVF9IRUFEKG5ldGRldl93b3JrX2xpc3QpO1xuJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5ldGRldl93b3JrX2xvY2spO1xuJiM0MztzdGF0aWMgREVDTEFSRV9XT1JLKG5ldGRldl93b3JrLCBuZXRkZXZfd29ya19wcm9jKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG5ldGRldl93b3JrX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBjb3JlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFldmVudHMgXHUwMDI2XHUwMDI2ICFjb3JlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4mIzQzO1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkpIHtcbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSwgXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCk7XG4mIzQzO1x0XHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuJiM0MztcdH1cbiYjNDM7XHRkZXYtXHUwMDNld29ya19wZW5kaW5nIHw9IGV2ZW50cztcbiYjNDM7XHRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcgfD0gY29yZTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0c2NoZWR1bGVfd29yayhcdTAwMjZuZXRkZXZfd29yayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nXG4mIzQzO25ldGRldl93b3JrX2RlcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyAqcGVuZGluZyxcbiYjNDM7XHRcdCAgICB1bnNpZ25lZCBsb25nIG1hc2spXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGV2ZW50cztcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuJiM0MztcdGV2ZW50cyA9ICpwZW5kaW5nIFx1MDAyNiBtYXNrO1xuJiM0MztcdCpwZW5kaW5nIFx1MDAyNj0gfmV2ZW50cztcbiYjNDM7XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFkZXYtXHUwMDNld29ya19wZW5kaW5nIFx1MDAyNlx1MDAyNiAhZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpO1xuJiM0MztcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGV2ZW50cztcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBuZXRkZXZfd29ya19zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcbiYjNDM7e1xuJiM0MztcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCBldmVudHMsIDApO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIG5ldGRldl93b3JrX2NhbmNlbCgpIC0gY2FuY2VsIHNlbGVjdGVkIHdvcmsgZm9yIGEgbmV0ZGV2XG4mIzQzOyAqIEBkZXY6IG5ldF9kZXZpY2VcbiYjNDM7ICogQG1hc2s6IGV2ZW50cyB0byBjYW5jZWxcbiYjNDM7ICpcbiYjNDM7ICogQ2xlYXIgQG1hc2sgZnJvbSB0aGUgZGV2aWNlJiMzOTtzIHdvcmsgcGVuZGluZyBtYXNrLiBJZiBubyB3b3JrIGlzIGxlZnQgcGVuZGluZ1xuJiM0MzsgKiB0aGUgZGV2aWNlIGlzIGRlcXVldWVkIGFuZCBpdHMgbmRvX3dvcmsgd29uJiMzOTt0IGJlIGNhbGxlZC5cbiYjNDM7ICpcbiYjNDM7ICogTm8gZXhwZWN0YXRpb25zIG9uIGxvY2tpbmcsIGJ1dCBhbHNvIG5vIGd1YXJhbnRlZXMgcHJvdmlkZWQuIElmIHRoZSBjYWxsZXJcbiYjNDM7ICogd2FudHMgdG8gdG91Y2ggQGRldiBhZnRlcndhcmRzIChlLmcuIGNhbGwgdGhlIHdvcmsgdGhhdCBnb3QgY2FuY2VsZWQpXG4mIzQzOyAqIHRoZXkgaGF2ZSB0byBlbnN1cmUgQGRldiBkb2VzIG5vdCBnZXQgZnJlZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IHRoZSBzdWJzZXQgb2YgQG1hc2sgdGhhdCB3YXMgYWN0dWFsbHkgcGVuZGluZywgc28gdGhlIGNhbGxlciBjYW4gcnVuXG4mIzQzOyAqIHRob3NlIGV2ZW50cyBpbmxpbmUuXG4mIzQzOyAqL1xuJiM0Mzt1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3BlbmRpbmcsIG1hc2spO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfY2FuY2VsKTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxuJiM0Mzt7XG4mIzQzO1x0bmV0ZGV2X3dvcmtfZW5xdWV1ZShkZXYsIDAsIGV2ZW50cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGxvbmdcbiYjNDM7X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX2NvcmVfcGVuZGluZywgbWFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG5ldGRldl93b3JrX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyxcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgY29yZSlcbiYjNDM7e1xuJiM0MztcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcmUgXHUwMDI2IE5FVERFVl9XT1JLX1JYX01PREUpXG4mIzQzO1x0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuJiM0MztcdGlmIChldmVudHMgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb193b3JrKVxuJiM0MztcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3dvcmsoZGV2LCBldmVudHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAodHJ1ZSkge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBldmVudHMgPSAwLCBjb3JlID0gMDtcbiYjNDM7XHRcdG5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiYjNDM7XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm5ldGRldl93b3JrX2xpc3QpKSB7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHdvcmtfbm9kZSk7XG4mIzQzO1x0XHQvKiBUYWtlIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzbyBAZGV2IGNhbiYjMzk7dCBiZSBmcmVlZCB3aGlsZSB3ZVxuJiM0MztcdFx0ICogZHJvcCB0aGUgbG9jayB0byBncmFiIGl0cyBvcHMgbG9jazsgdGhlIHdvcmsgcmVmZXJlbmNlIGlzXG4mIzQzO1x0XHQgKiBvbmx5IHJlbGVhc2VkIG9uY2Ugd2UgY2xhaW0gdGhlIHdvcmsgYmVsb3cuXG4mIzQzO1x0XHQgKiBUaGUgcmUtbG9ja2luZyBkYW5jZSBpcyB0byBlbnN1cmUgdGhhdCBvcHMgbG9jayBpcyBlbm91Z2hcbiYjNDM7XHRcdCAqIHRvIGVuc3VyZSBjYW5jZWxpbmcgd29yayBpcyBub3QgcmFjeSB3aXRoIGRlcXVldWUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2dHJhY2tlciwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiYjNDM7XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKSkge1xuJiM0MztcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpO1xuJiM0MztcdFx0XHRjb3JlID0gZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nO1xuJiM0MztcdFx0XHRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcgPSAwO1xuJiM0MztcdFx0XHRldmVudHMgPSBkZXYtXHUwMDNld29ya19wZW5kaW5nO1xuJiM0MztcdFx0XHRkZXYtXHUwMDNld29ya19wZW5kaW5nID0gMDtcbiYjNDM7XHRcdFx0LyogV2UgdG9vayBhbm90aGVyIHJlZiBhYm92ZSAqL1xuJiM0MztcdFx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2LVx1MDAzZXdvcmtfdHJhY2tlcik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWRldl9pc2FsaXZlKGRldikpXG4mIzQzO1x0XHRcdFx0Y29yZSA9IGV2ZW50cyA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpO1xuJiM0MztcdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiYjNDM7XG4mIzQzO1x0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2dHJhY2tlcik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcbmluZGV4IGJlMTMwYmY1ODVhNDE5Li42MzY0Y2EwMjY0MmQ2OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcbkBAIC0xMyw2ICYjNDM7MTMsNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRib25kX29wdGlvbnMuc2ggXFxcbiBcdGJvbmRfcGFzc2l2ZV9sYWNwLnNoIFxcXG4gXHRib25kX3N0YWNrZWRfaGVhZGVyX3BhcnNlLnNoIFxcXG4mIzQzO1x0Ym9uZF92bGFuX3JlYWxfZGV2LnNoIFxcXG4gXHRkZXZfYWRkcl9saXN0cy5zaCBcXFxuIFx0bW9kZS0xLXJlY292ZXJ5LXVwZGVsYXkuc2ggXFxcbiBcdG1vZGUtMi1yZWNvdmVyeS11cGRlbGF5LnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3ZsYW5fcmVhbF9kZXYuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfdmxhbl9yZWFsX2Rldi5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41NDJkOWZmYzQ4MTlmOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3ZsYW5fcmVhbF9kZXYuc2hcbkBAIC0wLDAgJiM0MzsxLDE4MCBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBUZXN0IHByb3BhZ2F0aW9uIG9mIGEgcmVhbCBkZXZpY2UmIzM5O3Mgc3RhdGUgdG8gdGhlIFZMQU5zIHN0YWNrZWQgb24gdG9wIG9mIGl0XG4mIzQzOyMgd2hlbiB0aGUgcmVhbCBkZXZpY2UgaXMgKG9yIGJlY29tZXMpIGEgYm9uZCBtZW1iZXIuXG4mIzQzOyNcbiYjNDM7IyBUaGUga2VybmVsIG1pcnJvcnMgYSByZWFsIGRldmljZSYjMzk7cyBVUC9ET1dOLCBNVFUgYW5kIGZlYXR1cmUgY2hhbmdlcyBvbnRvIGl0c1xuJiM0MzsjIFZMQU5zLiAgVGhpcyBpcyBkb25lIGFzeW5jaHJvbm91c2x5IChuZXRkZXZfd29yayk6IGRvaW5nIGl0IHN5bmNocm9ub3VzbHkgZnJvbVxuJiM0MzsjIHRoZSByZWFsIGRldmljZSYjMzk7cyBub3RpZmllciBjb3VsZCBkZWFkbG9jay4gIElmIHRoZSByZWFsIGRldmljZSBpcyBicm91Z2h0IHVwXG4mIzQzOyMgd2hpbGUgZW5zbGF2ZWQgdG8gYSBib25kIC0gc28gaXRzIGluc3RhbmNlIGxvY2sgaXMgaGVsZCBhY3Jvc3MgTkVUREVWX1VQIC0gYW5kXG4mIzQzOyMgYSBWTEFOIG9uIHRvcCBvZiBpdCBpcyBpdHNlbGYgYSBib25kIG1lbWJlciwgdGhlIHN5bmNocm9ub3VzIHByb3BhZ2F0aW9uXG4mIzQzOyMgcmUtZW50ZXJlZCB0aGUgc3RhY2sgYW5kIHRyaWVkIHRvIHRha2UgdGhlIHNhbWUgaW5zdGFuY2UgbG9jayBhZ2Fpbi5cbiYjNDM7I1xuJiM0MzsjIENvdmVyIGJvdGggaGFsdmVzOlxuJiM0MzsjICAtIHRoZSBkZWZlcnJlZCBVUC9ET1dOLCBNVFUgYW5kIGZlYXR1cmUgcHJvcGFnYXRpb24gYWN0dWFsbHkgbGFuZHMgb24gdGhlXG4mIzQzOyMgICAgVkxBTiAobGluayBzdGF0ZSBhbmQgTVRVIHVzZSBhbiBvcHMtbG9ja2VkIGR1bW15LCBpLmUuIHRoZSBkZWZlcnJhbCBwYXRoKSxcbiYjNDM7IyAgLSB0aGUgZGVhZGxvY2stcHJvbmUgdG9wb2xvZ3kgLSBhIFZMQU4gb24gYSBkdW1teSwgd2l0aCB0aGUgVkxBTiBhbmQgdGhlXG4mIzQzOyMgICAgZHVtbXkgZWFjaCBlbnNsYXZlZCB0byBhIGRpZmZlcmVudCBib25kIC0gY2FuIGJlIGJ1aWx0IHdpdGhvdXQgaGFuZ2luZy5cbiYjNDM7XG4mIzQzO0FMTF9URVNUUz1cJiMzNDtcbiYjNDM7XHR2bGFuX2xpbmtfc3RhdGVcbiYjNDM7XHR2bGFuX210dVxuJiM0MztcdHZsYW5fZmVhdHVyZXNcbiYjNDM7XHR2bGFuX3JlYWxfZGV2X2Vuc2xhdmVcbiYjNDM7XCYjMzQ7XG4mIzQzO1xuJiM0MztSRVFVSVJFX01aPW5vXG4mIzQzO05VTV9ORVRJRlM9MFxuJiM0MztsaWJfZGlyPSQoZGlybmFtZSBcJiMzNDskMFwmIzM0OylcbiYjNDM7c291cmNlIFwmIzM0OyRsaWJfZGlyXCYjMzQ7Ly4uLy4uLy4uL25ldC9mb3J3YXJkaW5nL2xpYi5zaFxuJiM0MztcbiYjNDM7IyBSZXR1cm4gMCBpZiAkZGV2IGluIG5ldG5zICRucyBoYXMgZmxhZyAkZmxhZyBzZXQgKGUuZy4gVVApIGluIGl0cyBcdTAwM2MuLi5cdTAwM2UgZmxhZ3MuXG4mIzQzO2xpbmtfaGFzX2ZsYWcoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9JDEgZGV2PSQyIGZsYWc9JDNcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JG5zXCYjMzQ7IGxpbmsgc2hvdyBkZXYgXCYjMzQ7JGRldlwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHwgZ3JlcCAtcSBcJiMzNDtbXHUwMDNjLF0ke2ZsYWd9WyxcdTAwM2VdXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2xpbmtfbGFja3NfZmxhZygpXG4mIzQzO3tcbiYjNDM7XHQhIGxpbmtfaGFzX2ZsYWcgXCYjMzQ7JEBcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bGlua19tdHVfaXMoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9JDEgZGV2PSQyIHdhbnQ9JDMgY3VyXG4mIzQzO1xuJiM0MztcdGN1cj0kKGlwIC1uIFwmIzM0OyRuc1wmIzM0OyBsaW5rIHNob3cgZGV2IFwmIzM0OyRkZXZcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8IFxcXG4mIzQzO1x0XHRzZWQgLW4gJiMzOTtzLy4qIG10dSBcXChbMC05XVxcJiM0MztcXCkuKi9cXDEvcCYjMzk7KVxuJiM0MztcdFsgXCYjMzQ7JGN1clwmIzM0OyA9IFwmIzM0OyR3YW50XCYjMzQ7IF1cbiYjNDM7fVxuJiM0MztcbiYjNDM7dmxhbl9mZWF0dXJlX2lzKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPSQxIGRldj0kMiBmZWF0dXJlPSQzIHZhbHVlPSQ0XG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zXCYjMzQ7IGV0aHRvb2wgLWsgXCYjMzQ7JGRldlwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHwgXFxcbiYjNDM7XHRcdGdyZXAgLXEgXCYjMzQ7XiRmZWF0dXJlOiAkdmFsdWVcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bGlua19oYXNfbWFzdGVyKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPSQxIGRldj0kMiBtYXN0ZXI9JDNcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JG5zXCYjMzQ7IC1vIGxpbmsgc2hvdyBkZXYgXCYjMzQ7JGRldlwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHwgZ3JlcCAtcSBcJiMzNDttYXN0ZXIgJG1hc3RlclwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2bGFuX2xpbmtfc3RhdGUoKVxuJiM0Mzt7XG4mIzQzO1x0UkVUPTBcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgYWRkIGxzX2R1bW15IHR5cGUgZHVtbXlcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNcJiMzNDsgbGluayBhZGQgbGluayBsc19kdW1teSBuYW1lIGxzX3ZsYW4gdHlwZSB2bGFuIGlkIDEwMFxuJiM0MztcbiYjNDM7XHQjIEJyaW5naW5nIHRoZSByZWFsIGRldmljZSB1cCBtdXN0IHByb3BhZ2F0ZSBVUCB0byB0aGUgVkxBTi5cbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNcJiMzNDsgbGluayBzZXQgbHNfZHVtbXkgdXBcbiYjNDM7XHRidXN5d2FpdCBcJiMzNDskQlVTWVdBSVRfVElNRU9VVFwmIzM0OyBsaW5rX2hhc19mbGFnIFwmIzM0OyROU1wmIzM0OyBsc192bGFuIFVQXG4mIzQzO1x0Y2hlY2tfZXJyICQ/IFwmIzM0O1ZMQU4gZGlkIG5vdCBnbyBVUCBhZnRlciB0aGUgcmVhbCBkZXZpY2Ugd2VudCBVUFwmIzM0O1xuJiM0MztcbiYjNDM7XHQjIC4uLiBhbmQgbGlrZXdpc2UgZm9yIERPV04uXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgc2V0IGxzX2R1bW15IGRvd25cbiYjNDM7XHRidXN5d2FpdCBcJiMzNDskQlVTWVdBSVRfVElNRU9VVFwmIzM0OyBsaW5rX2xhY2tzX2ZsYWcgXCYjMzQ7JE5TXCYjMzQ7IGxzX3ZsYW4gVVBcbiYjNDM7XHRjaGVja19lcnIgJD8gXCYjMzQ7VkxBTiBkaWQgbm90IGdvIERPV04gYWZ0ZXIgdGhlIHJlYWwgZGV2aWNlIHdlbnQgRE9XTlwmIzM0O1xuJiM0MztcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNcJiMzNDsgbGluayBkZWwgbHNfdmxhblxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGRlbCBsc19kdW1teVxuJiM0MztcbiYjNDM7XHRsb2dfdGVzdCBcJiMzNDtWTEFOIGxpbmsgc3RhdGUgZm9sbG93cyB0aGUgcmVhbCBkZXZpY2VcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dmxhbl9tdHUoKVxuJiM0Mzt7XG4mIzQzO1x0UkVUPTBcbiYjNDM7XG4mIzQzO1x0IyBUaGUgVkxBTiBpbmhlcml0cyB0aGUgcmVhbCBkZXZpY2UmIzM5O3MgTVRVICgyMDAwKSBhdCBjcmVhdGlvbiB0aW1lLlxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGFkZCBtdHVfZHVtbXkgbXR1IDIwMDAgdHlwZSBkdW1teVxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGFkZCBsaW5rIG10dV9kdW1teSBuYW1lIG10dV92bGFuIHR5cGUgdmxhbiBpZCAxMDBcbiYjNDM7XG4mIzQzO1x0IyBTaHJpbmtpbmcgdGhlIHJlYWwgZGV2aWNlJiMzOTtzIE1UVSBtdXN0IGNsYW1wIHRoZSBWTEFOJiMzOTtzIE1UVS5cbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNcJiMzNDsgbGluayBzZXQgbXR1X2R1bW15IG10dSAxNTAwXG4mIzQzO1x0YnVzeXdhaXQgXCYjMzQ7JEJVU1lXQUlUX1RJTUVPVVRcJiMzNDsgbGlua19tdHVfaXMgXCYjMzQ7JE5TXCYjMzQ7IG10dV92bGFuIDE1MDBcbiYjNDM7XHRjaGVja19lcnIgJD8gXCYjMzQ7VkxBTiBNVFUgbm90IGNsYW1wZWQgYWZ0ZXIgdGhlIHJlYWwgZGV2aWNlJiMzOTtzIE1UVSBzaHJhbmtcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgZGVsIG10dV92bGFuXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgZGVsIG10dV9kdW1teVxuJiM0MztcbiYjNDM7XHRsb2dfdGVzdCBcJiMzNDtWTEFOIE1UVSBjbGFtcGVkIHRvIHRoZSByZWFsIGRldmljZVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2bGFuX2ZlYXR1cmVzKClcbiYjNDM7e1xuJiM0MztcdFJFVD0wXG4mIzQzO1xuJiM0MztcdCMgVXNlIHZldGggYXMgdGhlIHJlYWwgZGV2aWNlOiB1bmxpa2UgZHVtbXkgaXQgZXhwb3J0cyB2bGFuX2ZlYXR1cmVzLCBzb1xuJiM0MztcdCMgdGhlIFZMQU4gYWN0dWFsbHkgaW5oZXJpdHMgYSB0b2dnbGVhYmxlIG9mZmxvYWQgdG8gYXNzZXJ0IG9uLlxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGFkZCBmdF92ZXRoIHR5cGUgdmV0aCBwZWVyIG5hbWUgZnRfdmV0aF9wclxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGFkZCBsaW5rIGZ0X3ZldGggbmFtZSBmdF92bGFuIHR5cGUgdmxhbiBpZCAxMDBcbiYjNDM7XG4mIzQzO1x0dmxhbl9mZWF0dXJlX2lzIFwmIzM0OyROU1wmIzM0OyBmdF92bGFuIHNjYXR0ZXItZ2F0aGVyIG9uXG4mIzQzO1x0Y2hlY2tfZXJyICQ/IFwmIzM0O1ZMQU4gZGlkIG5vdCBpbmhlcml0IHNjYXR0ZXItZ2F0aGVyIGZyb20gdGhlIHJlYWwgZGV2aWNlXCYjMzQ7XG4mIzQzO1xuJiM0MztcdCMgVG9nZ2xpbmcgdGhlIG9mZmxvYWQgb24gdGhlIHJlYWwgZGV2aWNlIG11c3QgcHJvcGFnYXRlIHRvIHRoZSBWTEFOLlxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JE5TXCYjMzQ7IGV0aHRvb2wgLUsgZnRfdmV0aCBzZyBvZmZcbiYjNDM7XHRidXN5d2FpdCBcJiMzNDskQlVTWVdBSVRfVElNRU9VVFwmIzM0OyBcXFxuJiM0MztcdFx0dmxhbl9mZWF0dXJlX2lzIFwmIzM0OyROU1wmIzM0OyBmdF92bGFuIHNjYXR0ZXItZ2F0aGVyIG9mZlxuJiM0MztcdGNoZWNrX2VyciAkPyBcJiMzNDtWTEFOIHNjYXR0ZXItZ2F0aGVyIHN0aWxsIG9uIGFmdGVyIGRpc2FibGluZyBpdCBvbiByZWFsIGRldlwmIzM0O1xuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyROU1wmIzM0OyBldGh0b29sIC1LIGZ0X3ZldGggc2cgb25cbiYjNDM7XHRidXN5d2FpdCBcJiMzNDskQlVTWVdBSVRfVElNRU9VVFwmIzM0OyBcXFxuJiM0MztcdFx0dmxhbl9mZWF0dXJlX2lzIFwmIzM0OyROU1wmIzM0OyBmdF92bGFuIHNjYXR0ZXItZ2F0aGVyIG9uXG4mIzQzO1x0Y2hlY2tfZXJyICQ/IFwmIzM0O1ZMQU4gc2NhdHRlci1nYXRoZXIgc3RpbGwgb2ZmIGFmdGVyIGVuYWJsaW5nIGl0IG9uIHJlYWwgZGV2XCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGRlbCBmdF92bGFuXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgZGVsIGZ0X3ZldGhcbiYjNDM7XG4mIzQzO1x0bG9nX3Rlc3QgXCYjMzQ7VkxBTiBmZWF0dXJlcyBmb2xsb3cgdGhlIHJlYWwgZGV2aWNlXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZsYW5fcmVhbF9kZXZfZW5zbGF2ZSgpXG4mIzQzO3tcbiYjNDM7XHRSRVQ9MFxuJiM0MztcbiYjNDM7XHQjIGR1bW15IFx1MDAzYy0gVkxBTiAtXHUwMDNlIGJvbmQwLCB0aGVuIGVuc2xhdmUgdGhlIGR1bW15IGl0c2VsZiB0byBib25kMS4gIFRoZVxuJiM0MztcdCMgbGFzdCBzdGVwIGJyaW5ncyB0aGUgZHVtbXkgdXAgdW5kZXIgYm9uZDEmIzM5O3MgaW5zdGFuY2UgbG9jaywgd2hpY2ggdXNlZFxuJiM0MztcdCMgdG8gZGVhZGxvY2sgd2hpbGUgc3luY2hyb25vdXNseSBwcm9wYWdhdGluZyBVUCB0byB0aGUgKGJvbmQtZW5zbGF2ZWQpXG4mIzQzO1x0IyBWTEFOIG9uIHRvcC5cbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNcJiMzNDsgbGluayBhZGQgZGxfZHVtbXkgdHlwZSBkdW1teVxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIHNldCBkbF9kdW1teSB1cFxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGFkZCBsaW5rIGRsX2R1bW15IG5hbWUgZGxfdmxhbiB0eXBlIHZsYW4gaWQgMTAwXG4mIzQzO1xuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGFkZCBkbF9ib25kMCB0eXBlIGJvbmQgbW9kZSBhY3RpdmUtYmFja3VwXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgc2V0IGRsX3ZsYW4gZG93blxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIHNldCBkbF92bGFuIG1hc3RlciBkbF9ib25kMFxuJiM0MztcdGNoZWNrX2VyciAkPyBcJiMzNDtjb3VsZCBub3QgZW5zbGF2ZSB0aGUgVkxBTiB0byBib25kMFwmIzM0O1xuJiM0MztcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNcJiMzNDsgbGluayBhZGQgZGxfYm9uZDEgdHlwZSBib25kIG1vZGUgYWN0aXZlLWJhY2t1cFxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIHNldCBkbF9kdW1teSBkb3duXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgc2V0IGRsX2R1bW15IG1hc3RlciBkbF9ib25kMVxuJiM0MztcdGNoZWNrX2VyciAkPyBcJiMzNDtjb3VsZCBub3QgZW5zbGF2ZSB0aGUgcmVhbCBkZXZpY2UgdG8gYm9uZDFcJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBJZiB3ZSBnb3QgaGVyZSB0aGUga2VybmVsIGRpZCBub3QgZGVhZGxvY2s7IG1ha2Ugc3VyZSBpdCBpcyBzdGlsbFxuJiM0MztcdCMgcmVzcG9uc2l2ZSBhbmQgdGhlIGVuc2xhdmUgcmVhbGx5IHRvb2sgZWZmZWN0LlxuJiM0MztcdGxpbmtfaGFzX21hc3RlciBcJiMzNDskTlNcJiMzNDsgZGxfZHVtbXkgZGxfYm9uZDFcbiYjNDM7XHRjaGVja19lcnIgJD8gXCYjMzQ7cmVhbCBkZXZpY2Ugbm90IGVuc2xhdmVkIHRvIGJvbmQxXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGRlbCBkbF9ib25kMVxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGRlbCBkbF9ib25kMFxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGRlbCBkbF92bGFuXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgZGVsIGRsX2R1bW15XG4mIzQzO1xuJiM0MztcdGxvZ190ZXN0IFwmIzM0O1ZMQU4gcmVhbCBkZXZpY2UgZW5zbGF2ZWQgdG8gYSBzZWNvbmQgYm9uZFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzZXR1cF9ucyBOU1xuJiM0Mzt0cmFwICYjMzk7Y2xlYW51cF9ucyAkTlMmIzM5OyBFWElUXG4mIzQzO1xuJiM0Mzt0ZXN0c19ydW5cbiYjNDM7XG4mIzQzO2V4aXQgXCYjMzQ7JEVYSVRfU1RBVFVTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTg6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtCT05ESU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X3dvcmtfc2NoZWQmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfY2FuY2VsJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3Byb2MmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssCiAgICAmIzM0O3ZsYW5fZGV2X3dvcmsmIzM0OywKICAgICYjMzQ7dmxhbl9kZXZpY2VfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXN5bmNocm9ub3VzIHdvcmsgbWVjaGFuaXNtIChgbmV0ZGV2X3dvcmtgKSBmb3IgbmV0d29yayBkZXZpY2VzIGFuZCBtb2RpZmllcyB0aGUgVkxBTiBkcml2ZXIgdG8gdXNlIGl0IGZvciBzdGF0ZSBwcm9wYWdhdGlvbiAoTVRVLCBmZWF0dXJlcywgbGluayBzdGF0ZSkgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyBuZXN0ZWQgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbmV0d29ya2luZyBhbmQgVkxBTiBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IG1vZGlmeWluZyBkZXZpY2Ugc3RhdGVzIChlLmcuLCBicmluZ2luZyBkZXZpY2VzIHVwL2Rvd24sIGNoYW5naW5nIE1UVSkuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgYXN5bmNocm9ub3VzIG1lY2hhbmlzbSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgY29uY3VycmVuY3kgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzdlMDhlOGExMmUzYjU1NzFmYjc3ZTNlOTlkMGNmMDYxNzRhOWMxZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVuIDI0IDE4OjQ1OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0CmluZGV4IGZkZTYwMWFjZDFkMjVhLi5kMmEyMzhmOGNjOGI5MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdApAQCAtNDMzLDYgJiM0Mzs0MzMsOCBAQCBleGNlcHRpb25zKSBub3RpZmllcnMgcnVuIHVuZGVyIHRoZSBpbnN0YW5jZSBsb2NrLiBQbGVhc2UgZXh0ZW5kIHRoaXMKIGRvY3VtZW50YXRpb24gd2hlbmV2ZXIgeW91IG1ha2UgZXhwbGljaXQgYXNzdW1wdGlvbiBhYm91dCBsb2NrIGJlaW5nIGhlbGQKIGZyb20gYSBub3RpZmllci4KIAomIzQzO0RyaXZlcnMgKiptdXN0IG5vdCoqIGdlbmVyYXRlIG5lc3RlZCBub3RpZmljYXRpb25zIG9mIHRoZSBvcHMtbG9ja2VkIHR5cGVzLgomIzQzOwogTkVUREVWX0lOVEVSTkFMIHN5bWJvbCBuYW1lc3BhY2UKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IGI2N2ExMjU0MWVhYzI4Li45OTgxZDYzN2Y4YjU0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0xMTMxLDYgJiM0MzsxMTMxLDkgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIgewogICoJbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpLiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGEKICAqCW5lZ2F0aXZlIGVycm5vIHRvIHJlcXVlc3QgYSByZXRyeSB2aWEgdGhlIGNvcmUgYmFja29mZi4KICAqCiYjNDM7ICogdm9pZCAoKm5kb193b3JrKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyk7CiYjNDM7ICoJUnVuIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoQGV2ZW50cykuCiYjNDM7ICoKICAqIGludCAoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpOwogICoJVGhpcyBmdW5jdGlvbiAgaXMgY2FsbGVkIHdoZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIGFkZHJlc3MKICAqCW5lZWRzIHRvIGJlIGNoYW5nZWQuIElmIHRoaXMgaW50ZXJmYWNlIGlzIG5vdCBkZWZpbmVkLCB0aGUKQEAgLTE0NjAsNiAmIzQzOzE0NjMsOCBAQCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgewogCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsCiAJCQkJCXN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7CiYjNDM7CXZvaWQJCQkoKm5kb193b3JrKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTsKIAlpbnQJCQkoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgICAgdm9pZCAqYWRkcik7CiAJaW50CQkJKCpuZG9fdmFsaWRhdGVfYWRkcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xOTMwLDggJiM0MzsxOTM1LDExIEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7CiAgKgkJCQloYXMgYmVlbiBlbmFibGVkIGR1ZSB0byB0aGUgbmVlZCB0byBsaXN0ZW4gdG8KICAqCQkJCWFkZGl0aW9uYWwgdW5pY2FzdCBhZGRyZXNzZXMgaW4gYSBkZXZpY2UgdGhhdAogICoJCQkJZG9lcyBub3QgaW1wbGVtZW50IG5kb19zZXRfcnhfbW9kZSgpCi0gKglAcnhfbW9kZV9ub2RlOgkJTGlzdCBlbnRyeSBmb3IgcnhfbW9kZSB3b3JrIHByb2Nlc3NpbmcKLSAqCUByeF9tb2RlX3RyYWNrZXI6CVJlZmNvdW50IHRyYWNrZXIgZm9yIHJ4X21vZGUgd29yawomIzQzOyAqCUB3b3JrX25vZGU6CQlMaXN0IGVudHJ5IGZvciBhc3luYyBuZXRkZXZfd29yayBwcm9jZXNzaW5nCiYjNDM7ICoJQHdvcmtfdHJhY2tlcjoJCVJlZmNvdW50IHRyYWNrZXIgZm9yIGFzeW5jIG5ldGRldl93b3JrCiYjNDM7ICoJQHdvcmtfcGVuZGluZzoJCURyaXZlci1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmssIHBhc3NlZCB0bwomIzQzOyAqCQkJCW5kb193b3JrKCkgKHNlZSBuZXRkZXZfd29ya19zY2hlZCgpKQomIzQzOyAqCUB3b3JrX2NvcmVfcGVuZGluZzoJQ29yZS1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmsgKE5FVERFVl9XT1JLXyopCiAgKglAcnhfbW9kZV9hZGRyX2NhY2hlOglSZWN5Y2xlZCBzbmFwc2hvdCBlbnRyaWVzIGZvciByeF9tb2RlIHdvcmsKICAqCUByeF9tb2RlX3JldHJ5X3RpbWVyOglUaW1lciB0aGF0IHJlLXF1ZXVlcyByeF9tb2RlIHdvcmsgYWZ0ZXIgZmFpbHVyZQogICoJQHJ4X21vZGVfcmV0cnlfY291bnQ6CU51bWJlciBvZiBjb25zZWN1dGl2ZSByZXRyaWVzIGFscmVhZHkgc2NoZWR1bGVkCkBAIC0yMzI2LDggJiM0MzsyMzM0LDEwIEBAIHN0cnVjdCBuZXRfZGV2aWNlIHsKIAl1bnNpZ25lZCBpbnQJCXByb21pc2N1aXR5OwogCXVuc2lnbmVkIGludAkJYWxsbXVsdGk7CiAJYm9vbAkJCXVjX3Byb21pc2M7Ci0Jc3RydWN0IGxpc3RfaGVhZAlyeF9tb2RlX25vZGU7Ci0JbmV0ZGV2aWNlX3RyYWNrZXIJcnhfbW9kZV90cmFja2VyOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCXdvcmtfbm9kZTsKJiM0MzsJbmV0ZGV2aWNlX3RyYWNrZXIJd29ya190cmFja2VyOwomIzQzOwl1bnNpZ25lZCBsb25nCQl3b3JrX3BlbmRpbmc7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCXdvcmtfY29yZV9wZW5kaW5nOwogCXN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0CXJ4X21vZGVfYWRkcl9jYWNoZTsKIAlzdHJ1Y3QgdGltZXJfbGlzdAlyeF9tb2RlX3JldHJ5X3RpbWVyOwogCXVuc2lnbmVkIGludAkJcnhfbW9kZV9yZXRyeV9jb3VudDsKQEAgLTUxNzYsNiAmIzQzOzUxODYsOSBAQCB2b2lkIGRldl9mZXRjaF9zd19uZXRzdGF0cyhzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnMsCiAJCQkgICBjb25zdCBzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyBfX3BlcmNwdSAqbmV0c3RhdHMpOwogdm9pZCBkZXZfZ2V0X3RzdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqcyk7CiAKJiM0Mzt2b2lkIG5ldGRldl93b3JrX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTsKJiM0Mzt1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spOwomIzQzOwogZW51bSB7CiAJTkVTVEVEX1NZTkNfSU1NX0JJVCwKIAlORVNURURfU1lOQ19UT0RPX0JJVCwKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IDJiNzRlZDU2ZWIxNjZkLi4yZDJlZmI4Nzc5NzVkNSAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbi5jCkBAIC03Nyw5ICYjNDM7NzcsOSBAQCBzdGF0aWMgaW50IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKHN0cnVjdCB2bGFuX2dyb3VwICp2ZywKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldiwKLQkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbikKJiM0Mzt2b2lkIHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RkZXYsCiYjNDM7CQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbikKIHsKIAlpZiAoISh2bGFuLSZndDtmbGFncyAmYW1wOyBWTEFOX0ZMQUdfQlJJREdFX0JJTkRJTkcpKQogCQluZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpOwpAQCAtMzE2LDI5ICYjNDM7MzE2LDYgQEAgc3RhdGljIHZvaWQgdmxhbl9zeW5jX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlldGhlcl9hZGRyX2NvcHkodmxhbi0mZ3Q7cmVhbF9kZXZfYWRkciwgZGV2LSZndDtkZXZfYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIHZsYW5fdHJhbnNmZXJfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldikKLXsKLQlzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7Ci0KLQluZXRpZl9pbmhlcml0X3Rzb19tYXgodmxhbmRldiwgZGV2KTsKLQotCWlmICh2bGFuX2h3X29mZmxvYWRfY2FwYWJsZShkZXYtJmd0O2ZlYXR1cmVzLCB2bGFuLSZndDt2bGFuX3Byb3RvKSkKLQkJdmxhbmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47Ci0JZWxzZQotCQl2bGFuZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gPSBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBWTEFOX0hMRU47Ci0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19GQ09FKQotCXZsYW5kZXYtJmd0O2Zjb2VfZGRwX3hpZCA9IGRldi0mZ3Q7ZmNvZV9kZHBfeGlkOwotI2VuZGlmCi0KLQl2bGFuZGV2LSZndDtwcml2X2ZsYWdzICZhbXA7PSB+SUZGX1hNSVRfRFNUX1JFTEVBU0U7Ci0JdmxhbmRldi0mZ3Q7cHJpdl9mbGFncyB8PSAodmxhbi0mZ3Q7cmVhbF9kZXYtJmd0O3ByaXZfZmxhZ3MgJmFtcDsgSUZGX1hNSVRfRFNUX1JFTEVBU0UpOwotCXZsYW5kZXYtJmd0O2h3X2VuY19mZWF0dXJlcyA9IHZsYW5fdG5sX2ZlYXR1cmVzKHZsYW4tJmd0O3JlYWxfZGV2KTsKLQotCW5ldGRldl91cGRhdGVfZmVhdHVyZXModmxhbmRldik7Ci19Ci0KIHN0YXRpYyBpbnQgX192bGFuX2RldmljZV9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KQogewogCWludCBlcnIgPSAwOwpAQCAtMzkxLDEzICYjNDM7MzY4LDExIEBAIHN0YXRpYyB2b2lkIHZsYW5fdmlkMF9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHN0YXRpYyBpbnQgdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCiAJCQkgICAgIHZvaWQgKnB0cikKIHsKLQlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19leHRhY2socHRyKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiAJc3RydWN0IHZsYW5fZ3JvdXAgKmdycDsKIAlzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm87CiAJaW50IGksIGZsZ3M7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXY7Ci0Jc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW47CiAJYm9vbCBsYXN0ID0gZmFsc2U7CiAJTElTVF9IRUFEKGxpc3QpOwogCWludCBlcnI7CkBAIC00NDcsNTQgJiM0Mzs0MjIsMTkgQEAgc3RhdGljIGludCB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCwKIAkJCWlmICh2bGFuZGV2LSZndDttdHUgJmx0Oz0gZGV2LSZndDttdHUpCiAJCQkJY29udGludWU7CiAKLQkJCWRldl9zZXRfbXR1KHZsYW5kZXYsIGRldi0mZ3Q7bXR1KTsKJiM0MzsJCQluZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfTVRVKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOgotCQkvKiBQcm9wYWdhdGUgZGV2aWNlIGZlYXR1cmVzIHRvIHVuZGVybHlpbmcgZGV2aWNlICovCiAJCXZsYW5fZ3JvdXBfZm9yX2VhY2hfZGV2KGdycCwgaSwgdmxhbmRldikKLQkJCXZsYW5fdHJhbnNmZXJfZmVhdHVyZXMoZGV2LCB2bGFuZGV2KTsKJiM0MzsJCQluZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfRkVBVFVSRVMpOwogCQlicmVhazsKIAotCWNhc2UgTkVUREVWX0RPV046IHsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKnRtcDsKLQkJTElTVF9IRUFEKGNsb3NlX2xpc3QpOwotCi0JCS8qIFB1dCBhbGwgVkxBTnMgZm9yIHRoaXMgZGV2IGluIHRoZSBkb3duIHN0YXRlIHRvby4gICovCi0JCXZsYW5fZ3JvdXBfZm9yX2VhY2hfZGV2KGdycCwgaSwgdmxhbmRldikgewotCQkJZmxncyA9IHZsYW5kZXYtJmd0O2ZsYWdzOwotCQkJaWYgKCEoZmxncyAmYW1wOyBJRkZfVVApKQotCQkJCWNvbnRpbnVlOwotCi0JCQl2bGFuID0gdmxhbl9kZXZfcHJpdih2bGFuZGV2KTsKLQkJCWlmICghKHZsYW4tJmd0O2ZsYWdzICZhbXA7IFZMQU5fRkxBR19MT09TRV9CSU5ESU5HKSkKLQkJCQlsaXN0X2FkZCgmYW1wO3ZsYW5kZXYtJmd0O2Nsb3NlX2xpc3QsICZhbXA7Y2xvc2VfbGlzdCk7Ci0JCX0KLQotCQluZXRpZl9jbG9zZV9tYW55KCZhbXA7Y2xvc2VfbGlzdCwgZmFsc2UpOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuZGV2LCB0bXAsICZhbXA7Y2xvc2VfbGlzdCwgY2xvc2VfbGlzdCkgewotCQkJdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShkZXYsIHZsYW5kZXYsCi0JCQkJCQkJdmxhbl9kZXZfcHJpdih2bGFuZGV2KSk7Ci0JCQlsaXN0X2RlbF9pbml0KCZhbXA7dmxhbmRldi0mZ3Q7Y2xvc2VfbGlzdCk7Ci0JCX0KLQkJbGlzdF9kZWwoJmFtcDtjbG9zZV9saXN0KTsKLQkJYnJlYWs7Ci0JfQomIzQzOwljYXNlIE5FVERFVl9ET1dOOgogCWNhc2UgTkVUREVWX1VQOgotCQkvKiBQdXQgYWxsIFZMQU5zIGZvciB0aGlzIGRldiBpbiB0aGUgdXAgc3RhdGUgdG9vLiAgKi8KLQkJdmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KSB7Ci0JCQlmbGdzID0gbmV0aWZfZ2V0X2ZsYWdzKHZsYW5kZXYpOwotCQkJaWYgKGZsZ3MgJmFtcDsgSUZGX1VQKQotCQkJCWNvbnRpbnVlOwotCi0JCQl2bGFuID0gdmxhbl9kZXZfcHJpdih2bGFuZGV2KTsKLQkJCWlmICghKHZsYW4tJmd0O2ZsYWdzICZhbXA7IFZMQU5fRkxBR19MT09TRV9CSU5ESU5HKSkKLQkJCQlkZXZfY2hhbmdlX2ZsYWdzKHZsYW5kZXYsIGZsZ3MgfCBJRkZfVVAsCi0JCQkJCQkgZXh0YWNrKTsKLQkJCXZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoZGV2LCB2bGFuZGV2LCB2bGFuKTsKLQkJfQomIzQzOwkJdmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KQomIzQzOwkJCW5ldGRldl93b3JrX3NjaGVkKHZsYW5kZXYsIFZMQU5fV09SS19MSU5LX1NUQVRFKTsKIAkJYnJlYWs7CiAKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uaCBiL25ldC84MDIxcS92bGFuLmgKaW5kZXggYzdmZmU1OTFkNTkzNjYuLmM0MWNhYWY5NDA5NWYzIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC84MDIxcS92bGFuLmgKQEAgLTEyNSw2ICYjNDM7MTI1LDE3IEBAIHN0YXRpYyBpbmxpbmUgbmV0ZGV2X2ZlYXR1cmVzX3Qgdmxhbl90bmxfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2KQogaW50IHZsYW5fZmlsdGVyX3B1c2hfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7CiB2b2lkIHZsYW5fZmlsdGVyX2Ryb3BfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7CiAKJiM0MzsvKiBuZXRkZXZfd29yayBldmVudHMgcHJvcGFnYXRlZCBmcm9tIHRoZSByZWFsIGRldmljZSwgc2VlIHZsYW5fZGV2X3dvcmsoKS4gKi8KJiM0MztlbnVtIHsKJiM0MzsJVkxBTl9XT1JLX0xJTktfU1RBVEUJPSBCSVQoMCksIC8qIHN5bmMgdXAvZG93biB3aXRoIHJlYWxfZGV2ICovCiYjNDM7CVZMQU5fV09SS19NVFUJCT0gQklUKDEpLCAvKiBjbGFtcCBtdHUgdG8gcmVhbF9kZXYmIzM5O3MgKi8KJiM0MzsJVkxBTl9XT1JLX0ZFQVRVUkVTCT0gQklUKDIpLCAvKiByZS1pbmhlcml0IHJlYWxfZGV2IGZlYXR1cmVzICovCiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RkZXYsCiYjNDM7CQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbik7CiYjNDM7CiAvKiBmb3VuZCBpbiB2bGFuX2Rldi5jICovCiB2b2lkIHZsYW5fZGV2X3NldF9pbmdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgdTMyIHNrYl9wcmlvLCB1MTYgdmxhbl9wcmlvKTsKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2Rldi5jIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKaW5kZXggN2FhM2FmOGIxMGVhZDAuLmVjMjU2OWIzZjhkYWM2IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbl9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbl9kZXYuYwpAQCAtMjcwLDYgJiM0MzsyNzAsOSBAQCBzdGF0aWMgaW50IHZsYW5fZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkgICAgISh2bGFuLSZndDtmbGFncyAmYW1wOyBWTEFOX0ZMQUdfTE9PU0VfQklORElORykpCiAJCXJldHVybiAtRU5FVERPV047CiAKJiM0MzsJLyogVGhlIGV4cGxpY2l0IG9wZW4gc3VwZXJzZWRlcyBhbnkgZGVmZXJyZWQgbGluay1zdGF0ZSBzeW5jICovCiYjNDM7CW5ldGRldl93b3JrX2NhbmNlbChkZXYsIFZMQU5fV09SS19MSU5LX1NUQVRFKTsKJiM0MzsKIAlpZiAoIWV0aGVyX2FkZHJfZXF1YWwoZGV2LSZndDtkZXZfYWRkciwgcmVhbF9kZXYtJmd0O2Rldl9hZGRyKSAmYW1wOyZhbXA7CiAJICAgICF2bGFuX2Rldl9pbmhlcml0X2FkZHJlc3MoZGV2LCByZWFsX2RldikpIHsKIAkJZXJyID0gZGV2X3VjX2FkZChyZWFsX2RldiwgZGV2LSZndDtkZXZfYWRkcik7CkBAIC0zMDAsNiAmIzQzOzMwMyw5IEBAIHN0YXRpYyBpbnQgdmxhbl9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tJmd0O3JlYWxfZGV2OwogCiYjNDM7CS8qIFRoZSBleHBsaWNpdCBjbG9zZSBzdXBlcnNlZGVzIGFueSBkZWZlcnJlZCBsaW5rLXN0YXRlIHN5bmMgKi8KJiM0MzsJbmV0ZGV2X3dvcmtfY2FuY2VsKGRldiwgVkxBTl9XT1JLX0xJTktfU1RBVEUpOwomIzQzOwogCWRldl9tY191bnN5bmMocmVhbF9kZXYsIGRldik7CiAJZGV2X3VjX3Vuc3luYyhyZWFsX2RldiwgZGV2KTsKIApAQCAtMTAxNiw2ICYjNDM7MTAyMiw1OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHZsYW5fZXRodG9vbF9vcHMgPSB7CiAJLmdldF90c19pbmZvCQk9IHZsYW5fZXRodG9vbF9nZXRfdHNfaW5mbywKIH07CiAKJiM0MztzdGF0aWMgdm9pZCB2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KHZsYW5kZXYpOwomIzQzOwomIzQzOwluZXRpZl9pbmhlcml0X3Rzb19tYXgodmxhbmRldiwgZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHZsYW5faHdfb2ZmbG9hZF9jYXBhYmxlKGRldi0mZ3Q7ZmVhdHVyZXMsIHZsYW4tJmd0O3ZsYW5fcHJvdG8pKQomIzQzOwkJdmxhbmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47CiYjNDM7CWVsc2UKJiM0MzsJCXZsYW5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7IFZMQU5fSExFTjsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfRkNPRSkKJiM0MzsJdmxhbmRldi0mZ3Q7ZmNvZV9kZHBfeGlkID0gZGV2LSZndDtmY29lX2RkcF94aWQ7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXZsYW5kZXYtJmd0O3ByaXZfZmxhZ3MgJmFtcDs9IH5JRkZfWE1JVF9EU1RfUkVMRUFTRTsKJiM0MzsJdmxhbmRldi0mZ3Q7cHJpdl9mbGFncyB8PSAodmxhbi0mZ3Q7cmVhbF9kZXYtJmd0O3ByaXZfZmxhZ3MgJmFtcDsgSUZGX1hNSVRfRFNUX1JFTEVBU0UpOwomIzQzOwl2bGFuZGV2LSZndDtod19lbmNfZmVhdHVyZXMgPSB2bGFuX3RubF9mZWF0dXJlcyh2bGFuLSZndDtyZWFsX2Rldik7CiYjNDM7CiYjNDM7CW5ldGRldl91cGRhdGVfZmVhdHVyZXModmxhbmRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZsYW5fZGV2X3dvcmsoc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKQomIzQzO3sKJiM0MzsJc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KHZsYW5kZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLSZndDtyZWFsX2RldjsKJiM0MzsJYm9vbCBsb29zZSA9IHZsYW4tJmd0O2ZsYWdzICZhbXA7IFZMQU5fRkxBR19MT09TRV9CSU5ESU5HOwomIzQzOwl1bnNpZ25lZCBpbnQgZmxnczsKJiM0MzsKJiM0MzsJaWYgKGV2ZW50cyAmYW1wOyBWTEFOX1dPUktfTElOS19TVEFURSkgewomIzQzOwkJZmxncyA9IG5ldGlmX2dldF9mbGFncyh2bGFuZGV2KTsKJiM0MzsJCWlmIChyZWFsX2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1VQKSB7CiYjNDM7CQkJaWYgKCEoZmxncyAmYW1wOyBJRkZfVVApKSB7CiYjNDM7CQkJCWlmICghbG9vc2UpCiYjNDM7CQkJCQluZXRpZl9jaGFuZ2VfZmxhZ3ModmxhbmRldiwKJiM0MzsJCQkJCQkJICAgZmxncyB8IElGRl9VUCwgTlVMTCk7CiYjNDM7CQkJCXZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocmVhbF9kZXYsCiYjNDM7CQkJCQkJCQl2bGFuZGV2LCB2bGFuKTsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgaWYgKChmbGdzICZhbXA7IElGRl9VUCkgJmFtcDsmYW1wOyAhbG9vc2UpIHsKJiM0MzsJCQluZXRpZl9jaGFuZ2VfZmxhZ3ModmxhbmRldiwgZmxncyAmYW1wOyB+SUZGX1VQLCBOVUxMKTsKJiM0MzsJCQl2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHJlYWxfZGV2LCB2bGFuZGV2LCB2bGFuKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoKGV2ZW50cyAmYW1wOyBWTEFOX1dPUktfTVRVKSAmYW1wOyZhbXA7IHZsYW5kZXYtJmd0O210dSAmZ3Q7IHJlYWxfZGV2LSZndDttdHUpCiYjNDM7CQluZXRpZl9zZXRfbXR1KHZsYW5kZXYsIHJlYWxfZGV2LSZndDttdHUpOwomIzQzOwomIzQzOwlpZiAoZXZlbnRzICZhbXA7IFZMQU5fV09SS19GRUFUVVJFUykKJiM0MzsJCXZsYW5fdHJhbnNmZXJfZmVhdHVyZXMocmVhbF9kZXYsIHZsYW5kZXYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0gewogCS5uZG9fY2hhbmdlX210dQkJPSB2bGFuX2Rldl9jaGFuZ2VfbXR1LAogCS5uZG9faW5pdAkJPSB2bGFuX2Rldl9pbml0LApAQCAtMTAyNyw2ICYjNDM7MTA4Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0gewogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gdmxhbl9kZXZfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc2V0X3J4X21vZGUJPSB2bGFuX2Rldl9zZXRfcnhfbW9kZSwKIAkubmRvX2NoYW5nZV9yeF9mbGFncwk9IHZsYW5fZGV2X2NoYW5nZV9yeF9mbGFncywKJiM0MzsJLm5kb193b3JrCQk9IHZsYW5fZGV2X3dvcmssCiAJLm5kb19ldGhfaW9jdGwJCT0gdmxhbl9kZXZfaW9jdGwsCiAJLm5kb19uZWlnaF9zZXR1cAk9IHZsYW5fZGV2X25laWdoX3NldHVwLAogCS5uZG9fZ2V0X3N0YXRzNjQJPSB2bGFuX2Rldl9nZXRfc3RhdHM2NCwKZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGUKaW5kZXggZGMxN2M1YTYxZTlhNGEuLmIzZmRjYjRlMzU1ZmE2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9NYWtlZmlsZQpAQCAtMTMsNyAmIzQzOzEzLDcgQEAgb2JqLXkJCSAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXAogCQkJbmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXAogCQkJc29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcCiAJCQlmaWJfbm90aWZpZXIubyB4ZHAubyBmbG93X29mZmxvYWQubyBncm8ubyBcCi0JCQluZXRkZXYtZ2VubC5vIG5ldGRldi1nZW5sLWdlbi5vIGdzby5vCiYjNDM7CQkJbmV0ZGV2LWdlbmwubyBuZXRkZXYtZ2VubC1nZW4ubyBuZXRkZXZfd29yay5vIGdzby5vCiAKIG9iai0kKENPTkZJR19ORVRERVZfQUREUl9MSVNUX1RFU1QpICYjNDM7PSBkZXZfYWRkcl9saXN0c190ZXN0Lm8KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1YzAxZGZhYTZjNDQ1MC4uNGIzZDVjZmRmNmUwMGYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC05ODIyLDYgJiM0Mzs5ODIyLDcgQEAgaW50IG5ldGlmX2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiAJX19kZXZfbm90aWZ5X2ZsYWdzKGRldiwgb2xkX2ZsYWdzLCBjaGFuZ2VzLCAwLCBOVUxMKTsKIAlyZXR1cm4gcmV0OwogfQomIzQzO0VYUE9SVF9TWU1CT0wobmV0aWZfY2hhbmdlX2ZsYWdzKTsKIAogaW50IF9fbmV0aWZfc2V0X210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKQEAgLTEyMDkzLDYgJiM0MzsxMjA5NCw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSwKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7cHR5cGVfYWxsKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7cHR5cGVfc3BlY2lmaWMpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2LSZndDtuZXRfbm90aWZpZXJfbGlzdCk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2LSZndDt3b3JrX25vZGUpOwogI2lmZGVmIENPTkZJR19ORVRfU0NIRUQKIAloYXNoX2luaXQoZGV2LSZndDtxZGlzY19oYXNoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmggYi9uZXQvY29yZS9kZXYuaAppbmRleCA0MTIxYzUwZTdjODhiZS4uNWQwYjAzMDVkM2JhYWYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5oCkBAIC0xNjcsMTAgJiM0MzsxNjcsMTkgQEAgaW50IGRldl9jaGFuZ2VfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5ld19jYXJyaWVyKTsKIHZvaWQgX19kZXZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgX19kZXZfc2V0X3Byb21pc2N1aXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMsIGJvb2wgbm90aWZ5KTsKIHZvaWQgbmV0aWZfcnhfbW9kZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotYm9vbCBuZXRpZl9yeF9tb2RlX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzO3ZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIG5ldGlmX3J4X21vZGVfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgbmV0aWZfcnhfbW9kZV9jYW5jZWxfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKJiM0MzsvKiBFdmVudHMgZm9yIHRoZSBhc3luYyBuZXRkZXYgd29yaywgdHJhY2tlZCBpbiBuZXRkZXYtJmd0O3dvcmtfY29yZV9wZW5kaW5nLiAqLwomIzQzO2VudW0gbmV0ZGV2X3dvcmtfY29yZSB7CiYjNDM7CU5FVERFVl9XT1JLX1JYX01PREUJPSBCSVQoMCksCS8qIHJ1biB0aGUgcnhfbW9kZSB1cGRhdGUgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpOwomIzQzO3Vuc2lnbmVkIGxvbmcKJiM0MztfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzayk7CiYjNDM7CiB2b2lkIF9fZGV2X25vdGlmeV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2xkX2ZsYWdzLAogCQkJdW5zaWduZWQgaW50IGdjaGFuZ2VzLCB1MzIgcG9ydGlkLAogCQkJY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMKaW5kZXggZTE3ZjY0YTY1ZTE3YmUuLjA4NTI4Y2EwYThiMzE0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMKQEAgLTEyLDE3ICYjNDM7MTIsMTAgQEAKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtrdW5pdC92aXNpYmlsaXR5LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7ZGV2LmgmIzM0OwogCi1zdGF0aWMgdm9pZCBuZXRkZXZfcnhfbW9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLXN0YXRpYyBMSVNUX0hFQUQocnhfbW9kZV9saXN0KTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socnhfbW9kZV9sb2NrKTsKLXN0YXRpYyBERUNMQVJFX1dPUksocnhfbW9kZV93b3JrLCBuZXRkZXZfcnhfbW9kZV93b3JrKTsKLQogLyoKICAqIEdlbmVyYWwgbGlzdCBoYW5kbGluZyBmdW5jdGlvbnMKICAqLwpAQCAtMTI4MSw3ICYjNDM7MTI3NCw3IEBAIHZvaWQgbmV0aWZfcnhfbW9kZV9jYW5jZWxfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlkZXYtJmd0O3J4X21vZGVfcmV0cnlfY291bnQgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3ZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCB1Y19zbmFwLCBtY19zbmFwLCB1Y19yZWYsIG1jX3JlZjsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi0mZ3Q7bmV0ZGV2X29wczsKQEAgLTEzMzksNDkgJiM0MzsxMzMyLDkgQEAgc3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG5ldGRldl9yeF9tb2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0KLQlydG5sX2xvY2soKTsKLQotCXdoaWxlICh0cnVlKSB7Ci0JCXNwaW5fbG9ja19iaCgmYW1wO3J4X21vZGVfbG9jayk7Ci0JCWlmIChsaXN0X2VtcHR5KCZhbXA7cnhfbW9kZV9saXN0KSkgewotCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtyeF9tb2RlX2xvY2spOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGV2ID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO3J4X21vZGVfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsCi0JCQkJICAgICAgIHJ4X21vZGVfbm9kZSk7Ci0JCWxpc3RfZGVsX2luaXQoJmFtcDtkZXYtJmd0O3J4X21vZGVfbm9kZSk7Ci0JCS8qIFdlIG11c3QgZnJlZSBuZXRkZXYgdHJhY2tlciB1bmRlcgotCQkgKiB0aGUgc3BpbmxvY2sgcHJvdGVjdGlvbi4KLQkJICovCi0JCW5ldGRldl90cmFja2VyX2ZyZWUoZGV2LCAmYW1wO2Rldi0mZ3Q7cnhfbW9kZV90cmFja2VyKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtyeF9tb2RlX2xvY2spOwotCi0JCW5ldGRldl9sb2NrX29wcyhkZXYpOwotCQluZXRpZl9yeF9tb2RlX3J1bihkZXYpOwotCQluZXRkZXZfdW5sb2NrX29wcyhkZXYpOwotCQkvKiBVc2UgX19kZXZfcHV0KCkgYmVjYXVzZSBuZXRkZXZfdHJhY2tlcl9mcmVlKCkgd2FzIGFscmVhZHkKLQkJICogY2FsbGVkIGFib3ZlLiBNdXN0IGJlIGFmdGVyIG5ldGRldl91bmxvY2tfb3BzKCkgdG8gcHJldmVudAotCQkgKiBuZXRkZXZfcnVuX3RvZG8oKSBmcm9tIGZyZWVpbmcgdGhlIGRldmljZSB3aGlsZSBzdGlsbCBpbiB1c2UuCi0JCSAqLwotCQlfX2Rldl9wdXQoZGV2KTsKLQl9Ci0KLQlydG5sX3VubG9jaygpOwotfQotCiBzdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3Bpbl9sb2NrX2JoKCZhbXA7cnhfbW9kZV9sb2NrKTsKLQlpZiAobGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7cnhfbW9kZV9ub2RlKSkgewotCQlsaXN0X2FkZF90YWlsKCZhbXA7ZGV2LSZndDtyeF9tb2RlX25vZGUsICZhbXA7cnhfbW9kZV9saXN0KTsKLQkJbmV0ZGV2X2hvbGQoZGV2LCAmYW1wO2Rldi0mZ3Q7cnhfbW9kZV90cmFja2VyLCBHRlBfQVRPTUlDKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtyeF9tb2RlX2xvY2spOwotCXNjaGVkdWxlX3dvcmsoJmFtcDtyeF9tb2RlX3dvcmspOwomIzQzOwlfX25ldGRldl93b3JrX2NvcmVfc2NoZWQoZGV2LCBORVRERVZfV09SS19SWF9NT0RFKTsKIH0KIAogc3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9yZXRyeShzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKQEAgLTEzOTQsNyAmIzQzOzEzNDcsNiBAQCBzdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3JldHJ5KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCiB2b2lkIG5ldGlmX3J4X21vZGVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2LSZndDtyeF9tb2RlX25vZGUpOwogCV9faHdfYWRkcl9pbml0KCZhbXA7ZGV2LSZndDtyeF9tb2RlX2FkZHJfY2FjaGUpOwogCXRpbWVyX3NldHVwKCZhbXA7ZGV2LSZndDtyeF9tb2RlX3JldHJ5X3RpbWVyLCBuZXRpZl9yeF9tb2RlX3JldHJ5LCAwKTsKIH0KQEAgLTE0NDIsMjQgJiM0MzsxMzk0LDYgQEAgdm9pZCBkZXZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwogfQogCi1ib29sIG5ldGlmX3J4X21vZGVfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlib29sIGNsZWFuID0gZmFsc2U7Ci0KLQlzcGluX2xvY2tfYmgoJmFtcDtyeF9tb2RlX2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7cnhfbW9kZV9ub2RlKSkgewotCQlsaXN0X2RlbF9pbml0KCZhbXA7ZGV2LSZndDtyeF9tb2RlX25vZGUpOwotCQljbGVhbiA9IHRydWU7Ci0JCS8qIFdlIG11c3QgcmVsZWFzZSBuZXRkZXYgdHJhY2tlciB1bmRlcgotCQkgKiB0aGUgc3BpbmxvY2sgcHJvdGVjdGlvbi4KLQkJICovCi0JCW5ldGRldl90cmFja2VyX2ZyZWUoZGV2LCAmYW1wO2Rldi0mZ3Q7cnhfbW9kZV90cmFja2VyKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtyeF9tb2RlX2xvY2spOwotCi0JcmV0dXJuIGNsZWFuOwotfQotCiAvKioKICAqIG5ldGlmX3J4X21vZGVfc3luYygpIC0gc3luYyByeCBtb2RlIGlubGluZQogICogQGRldjogbmV0d29yayBkZXZpY2UKQEAgLTE0NzMsMTEgJiM0MzsxNDA3LDYgQEAgYm9vbCBuZXRpZl9yeF9tb2RlX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAgKi8KIHZvaWQgbmV0aWZfcnhfbW9kZV9zeW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaWYgKG5ldGlmX3J4X21vZGVfY2xlYW4oZGV2KSkgewomIzQzOwlpZiAoX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpKQogCQluZXRpZl9yeF9tb2RlX3J1bihkZXYpOwotCQkvKiBVc2UgX19kZXZfcHV0KCkgYmVjYXVzZSBuZXRkZXZfdHJhY2tlcl9mcmVlKCkgd2FzIGFscmVhZHkKLQkJICogY2FsbGVkIGluc2lkZSBuZXRpZl9yeF9tb2RlX2NsZWFuKCkuCi0JCSAqLwotCQlfX2Rldl9wdXQoZGV2KTsKLQl9CiB9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXZfd29yay5jIGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzEwOWZhZTEzMmFkMTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRkZXZfd29yay5jCkBAIC0wLDAgJiM0MzsxLDE2MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9uZXRkZXZfbG9jay5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7ZGV2LmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKJiM0MzsKJiM0MzsvKiBAbmV0ZGV2X3dvcmtfbG9jayBwcm90ZWN0czoKJiM0MzsgKiAgLSBAbmV0ZGV2X3dvcmtfbGlzdAomIzQzOyAqICAtIHdpdGhpbiB0aGUgbGlzdCBlbnRyaWVzIChzdHJ1Y3QgbmV0X2RldmljZSBmaWVsZHMpOgomIzQzOyAqCS0gd29ya19ub2RlCiYjNDM7ICoJLSB3b3JrX3RyYWNrZXIKJiM0MzsgKgktIHdvcmtfcGVuZGluZwomIzQzOyAqCS0gd29ya19jb3JlX3BlbmRpbmcKJiM0MzsgKi8KJiM0MztzdGF0aWMgTElTVF9IRUFEKG5ldGRldl93b3JrX2xpc3QpOwomIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmV0ZGV2X3dvcmtfbG9jayk7CiYjNDM7c3RhdGljIERFQ0xBUkVfV09SSyhuZXRkZXZfd29yaywgbmV0ZGV2X3dvcmtfcHJvYyk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfZW5xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cywKJiM0MzsJCQkJdW5zaWduZWQgbG9uZyBjb3JlKQomIzQzO3sKJiM0MzsJaWYgKCFldmVudHMgJmFtcDsmYW1wOyAhY29yZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmV0ZGV2X3dvcmtfbG9jayk7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7ZGV2LSZndDt3b3JrX25vZGUpKSB7CiYjNDM7CQlsaXN0X2FkZF90YWlsKCZhbXA7ZGV2LSZndDt3b3JrX25vZGUsICZhbXA7bmV0ZGV2X3dvcmtfbGlzdCk7CiYjNDM7CQluZXRkZXZfaG9sZChkZXYsICZhbXA7ZGV2LSZndDt3b3JrX3RyYWNrZXIsIEdGUF9BVE9NSUMpOwomIzQzOwl9CiYjNDM7CWRldi0mZ3Q7d29ya19wZW5kaW5nIHw9IGV2ZW50czsKJiM0MzsJZGV2LSZndDt3b3JrX2NvcmVfcGVuZGluZyB8PSBjb3JlOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25ldGRldl93b3JrX2xvY2spOwomIzQzOwomIzQzOwlzY2hlZHVsZV93b3JrKCZhbXA7bmV0ZGV2X3dvcmspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZwomIzQzO25ldGRldl93b3JrX2RlcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyAqcGVuZGluZywKJiM0MzsJCSAgICB1bnNpZ25lZCBsb25nIG1hc2spCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGV2ZW50czsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmV0ZGV2X3dvcmtfbG9jayk7CiYjNDM7CWV2ZW50cyA9ICpwZW5kaW5nICZhbXA7IG1hc2s7CiYjNDM7CSpwZW5kaW5nICZhbXA7PSB+ZXZlbnRzOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtkZXYtJmd0O3dvcmtfbm9kZSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIWRldi0mZ3Q7d29ya19wZW5kaW5nICZhbXA7JmFtcDsgIWRldi0mZ3Q7d29ya19jb3JlX3BlbmRpbmcpIHsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtkZXYtJmd0O3dvcmtfbm9kZSk7CiYjNDM7CQluZXRkZXZfcHV0KGRldiwgJmFtcDtkZXYtJmd0O3dvcmtfdHJhY2tlcik7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZXRkZXZfd29ya19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGV2ZW50czsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBuZXRkZXZfd29ya19zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cykKJiM0Mzt7CiYjNDM7CW5ldGRldl93b3JrX2VucXVldWUoZGV2LCBldmVudHMsIDApOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBuZXRkZXZfd29ya19jYW5jZWwoKSAtIGNhbmNlbCBzZWxlY3RlZCB3b3JrIGZvciBhIG5ldGRldgomIzQzOyAqIEBkZXY6IG5ldF9kZXZpY2UKJiM0MzsgKiBAbWFzazogZXZlbnRzIHRvIGNhbmNlbAomIzQzOyAqCiYjNDM7ICogQ2xlYXIgQG1hc2sgZnJvbSB0aGUgZGV2aWNlJiMzOTtzIHdvcmsgcGVuZGluZyBtYXNrLiBJZiBubyB3b3JrIGlzIGxlZnQgcGVuZGluZwomIzQzOyAqIHRoZSBkZXZpY2UgaXMgZGVxdWV1ZWQgYW5kIGl0cyBuZG9fd29yayB3b24mIzM5O3QgYmUgY2FsbGVkLgomIzQzOyAqCiYjNDM7ICogTm8gZXhwZWN0YXRpb25zIG9uIGxvY2tpbmcsIGJ1dCBhbHNvIG5vIGd1YXJhbnRlZXMgcHJvdmlkZWQuIElmIHRoZSBjYWxsZXIKJiM0MzsgKiB3YW50cyB0byB0b3VjaCBAZGV2IGFmdGVyd2FyZHMgKGUuZy4gY2FsbCB0aGUgd29yayB0aGF0IGdvdCBjYW5jZWxlZCkKJiM0MzsgKiB0aGV5IGhhdmUgdG8gZW5zdXJlIEBkZXYgZG9lcyBub3QgZ2V0IGZyZWVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogdGhlIHN1YnNldCBvZiBAbWFzayB0aGF0IHdhcyBhY3R1YWxseSBwZW5kaW5nLCBzbyB0aGUgY2FsbGVyIGNhbiBydW4KJiM0MzsgKiB0aG9zZSBldmVudHMgaW5saW5lLgomIzQzOyAqLwomIzQzO3Vuc2lnbmVkIGxvbmcgbmV0ZGV2X3dvcmtfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgJmFtcDtkZXYtJmd0O3dvcmtfcGVuZGluZywgbWFzayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfY2FuY2VsKTsKJiM0MzsKJiM0Mzt2b2lkIF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cykKJiM0Mzt7CiYjNDM7CW5ldGRldl93b3JrX2VucXVldWUoZGV2LCAwLCBldmVudHMpOwomIzQzO30KJiM0MzsKJiM0Mzt1bnNpZ25lZCBsb25nCiYjNDM7X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spCiYjNDM7ewomIzQzOwlyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsICZhbXA7ZGV2LSZndDt3b3JrX2NvcmVfcGVuZGluZywgbWFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG5ldGRldl93b3JrX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cywKJiM0MzsJCQkgICAgdW5zaWduZWQgbG9uZyBjb3JlKQomIzQzO3sKJiM0MzsJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoY29yZSAmYW1wOyBORVRERVZfV09SS19SWF9NT0RFKQomIzQzOwkJbmV0aWZfcnhfbW9kZV9ydW4oZGV2KTsKJiM0MzsJaWYgKGV2ZW50cyAmYW1wOyZhbXA7IGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3dvcmspCiYjNDM7CQlkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb193b3JrKGRldiwgZXZlbnRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJd2hpbGUgKHRydWUpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMCwgY29yZSA9IDA7CiYjNDM7CQluZXRkZXZpY2VfdHJhY2tlciB0cmFja2VyOwomIzQzOwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO25ldGRldl93b3JrX2xvY2spOwomIzQzOwkJaWYgKGxpc3RfZW1wdHkoJmFtcDtuZXRkZXZfd29ya19saXN0KSkgewomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmV0ZGV2X3dvcmtfbG9jayk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7bmV0ZGV2X3dvcmtfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsCiYjNDM7CQkJCSAgICAgICB3b3JrX25vZGUpOwomIzQzOwkJLyogVGFrZSBhIHRlbXBvcmFyeSByZWZlcmVuY2Ugc28gQGRldiBjYW4mIzM5O3QgYmUgZnJlZWQgd2hpbGUgd2UKJiM0MzsJCSAqIGRyb3AgdGhlIGxvY2sgdG8gZ3JhYiBpdHMgb3BzIGxvY2s7IHRoZSB3b3JrIHJlZmVyZW5jZSBpcwomIzQzOwkJICogb25seSByZWxlYXNlZCBvbmNlIHdlIGNsYWltIHRoZSB3b3JrIGJlbG93LgomIzQzOwkJICogVGhlIHJlLWxvY2tpbmcgZGFuY2UgaXMgdG8gZW5zdXJlIHRoYXQgb3BzIGxvY2sgaXMgZW5vdWdoCiYjNDM7CQkgKiB0byBlbnN1cmUgY2FuY2VsaW5nIHdvcmsgaXMgbm90IHJhY3kgd2l0aCBkZXF1ZXVlLgomIzQzOwkJICovCiYjNDM7CQluZXRkZXZfaG9sZChkZXYsICZhbXA7dHJhY2tlciwgR0ZQX0FUT01JQyk7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25ldGRldl93b3JrX2xvY2spOwomIzQzOwomIzQzOwkJbmV0ZGV2X2xvY2tfb3BzKGRldik7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZXRkZXZfd29ya19sb2NrKTsKJiM0MzsJCWlmICghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7d29ya19ub2RlKSkgewomIzQzOwkJCWxpc3RfZGVsX2luaXQoJmFtcDtkZXYtJmd0O3dvcmtfbm9kZSk7CiYjNDM7CQkJY29yZSA9IGRldi0mZ3Q7d29ya19jb3JlX3BlbmRpbmc7CiYjNDM7CQkJZGV2LSZndDt3b3JrX2NvcmVfcGVuZGluZyA9IDA7CiYjNDM7CQkJZXZlbnRzID0gZGV2LSZndDt3b3JrX3BlbmRpbmc7CiYjNDM7CQkJZGV2LSZndDt3b3JrX3BlbmRpbmcgPSAwOwomIzQzOwkJCS8qIFdlIHRvb2sgYW5vdGhlciByZWYgYWJvdmUgKi8KJiM0MzsJCQluZXRkZXZfcHV0KGRldiwgJmFtcDtkZXYtJmd0O3dvcmtfdHJhY2tlcik7CiYjNDM7CiYjNDM7CQkJaWYgKCFkZXZfaXNhbGl2ZShkZXYpKQomIzQzOwkJCQljb3JlID0gZXZlbnRzID0gMDsKJiM0MzsJCX0KJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmV0ZGV2X3dvcmtfbG9jayk7CiYjNDM7CiYjNDM7CQluZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpOwomIzQzOwkJbmV0ZGV2X3VubG9ja19vcHMoZGV2KTsKJiM0MzsKJiM0MzsJCW5ldGRldl9wdXQoZGV2LCAmYW1wO3RyYWNrZXIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUKaW5kZXggYmUxMzBiZjU4NWE0MTkuLjYzNjRjYTAyNjQyZDY4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUKQEAgLTEzLDYgJiM0MzsxMyw3IEBAIFRFU1RfUFJPR1MgOj0gXAogCWJvbmRfb3B0aW9ucy5zaCBcCiAJYm9uZF9wYXNzaXZlX2xhY3Auc2ggXAogCWJvbmRfc3RhY2tlZF9oZWFkZXJfcGFyc2Uuc2ggXAomIzQzOwlib25kX3ZsYW5fcmVhbF9kZXYuc2ggXAogCWRldl9hZGRyX2xpc3RzLnNoIFwKIAltb2RlLTEtcmVjb3ZlcnktdXBkZWxheS5zaCBcCiAJbW9kZS0yLXJlY292ZXJ5LXVwZGVsYXkuc2ggXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3ZsYW5fcmVhbF9kZXYuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfdmxhbl9yZWFsX2Rldi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMC4uNTQyZDlmZmM0ODE5ZjkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfdmxhbl9yZWFsX2Rldi5zaApAQCAtMCwwICYjNDM7MSwxODAgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBUZXN0IHByb3BhZ2F0aW9uIG9mIGEgcmVhbCBkZXZpY2UmIzM5O3Mgc3RhdGUgdG8gdGhlIFZMQU5zIHN0YWNrZWQgb24gdG9wIG9mIGl0CiYjNDM7IyB3aGVuIHRoZSByZWFsIGRldmljZSBpcyAob3IgYmVjb21lcykgYSBib25kIG1lbWJlci4KJiM0MzsjCiYjNDM7IyBUaGUga2VybmVsIG1pcnJvcnMgYSByZWFsIGRldmljZSYjMzk7cyBVUC9ET1dOLCBNVFUgYW5kIGZlYXR1cmUgY2hhbmdlcyBvbnRvIGl0cwomIzQzOyMgVkxBTnMuICBUaGlzIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgKG5ldGRldl93b3JrKTogZG9pbmcgaXQgc3luY2hyb25vdXNseSBmcm9tCiYjNDM7IyB0aGUgcmVhbCBkZXZpY2UmIzM5O3Mgbm90aWZpZXIgY291bGQgZGVhZGxvY2suICBJZiB0aGUgcmVhbCBkZXZpY2UgaXMgYnJvdWdodCB1cAomIzQzOyMgd2hpbGUgZW5zbGF2ZWQgdG8gYSBib25kIC0gc28gaXRzIGluc3RhbmNlIGxvY2sgaXMgaGVsZCBhY3Jvc3MgTkVUREVWX1VQIC0gYW5kCiYjNDM7IyBhIFZMQU4gb24gdG9wIG9mIGl0IGlzIGl0c2VsZiBhIGJvbmQgbWVtYmVyLCB0aGUgc3luY2hyb25vdXMgcHJvcGFnYXRpb24KJiM0MzsjIHJlLWVudGVyZWQgdGhlIHN0YWNrIGFuZCB0cmllZCB0byB0YWtlIHRoZSBzYW1lIGluc3RhbmNlIGxvY2sgYWdhaW4uCiYjNDM7IwomIzQzOyMgQ292ZXIgYm90aCBoYWx2ZXM6CiYjNDM7IyAgLSB0aGUgZGVmZXJyZWQgVVAvRE9XTiwgTVRVIGFuZCBmZWF0dXJlIHByb3BhZ2F0aW9uIGFjdHVhbGx5IGxhbmRzIG9uIHRoZQomIzQzOyMgICAgVkxBTiAobGluayBzdGF0ZSBhbmQgTVRVIHVzZSBhbiBvcHMtbG9ja2VkIGR1bW15LCBpLmUuIHRoZSBkZWZlcnJhbCBwYXRoKSwKJiM0MzsjICAtIHRoZSBkZWFkbG9jay1wcm9uZSB0b3BvbG9neSAtIGEgVkxBTiBvbiBhIGR1bW15LCB3aXRoIHRoZSBWTEFOIGFuZCB0aGUKJiM0MzsjICAgIGR1bW15IGVhY2ggZW5zbGF2ZWQgdG8gYSBkaWZmZXJlbnQgYm9uZCAtIGNhbiBiZSBidWlsdCB3aXRob3V0IGhhbmdpbmcuCiYjNDM7CiYjNDM7QUxMX1RFU1RTPSYjMzQ7CiYjNDM7CXZsYW5fbGlua19zdGF0ZQomIzQzOwl2bGFuX210dQomIzQzOwl2bGFuX2ZlYXR1cmVzCiYjNDM7CXZsYW5fcmVhbF9kZXZfZW5zbGF2ZQomIzQzOyYjMzQ7CiYjNDM7CiYjNDM7UkVRVUlSRV9NWj1ubwomIzQzO05VTV9ORVRJRlM9MAomIzQzO2xpYl9kaXI9JChkaXJuYW1lICYjMzQ7JDAmIzM0OykKJiM0Mztzb3VyY2UgJiMzNDskbGliX2RpciYjMzQ7Ly4uLy4uLy4uL25ldC9mb3J3YXJkaW5nL2xpYi5zaAomIzQzOwomIzQzOyMgUmV0dXJuIDAgaWYgJGRldiBpbiBuZXRucyAkbnMgaGFzIGZsYWcgJGZsYWcgc2V0IChlLmcuIFVQKSBpbiBpdHMgJmx0Oy4uLiZndDsgZmxhZ3MuCiYjNDM7bGlua19oYXNfZmxhZygpCiYjNDM7ewomIzQzOwlsb2NhbCBucz0kMSBkZXY9JDIgZmxhZz0kMwomIzQzOwomIzQzOwlpcCAtbiAmIzM0OyRucyYjMzQ7IGxpbmsgc2hvdyBkZXYgJiMzNDskZGV2JiMzNDsgMiZndDsvZGV2L251bGwgfCBncmVwIC1xICYjMzQ7WyZsdDssXSR7ZmxhZ31bLCZndDtdJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7bGlua19sYWNrc19mbGFnKCkKJiM0Mzt7CiYjNDM7CSEgbGlua19oYXNfZmxhZyAmIzM0OyRAJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7bGlua19tdHVfaXMoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JDEgZGV2PSQyIHdhbnQ9JDMgY3VyCiYjNDM7CiYjNDM7CWN1cj0kKGlwIC1uICYjMzQ7JG5zJiMzNDsgbGluayBzaG93IGRldiAmIzM0OyRkZXYmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IFwKJiM0MzsJCXNlZCAtbiAmIzM5O3MvLiogbXR1IFwoWzAtOV1cJiM0MztcKS4qL1wxL3AmIzM5OykKJiM0MzsJWyAmIzM0OyRjdXImIzM0OyA9ICYjMzQ7JHdhbnQmIzM0OyBdCiYjNDM7fQomIzQzOwomIzQzO3ZsYW5fZmVhdHVyZV9pcygpCiYjNDM7ewomIzQzOwlsb2NhbCBucz0kMSBkZXY9JDIgZmVhdHVyZT0kMyB2YWx1ZT0kNAomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zJiMzNDsgZXRodG9vbCAtayAmIzM0OyRkZXYmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IFwKJiM0MzsJCWdyZXAgLXEgJiMzNDteJGZlYXR1cmU6ICR2YWx1ZSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2xpbmtfaGFzX21hc3RlcigpCiYjNDM7ewomIzQzOwlsb2NhbCBucz0kMSBkZXY9JDIgbWFzdGVyPSQzCiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JG5zJiMzNDsgLW8gbGluayBzaG93IGRldiAmIzM0OyRkZXYmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IGdyZXAgLXEgJiMzNDttYXN0ZXIgJG1hc3RlciYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3ZsYW5fbGlua19zdGF0ZSgpCiYjNDM7ewomIzQzOwlSRVQ9MAomIzQzOwomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgYWRkIGxzX2R1bW15IHR5cGUgZHVtbXkKJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGFkZCBsaW5rIGxzX2R1bW15IG5hbWUgbHNfdmxhbiB0eXBlIHZsYW4gaWQgMTAwCiYjNDM7CiYjNDM7CSMgQnJpbmdpbmcgdGhlIHJlYWwgZGV2aWNlIHVwIG11c3QgcHJvcGFnYXRlIFVQIHRvIHRoZSBWTEFOLgomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgc2V0IGxzX2R1bW15IHVwCiYjNDM7CWJ1c3l3YWl0ICYjMzQ7JEJVU1lXQUlUX1RJTUVPVVQmIzM0OyBsaW5rX2hhc19mbGFnICYjMzQ7JE5TJiMzNDsgbHNfdmxhbiBVUAomIzQzOwljaGVja19lcnIgJD8gJiMzNDtWTEFOIGRpZCBub3QgZ28gVVAgYWZ0ZXIgdGhlIHJlYWwgZGV2aWNlIHdlbnQgVVAmIzM0OwomIzQzOwomIzQzOwkjIC4uLiBhbmQgbGlrZXdpc2UgZm9yIERPV04uCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBzZXQgbHNfZHVtbXkgZG93bgomIzQzOwlidXN5d2FpdCAmIzM0OyRCVVNZV0FJVF9USU1FT1VUJiMzNDsgbGlua19sYWNrc19mbGFnICYjMzQ7JE5TJiMzNDsgbHNfdmxhbiBVUAomIzQzOwljaGVja19lcnIgJD8gJiMzNDtWTEFOIGRpZCBub3QgZ28gRE9XTiBhZnRlciB0aGUgcmVhbCBkZXZpY2Ugd2VudCBET1dOJiMzNDsKJiM0MzsKJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGRlbCBsc192bGFuCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBkZWwgbHNfZHVtbXkKJiM0MzsKJiM0MzsJbG9nX3Rlc3QgJiMzNDtWTEFOIGxpbmsgc3RhdGUgZm9sbG93cyB0aGUgcmVhbCBkZXZpY2UmIzM0OwomIzQzO30KJiM0MzsKJiM0Mzt2bGFuX210dSgpCiYjNDM7ewomIzQzOwlSRVQ9MAomIzQzOwomIzQzOwkjIFRoZSBWTEFOIGluaGVyaXRzIHRoZSByZWFsIGRldmljZSYjMzk7cyBNVFUgKDIwMDApIGF0IGNyZWF0aW9uIHRpbWUuCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBhZGQgbXR1X2R1bW15IG10dSAyMDAwIHR5cGUgZHVtbXkKJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGFkZCBsaW5rIG10dV9kdW1teSBuYW1lIG10dV92bGFuIHR5cGUgdmxhbiBpZCAxMDAKJiM0MzsKJiM0MzsJIyBTaHJpbmtpbmcgdGhlIHJlYWwgZGV2aWNlJiMzOTtzIE1UVSBtdXN0IGNsYW1wIHRoZSBWTEFOJiMzOTtzIE1UVS4KJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIHNldCBtdHVfZHVtbXkgbXR1IDE1MDAKJiM0MzsJYnVzeXdhaXQgJiMzNDskQlVTWVdBSVRfVElNRU9VVCYjMzQ7IGxpbmtfbXR1X2lzICYjMzQ7JE5TJiMzNDsgbXR1X3ZsYW4gMTUwMAomIzQzOwljaGVja19lcnIgJD8gJiMzNDtWTEFOIE1UVSBub3QgY2xhbXBlZCBhZnRlciB0aGUgcmVhbCBkZXZpY2UmIzM5O3MgTVRVIHNocmFuayYjMzQ7CiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBkZWwgbXR1X3ZsYW4KJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGRlbCBtdHVfZHVtbXkKJiM0MzsKJiM0MzsJbG9nX3Rlc3QgJiMzNDtWTEFOIE1UVSBjbGFtcGVkIHRvIHRoZSByZWFsIGRldmljZSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3ZsYW5fZmVhdHVyZXMoKQomIzQzO3sKJiM0MzsJUkVUPTAKJiM0MzsKJiM0MzsJIyBVc2UgdmV0aCBhcyB0aGUgcmVhbCBkZXZpY2U6IHVubGlrZSBkdW1teSBpdCBleHBvcnRzIHZsYW5fZmVhdHVyZXMsIHNvCiYjNDM7CSMgdGhlIFZMQU4gYWN0dWFsbHkgaW5oZXJpdHMgYSB0b2dnbGVhYmxlIG9mZmxvYWQgdG8gYXNzZXJ0IG9uLgomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgYWRkIGZ0X3ZldGggdHlwZSB2ZXRoIHBlZXIgbmFtZSBmdF92ZXRoX3ByCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBhZGQgbGluayBmdF92ZXRoIG5hbWUgZnRfdmxhbiB0eXBlIHZsYW4gaWQgMTAwCiYjNDM7CiYjNDM7CXZsYW5fZmVhdHVyZV9pcyAmIzM0OyROUyYjMzQ7IGZ0X3ZsYW4gc2NhdHRlci1nYXRoZXIgb24KJiM0MzsJY2hlY2tfZXJyICQ/ICYjMzQ7VkxBTiBkaWQgbm90IGluaGVyaXQgc2NhdHRlci1nYXRoZXIgZnJvbSB0aGUgcmVhbCBkZXZpY2UmIzM0OwomIzQzOwomIzQzOwkjIFRvZ2dsaW5nIHRoZSBvZmZsb2FkIG9uIHRoZSByZWFsIGRldmljZSBtdXN0IHByb3BhZ2F0ZSB0byB0aGUgVkxBTi4KJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyROUyYjMzQ7IGV0aHRvb2wgLUsgZnRfdmV0aCBzZyBvZmYKJiM0MzsJYnVzeXdhaXQgJiMzNDskQlVTWVdBSVRfVElNRU9VVCYjMzQ7IFwKJiM0MzsJCXZsYW5fZmVhdHVyZV9pcyAmIzM0OyROUyYjMzQ7IGZ0X3ZsYW4gc2NhdHRlci1nYXRoZXIgb2ZmCiYjNDM7CWNoZWNrX2VyciAkPyAmIzM0O1ZMQU4gc2NhdHRlci1nYXRoZXIgc3RpbGwgb24gYWZ0ZXIgZGlzYWJsaW5nIGl0IG9uIHJlYWwgZGV2JiMzNDsKJiM0MzsKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyROUyYjMzQ7IGV0aHRvb2wgLUsgZnRfdmV0aCBzZyBvbgomIzQzOwlidXN5d2FpdCAmIzM0OyRCVVNZV0FJVF9USU1FT1VUJiMzNDsgXAomIzQzOwkJdmxhbl9mZWF0dXJlX2lzICYjMzQ7JE5TJiMzNDsgZnRfdmxhbiBzY2F0dGVyLWdhdGhlciBvbgomIzQzOwljaGVja19lcnIgJD8gJiMzNDtWTEFOIHNjYXR0ZXItZ2F0aGVyIHN0aWxsIG9mZiBhZnRlciBlbmFibGluZyBpdCBvbiByZWFsIGRldiYjMzQ7CiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBkZWwgZnRfdmxhbgomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgZGVsIGZ0X3ZldGgKJiM0MzsKJiM0MzsJbG9nX3Rlc3QgJiMzNDtWTEFOIGZlYXR1cmVzIGZvbGxvdyB0aGUgcmVhbCBkZXZpY2UmIzM0OwomIzQzO30KJiM0MzsKJiM0Mzt2bGFuX3JlYWxfZGV2X2Vuc2xhdmUoKQomIzQzO3sKJiM0MzsJUkVUPTAKJiM0MzsKJiM0MzsJIyBkdW1teSAmbHQ7LSBWTEFOIC0mZ3Q7IGJvbmQwLCB0aGVuIGVuc2xhdmUgdGhlIGR1bW15IGl0c2VsZiB0byBib25kMS4gIFRoZQomIzQzOwkjIGxhc3Qgc3RlcCBicmluZ3MgdGhlIGR1bW15IHVwIHVuZGVyIGJvbmQxJiMzOTtzIGluc3RhbmNlIGxvY2ssIHdoaWNoIHVzZWQKJiM0MzsJIyB0byBkZWFkbG9jayB3aGlsZSBzeW5jaHJvbm91c2x5IHByb3BhZ2F0aW5nIFVQIHRvIHRoZSAoYm9uZC1lbnNsYXZlZCkKJiM0MzsJIyBWTEFOIG9uIHRvcC4KJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGFkZCBkbF9kdW1teSB0eXBlIGR1bW15CiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBzZXQgZGxfZHVtbXkgdXAKJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGFkZCBsaW5rIGRsX2R1bW15IG5hbWUgZGxfdmxhbiB0eXBlIHZsYW4gaWQgMTAwCiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBhZGQgZGxfYm9uZDAgdHlwZSBib25kIG1vZGUgYWN0aXZlLWJhY2t1cAomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgc2V0IGRsX3ZsYW4gZG93bgomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgc2V0IGRsX3ZsYW4gbWFzdGVyIGRsX2JvbmQwCiYjNDM7CWNoZWNrX2VyciAkPyAmIzM0O2NvdWxkIG5vdCBlbnNsYXZlIHRoZSBWTEFOIHRvIGJvbmQwJiMzNDsKJiM0MzsKJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGFkZCBkbF9ib25kMSB0eXBlIGJvbmQgbW9kZSBhY3RpdmUtYmFja3VwCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBzZXQgZGxfZHVtbXkgZG93bgomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgc2V0IGRsX2R1bW15IG1hc3RlciBkbF9ib25kMQomIzQzOwljaGVja19lcnIgJD8gJiMzNDtjb3VsZCBub3QgZW5zbGF2ZSB0aGUgcmVhbCBkZXZpY2UgdG8gYm9uZDEmIzM0OwomIzQzOwomIzQzOwkjIElmIHdlIGdvdCBoZXJlIHRoZSBrZXJuZWwgZGlkIG5vdCBkZWFkbG9jazsgbWFrZSBzdXJlIGl0IGlzIHN0aWxsCiYjNDM7CSMgcmVzcG9uc2l2ZSBhbmQgdGhlIGVuc2xhdmUgcmVhbGx5IHRvb2sgZWZmZWN0LgomIzQzOwlsaW5rX2hhc19tYXN0ZXIgJiMzNDskTlMmIzM0OyBkbF9kdW1teSBkbF9ib25kMQomIzQzOwljaGVja19lcnIgJD8gJiMzNDtyZWFsIGRldmljZSBub3QgZW5zbGF2ZWQgdG8gYm9uZDEmIzM0OwomIzQzOwomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgZGVsIGRsX2JvbmQxCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBkZWwgZGxfYm9uZDAKJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGRlbCBkbF92bGFuCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBkZWwgZGxfZHVtbXkKJiM0MzsKJiM0MzsJbG9nX3Rlc3QgJiMzNDtWTEFOIHJlYWwgZGV2aWNlIGVuc2xhdmVkIHRvIGEgc2Vjb25kIGJvbmQmIzM0OwomIzQzO30KJiM0MzsKJiM0MztzZXR1cF9ucyBOUwomIzQzO3RyYXAgJiMzOTtjbGVhbnVwX25zICROUyYjMzk7IEVYSVQKJiM0MzsKJiM0Mzt0ZXN0c19ydW4KJiM0MzsKJiM0MztleGl0ICYjMzQ7JEVYSVRfU1RBVFVTJiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIERlZmVycmVkIE5ldHdvcmsgRGV2aWNlIFdvcmsqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyB3ZSBoYW5kbGUgbmV0d29yayBkZXZpY2UgZXZlbnRzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBWTEFOcyBhbmQgdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGludHJvZHVjZSBhIGRlZmVycmVkIHdvcmsgbWVjaGFuaXNtIHRvIGF2b2lkIHNvbWUgbmFzdHkgcG90ZW50aWFsIGRlYWRsb2NrcyB0aGF0IGNhbiBhcmlzZSBmcm9tIG5lc3RlZCBub3RpZmljYXRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoaW5ncyBsaWtlIGBORVRERVZfRE9XTmAsIGBORVRERVZfVVBgLCBgTkVUREVWX0NIQU5HRU1UVWAsIGFuZCBgTkVUREVWX0ZFQVRfQ0hBTkdFYC4gRXNzZW50aWFsbHksIHdlJiMzOTtyZSByZXBsYWNpbmcgdGhlIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiB3aXRoIGFzeW5jaHJvbm91cyB3b3JrIHRvIGJlIGRvbmUgbGF0ZXIuCgpUaGUgY2hhbmdlcyBhcmUgZmFpcmx5IHdpZGVzcHJlYWQsIHRvdWNoaW5nIGZpbGVzIGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYCwgdmFyaW91cyBWTEFOLXJlbGF0ZWQgZmlsZXMgKGB2bGFuLmNgLCBgdmxhbi5oYCwgYHZsYW5fZGV2LmNgKSwgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgKGBkZXYuY2AsIGBkZXYuaGAsIGBkZXZfYWRkcl9saXN0cy5jYCwgYE1ha2VmaWxlYCksIGFuZCBldmVuIGEgbmV3IGZpbGUgc3BlY2lmaWNhbGx5IGZvciB0aGlzIGRlZmVycmVkIHdvcmsgKGBuZXRkZXZfd29yay5jYCkg4oCTIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBhIG5ldyBzZWxmdGVzdCBzY3JpcHQsIGBib25kX3ZsYW5fcmVhbF9kZXYuc2hgLCB3aGljaCBpcyBhIGdvb2Qgc2lnbjsgdGhhdCYjMzk7cyBncmVhdCBmb3IgdmVyaWZ5aW5nIHRoYXQgdGhlc2UgY2hhbmdlcyB3b3JrIGFzIGludGVuZGVkLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgZ2l2ZW4gaXRzIGltcGFjdCBvbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLCB0aGlzIHBhdGNoIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nIGFuZCBmdXJ0aGVyIHNjcnV0aW55LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgYW55IHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29yZSBzeW1ib2xzIGludm9sdmVkLiBJIHNlZSBhIGZldyBrZXkgZnVuY3Rpb25zOiBgbmV0ZGV2X3dvcmtfc2NoZWRgLCBgbmV0ZGV2X3dvcmtfY2FuY2VsYCwgYF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZGAsIGBfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsYCwgYG5ldGRldl93b3JrX3J1bmAsIGBuZXRkZXZfd29ya19wcm9jYCwgYW5kIG9mIGNvdXJzZSB0aGUgVkxBTi1zcGVjaWZpYyBgdmxhbl9kZXZfd29ya2AuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5cG9pbnQgdG8gbG9vayBmb3IgY2FsbGVycyBhbmQgdGhlaXIgYmVoYXZpb3IuCgpJIHdhbnQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uLiBJIGtub3cgdGhlIGNoYW5nZXMgYXJlIG1vc3RseSBpbiBgbmV0L2NvcmUvYCBhbmQgYG5ldC84MDIxcS9gLiBgbmV0L2NvcmUvYCBpcyBwcmV0dHkgbXVjaCBhbHdheXMgaW5jbHVkZWQsIGJ1dCB0aGUgVkxBTiBjb2RlIGlzIGdvaW5nIHRvIGRlcGVuZCBvbiBgQ09ORklHX1ZMQU5fODAyMVFgLiBJIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGF0JiMzOTtzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZywgc28gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBuZXQvODAyMXEvS2NvbmZpZ2AgYW5kIGBuZXQvTWFrZWZpbGVgIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvODAyMXEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnLTUtXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXG5uZXQvODAyMXEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XCYjMzQ7XG4tLVxubmV0LzgwMjFxL0tjb25maWctMjEtXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7R1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xubmV0LzgwMjFxL0tjb25maWc6MjQ6XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbm5ldC84MDIxcS9LY29uZmlnLTI1LVx0c2VsZWN0IEdBUlBcbi0tXG5uZXQvODAyMXEvS2NvbmZpZy0zMS1cbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcbm5ldC84MDIxcS9LY29uZmlnLTMzLVx0Ym9vbCBcJiMzNDtNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xubmV0LzgwMjFxL0tjb25maWc6MzQ6XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbm5ldC84MDIxcS9LY29uZmlnLTM1LVx0c2VsZWN0IE1SUFxuLS1cbm5ldC84MDIxcS9NYWtlZmlsZS00LSNcbm5ldC84MDIxcS9NYWtlZmlsZTo1Om9iai0kKHN1YnN0IG0seSwkKENPTkZJR19WTEFOXzgwMjFRKSlcdCYjNDM7PSB2bGFuX2NvcmUub1xubmV0LzgwMjFxL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpXHRcdCYjNDM7PSA4MDIxcS5vXG5uZXQvODAyMXEvTWFrZWZpbGUtNy1cbm5ldC84MDIxcS9NYWtlZmlsZS04LTgwMjFxLXlcdFx0XHRcdFx0Oj0gdmxhbi5vIHZsYW5fZGV2Lm8gdmxhbl9uZXRsaW5rLm9cbm5ldC84MDIxcS9NYWtlZmlsZTo5OjgwMjFxLSQoQ09ORklHX1ZMQU5fODAyMVFfR1ZSUClcdFx0JiM0Mzs9IHZsYW5fZ3ZycC5vXG5uZXQvODAyMXEvTWFrZWZpbGU6MTA6ODAyMXEtJChDT05GSUdfVkxBTl84MDIxUV9NVlJQKVx0XHQmIzQzOz0gdmxhbl9tdnJwLm9cbm5ldC84MDIxcS9NYWtlZmlsZS0xMS04MDIxcS0kKENPTkZJR19QUk9DX0ZTKVx0XHRcdCYjNDM7PSB2bGFucHJvYy5vXG4tLVxubmV0LzgwMjFxL3ZsYW4uaD0xNTg9c3RhdGljIGlubGluZSB1MzIgdmxhbl9nZXRfaW5ncmVzc19wcmlvcml0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC84MDIxcS92bGFuLmgtMTY1LVxubmV0LzgwMjFxL3ZsYW4uaDoxNjY6I2lmZGVmIENPTkZJR19WTEFOXzgwMjFRX0dWUlBcbm5ldC84MDIxcS92bGFuLmgtMTY3LWludCB2bGFuX2d2cnBfcmVxdWVzdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuLS1cbm5ldC84MDIxcS92bGFuLmg9MTc5PXN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2d2cnBfdW5pbml0KHZvaWQpIHt9XG4tLVxubmV0LzgwMjFxL3ZsYW4uaC0xODEtXG5uZXQvODAyMXEvdmxhbi5oOjE4MjojaWZkZWYgQ09ORklHX1ZMQU5fODAyMVFfTVZSUFxubmV0LzgwMjFxL3ZsYW4uaC0xODMtaW50IHZsYW5fbXZycF9yZXF1ZXN0X2pvaW4oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5ODQKCQkJCQkJCW91dHB1dDogMjExCgkJCQkJCQl0aG91Z2h0czogNTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIE5ldHdvcmsgRGV2aWNlIEFzeW5jaHJvbm91cyBXb3JrIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyB0aGUgY29uZmlnIHVuZGVyIGNvbnNpZGVyYXRpb24gaGVyZSBpcyBgVkxBTl84MDIxUWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGJ1dCBJIHN1c3BlY3QgdGhhdCB0aGlzIGlzIHRoZSBwcmltYXJ5IGZvY3VzLiBHaXZlbiB0aGF0IHRoZSB0ZXN0IGZyYW1ld29yayBsZXZlcmFnZXMgYm9uZGluZywgYEJPTkRJTkdgIGNvdWxkIGJlIHVzZWZ1bCB0byBlbmFibGUsIGFsdGhvdWdoIHRoZSBjb3JlIGxvZ2ljIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBpcyBjbGVhcmx5IGluIGBuZXRkZXZfd29yay5jYCBhbmQgYHZsYW5fZGV2LmNgLiBJJiMzOTtsbCBhZGQgYm90aCBgVkxBTl84MDIxUWAgYW5kIGBCT05ESU5HYCB0byBgRW5hYmxlQ29uZmlnc2AuCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcyBwb3RlbnRpYWwgdGFyZ2V0cyBmb3IgZnV6emluZzogYG5ldGRldl93b3JrX3NjaGVkYCwgYG5ldGRldl93b3JrX2NhbmNlbGAsIGBfX25ldGRldl93b3JrX2NvcmVfc2NoZWRgLCBgX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbGAsIGBuZXRkZXZfd29ya19ydW5gLCBgbmV0ZGV2X3dvcmtfcHJvY2AsIGFuZCBgdmxhbl9kZXZfd29ya2AuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlIHZpc2liaWxpdHkgb2YgdGhlc2Ugc3ltYm9scywgYW5kIHdoZXRoZXIgdGhleSBhcmUgc3RhdGljIG9yIGV4cG9ydGVkLiBPa2F5LCBgbmV0ZGV2X3dvcmtfcHJvY2AsIGBuZXRkZXZfd29ya19ydW5gIGFuZCBgdmxhbl9kZXZfd29ya2AgYXJlIHN0YXRpYywgd2hpbGUgYG5ldGRldl93b3JrX3NjaGVkYCBhbmQgYG5ldGRldl93b3JrX2NhbmNlbGAgYXJlIGV4cG9ydGVkLiBUaGUgYF9fbmV0ZGV2X3dvcmtfY29yZV8qYCBzeW1ib2xzIGFyZSBnbG9iYWwsIGJ1dCBub3QgZXhwb3J0ZWQuCgpNeSBmdXp6IHRhcmdldCBsaXN0IHdpbGwgY29uc2lzdCBvZjoKKiAgIGBuZXRkZXZfd29ya19zY2hlZGAKKiAgIGBuZXRkZXZfd29ya19jYW5jZWxgCiogICBgbmV0ZGV2X3dvcmtfcHJvY2AKKiAgIGBuZXRkZXZfd29ya19ydW5gCiogICBgdmxhbl9kZXZfd29ya2AKKiAgIGB2bGFuX2RldmljZV9ldmVudGAgKHdoaWNoIHdhcyBtb2RpZmllZCBpbiB0aGUgcGF0Y2gpCiogICBgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgKGFub3RoZXIgbW9kaWZpZWQgZnVuY3Rpb24pCgpJJiMzOTtsbCBjb25maXJtIHRoYXQgYG5ldGRldl93b3JrX3Byb2NgIGlzIGluZGVlZCB0aGUgd29ya3F1ZXVlIGNhbGxiYWNrLiBZZXMsIGl0IGlzLgoKVGhlIHJhdGlvbmFsZSBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGFzeW5jaHJvbm91cyB3b3JrIG1lY2hhbmlzbSAoYG5ldGRldl93b3JrYCkgZm9yIG5ldHdvcmsgZGV2aWNlcyBhbmQgaW50ZWdyYXRlcyBpdCB3aXRoIHRoZSBWTEFOIGRyaXZlci4gVGhlIGdvYWwgaXMgdG8gaGFuZGxlIHN0YXRlIHByb3BhZ2F0aW9uIChNVFUsIGZlYXR1cmVzLCBsaW5rIHN0YXRlKSBtb3JlIGVmZmljaWVudGx5IGFuZCBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzLiBUaGlzIGlzIGEgY3J1Y2lhbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29yayBhbmQgVkxBTiBsb2dpYy4gQ3JpdGljYWxseSwgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggbmV0bGluayBhbmQgaW9jdGxzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmdXp6IHRoaXMgaW1wbGVtZW50YXRpb24gdGhvcm91Z2hseSB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLCBvciBjb25jdXJyZW5jeSBidWdzIHRoYXQgdGhpcyBuZXcgYXN5bmNocm9ub3VzIG1lY2hhbmlzbSBtaWdodCBpbnRyb2R1Y2UuCgpUaGUgZm9jdXMgc3ltYm9scyBsb29rIGdvb2QgdG8gbWUuIFRoaXMgY2hhbmdlIGlzIGFic29sdXRlbHkgJiMzNDtXb3J0aEZ1enppbmc6IHRydWUmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtCT05ESU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X3dvcmtfc2NoZWQmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfY2FuY2VsJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3Byb2MmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssCiAgICAmIzM0O3ZsYW5fZGV2X3dvcmsmIzM0OywKICAgICYjMzQ7dmxhbl9kZXZpY2VfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXN5bmNocm9ub3VzIHdvcmsgbWVjaGFuaXNtIChgbmV0ZGV2X3dvcmtgKSBmb3IgbmV0d29yayBkZXZpY2VzIGFuZCBtb2RpZmllcyB0aGUgVkxBTiBkcml2ZXIgdG8gdXNlIGl0IGZvciBzdGF0ZSBwcm9wYWdhdGlvbiAoTVRVLCBmZWF0dXJlcywgbGluayBzdGF0ZSkgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyBuZXN0ZWQgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbmV0d29ya2luZyBhbmQgVkxBTiBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IG1vZGlmeWluZyBkZXZpY2Ugc3RhdGVzIChlLmcuLCBicmluZ2luZyBkZXZpY2VzIHVwL2Rvd24sIGNoYW5naW5nIE1UVSkuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgYXN5bmNocm9ub3VzIG1lY2hhbmlzbSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgY29uY3VycmVuY3kgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtCT05ESU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X3dvcmtfc2NoZWQmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfY2FuY2VsJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3Byb2MmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssCiAgICAmIzM0O3ZsYW5fZGV2X3dvcmsmIzM0OywKICAgICYjMzQ7dmxhbl9kZXZpY2VfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXN5bmNocm9ub3VzIHdvcmsgbWVjaGFuaXNtIChgbmV0ZGV2X3dvcmtgKSBmb3IgbmV0d29yayBkZXZpY2VzIGFuZCBtb2RpZmllcyB0aGUgVkxBTiBkcml2ZXIgdG8gdXNlIGl0IGZvciBzdGF0ZSBwcm9wYWdhdGlvbiAoTVRVLCBmZWF0dXJlcywgbGluayBzdGF0ZSkgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyBuZXN0ZWQgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbmV0d29ya2luZyBhbmQgVkxBTiBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IG1vZGlmeWluZyBkZXZpY2Ugc3RhdGVzIChlLmcuLCBicmluZ2luZyBkZXZpY2VzIHVwL2Rvd24sIGNoYW5naW5nIE1UVSkuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgYXN5bmNocm9ub3VzIG1lY2hhbmlzbSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgY29uY3VycmVuY3kgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE4OjQ1OjE5LjA1NTk2MTY5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDUyMjY3MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIkJPTkRJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfd29ya19zY2hlZFwiLFxuICAgIFwibmV0ZGV2X3dvcmtfY2FuY2VsXCIsXG4gICAgXCJuZXRkZXZfd29ya19wcm9jXCIsXG4gICAgXCJuZXRkZXZfd29ya19ydW5cIixcbiAgICBcInZsYW5fZGV2X3dvcmtcIixcbiAgICBcInZsYW5fZGV2aWNlX2V2ZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXN5bmNocm9ub3VzIHdvcmsgbWVjaGFuaXNtIChgbmV0ZGV2X3dvcmtgKSBmb3IgbmV0d29yayBkZXZpY2VzIGFuZCBtb2RpZmllcyB0aGUgVkxBTiBkcml2ZXIgdG8gdXNlIGl0IGZvciBzdGF0ZSBwcm9wYWdhdGlvbiAoTVRVLCBmZWF0dXJlcywgbGluayBzdGF0ZSkgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyBuZXN0ZWQgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbmV0d29ya2luZyBhbmQgVkxBTiBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IG1vZGlmeWluZyBkZXZpY2Ugc3RhdGVzIChlLmcuLCBicmluZ2luZyBkZXZpY2VzIHVwL2Rvd24sIGNoYW5naW5nIE1UVSkuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgYXN5bmNocm9ub3VzIG1lY2hhbmlzbSBkb2Vzbid0IGludHJvZHVjZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBvdGhlciBjb25jdXJyZW5jeSBidWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxODo0NToxOS4wNTU5Njc5NzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzAxNDAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM3ZTA4ZThhMTJlM2I1NTcxZmI3N2UzZTk5ZDBjZjA2MTc0YTljMWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTg6NDU6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XFxuaW5kZXggZmRlNjAxYWNkMWQyNWEuLmQyYTIzOGY4Y2M4YjkxIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxcbkBAIC00MzMsNiArNDMzLDggQEAgZXhjZXB0aW9ucykgbm90aWZpZXJzIHJ1biB1bmRlciB0aGUgaW5zdGFuY2UgbG9jay4gUGxlYXNlIGV4dGVuZCB0aGlzXFxuIGRvY3VtZW50YXRpb24gd2hlbmV2ZXIgeW91IG1ha2UgZXhwbGljaXQgYXNzdW1wdGlvbiBhYm91dCBsb2NrIGJlaW5nIGhlbGRcXG4gZnJvbSBhIG5vdGlmaWVyLlxcbiBcXG4rRHJpdmVycyAqKm11c3Qgbm90KiogZ2VuZXJhdGUgbmVzdGVkIG5vdGlmaWNhdGlvbnMgb2YgdGhlIG9wcy1sb2NrZWQgdHlwZXMuXFxuK1xcbiBORVRERVZfSU5URVJOQUwgc3ltYm9sIG5hbWVzcGFjZVxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCBiNjdhMTI1NDFlYWMyOC4uOTk4MWQ2MzdmOGI1NDYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtMTEzMSw2ICsxMTMxLDkgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xcbiAgKlxcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKS4gUmV0dXJuIDAgb24gc3VjY2VzcyBvciBhXFxuICAqXFx0bmVnYXRpdmUgZXJybm8gdG8gcmVxdWVzdCBhIHJldHJ5IHZpYSB0aGUgY29yZSBiYWNrb2ZmLlxcbiAgKlxcbisgKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcXG4rICpcXHRSdW4gZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZChAZXZlbnRzKS5cXG4rICpcXG4gICogaW50ICgqbmRvX3NldF9tYWNfYWRkcmVzcykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcik7XFxuICAqXFx0VGhpcyBmdW5jdGlvbiAgaXMgY2FsbGVkIHdoZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIGFkZHJlc3NcXG4gICpcXHRuZWVkcyB0byBiZSBjaGFuZ2VkLiBJZiB0aGlzIGludGVyZmFjZSBpcyBub3QgZGVmaW5lZCwgdGhlXFxuQEAgLTE0NjAsNiArMTQ2Myw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKTtcXG4rXFx0dm9pZFxcdFxcdFxcdCgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGV2ZW50cyk7XFxuIFxcdGludFxcdFxcdFxcdCgqbmRvX3NldF9tYWNfYWRkcmVzcykoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmFkZHIpO1xcbiBcXHRpbnRcXHRcXHRcXHQoKm5kb192YWxpZGF0ZV9hZGRyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5AQCAtMTkzMCw4ICsxOTM1LDExIEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XFxuICAqXFx0XFx0XFx0XFx0aGFzIGJlZW4gZW5hYmxlZCBkdWUgdG8gdGhlIG5lZWQgdG8gbGlzdGVuIHRvXFxuICAqXFx0XFx0XFx0XFx0YWRkaXRpb25hbCB1bmljYXN0IGFkZHJlc3NlcyBpbiBhIGRldmljZSB0aGF0XFxuICAqXFx0XFx0XFx0XFx0ZG9lcyBub3QgaW1wbGVtZW50IG5kb19zZXRfcnhfbW9kZSgpXFxuLSAqXFx0QHJ4X21vZGVfbm9kZTpcXHRcXHRMaXN0IGVudHJ5IGZvciByeF9tb2RlIHdvcmsgcHJvY2Vzc2luZ1xcbi0gKlxcdEByeF9tb2RlX3RyYWNrZXI6XFx0UmVmY291bnQgdHJhY2tlciBmb3IgcnhfbW9kZSB3b3JrXFxuKyAqXFx0QHdvcmtfbm9kZTpcXHRcXHRMaXN0IGVudHJ5IGZvciBhc3luYyBuZXRkZXZfd29yayBwcm9jZXNzaW5nXFxuKyAqXFx0QHdvcmtfdHJhY2tlcjpcXHRcXHRSZWZjb3VudCB0cmFja2VyIGZvciBhc3luYyBuZXRkZXZfd29ya1xcbisgKlxcdEB3b3JrX3BlbmRpbmc6XFx0XFx0RHJpdmVyLWRlZmluZWQgcGVuZGluZyBuZXRkZXZfd29yaywgcGFzc2VkIHRvXFxuKyAqXFx0XFx0XFx0XFx0bmRvX3dvcmsoKSAoc2VlIG5ldGRldl93b3JrX3NjaGVkKCkpXFxuKyAqXFx0QHdvcmtfY29yZV9wZW5kaW5nOlxcdENvcmUtZGVmaW5lZCBwZW5kaW5nIG5ldGRldl93b3JrIChORVRERVZfV09SS18qKVxcbiAgKlxcdEByeF9tb2RlX2FkZHJfY2FjaGU6XFx0UmVjeWNsZWQgc25hcHNob3QgZW50cmllcyBmb3IgcnhfbW9kZSB3b3JrXFxuICAqXFx0QHJ4X21vZGVfcmV0cnlfdGltZXI6XFx0VGltZXIgdGhhdCByZS1xdWV1ZXMgcnhfbW9kZSB3b3JrIGFmdGVyIGZhaWx1cmVcXG4gICpcXHRAcnhfbW9kZV9yZXRyeV9jb3VudDpcXHROdW1iZXIgb2YgY29uc2VjdXRpdmUgcmV0cmllcyBhbHJlYWR5IHNjaGVkdWxlZFxcbkBAIC0yMzI2LDggKzIzMzQsMTAgQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRwcm9taXNjdWl0eTtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0YWxsbXVsdGk7XFxuIFxcdGJvb2xcXHRcXHRcXHR1Y19wcm9taXNjO1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0cnhfbW9kZV9ub2RlO1xcbi1cXHRuZXRkZXZpY2VfdHJhY2tlclxcdHJ4X21vZGVfdHJhY2tlcjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdHdvcmtfbm9kZTtcXG4rXFx0bmV0ZGV2aWNlX3RyYWNrZXJcXHR3b3JrX3RyYWNrZXI7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHR3b3JrX3BlbmRpbmc7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHR3b3JrX2NvcmVfcGVuZGluZztcXG4gXFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3RcXHRyeF9tb2RlX2FkZHJfY2FjaGU7XFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0XFx0cnhfbW9kZV9yZXRyeV90aW1lcjtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0cnhfbW9kZV9yZXRyeV9jb3VudDtcXG5AQCAtNTE3Niw2ICs1MTg2LDkgQEAgdm9pZCBkZXZfZmV0Y2hfc3dfbmV0c3RhdHMoc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzLFxcbiBcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyBfX3BlcmNwdSAqbmV0c3RhdHMpO1xcbiB2b2lkIGRldl9nZXRfdHN0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzKTtcXG4gXFxuK3ZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xcbit1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spO1xcbitcXG4gZW51bSB7XFxuIFxcdE5FU1RFRF9TWU5DX0lNTV9CSVQsXFxuIFxcdE5FU1RFRF9TWU5DX1RPRE9fQklULFxcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uY1xcbmluZGV4IDJiNzRlZDU2ZWIxNjZkLi4yZDJlZmI4Nzc5NzVkNSAxMDA2NDRcXG4tLS0gYS9uZXQvODAyMXEvdmxhbi5jXFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uY1xcbkBAIC03Nyw5ICs3Nyw5IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbilcXG4rdm9pZCB2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pXFxuIHtcXG4gXFx0aWYgKCEodmxhbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTEFOX0ZMQUdfQlJJREdFX0JJTkRJTkcpKVxcbiBcXHRcXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpO1xcbkBAIC0zMTYsMjkgKzMxNiw2IEBAIHN0YXRpYyB2b2lkIHZsYW5fc3luY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGV0aGVyX2FkZHJfY29weSh2bGFuLVxcdTAwM2VyZWFsX2Rldl9hZGRyLCBkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdmxhbl90cmFuc2Zlcl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldilcXG4te1xcbi1cXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XFxuLVxcbi1cXHRuZXRpZl9pbmhlcml0X3Rzb19tYXgodmxhbmRldiwgZGV2KTtcXG4tXFxuLVxcdGlmICh2bGFuX2h3X29mZmxvYWRfY2FwYWJsZShkZXYtXFx1MDAzZWZlYXR1cmVzLCB2bGFuLVxcdTAwM2V2bGFuX3Byb3RvKSlcXG4tXFx0XFx0dmxhbmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuLVxcdGVsc2VcXG4tXFx0XFx0dmxhbmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBWTEFOX0hMRU47XFxuLVxcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfRkNPRSlcXG4tXFx0dmxhbmRldi1cXHUwMDNlZmNvZV9kZHBfeGlkID0gZGV2LVxcdTAwM2VmY29lX2RkcF94aWQ7XFxuLSNlbmRpZlxcbi1cXG4tXFx0dmxhbmRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+SUZGX1hNSVRfRFNUX1JFTEVBU0U7XFxuLVxcdHZsYW5kZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gKHZsYW4tXFx1MDAzZXJlYWxfZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1hNSVRfRFNUX1JFTEVBU0UpO1xcbi1cXHR2bGFuZGV2LVxcdTAwM2Vod19lbmNfZmVhdHVyZXMgPSB2bGFuX3RubF9mZWF0dXJlcyh2bGFuLVxcdTAwM2VyZWFsX2Rldik7XFxuLVxcbi1cXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKHZsYW5kZXYpO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IF9fdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcXG4ge1xcbiBcXHRpbnQgZXJyID0gMDtcXG5AQCAtMzkxLDEzICszNjgsMTEgQEAgc3RhdGljIHZvaWQgdmxhbl92aWQwX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBzdGF0aWMgaW50IHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbiBcXHRcXHRcXHQgICAgIHZvaWQgKnB0cilcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19leHRhY2socHRyKTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiBcXHRzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwO1xcbiBcXHRzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm87XFxuIFxcdGludCBpLCBmbGdzO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldjtcXG4tXFx0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW47XFxuIFxcdGJvb2wgbGFzdCA9IGZhbHNlO1xcbiBcXHRMSVNUX0hFQUQobGlzdCk7XFxuIFxcdGludCBlcnI7XFxuQEAgLTQ0Nyw1NCArNDIyLDE5IEBAIHN0YXRpYyBpbnQgdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXFxuIFxcdFxcdFxcdGlmICh2bGFuZGV2LVxcdTAwM2VtdHUgXFx1MDAzYz0gZGV2LVxcdTAwM2VtdHUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0ZGV2X3NldF9tdHUodmxhbmRldiwgZGV2LVxcdTAwM2VtdHUpO1xcbitcXHRcXHRcXHRuZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfTVRVKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFxuIFxcdGNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOlxcbi1cXHRcXHQvKiBQcm9wYWdhdGUgZGV2aWNlIGZlYXR1cmVzIHRvIHVuZGVybHlpbmcgZGV2aWNlICovXFxuIFxcdFxcdHZsYW5fZ3JvdXBfZm9yX2VhY2hfZGV2KGdycCwgaSwgdmxhbmRldilcXG4tXFx0XFx0XFx0dmxhbl90cmFuc2Zlcl9mZWF0dXJlcyhkZXYsIHZsYW5kZXYpO1xcbitcXHRcXHRcXHRuZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfRkVBVFVSRVMpO1xcbiBcXHRcXHRicmVhaztcXG4gXFxuLVxcdGNhc2UgTkVUREVWX0RPV046IHtcXG4tXFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnRtcDtcXG4tXFx0XFx0TElTVF9IRUFEKGNsb3NlX2xpc3QpO1xcbi1cXG4tXFx0XFx0LyogUHV0IGFsbCBWTEFOcyBmb3IgdGhpcyBkZXYgaW4gdGhlIGRvd24gc3RhdGUgdG9vLiAgKi9cXG4tXFx0XFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KSB7XFxuLVxcdFxcdFxcdGZsZ3MgPSB2bGFuZGV2LVxcdTAwM2VmbGFncztcXG4tXFx0XFx0XFx0aWYgKCEoZmxncyBcXHUwMDI2IElGRl9VUCkpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0XFx0dmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XFxuLVxcdFxcdFxcdGlmICghKHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVkxBTl9GTEFHX0xPT1NFX0JJTkRJTkcpKVxcbi1cXHRcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2dmxhbmRldi1cXHUwMDNlY2xvc2VfbGlzdCwgXFx1MDAyNmNsb3NlX2xpc3QpO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRuZXRpZl9jbG9zZV9tYW55KFxcdTAwMjZjbG9zZV9saXN0LCBmYWxzZSk7XFxuLVxcbi1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmxhbmRldiwgdG1wLCBcXHUwMDI2Y2xvc2VfbGlzdCwgY2xvc2VfbGlzdCkge1xcbi1cXHRcXHRcXHR2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGRldiwgdmxhbmRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0dmxhbl9kZXZfcHJpdih2bGFuZGV2KSk7XFxuLVxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnZsYW5kZXYtXFx1MDAzZWNsb3NlX2xpc3QpO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZjbG9zZV9saXN0KTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4rXFx0Y2FzZSBORVRERVZfRE9XTjpcXG4gXFx0Y2FzZSBORVRERVZfVVA6XFxuLVxcdFxcdC8qIFB1dCBhbGwgVkxBTnMgZm9yIHRoaXMgZGV2IGluIHRoZSB1cCBzdGF0ZSB0b28uICAqL1xcbi1cXHRcXHR2bGFuX2dyb3VwX2Zvcl9lYWNoX2RldihncnAsIGksIHZsYW5kZXYpIHtcXG4tXFx0XFx0XFx0ZmxncyA9IG5ldGlmX2dldF9mbGFncyh2bGFuZGV2KTtcXG4tXFx0XFx0XFx0aWYgKGZsZ3MgXFx1MDAyNiBJRkZfVVApXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0XFx0dmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XFxuLVxcdFxcdFxcdGlmICghKHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVkxBTl9GTEFHX0xPT1NFX0JJTkRJTkcpKVxcbi1cXHRcXHRcXHRcXHRkZXZfY2hhbmdlX2ZsYWdzKHZsYW5kZXYsIGZsZ3MgfCBJRkZfVVAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBleHRhY2spO1xcbi1cXHRcXHRcXHR2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGRldiwgdmxhbmRldiwgdmxhbik7XFxuLVxcdFxcdH1cXG4rXFx0XFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KVxcbitcXHRcXHRcXHRuZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfTElOS19TVEFURSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcXG5kaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uaCBiL25ldC84MDIxcS92bGFuLmhcXG5pbmRleCBjN2ZmZTU5MWQ1OTM2Ni4uYzQxY2FhZjk0MDk1ZjMgMTAwNjQ0XFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaFxcbisrKyBiL25ldC84MDIxcS92bGFuLmhcXG5AQCAtMTI1LDYgKzEyNSwxNyBAQCBzdGF0aWMgaW5saW5lIG5ldGRldl9mZWF0dXJlc190IHZsYW5fdG5sX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldilcXG4gaW50IHZsYW5fZmlsdGVyX3B1c2hfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XFxuIHZvaWQgdmxhbl9maWx0ZXJfZHJvcF92aWRzKHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbywgX19iZTE2IHByb3RvKTtcXG4gXFxuKy8qIG5ldGRldl93b3JrIGV2ZW50cyBwcm9wYWdhdGVkIGZyb20gdGhlIHJlYWwgZGV2aWNlLCBzZWUgdmxhbl9kZXZfd29yaygpLiAqL1xcbitlbnVtIHtcXG4rXFx0VkxBTl9XT1JLX0xJTktfU1RBVEVcXHQ9IEJJVCgwKSwgLyogc3luYyB1cC9kb3duIHdpdGggcmVhbF9kZXYgKi9cXG4rXFx0VkxBTl9XT1JLX01UVVxcdFxcdD0gQklUKDEpLCAvKiBjbGFtcCBtdHUgdG8gcmVhbF9kZXYncyAqL1xcbitcXHRWTEFOX1dPUktfRkVBVFVSRVNcXHQ9IEJJVCgyKSwgLyogcmUtaW5oZXJpdCByZWFsX2RldiBmZWF0dXJlcyAqL1xcbit9O1xcbitcXG4rdm9pZCB2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pO1xcbitcXG4gLyogZm91bmQgaW4gdmxhbl9kZXYuYyAqL1xcbiB2b2lkIHZsYW5fZGV2X3NldF9pbmdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgIHUzMiBza2JfcHJpbywgdTE2IHZsYW5fcHJpbyk7XFxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2Rldi5jIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmNcXG5pbmRleCA3YWEzYWY4YjEwZWFkMC4uZWMyNTY5YjNmOGRhYzYgMTAwNjQ0XFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW5fZGV2LmNcXG4rKysgYi9uZXQvODAyMXEvdmxhbl9kZXYuY1xcbkBAIC0yNzAsNiArMjcwLDkgQEAgc3RhdGljIGludCB2bGFuX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdCAgICAhKHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVkxBTl9GTEFHX0xPT1NFX0JJTkRJTkcpKVxcbiBcXHRcXHRyZXR1cm4gLUVORVRET1dOO1xcbiBcXG4rXFx0LyogVGhlIGV4cGxpY2l0IG9wZW4gc3VwZXJzZWRlcyBhbnkgZGVmZXJyZWQgbGluay1zdGF0ZSBzeW5jICovXFxuK1xcdG5ldGRldl93b3JrX2NhbmNlbChkZXYsIFZMQU5fV09SS19MSU5LX1NUQVRFKTtcXG4rXFxuIFxcdGlmICghZXRoZXJfYWRkcl9lcXVhbChkZXYtXFx1MDAzZWRldl9hZGRyLCByZWFsX2Rldi1cXHUwMDNlZGV2X2FkZHIpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhdmxhbl9kZXZfaW5oZXJpdF9hZGRyZXNzKGRldiwgcmVhbF9kZXYpKSB7XFxuIFxcdFxcdGVyciA9IGRldl91Y19hZGQocmVhbF9kZXYsIGRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbkBAIC0zMDAsNiArMzAzLDkgQEAgc3RhdGljIGludCB2bGFuX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdHN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdihkZXYpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLVxcdTAwM2VyZWFsX2RldjtcXG4gXFxuK1xcdC8qIFRoZSBleHBsaWNpdCBjbG9zZSBzdXBlcnNlZGVzIGFueSBkZWZlcnJlZCBsaW5rLXN0YXRlIHN5bmMgKi9cXG4rXFx0bmV0ZGV2X3dvcmtfY2FuY2VsKGRldiwgVkxBTl9XT1JLX0xJTktfU1RBVEUpO1xcbitcXG4gXFx0ZGV2X21jX3Vuc3luYyhyZWFsX2RldiwgZGV2KTtcXG4gXFx0ZGV2X3VjX3Vuc3luYyhyZWFsX2RldiwgZGV2KTtcXG4gXFxuQEAgLTEwMTYsNiArMTAyMiw1OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHZsYW5fZXRodG9vbF9vcHMgPSB7XFxuIFxcdC5nZXRfdHNfaW5mb1xcdFxcdD0gdmxhbl9ldGh0b29sX2dldF90c19pbmZvLFxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgdmxhbl90cmFuc2Zlcl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldilcXG4re1xcbitcXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XFxuK1xcbitcXHRuZXRpZl9pbmhlcml0X3Rzb19tYXgodmxhbmRldiwgZGV2KTtcXG4rXFxuK1xcdGlmICh2bGFuX2h3X29mZmxvYWRfY2FwYWJsZShkZXYtXFx1MDAzZWZlYXR1cmVzLCB2bGFuLVxcdTAwM2V2bGFuX3Byb3RvKSlcXG4rXFx0XFx0dmxhbmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmxhbmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBWTEFOX0hMRU47XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfRkNPRSlcXG4rXFx0dmxhbmRldi1cXHUwMDNlZmNvZV9kZHBfeGlkID0gZGV2LVxcdTAwM2VmY29lX2RkcF94aWQ7XFxuKyNlbmRpZlxcbitcXG4rXFx0dmxhbmRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+SUZGX1hNSVRfRFNUX1JFTEVBU0U7XFxuK1xcdHZsYW5kZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gKHZsYW4tXFx1MDAzZXJlYWxfZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1hNSVRfRFNUX1JFTEVBU0UpO1xcbitcXHR2bGFuZGV2LVxcdTAwM2Vod19lbmNfZmVhdHVyZXMgPSB2bGFuX3RubF9mZWF0dXJlcyh2bGFuLVxcdTAwM2VyZWFsX2Rldik7XFxuK1xcbitcXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKHZsYW5kZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB2bGFuX2Rldl93b3JrKHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcXG4re1xcbitcXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tXFx1MDAzZXJlYWxfZGV2O1xcbitcXHRib29sIGxvb3NlID0gdmxhbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTEFOX0ZMQUdfTE9PU0VfQklORElORztcXG4rXFx0dW5zaWduZWQgaW50IGZsZ3M7XFxuK1xcbitcXHRpZiAoZXZlbnRzIFxcdTAwMjYgVkxBTl9XT1JLX0xJTktfU1RBVEUpIHtcXG4rXFx0XFx0ZmxncyA9IG5ldGlmX2dldF9mbGFncyh2bGFuZGV2KTtcXG4rXFx0XFx0aWYgKHJlYWxfZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkge1xcbitcXHRcXHRcXHRpZiAoIShmbGdzIFxcdTAwMjYgSUZGX1VQKSkge1xcbitcXHRcXHRcXHRcXHRpZiAoIWxvb3NlKVxcbitcXHRcXHRcXHRcXHRcXHRuZXRpZl9jaGFuZ2VfZmxhZ3ModmxhbmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmxncyB8IElGRl9VUCwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocmVhbF9kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHZsYW5kZXYsIHZsYW4pO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSBpZiAoKGZsZ3MgXFx1MDAyNiBJRkZfVVApIFxcdTAwMjZcXHUwMDI2ICFsb29zZSkge1xcbitcXHRcXHRcXHRuZXRpZl9jaGFuZ2VfZmxhZ3ModmxhbmRldiwgZmxncyBcXHUwMDI2IH5JRkZfVVAsIE5VTEwpO1xcbitcXHRcXHRcXHR2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHJlYWxfZGV2LCB2bGFuZGV2LCB2bGFuKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoKGV2ZW50cyBcXHUwMDI2IFZMQU5fV09SS19NVFUpIFxcdTAwMjZcXHUwMDI2IHZsYW5kZXYtXFx1MDAzZW10dSBcXHUwMDNlIHJlYWxfZGV2LVxcdTAwM2VtdHUpXFxuK1xcdFxcdG5ldGlmX3NldF9tdHUodmxhbmRldiwgcmVhbF9kZXYtXFx1MDAzZW10dSk7XFxuK1xcbitcXHRpZiAoZXZlbnRzIFxcdTAwMjYgVkxBTl9XT1JLX0ZFQVRVUkVTKVxcbitcXHRcXHR2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKHJlYWxfZGV2LCB2bGFuZGV2KTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fY2hhbmdlX210dVxcdFxcdD0gdmxhbl9kZXZfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19pbml0XFx0XFx0PSB2bGFuX2Rldl9pbml0LFxcbkBAIC0xMDI3LDYgKzEwODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IHZsYW5fZGV2X3NldF9tYWNfYWRkcmVzcyxcXG4gXFx0Lm5kb19zZXRfcnhfbW9kZVxcdD0gdmxhbl9kZXZfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fY2hhbmdlX3J4X2ZsYWdzXFx0PSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsXFxuK1xcdC5uZG9fd29ya1xcdFxcdD0gdmxhbl9kZXZfd29yayxcXG4gXFx0Lm5kb19ldGhfaW9jdGxcXHRcXHQ9IHZsYW5fZGV2X2lvY3RsLFxcbiBcXHQubmRvX25laWdoX3NldHVwXFx0PSB2bGFuX2Rldl9uZWlnaF9zZXR1cCxcXG4gXFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gdmxhbl9kZXZfZ2V0X3N0YXRzNjQsXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGVcXG5pbmRleCBkYzE3YzVhNjFlOWE0YS4uYjNmZGNiNGUzNTVmYTYgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGVcXG4rKysgYi9uZXQvY29yZS9NYWtlZmlsZVxcbkBAIC0xMyw3ICsxMyw3IEBAIG9iai15XFx0XFx0ICAgICArPSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXFxcXG4gXFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbiBcXHRcXHRcXHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXFxcXG4gXFx0XFx0XFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcXFxcbi1cXHRcXHRcXHRuZXRkZXYtZ2VubC5vIG5ldGRldi1nZW5sLWdlbi5vIGdzby5vXFxuK1xcdFxcdFxcdG5ldGRldi1nZW5sLm8gbmV0ZGV2LWdlbmwtZ2VuLm8gbmV0ZGV2X3dvcmsubyBnc28ub1xcbiBcXG4gb2JqLSQoQ09ORklHX05FVERFVl9BRERSX0xJU1RfVEVTVCkgKz0gZGV2X2FkZHJfbGlzdHNfdGVzdC5vXFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXFxuaW5kZXggNWMwMWRmYWE2YzQ0NTAuLjRiM2Q1Y2ZkZjZlMDBmIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtOTgyMiw2ICs5ODIyLDcgQEAgaW50IG5ldGlmX2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuIFxcdF9fZGV2X25vdGlmeV9mbGFncyhkZXYsIG9sZF9mbGFncywgY2hhbmdlcywgMCwgTlVMTCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTChuZXRpZl9jaGFuZ2VfZmxhZ3MpO1xcbiBcXG4gaW50IF9fbmV0aWZfc2V0X210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4ge1xcbkBAIC0xMjA5Myw2ICsxMjA5NCw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNlcHR5cGVfYWxsKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNlcHR5cGVfc3BlY2lmaWMpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2VuZXRfbm90aWZpZXJfbGlzdCk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSk7XFxuICNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXFxuIFxcdGhhc2hfaW5pdChkZXYtXFx1MDAzZXFkaXNjX2hhc2gpO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmggYi9uZXQvY29yZS9kZXYuaFxcbmluZGV4IDQxMjFjNTBlN2M4OGJlLi41ZDBiMDMwNWQzYmFhZiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuaFxcbisrKyBiL25ldC9jb3JlL2Rldi5oXFxuQEAgLTE2NywxMCArMTY3LDE5IEBAIGludCBkZXZfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcik7XFxuIHZvaWQgX19kZXZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGludCBfX2Rldl9zZXRfcHJvbWlzY3VpdHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGluYywgYm9vbCBub3RpZnkpO1xcbiB2b2lkIG5ldGlmX3J4X21vZGVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4tYm9vbCBuZXRpZl9yeF9tb2RlX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbit2b2lkIG5ldGlmX3J4X21vZGVfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiB2b2lkIG5ldGlmX3J4X21vZGVfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gdm9pZCBuZXRpZl9yeF9tb2RlX2NhbmNlbF9yZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gXFxuKy8qIEV2ZW50cyBmb3IgdGhlIGFzeW5jIG5ldGRldiB3b3JrLCB0cmFja2VkIGluIG5ldGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcuICovXFxuK2VudW0gbmV0ZGV2X3dvcmtfY29yZSB7XFxuK1xcdE5FVERFVl9XT1JLX1JYX01PREVcXHQ9IEJJVCgwKSxcXHQvKiBydW4gdGhlIHJ4X21vZGUgdXBkYXRlICovXFxuK307XFxuK1xcbit2b2lkIF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KTtcXG4rdW5zaWduZWQgbG9uZ1xcbitfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzayk7XFxuK1xcbiB2b2lkIF9fZGV2X25vdGlmeV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2xkX2ZsYWdzLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZ2NoYW5nZXMsIHUzMiBwb3J0aWQsXFxuIFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcXG5pbmRleCBlMTdmNjRhNjVlMTdiZS4uMDg1MjhjYTBhOGIzMTQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1xcbisrKyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcXG5AQCAtMTIsMTcgKzEyLDEwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJkZXYuaFxcXCJcXG4gXFxuLXN0YXRpYyB2b2lkIG5ldGRldl9yeF9tb2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4tXFxuLXN0YXRpYyBMSVNUX0hFQUQocnhfbW9kZV9saXN0KTtcXG4tc3RhdGljIERFRklORV9TUElOTE9DSyhyeF9tb2RlX2xvY2spO1xcbi1zdGF0aWMgREVDTEFSRV9XT1JLKHJ4X21vZGVfd29yaywgbmV0ZGV2X3J4X21vZGVfd29yayk7XFxuLVxcbiAvKlxcbiAgKiBHZW5lcmFsIGxpc3QgaGFuZGxpbmcgZnVuY3Rpb25zXFxuICAqL1xcbkBAIC0xMjgxLDcgKzEyNzQsNyBAQCB2b2lkIG5ldGlmX3J4X21vZGVfY2FuY2VsX3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGRldi1cXHUwMDNlcnhfbW9kZV9yZXRyeV9jb3VudCA9IDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3ZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCB1Y19zbmFwLCBtY19zbmFwLCB1Y19yZWYsIG1jX3JlZjtcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuQEAgLTEzMzksNDkgKzEzMzIsOSBAQCBzdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5ldGRldl9yeF9tb2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi17XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuLVxcbi1cXHRydG5sX2xvY2soKTtcXG4tXFxuLVxcdHdoaWxlICh0cnVlKSB7XFxuLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cnhfbW9kZV9sb2NrKTtcXG4tXFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnJ4X21vZGVfbGlzdCkpIHtcXG4tXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnJ4X21vZGVfbG9jayk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNnJ4X21vZGVfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsXFxuLVxcdFxcdFxcdFxcdCAgICAgICByeF9tb2RlX25vZGUpO1xcbi1cXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJ4X21vZGVfbm9kZSk7XFxuLVxcdFxcdC8qIFdlIG11c3QgZnJlZSBuZXRkZXYgdHJhY2tlciB1bmRlclxcbi1cXHRcXHQgKiB0aGUgc3BpbmxvY2sgcHJvdGVjdGlvbi5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdG5ldGRldl90cmFja2VyX2ZyZWUoZGV2LCBcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX3RyYWNrZXIpO1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhfbW9kZV9sb2NrKTtcXG4tXFxuLVxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbi1cXHRcXHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xcbi1cXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbi1cXHRcXHQvKiBVc2UgX19kZXZfcHV0KCkgYmVjYXVzZSBuZXRkZXZfdHJhY2tlcl9mcmVlKCkgd2FzIGFscmVhZHlcXG4tXFx0XFx0ICogY2FsbGVkIGFib3ZlLiBNdXN0IGJlIGFmdGVyIG5ldGRldl91bmxvY2tfb3BzKCkgdG8gcHJldmVudFxcbi1cXHRcXHQgKiBuZXRkZXZfcnVuX3RvZG8oKSBmcm9tIGZyZWVpbmcgdGhlIGRldmljZSB3aGlsZSBzdGlsbCBpbiB1c2UuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRfX2Rldl9wdXQoZGV2KTtcXG4tXFx0fVxcbi1cXG4tXFx0cnRubF91bmxvY2soKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cnhfbW9kZV9sb2NrKTtcXG4tXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNlcnhfbW9kZV9ub2RlKSkge1xcbi1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXJ4X21vZGVfbm9kZSwgXFx1MDAyNnJ4X21vZGVfbGlzdCk7XFxuLVxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldi1cXHUwMDNlcnhfbW9kZV90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4tXFx0fVxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhfbW9kZV9sb2NrKTtcXG4tXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2cnhfbW9kZV93b3JrKTtcXG4rXFx0X19uZXRkZXZfd29ya19jb3JlX3NjaGVkKGRldiwgTkVUREVWX1dPUktfUlhfTU9ERSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcmV0cnkoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuQEAgLTEzOTQsNyArMTM0Nyw2IEBAIHN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcmV0cnkoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIFxcbiB2b2lkIG5ldGlmX3J4X21vZGVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkZXYtXFx1MDAzZXJ4X21vZGVfbm9kZSk7XFxuIFxcdF9faHdfYWRkcl9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJ4X21vZGVfYWRkcl9jYWNoZSk7XFxuIFxcdHRpbWVyX3NldHVwKFxcdTAwMjZkZXYtXFx1MDAzZXJ4X21vZGVfcmV0cnlfdGltZXIsIG5ldGlmX3J4X21vZGVfcmV0cnksIDApO1xcbiB9XFxuQEAgLTE0NDIsMjQgKzEzOTQsNiBAQCB2b2lkIGRldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xcbiB9XFxuIFxcbi1ib29sIG5ldGlmX3J4X21vZGVfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4te1xcbi1cXHRib29sIGNsZWFuID0gZmFsc2U7XFxuLVxcbi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJ4X21vZGVfbG9jayk7XFxuLVxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX25vZGUpKSB7XFxuLVxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlcnhfbW9kZV9ub2RlKTtcXG4tXFx0XFx0Y2xlYW4gPSB0cnVlO1xcbi1cXHRcXHQvKiBXZSBtdXN0IHJlbGVhc2UgbmV0ZGV2IHRyYWNrZXIgdW5kZXJcXG4tXFx0XFx0ICogdGhlIHNwaW5sb2NrIHByb3RlY3Rpb24uXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRuZXRkZXZfdHJhY2tlcl9mcmVlKGRldiwgXFx1MDAyNmRldi1cXHUwMDNlcnhfbW9kZV90cmFja2VyKTtcXG4tXFx0fVxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhfbW9kZV9sb2NrKTtcXG4tXFxuLVxcdHJldHVybiBjbGVhbjtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIG5ldGlmX3J4X21vZGVfc3luYygpIC0gc3luYyByeCBtb2RlIGlubGluZVxcbiAgKiBAZGV2OiBuZXR3b3JrIGRldmljZVxcbkBAIC0xNDczLDExICsxNDA3LDYgQEAgYm9vbCBuZXRpZl9yeF9tb2RlX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICAqL1xcbiB2b2lkIG5ldGlmX3J4X21vZGVfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuLVxcdGlmIChuZXRpZl9yeF9tb2RlX2NsZWFuKGRldikpIHtcXG4rXFx0aWYgKF9fbmV0ZGV2X3dvcmtfY29yZV9jYW5jZWwoZGV2LCBORVRERVZfV09SS19SWF9NT0RFKSlcXG4gXFx0XFx0bmV0aWZfcnhfbW9kZV9ydW4oZGV2KTtcXG4tXFx0XFx0LyogVXNlIF9fZGV2X3B1dCgpIGJlY2F1c2UgbmV0ZGV2X3RyYWNrZXJfZnJlZSgpIHdhcyBhbHJlYWR5XFxuLVxcdFxcdCAqIGNhbGxlZCBpbnNpZGUgbmV0aWZfcnhfbW9kZV9jbGVhbigpLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0X19kZXZfcHV0KGRldik7XFxuLVxcdH1cXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXZfd29yay5jIGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjMxMDlmYWUxMzJhZDE4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL25ldC9jb3JlL25ldGRldl93b3JrLmNcXG5AQCAtMCwwICsxLDE2MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImRldi5oXFxcIlxcbitcXG4rc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbitcXG4rLyogQG5ldGRldl93b3JrX2xvY2sgcHJvdGVjdHM6XFxuKyAqICAtIEBuZXRkZXZfd29ya19saXN0XFxuKyAqICAtIHdpdGhpbiB0aGUgbGlzdCBlbnRyaWVzIChzdHJ1Y3QgbmV0X2RldmljZSBmaWVsZHMpOlxcbisgKlxcdC0gd29ya19ub2RlXFxuKyAqXFx0LSB3b3JrX3RyYWNrZXJcXG4rICpcXHQtIHdvcmtfcGVuZGluZ1xcbisgKlxcdC0gd29ya19jb3JlX3BlbmRpbmdcXG4rICovXFxuK3N0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3dvcmtfbGlzdCk7XFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmV0ZGV2X3dvcmtfbG9jayk7XFxuK3N0YXRpYyBERUNMQVJFX1dPUksobmV0ZGV2X3dvcmssIG5ldGRldl93b3JrX3Byb2MpO1xcbitcXG4rc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfZW5xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyxcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjb3JlKVxcbit7XFxuK1xcdGlmICghZXZlbnRzIFxcdTAwMjZcXHUwMDI2ICFjb3JlKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpKSB7XFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlLCBcXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCk7XFxuK1xcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4rXFx0fVxcbitcXHRkZXYtXFx1MDAzZXdvcmtfcGVuZGluZyB8PSBldmVudHM7XFxuK1xcdGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcgfD0gY29yZTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbitcXG4rXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bmV0ZGV2X3dvcmspO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZ1xcbituZXRkZXZfd29ya19kZXF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgKnBlbmRpbmcsXFxuK1xcdFxcdCAgICB1bnNpZ25lZCBsb25nIG1hc2spXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBldmVudHM7XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbitcXHRldmVudHMgPSAqcGVuZGluZyBcXHUwMDI2IG1hc2s7XFxuK1xcdCpwZW5kaW5nIFxcdTAwMjY9IH5ldmVudHM7XFxuK1xcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhZGV2LVxcdTAwM2V3b3JrX3BlbmRpbmcgXFx1MDAyNlxcdTAwMjYgIWRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcpIHtcXG4rXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpO1xcbitcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gZXZlbnRzO1xcbit9XFxuK1xcbit2b2lkIG5ldGRldl93b3JrX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxcbit7XFxuK1xcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCBldmVudHMsIDApO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xcbitcXG4rLyoqXFxuKyAqIG5ldGRldl93b3JrX2NhbmNlbCgpIC0gY2FuY2VsIHNlbGVjdGVkIHdvcmsgZm9yIGEgbmV0ZGV2XFxuKyAqIEBkZXY6IG5ldF9kZXZpY2VcXG4rICogQG1hc2s6IGV2ZW50cyB0byBjYW5jZWxcXG4rICpcXG4rICogQ2xlYXIgQG1hc2sgZnJvbSB0aGUgZGV2aWNlJ3Mgd29yayBwZW5kaW5nIG1hc2suIElmIG5vIHdvcmsgaXMgbGVmdCBwZW5kaW5nXFxuKyAqIHRoZSBkZXZpY2UgaXMgZGVxdWV1ZWQgYW5kIGl0cyBuZG9fd29yayB3b24ndCBiZSBjYWxsZWQuXFxuKyAqXFxuKyAqIE5vIGV4cGVjdGF0aW9ucyBvbiBsb2NraW5nLCBidXQgYWxzbyBubyBndWFyYW50ZWVzIHByb3ZpZGVkLiBJZiB0aGUgY2FsbGVyXFxuKyAqIHdhbnRzIHRvIHRvdWNoIEBkZXYgYWZ0ZXJ3YXJkcyAoZS5nLiBjYWxsIHRoZSB3b3JrIHRoYXQgZ290IGNhbmNlbGVkKVxcbisgKiB0aGV5IGhhdmUgdG8gZW5zdXJlIEBkZXYgZG9lcyBub3QgZ2V0IGZyZWVkLlxcbisgKlxcbisgKiBSZXR1cm5zOiB0aGUgc3Vic2V0IG9mIEBtYXNrIHRoYXQgd2FzIGFjdHVhbGx5IHBlbmRpbmcsIHNvIHRoZSBjYWxsZXIgY2FuIHJ1blxcbisgKiB0aG9zZSBldmVudHMgaW5saW5lLlxcbisgKi9cXG4rdW5zaWduZWQgbG9uZyBuZXRkZXZfd29ya19jYW5jZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBtYXNrKVxcbit7XFxuK1xcdHJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya19wZW5kaW5nLCBtYXNrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX2NhbmNlbCk7XFxuK1xcbit2b2lkIF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcXG4re1xcbitcXHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgMCwgZXZlbnRzKTtcXG4rfVxcbitcXG4rdW5zaWduZWQgbG9uZ1xcbitfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzaylcXG4re1xcbitcXHRyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsIFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfY29yZV9wZW5kaW5nLCBtYXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBjb3JlKVxcbit7XFxuK1xcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKGNvcmUgXFx1MDAyNiBORVRERVZfV09SS19SWF9NT0RFKVxcbitcXHRcXHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xcbitcXHRpZiAoZXZlbnRzIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3dvcmspXFxuK1xcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3dvcmsoZGV2LCBldmVudHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFxuK1xcdHdoaWxlICh0cnVlKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMCwgY29yZSA9IDA7XFxuK1xcdFxcdG5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7XFxuK1xcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuK1xcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbitcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCkpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZuZXRkZXZfd29ya19saXN0LCBzdHJ1Y3QgbmV0X2RldmljZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHdvcmtfbm9kZSk7XFxuK1xcdFxcdC8qIFRha2UgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHNvIEBkZXYgY2FuJ3QgYmUgZnJlZWQgd2hpbGUgd2VcXG4rXFx0XFx0ICogZHJvcCB0aGUgbG9jayB0byBncmFiIGl0cyBvcHMgbG9jazsgdGhlIHdvcmsgcmVmZXJlbmNlIGlzXFxuK1xcdFxcdCAqIG9ubHkgcmVsZWFzZWQgb25jZSB3ZSBjbGFpbSB0aGUgd29yayBiZWxvdy5cXG4rXFx0XFx0ICogVGhlIHJlLWxvY2tpbmcgZGFuY2UgaXMgdG8gZW5zdXJlIHRoYXQgb3BzIGxvY2sgaXMgZW5vdWdoXFxuK1xcdFxcdCAqIHRvIGVuc3VyZSBjYW5jZWxpbmcgd29yayBpcyBub3QgcmFjeSB3aXRoIGRlcXVldWUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbitcXG4rXFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuK1xcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpKSB7XFxuK1xcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKTtcXG4rXFx0XFx0XFx0Y29yZSA9IGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmc7XFxuK1xcdFxcdFxcdGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcgPSAwO1xcbitcXHRcXHRcXHRldmVudHMgPSBkZXYtXFx1MDAzZXdvcmtfcGVuZGluZztcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2V3b3JrX3BlbmRpbmcgPSAwO1xcbitcXHRcXHRcXHQvKiBXZSB0b29rIGFub3RoZXIgcmVmIGFib3ZlICovXFxuK1xcdFxcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX3RyYWNrZXIpO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFkZXZfaXNhbGl2ZShkZXYpKVxcbitcXHRcXHRcXHRcXHRjb3JlID0gZXZlbnRzID0gMDtcXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuK1xcbitcXHRcXHRuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpO1xcbitcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbitcXG4rXFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZ0cmFja2VyKTtcXG4rXFx0fVxcbitcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZVxcbmluZGV4IGJlMTMwYmY1ODVhNDE5Li42MzY0Y2EwMjY0MmQ2OCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZVxcbkBAIC0xMyw2ICsxMyw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcXFxcbiBcXHRib25kX29wdGlvbnMuc2ggXFxcXFxcbiBcXHRib25kX3Bhc3NpdmVfbGFjcC5zaCBcXFxcXFxuIFxcdGJvbmRfc3RhY2tlZF9oZWFkZXJfcGFyc2Uuc2ggXFxcXFxcbitcXHRib25kX3ZsYW5fcmVhbF9kZXYuc2ggXFxcXFxcbiBcXHRkZXZfYWRkcl9saXN0cy5zaCBcXFxcXFxuIFxcdG1vZGUtMS1yZWNvdmVyeS11cGRlbGF5LnNoIFxcXFxcXG4gXFx0bW9kZS0yLXJlY292ZXJ5LXVwZGVsYXkuc2ggXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfdmxhbl9yZWFsX2Rldi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF92bGFuX3JlYWxfZGV2LnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTQyZDlmZmM0ODE5ZjlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3ZsYW5fcmVhbF9kZXYuc2hcXG5AQCAtMCwwICsxLDE4MCBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBUZXN0IHByb3BhZ2F0aW9uIG9mIGEgcmVhbCBkZXZpY2UncyBzdGF0ZSB0byB0aGUgVkxBTnMgc3RhY2tlZCBvbiB0b3Agb2YgaXRcXG4rIyB3aGVuIHRoZSByZWFsIGRldmljZSBpcyAob3IgYmVjb21lcykgYSBib25kIG1lbWJlci5cXG4rI1xcbisjIFRoZSBrZXJuZWwgbWlycm9ycyBhIHJlYWwgZGV2aWNlJ3MgVVAvRE9XTiwgTVRVIGFuZCBmZWF0dXJlIGNoYW5nZXMgb250byBpdHNcXG4rIyBWTEFOcy4gIFRoaXMgaXMgZG9uZSBhc3luY2hyb25vdXNseSAobmV0ZGV2X3dvcmspOiBkb2luZyBpdCBzeW5jaHJvbm91c2x5IGZyb21cXG4rIyB0aGUgcmVhbCBkZXZpY2UncyBub3RpZmllciBjb3VsZCBkZWFkbG9jay4gIElmIHRoZSByZWFsIGRldmljZSBpcyBicm91Z2h0IHVwXFxuKyMgd2hpbGUgZW5zbGF2ZWQgdG8gYSBib25kIC0gc28gaXRzIGluc3RhbmNlIGxvY2sgaXMgaGVsZCBhY3Jvc3MgTkVUREVWX1VQIC0gYW5kXFxuKyMgYSBWTEFOIG9uIHRvcCBvZiBpdCBpcyBpdHNlbGYgYSBib25kIG1lbWJlciwgdGhlIHN5bmNocm9ub3VzIHByb3BhZ2F0aW9uXFxuKyMgcmUtZW50ZXJlZCB0aGUgc3RhY2sgYW5kIHRyaWVkIHRvIHRha2UgdGhlIHNhbWUgaW5zdGFuY2UgbG9jayBhZ2Fpbi5cXG4rI1xcbisjIENvdmVyIGJvdGggaGFsdmVzOlxcbisjICAtIHRoZSBkZWZlcnJlZCBVUC9ET1dOLCBNVFUgYW5kIGZlYXR1cmUgcHJvcGFnYXRpb24gYWN0dWFsbHkgbGFuZHMgb24gdGhlXFxuKyMgICAgVkxBTiAobGluayBzdGF0ZSBhbmQgTVRVIHVzZSBhbiBvcHMtbG9ja2VkIGR1bW15LCBpLmUuIHRoZSBkZWZlcnJhbCBwYXRoKSxcXG4rIyAgLSB0aGUgZGVhZGxvY2stcHJvbmUgdG9wb2xvZ3kgLSBhIFZMQU4gb24gYSBkdW1teSwgd2l0aCB0aGUgVkxBTiBhbmQgdGhlXFxuKyMgICAgZHVtbXkgZWFjaCBlbnNsYXZlZCB0byBhIGRpZmZlcmVudCBib25kIC0gY2FuIGJlIGJ1aWx0IHdpdGhvdXQgaGFuZ2luZy5cXG4rXFxuK0FMTF9URVNUUz1cXFwiXFxuK1xcdHZsYW5fbGlua19zdGF0ZVxcbitcXHR2bGFuX210dVxcbitcXHR2bGFuX2ZlYXR1cmVzXFxuK1xcdHZsYW5fcmVhbF9kZXZfZW5zbGF2ZVxcbitcXFwiXFxuK1xcbitSRVFVSVJFX01aPW5vXFxuK05VTV9ORVRJRlM9MFxcbitsaWJfZGlyPSQoZGlybmFtZSBcXFwiJDBcXFwiKVxcbitzb3VyY2UgXFxcIiRsaWJfZGlyXFxcIi8uLi8uLi8uLi9uZXQvZm9yd2FyZGluZy9saWIuc2hcXG4rXFxuKyMgUmV0dXJuIDAgaWYgJGRldiBpbiBuZXRucyAkbnMgaGFzIGZsYWcgJGZsYWcgc2V0IChlLmcuIFVQKSBpbiBpdHMgXFx1MDAzYy4uLlxcdTAwM2UgZmxhZ3MuXFxuK2xpbmtfaGFzX2ZsYWcoKVxcbit7XFxuK1xcdGxvY2FsIG5zPSQxIGRldj0kMiBmbGFnPSQzXFxuK1xcbitcXHRpcCAtbiBcXFwiJG5zXFxcIiBsaW5rIHNob3cgZGV2IFxcXCIkZGV2XFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXEgXFxcIltcXHUwMDNjLF0ke2ZsYWd9WyxcXHUwMDNlXVxcXCJcXG4rfVxcbitcXG4rbGlua19sYWNrc19mbGFnKClcXG4re1xcbitcXHQhIGxpbmtfaGFzX2ZsYWcgXFxcIiRAXFxcIlxcbit9XFxuK1xcbitsaW5rX210dV9pcygpXFxuK3tcXG4rXFx0bG9jYWwgbnM9JDEgZGV2PSQyIHdhbnQ9JDMgY3VyXFxuK1xcbitcXHRjdXI9JChpcCAtbiBcXFwiJG5zXFxcIiBsaW5rIHNob3cgZGV2IFxcXCIkZGV2XFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IFxcXFxcXG4rXFx0XFx0c2VkIC1uICdzLy4qIG10dSBcXFxcKFswLTldXFxcXCtcXFxcKS4qL1xcXFwxL3AnKVxcbitcXHRbIFxcXCIkY3VyXFxcIiA9IFxcXCIkd2FudFxcXCIgXVxcbit9XFxuK1xcbit2bGFuX2ZlYXR1cmVfaXMoKVxcbit7XFxuK1xcdGxvY2FsIG5zPSQxIGRldj0kMiBmZWF0dXJlPSQzIHZhbHVlPSQ0XFxuK1xcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNcXFwiIGV0aHRvb2wgLWsgXFxcIiRkZXZcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHwgXFxcXFxcbitcXHRcXHRncmVwIC1xIFxcXCJeJGZlYXR1cmU6ICR2YWx1ZVxcXCJcXG4rfVxcbitcXG4rbGlua19oYXNfbWFzdGVyKClcXG4re1xcbitcXHRsb2NhbCBucz0kMSBkZXY9JDIgbWFzdGVyPSQzXFxuK1xcbitcXHRpcCAtbiBcXFwiJG5zXFxcIiAtbyBsaW5rIHNob3cgZGV2IFxcXCIkZGV2XFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXEgXFxcIm1hc3RlciAkbWFzdGVyXFxcIlxcbit9XFxuK1xcbit2bGFuX2xpbmtfc3RhdGUoKVxcbit7XFxuK1xcdFJFVD0wXFxuK1xcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIGFkZCBsc19kdW1teSB0eXBlIGR1bW15XFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgYWRkIGxpbmsgbHNfZHVtbXkgbmFtZSBsc192bGFuIHR5cGUgdmxhbiBpZCAxMDBcXG4rXFxuK1xcdCMgQnJpbmdpbmcgdGhlIHJlYWwgZGV2aWNlIHVwIG11c3QgcHJvcGFnYXRlIFVQIHRvIHRoZSBWTEFOLlxcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIHNldCBsc19kdW1teSB1cFxcbitcXHRidXN5d2FpdCBcXFwiJEJVU1lXQUlUX1RJTUVPVVRcXFwiIGxpbmtfaGFzX2ZsYWcgXFxcIiROU1xcXCIgbHNfdmxhbiBVUFxcbitcXHRjaGVja19lcnIgJD8gXFxcIlZMQU4gZGlkIG5vdCBnbyBVUCBhZnRlciB0aGUgcmVhbCBkZXZpY2Ugd2VudCBVUFxcXCJcXG4rXFxuK1xcdCMgLi4uIGFuZCBsaWtld2lzZSBmb3IgRE9XTi5cXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBzZXQgbHNfZHVtbXkgZG93blxcbitcXHRidXN5d2FpdCBcXFwiJEJVU1lXQUlUX1RJTUVPVVRcXFwiIGxpbmtfbGFja3NfZmxhZyBcXFwiJE5TXFxcIiBsc192bGFuIFVQXFxuK1xcdGNoZWNrX2VyciAkPyBcXFwiVkxBTiBkaWQgbm90IGdvIERPV04gYWZ0ZXIgdGhlIHJlYWwgZGV2aWNlIHdlbnQgRE9XTlxcXCJcXG4rXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgZGVsIGxzX3ZsYW5cXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBkZWwgbHNfZHVtbXlcXG4rXFxuK1xcdGxvZ190ZXN0IFxcXCJWTEFOIGxpbmsgc3RhdGUgZm9sbG93cyB0aGUgcmVhbCBkZXZpY2VcXFwiXFxuK31cXG4rXFxuK3ZsYW5fbXR1KClcXG4re1xcbitcXHRSRVQ9MFxcbitcXG4rXFx0IyBUaGUgVkxBTiBpbmhlcml0cyB0aGUgcmVhbCBkZXZpY2UncyBNVFUgKDIwMDApIGF0IGNyZWF0aW9uIHRpbWUuXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgYWRkIG10dV9kdW1teSBtdHUgMjAwMCB0eXBlIGR1bW15XFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgYWRkIGxpbmsgbXR1X2R1bW15IG5hbWUgbXR1X3ZsYW4gdHlwZSB2bGFuIGlkIDEwMFxcbitcXG4rXFx0IyBTaHJpbmtpbmcgdGhlIHJlYWwgZGV2aWNlJ3MgTVRVIG11c3QgY2xhbXAgdGhlIFZMQU4ncyBNVFUuXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgc2V0IG10dV9kdW1teSBtdHUgMTUwMFxcbitcXHRidXN5d2FpdCBcXFwiJEJVU1lXQUlUX1RJTUVPVVRcXFwiIGxpbmtfbXR1X2lzIFxcXCIkTlNcXFwiIG10dV92bGFuIDE1MDBcXG4rXFx0Y2hlY2tfZXJyICQ/IFxcXCJWTEFOIE1UVSBub3QgY2xhbXBlZCBhZnRlciB0aGUgcmVhbCBkZXZpY2UncyBNVFUgc2hyYW5rXFxcIlxcbitcXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBkZWwgbXR1X3ZsYW5cXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBkZWwgbXR1X2R1bW15XFxuK1xcbitcXHRsb2dfdGVzdCBcXFwiVkxBTiBNVFUgY2xhbXBlZCB0byB0aGUgcmVhbCBkZXZpY2VcXFwiXFxuK31cXG4rXFxuK3ZsYW5fZmVhdHVyZXMoKVxcbit7XFxuK1xcdFJFVD0wXFxuK1xcbitcXHQjIFVzZSB2ZXRoIGFzIHRoZSByZWFsIGRldmljZTogdW5saWtlIGR1bW15IGl0IGV4cG9ydHMgdmxhbl9mZWF0dXJlcywgc29cXG4rXFx0IyB0aGUgVkxBTiBhY3R1YWxseSBpbmhlcml0cyBhIHRvZ2dsZWFibGUgb2ZmbG9hZCB0byBhc3NlcnQgb24uXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgYWRkIGZ0X3ZldGggdHlwZSB2ZXRoIHBlZXIgbmFtZSBmdF92ZXRoX3ByXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgYWRkIGxpbmsgZnRfdmV0aCBuYW1lIGZ0X3ZsYW4gdHlwZSB2bGFuIGlkIDEwMFxcbitcXG4rXFx0dmxhbl9mZWF0dXJlX2lzIFxcXCIkTlNcXFwiIGZ0X3ZsYW4gc2NhdHRlci1nYXRoZXIgb25cXG4rXFx0Y2hlY2tfZXJyICQ/IFxcXCJWTEFOIGRpZCBub3QgaW5oZXJpdCBzY2F0dGVyLWdhdGhlciBmcm9tIHRoZSByZWFsIGRldmljZVxcXCJcXG4rXFxuK1xcdCMgVG9nZ2xpbmcgdGhlIG9mZmxvYWQgb24gdGhlIHJlYWwgZGV2aWNlIG11c3QgcHJvcGFnYXRlIHRvIHRoZSBWTEFOLlxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkTlNcXFwiIGV0aHRvb2wgLUsgZnRfdmV0aCBzZyBvZmZcXG4rXFx0YnVzeXdhaXQgXFxcIiRCVVNZV0FJVF9USU1FT1VUXFxcIiBcXFxcXFxuK1xcdFxcdHZsYW5fZmVhdHVyZV9pcyBcXFwiJE5TXFxcIiBmdF92bGFuIHNjYXR0ZXItZ2F0aGVyIG9mZlxcbitcXHRjaGVja19lcnIgJD8gXFxcIlZMQU4gc2NhdHRlci1nYXRoZXIgc3RpbGwgb24gYWZ0ZXIgZGlzYWJsaW5nIGl0IG9uIHJlYWwgZGV2XFxcIlxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJE5TXFxcIiBldGh0b29sIC1LIGZ0X3ZldGggc2cgb25cXG4rXFx0YnVzeXdhaXQgXFxcIiRCVVNZV0FJVF9USU1FT1VUXFxcIiBcXFxcXFxuK1xcdFxcdHZsYW5fZmVhdHVyZV9pcyBcXFwiJE5TXFxcIiBmdF92bGFuIHNjYXR0ZXItZ2F0aGVyIG9uXFxuK1xcdGNoZWNrX2VyciAkPyBcXFwiVkxBTiBzY2F0dGVyLWdhdGhlciBzdGlsbCBvZmYgYWZ0ZXIgZW5hYmxpbmcgaXQgb24gcmVhbCBkZXZcXFwiXFxuK1xcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIGRlbCBmdF92bGFuXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgZGVsIGZ0X3ZldGhcXG4rXFxuK1xcdGxvZ190ZXN0IFxcXCJWTEFOIGZlYXR1cmVzIGZvbGxvdyB0aGUgcmVhbCBkZXZpY2VcXFwiXFxuK31cXG4rXFxuK3ZsYW5fcmVhbF9kZXZfZW5zbGF2ZSgpXFxuK3tcXG4rXFx0UkVUPTBcXG4rXFxuK1xcdCMgZHVtbXkgXFx1MDAzYy0gVkxBTiAtXFx1MDAzZSBib25kMCwgdGhlbiBlbnNsYXZlIHRoZSBkdW1teSBpdHNlbGYgdG8gYm9uZDEuICBUaGVcXG4rXFx0IyBsYXN0IHN0ZXAgYnJpbmdzIHRoZSBkdW1teSB1cCB1bmRlciBib25kMSdzIGluc3RhbmNlIGxvY2ssIHdoaWNoIHVzZWRcXG4rXFx0IyB0byBkZWFkbG9jayB3aGlsZSBzeW5jaHJvbm91c2x5IHByb3BhZ2F0aW5nIFVQIHRvIHRoZSAoYm9uZC1lbnNsYXZlZClcXG4rXFx0IyBWTEFOIG9uIHRvcC5cXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBhZGQgZGxfZHVtbXkgdHlwZSBkdW1teVxcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIHNldCBkbF9kdW1teSB1cFxcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIGFkZCBsaW5rIGRsX2R1bW15IG5hbWUgZGxfdmxhbiB0eXBlIHZsYW4gaWQgMTAwXFxuK1xcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIGFkZCBkbF9ib25kMCB0eXBlIGJvbmQgbW9kZSBhY3RpdmUtYmFja3VwXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgc2V0IGRsX3ZsYW4gZG93blxcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIHNldCBkbF92bGFuIG1hc3RlciBkbF9ib25kMFxcbitcXHRjaGVja19lcnIgJD8gXFxcImNvdWxkIG5vdCBlbnNsYXZlIHRoZSBWTEFOIHRvIGJvbmQwXFxcIlxcbitcXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBhZGQgZGxfYm9uZDEgdHlwZSBib25kIG1vZGUgYWN0aXZlLWJhY2t1cFxcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIHNldCBkbF9kdW1teSBkb3duXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgc2V0IGRsX2R1bW15IG1hc3RlciBkbF9ib25kMVxcbitcXHRjaGVja19lcnIgJD8gXFxcImNvdWxkIG5vdCBlbnNsYXZlIHRoZSByZWFsIGRldmljZSB0byBib25kMVxcXCJcXG4rXFxuK1xcdCMgSWYgd2UgZ290IGhlcmUgdGhlIGtlcm5lbCBkaWQgbm90IGRlYWRsb2NrOyBtYWtlIHN1cmUgaXQgaXMgc3RpbGxcXG4rXFx0IyByZXNwb25zaXZlIGFuZCB0aGUgZW5zbGF2ZSByZWFsbHkgdG9vayBlZmZlY3QuXFxuK1xcdGxpbmtfaGFzX21hc3RlciBcXFwiJE5TXFxcIiBkbF9kdW1teSBkbF9ib25kMVxcbitcXHRjaGVja19lcnIgJD8gXFxcInJlYWwgZGV2aWNlIG5vdCBlbnNsYXZlZCB0byBib25kMVxcXCJcXG4rXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgZGVsIGRsX2JvbmQxXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgZGVsIGRsX2JvbmQwXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgZGVsIGRsX3ZsYW5cXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBkZWwgZGxfZHVtbXlcXG4rXFxuK1xcdGxvZ190ZXN0IFxcXCJWTEFOIHJlYWwgZGV2aWNlIGVuc2xhdmVkIHRvIGEgc2Vjb25kIGJvbmRcXFwiXFxuK31cXG4rXFxuK3NldHVwX25zIE5TXFxuK3RyYXAgJ2NsZWFudXBfbnMgJE5TJyBFWElUXFxuK1xcbit0ZXN0c19ydW5cXG4rXFxuK2V4aXQgXFxcIiRFWElUX1NUQVRVU1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTg6NDU6MTkuNTc5OTg2ODE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTkyODIyNTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJCT05ESU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZGV2X3dvcmtfc2NoZWRcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbFwiLFxuICAgIFwibmV0ZGV2X3dvcmtfcHJvY1wiLFxuICAgIFwibmV0ZGV2X3dvcmtfcnVuXCIsXG4gICAgXCJ2bGFuX2Rldl93b3JrXCIsXG4gICAgXCJ2bGFuX2RldmljZV9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGFzeW5jaHJvbm91cyB3b3JrIG1lY2hhbmlzbSAoYG5ldGRldl93b3JrYCkgZm9yIG5ldHdvcmsgZGV2aWNlcyBhbmQgbW9kaWZpZXMgdGhlIFZMQU4gZHJpdmVyIHRvIHVzZSBpdCBmb3Igc3RhdGUgcHJvcGFnYXRpb24gKE1UVSwgZmVhdHVyZXMsIGxpbmsgc3RhdGUpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgbmVzdGVkIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG5ldHdvcmtpbmcgYW5kIFZMQU4gbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBtb2RpZnlpbmcgZGV2aWNlIHN0YXRlcyAoZS5nLiwgYnJpbmdpbmcgZGV2aWNlcyB1cC9kb3duLCBjaGFuZ2luZyBNVFUpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGFzeW5jaHJvbm91cyBtZWNoYW5pc20gZG9lc24ndCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgY29uY3VycmVuY3kgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzN2UwOGU4YTEyZTNiNTU3MWZiNzdlM2U5OWQwY2YwNjE3NGE5YzFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTg6NDU6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3RcbmluZGV4IGZkZTYwMWFjZDFkMjVhLi5kMmEyMzhmOGNjOGI5MSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XG5AQCAtNDMzLDYgKzQzMyw4IEBAIGV4Y2VwdGlvbnMpIG5vdGlmaWVycyBydW4gdW5kZXIgdGhlIGluc3RhbmNlIGxvY2suIFBsZWFzZSBleHRlbmQgdGhpc1xuIGRvY3VtZW50YXRpb24gd2hlbmV2ZXIgeW91IG1ha2UgZXhwbGljaXQgYXNzdW1wdGlvbiBhYm91dCBsb2NrIGJlaW5nIGhlbGRcbiBmcm9tIGEgbm90aWZpZXIuXG4gXG4rRHJpdmVycyAqKm11c3Qgbm90KiogZ2VuZXJhdGUgbmVzdGVkIG5vdGlmaWNhdGlvbnMgb2YgdGhlIG9wcy1sb2NrZWQgdHlwZXMuXG4rXG4gTkVUREVWX0lOVEVSTkFMIHN5bWJvbCBuYW1lc3BhY2VcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCBiNjdhMTI1NDFlYWMyOC4uOTk4MWQ2MzdmOGI1NDYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMTEzMSw2ICsxMTMxLDkgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xuICAqXHRuZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YykuIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgYVxuICAqXHRuZWdhdGl2ZSBlcnJubyB0byByZXF1ZXN0IGEgcmV0cnkgdmlhIHRoZSBjb3JlIGJhY2tvZmYuXG4gICpcbisgKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcbisgKlx0UnVuIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoQGV2ZW50cykuXG4rICpcbiAgKiBpbnQgKCpuZG9fc2V0X21hY19hZGRyZXNzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKTtcbiAgKlx0VGhpcyBmdW5jdGlvbiAgaXMgY2FsbGVkIHdoZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIGFkZHJlc3NcbiAgKlx0bmVlZHMgdG8gYmUgY2hhbmdlZC4gSWYgdGhpcyBpbnRlcmZhY2UgaXMgbm90IGRlZmluZWQsIHRoZVxuQEAgLTE0NjAsNiArMTQ2Myw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XG4gXHRcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcbiBcdFx0XHRcdFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKTtcbitcdHZvaWRcdFx0XHQoKm5kb193b3JrKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuIFx0aW50XHRcdFx0KCpuZG9fc2V0X21hY19hZGRyZXNzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgICB2b2lkICphZGRyKTtcbiBcdGludFx0XHRcdCgqbmRvX3ZhbGlkYXRlX2FkZHIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuQEAgLTE5MzAsOCArMTkzNSwxMSBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuICAqXHRcdFx0XHRoYXMgYmVlbiBlbmFibGVkIGR1ZSB0byB0aGUgbmVlZCB0byBsaXN0ZW4gdG9cbiAgKlx0XHRcdFx0YWRkaXRpb25hbCB1bmljYXN0IGFkZHJlc3NlcyBpbiBhIGRldmljZSB0aGF0XG4gICpcdFx0XHRcdGRvZXMgbm90IGltcGxlbWVudCBuZG9fc2V0X3J4X21vZGUoKVxuLSAqXHRAcnhfbW9kZV9ub2RlOlx0XHRMaXN0IGVudHJ5IGZvciByeF9tb2RlIHdvcmsgcHJvY2Vzc2luZ1xuLSAqXHRAcnhfbW9kZV90cmFja2VyOlx0UmVmY291bnQgdHJhY2tlciBmb3IgcnhfbW9kZSB3b3JrXG4rICpcdEB3b3JrX25vZGU6XHRcdExpc3QgZW50cnkgZm9yIGFzeW5jIG5ldGRldl93b3JrIHByb2Nlc3NpbmdcbisgKlx0QHdvcmtfdHJhY2tlcjpcdFx0UmVmY291bnQgdHJhY2tlciBmb3IgYXN5bmMgbmV0ZGV2X3dvcmtcbisgKlx0QHdvcmtfcGVuZGluZzpcdFx0RHJpdmVyLWRlZmluZWQgcGVuZGluZyBuZXRkZXZfd29yaywgcGFzc2VkIHRvXG4rICpcdFx0XHRcdG5kb193b3JrKCkgKHNlZSBuZXRkZXZfd29ya19zY2hlZCgpKVxuKyAqXHRAd29ya19jb3JlX3BlbmRpbmc6XHRDb3JlLWRlZmluZWQgcGVuZGluZyBuZXRkZXZfd29yayAoTkVUREVWX1dPUktfKilcbiAgKlx0QHJ4X21vZGVfYWRkcl9jYWNoZTpcdFJlY3ljbGVkIHNuYXBzaG90IGVudHJpZXMgZm9yIHJ4X21vZGUgd29ya1xuICAqXHRAcnhfbW9kZV9yZXRyeV90aW1lcjpcdFRpbWVyIHRoYXQgcmUtcXVldWVzIHJ4X21vZGUgd29yayBhZnRlciBmYWlsdXJlXG4gICpcdEByeF9tb2RlX3JldHJ5X2NvdW50Olx0TnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJldHJpZXMgYWxyZWFkeSBzY2hlZHVsZWRcbkBAIC0yMzI2LDggKzIzMzQsMTAgQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50XHRcdHByb21pc2N1aXR5O1xuIFx0dW5zaWduZWQgaW50XHRcdGFsbG11bHRpO1xuIFx0Ym9vbFx0XHRcdHVjX3Byb21pc2M7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkXHRyeF9tb2RlX25vZGU7XG4tXHRuZXRkZXZpY2VfdHJhY2tlclx0cnhfbW9kZV90cmFja2VyO1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0d29ya19ub2RlO1xuK1x0bmV0ZGV2aWNlX3RyYWNrZXJcdHdvcmtfdHJhY2tlcjtcbitcdHVuc2lnbmVkIGxvbmdcdFx0d29ya19wZW5kaW5nO1xuK1x0dW5zaWduZWQgbG9uZ1x0XHR3b3JrX2NvcmVfcGVuZGluZztcbiBcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0XHRyeF9tb2RlX2FkZHJfY2FjaGU7XG4gXHRzdHJ1Y3QgdGltZXJfbGlzdFx0cnhfbW9kZV9yZXRyeV90aW1lcjtcbiBcdHVuc2lnbmVkIGludFx0XHRyeF9tb2RlX3JldHJ5X2NvdW50O1xuQEAgLTUxNzYsNiArNTE4Niw5IEBAIHZvaWQgZGV2X2ZldGNoX3N3X25ldHN0YXRzKHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqcyxcbiBcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyBfX3BlcmNwdSAqbmV0c3RhdHMpO1xuIHZvaWQgZGV2X2dldF90c3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnMpO1xuIFxuK3ZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuK3Vuc2lnbmVkIGxvbmcgbmV0ZGV2X3dvcmtfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzayk7XG4rXG4gZW51bSB7XG4gXHRORVNURURfU1lOQ19JTU1fQklULFxuIFx0TkVTVEVEX1NZTkNfVE9ET19CSVQsXG5kaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmNcbmluZGV4IDJiNzRlZDU2ZWIxNjZkLi4yZDJlZmI4Nzc5NzVkNSAxMDA2NDRcbi0tLSBhL25ldC84MDIxcS92bGFuLmNcbisrKyBiL25ldC84MDIxcS92bGFuLmNcbkBAIC03Nyw5ICs3Nyw5IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RkZXYsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pXG4rdm9pZCB2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbilcbiB7XG4gXHRpZiAoISh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfQlJJREdFX0JJTkRJTkcpKVxuIFx0XHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpO1xuQEAgLTMxNiwyOSArMzE2LDYgQEAgc3RhdGljIHZvaWQgdmxhbl9zeW5jX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGV0aGVyX2FkZHJfY29weSh2bGFuLVx1MDAzZXJlYWxfZGV2X2FkZHIsIGRldi1cdTAwM2VkZXZfYWRkcik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZsYW5fdHJhbnNmZXJfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2KVxuLXtcbi1cdHN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdih2bGFuZGV2KTtcbi1cbi1cdG5ldGlmX2luaGVyaXRfdHNvX21heCh2bGFuZGV2LCBkZXYpO1xuLVxuLVx0aWYgKHZsYW5faHdfb2ZmbG9hZF9jYXBhYmxlKGRldi1cdTAwM2VmZWF0dXJlcywgdmxhbi1cdTAwM2V2bGFuX3Byb3RvKSlcbi1cdFx0dmxhbmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuLVx0ZWxzZVxuLVx0XHR2bGFuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBWTEFOX0hMRU47XG4tXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0ZDT0UpXG4tXHR2bGFuZGV2LVx1MDAzZWZjb2VfZGRwX3hpZCA9IGRldi1cdTAwM2VmY29lX2RkcF94aWQ7XG4tI2VuZGlmXG4tXG4tXHR2bGFuZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2PSB+SUZGX1hNSVRfRFNUX1JFTEVBU0U7XG4tXHR2bGFuZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gKHZsYW4tXHUwMDNlcmVhbF9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1hNSVRfRFNUX1JFTEVBU0UpO1xuLVx0dmxhbmRldi1cdTAwM2Vod19lbmNfZmVhdHVyZXMgPSB2bGFuX3RubF9mZWF0dXJlcyh2bGFuLVx1MDAzZXJlYWxfZGV2KTtcbi1cbi1cdG5ldGRldl91cGRhdGVfZmVhdHVyZXModmxhbmRldik7XG4tfVxuLVxuIHN0YXRpYyBpbnQgX192bGFuX2RldmljZV9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxuIHtcbiBcdGludCBlcnIgPSAwO1xuQEAgLTM5MSwxMyArMzY4LDExIEBAIHN0YXRpYyB2b2lkIHZsYW5fdmlkMF9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW50IHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuIFx0XHRcdCAgICAgdm9pZCAqcHRyKVxuIHtcbi1cdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2V4dGFjayhwdHIpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFx0c3RydWN0IHZsYW5fZ3JvdXAgKmdycDtcbiBcdHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbztcbiBcdGludCBpLCBmbGdzO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXY7XG4tXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbjtcbiBcdGJvb2wgbGFzdCA9IGZhbHNlO1xuIFx0TElTVF9IRUFEKGxpc3QpO1xuIFx0aW50IGVycjtcbkBAIC00NDcsNTQgKzQyMiwxOSBAQCBzdGF0aWMgaW50IHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuIFx0XHRcdGlmICh2bGFuZGV2LVx1MDAzZW10dSBcdTAwM2M9IGRldi1cdTAwM2VtdHUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRkZXZfc2V0X210dSh2bGFuZGV2LCBkZXYtXHUwMDNlbXR1KTtcbitcdFx0XHRuZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfTVRVKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOlxuLVx0XHQvKiBQcm9wYWdhdGUgZGV2aWNlIGZlYXR1cmVzIHRvIHVuZGVybHlpbmcgZGV2aWNlICovXG4gXHRcdHZsYW5fZ3JvdXBfZm9yX2VhY2hfZGV2KGdycCwgaSwgdmxhbmRldilcbi1cdFx0XHR2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKGRldiwgdmxhbmRldik7XG4rXHRcdFx0bmV0ZGV2X3dvcmtfc2NoZWQodmxhbmRldiwgVkxBTl9XT1JLX0ZFQVRVUkVTKTtcbiBcdFx0YnJlYWs7XG4gXG4tXHRjYXNlIE5FVERFVl9ET1dOOiB7XG4tXHRcdHN0cnVjdCBuZXRfZGV2aWNlICp0bXA7XG4tXHRcdExJU1RfSEVBRChjbG9zZV9saXN0KTtcbi1cbi1cdFx0LyogUHV0IGFsbCBWTEFOcyBmb3IgdGhpcyBkZXYgaW4gdGhlIGRvd24gc3RhdGUgdG9vLiAgKi9cbi1cdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KSB7XG4tXHRcdFx0ZmxncyA9IHZsYW5kZXYtXHUwMDNlZmxhZ3M7XG4tXHRcdFx0aWYgKCEoZmxncyBcdTAwMjYgSUZGX1VQKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdHZsYW4gPSB2bGFuX2Rldl9wcml2KHZsYW5kZXYpO1xuLVx0XHRcdGlmICghKHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFZMQU5fRkxBR19MT09TRV9CSU5ESU5HKSlcbi1cdFx0XHRcdGxpc3RfYWRkKFx1MDAyNnZsYW5kZXYtXHUwMDNlY2xvc2VfbGlzdCwgXHUwMDI2Y2xvc2VfbGlzdCk7XG4tXHRcdH1cbi1cbi1cdFx0bmV0aWZfY2xvc2VfbWFueShcdTAwMjZjbG9zZV9saXN0LCBmYWxzZSk7XG4tXG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuZGV2LCB0bXAsIFx1MDAyNmNsb3NlX2xpc3QsIGNsb3NlX2xpc3QpIHtcbi1cdFx0XHR2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGRldiwgdmxhbmRldixcbi1cdFx0XHRcdFx0XHRcdHZsYW5fZGV2X3ByaXYodmxhbmRldikpO1xuLVx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2dmxhbmRldi1cdTAwM2VjbG9zZV9saXN0KTtcbi1cdFx0fVxuLVx0XHRsaXN0X2RlbChcdTAwMjZjbG9zZV9saXN0KTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4rXHRjYXNlIE5FVERFVl9ET1dOOlxuIFx0Y2FzZSBORVRERVZfVVA6XG4tXHRcdC8qIFB1dCBhbGwgVkxBTnMgZm9yIHRoaXMgZGV2IGluIHRoZSB1cCBzdGF0ZSB0b28uICAqL1xuLVx0XHR2bGFuX2dyb3VwX2Zvcl9lYWNoX2RldihncnAsIGksIHZsYW5kZXYpIHtcbi1cdFx0XHRmbGdzID0gbmV0aWZfZ2V0X2ZsYWdzKHZsYW5kZXYpO1xuLVx0XHRcdGlmIChmbGdzIFx1MDAyNiBJRkZfVVApXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0XHR2bGFuID0gdmxhbl9kZXZfcHJpdih2bGFuZGV2KTtcbi1cdFx0XHRpZiAoISh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfTE9PU0VfQklORElORykpXG4tXHRcdFx0XHRkZXZfY2hhbmdlX2ZsYWdzKHZsYW5kZXYsIGZsZ3MgfCBJRkZfVVAsXG4tXHRcdFx0XHRcdFx0IGV4dGFjayk7XG4tXHRcdFx0dmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShkZXYsIHZsYW5kZXYsIHZsYW4pO1xuLVx0XHR9XG4rXHRcdHZsYW5fZ3JvdXBfZm9yX2VhY2hfZGV2KGdycCwgaSwgdmxhbmRldilcbitcdFx0XHRuZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfTElOS19TVEFURSk7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaFxuaW5kZXggYzdmZmU1OTFkNTkzNjYuLmM0MWNhYWY5NDA5NWYzIDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uaFxuQEAgLTEyNSw2ICsxMjUsMTcgQEAgc3RhdGljIGlubGluZSBuZXRkZXZfZmVhdHVyZXNfdCB2bGFuX3RubF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYpXG4gaW50IHZsYW5fZmlsdGVyX3B1c2hfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XG4gdm9pZCB2bGFuX2ZpbHRlcl9kcm9wX3ZpZHMoc3RydWN0IHZsYW5faW5mbyAqdmxhbl9pbmZvLCBfX2JlMTYgcHJvdG8pO1xuIFxuKy8qIG5ldGRldl93b3JrIGV2ZW50cyBwcm9wYWdhdGVkIGZyb20gdGhlIHJlYWwgZGV2aWNlLCBzZWUgdmxhbl9kZXZfd29yaygpLiAqL1xuK2VudW0ge1xuK1x0VkxBTl9XT1JLX0xJTktfU1RBVEVcdD0gQklUKDApLCAvKiBzeW5jIHVwL2Rvd24gd2l0aCByZWFsX2RldiAqL1xuK1x0VkxBTl9XT1JLX01UVVx0XHQ9IEJJVCgxKSwgLyogY2xhbXAgbXR1IHRvIHJlYWxfZGV2J3MgKi9cbitcdFZMQU5fV09SS19GRUFUVVJFU1x0PSBCSVQoMiksIC8qIHJlLWluaGVyaXQgcmVhbF9kZXYgZmVhdHVyZXMgKi9cbit9O1xuK1xuK3ZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pO1xuK1xuIC8qIGZvdW5kIGluIHZsYW5fZGV2LmMgKi9cbiB2b2lkIHZsYW5fZGV2X3NldF9pbmdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICB1MzIgc2tiX3ByaW8sIHUxNiB2bGFuX3ByaW8pO1xuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2Rldi5jIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmNcbmluZGV4IDdhYTNhZjhiMTBlYWQwLi5lYzI1NjliM2Y4ZGFjNiAxMDA2NDRcbi0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jXG4rKysgYi9uZXQvODAyMXEvdmxhbl9kZXYuY1xuQEAgLTI3MCw2ICsyNzAsOSBAQCBzdGF0aWMgaW50IHZsYW5fZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdCAgICAhKHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFZMQU5fRkxBR19MT09TRV9CSU5ESU5HKSlcbiBcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiBcbitcdC8qIFRoZSBleHBsaWNpdCBvcGVuIHN1cGVyc2VkZXMgYW55IGRlZmVycmVkIGxpbmstc3RhdGUgc3luYyAqL1xuK1x0bmV0ZGV2X3dvcmtfY2FuY2VsKGRldiwgVkxBTl9XT1JLX0xJTktfU1RBVEUpO1xuK1xuIFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKGRldi1cdTAwM2VkZXZfYWRkciwgcmVhbF9kZXYtXHUwMDNlZGV2X2FkZHIpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICF2bGFuX2Rldl9pbmhlcml0X2FkZHJlc3MoZGV2LCByZWFsX2RldikpIHtcbiBcdFx0ZXJyID0gZGV2X3VjX2FkZChyZWFsX2RldiwgZGV2LVx1MDAzZWRldl9hZGRyKTtcbkBAIC0zMDAsNiArMzAzLDkgQEAgc3RhdGljIGludCB2bGFuX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tXHUwMDNlcmVhbF9kZXY7XG4gXG4rXHQvKiBUaGUgZXhwbGljaXQgY2xvc2Ugc3VwZXJzZWRlcyBhbnkgZGVmZXJyZWQgbGluay1zdGF0ZSBzeW5jICovXG4rXHRuZXRkZXZfd29ya19jYW5jZWwoZGV2LCBWTEFOX1dPUktfTElOS19TVEFURSk7XG4rXG4gXHRkZXZfbWNfdW5zeW5jKHJlYWxfZGV2LCBkZXYpO1xuIFx0ZGV2X3VjX3Vuc3luYyhyZWFsX2RldiwgZGV2KTtcbiBcbkBAIC0xMDE2LDYgKzEwMjIsNTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2bGFuX2V0aHRvb2xfb3BzID0ge1xuIFx0LmdldF90c19pbmZvXHRcdD0gdmxhbl9ldGh0b29sX2dldF90c19pbmZvLFxuIH07XG4gXG4rc3RhdGljIHZvaWQgdmxhbl90cmFuc2Zlcl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXYpXG4re1xuK1x0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KHZsYW5kZXYpO1xuK1xuK1x0bmV0aWZfaW5oZXJpdF90c29fbWF4KHZsYW5kZXYsIGRldik7XG4rXG4rXHRpZiAodmxhbl9od19vZmZsb2FkX2NhcGFibGUoZGV2LVx1MDAzZWZlYXR1cmVzLCB2bGFuLVx1MDAzZXZsYW5fcHJvdG8pKVxuK1x0XHR2bGFuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4rXHRlbHNlXG4rXHRcdHZsYW5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIFZMQU5fSExFTjtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfRkNPRSlcbitcdHZsYW5kZXYtXHUwMDNlZmNvZV9kZHBfeGlkID0gZGV2LVx1MDAzZWZjb2VfZGRwX3hpZDtcbisjZW5kaWZcbitcbitcdHZsYW5kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfWE1JVF9EU1RfUkVMRUFTRTtcbitcdHZsYW5kZXYtXHUwMDNlcHJpdl9mbGFncyB8PSAodmxhbi1cdTAwM2VyZWFsX2Rldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBJRkZfWE1JVF9EU1RfUkVMRUFTRSk7XG4rXHR2bGFuZGV2LVx1MDAzZWh3X2VuY19mZWF0dXJlcyA9IHZsYW5fdG5sX2ZlYXR1cmVzKHZsYW4tXHUwMDNlcmVhbF9kZXYpO1xuK1xuK1x0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyh2bGFuZGV2KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdmxhbl9kZXZfd29yayhzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXG4re1xuK1x0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KHZsYW5kZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbi1cdTAwM2VyZWFsX2RldjtcbitcdGJvb2wgbG9vc2UgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfTE9PU0VfQklORElORztcbitcdHVuc2lnbmVkIGludCBmbGdzO1xuK1xuK1x0aWYgKGV2ZW50cyBcdTAwMjYgVkxBTl9XT1JLX0xJTktfU1RBVEUpIHtcbitcdFx0ZmxncyA9IG5ldGlmX2dldF9mbGFncyh2bGFuZGV2KTtcbitcdFx0aWYgKHJlYWxfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApIHtcbitcdFx0XHRpZiAoIShmbGdzIFx1MDAyNiBJRkZfVVApKSB7XG4rXHRcdFx0XHRpZiAoIWxvb3NlKVxuK1x0XHRcdFx0XHRuZXRpZl9jaGFuZ2VfZmxhZ3ModmxhbmRldixcbitcdFx0XHRcdFx0XHRcdCAgIGZsZ3MgfCBJRkZfVVAsIE5VTEwpO1xuK1x0XHRcdFx0dmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyZWFsX2RldixcbitcdFx0XHRcdFx0XHRcdFx0dmxhbmRldiwgdmxhbik7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKChmbGdzIFx1MDAyNiBJRkZfVVApIFx1MDAyNlx1MDAyNiAhbG9vc2UpIHtcbitcdFx0XHRuZXRpZl9jaGFuZ2VfZmxhZ3ModmxhbmRldiwgZmxncyBcdTAwMjYgfklGRl9VUCwgTlVMTCk7XG4rXHRcdFx0dmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyZWFsX2RldiwgdmxhbmRldiwgdmxhbik7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmICgoZXZlbnRzIFx1MDAyNiBWTEFOX1dPUktfTVRVKSBcdTAwMjZcdTAwMjYgdmxhbmRldi1cdTAwM2VtdHUgXHUwMDNlIHJlYWxfZGV2LVx1MDAzZW10dSlcbitcdFx0bmV0aWZfc2V0X210dSh2bGFuZGV2LCByZWFsX2Rldi1cdTAwM2VtdHUpO1xuK1xuK1x0aWYgKGV2ZW50cyBcdTAwMjYgVkxBTl9XT1JLX0ZFQVRVUkVTKVxuK1x0XHR2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKHJlYWxfZGV2LCB2bGFuZGV2KTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX2NoYW5nZV9tdHVcdFx0PSB2bGFuX2Rldl9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19pbml0XHRcdD0gdmxhbl9kZXZfaW5pdCxcbkBAIC0xMDI3LDYgKzEwODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IHZsYW5fZGV2X3NldF9tYWNfYWRkcmVzcyxcbiBcdC5uZG9fc2V0X3J4X21vZGVcdD0gdmxhbl9kZXZfc2V0X3J4X21vZGUsXG4gXHQubmRvX2NoYW5nZV9yeF9mbGFnc1x0PSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsXG4rXHQubmRvX3dvcmtcdFx0PSB2bGFuX2Rldl93b3JrLFxuIFx0Lm5kb19ldGhfaW9jdGxcdFx0PSB2bGFuX2Rldl9pb2N0bCxcbiBcdC5uZG9fbmVpZ2hfc2V0dXBcdD0gdmxhbl9kZXZfbmVpZ2hfc2V0dXAsXG4gXHQubmRvX2dldF9zdGF0czY0XHQ9IHZsYW5fZGV2X2dldF9zdGF0czY0LFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGVcbmluZGV4IGRjMTdjNWE2MWU5YTRhLi5iM2ZkY2I0ZTM1NWZhNiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL01ha2VmaWxlXG4rKysgYi9uZXQvY29yZS9NYWtlZmlsZVxuQEAgLTEzLDcgKzEzLDcgQEAgb2JqLXlcdFx0ICAgICArPSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG4gXHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbiBcdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4gXHRcdFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcbi1cdFx0XHRuZXRkZXYtZ2VubC5vIG5ldGRldi1nZW5sLWdlbi5vIGdzby5vXG4rXHRcdFx0bmV0ZGV2LWdlbmwubyBuZXRkZXYtZ2VubC1nZW4ubyBuZXRkZXZfd29yay5vIGdzby5vXG4gXG4gb2JqLSQoQ09ORklHX05FVERFVl9BRERSX0xJU1RfVEVTVCkgKz0gZGV2X2FkZHJfbGlzdHNfdGVzdC5vXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNWMwMWRmYWE2YzQ0NTAuLjRiM2Q1Y2ZkZjZlMDBmIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtOTgyMiw2ICs5ODIyLDcgQEAgaW50IG5ldGlmX2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4gXHRfX2Rldl9ub3RpZnlfZmxhZ3MoZGV2LCBvbGRfZmxhZ3MsIGNoYW5nZXMsIDAsIE5VTEwpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4rRVhQT1JUX1NZTUJPTChuZXRpZl9jaGFuZ2VfZmxhZ3MpO1xuIFxuIGludCBfX25ldGlmX3NldF9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuQEAgLTEyMDkzLDYgKzEyMDk0LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXB0eXBlX2FsbCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlcHR5cGVfc3BlY2lmaWMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZW5ldF9ub3RpZmllcl9saXN0KTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpO1xuICNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG4gXHRoYXNoX2luaXQoZGV2LVx1MDAzZXFkaXNjX2hhc2gpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5oIGIvbmV0L2NvcmUvZGV2LmhcbmluZGV4IDQxMjFjNTBlN2M4OGJlLi41ZDBiMDMwNWQzYmFhZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5oXG4rKysgYi9uZXQvY29yZS9kZXYuaFxuQEAgLTE2NywxMCArMTY3LDE5IEBAIGludCBkZXZfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcik7XG4gdm9pZCBfX2Rldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgX19kZXZfc2V0X3Byb21pc2N1aXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMsIGJvb2wgbm90aWZ5KTtcbiB2b2lkIG5ldGlmX3J4X21vZGVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi1ib29sIG5ldGlmX3J4X21vZGVfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rdm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX3J4X21vZGVfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX3J4X21vZGVfY2FuY2VsX3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuKy8qIEV2ZW50cyBmb3IgdGhlIGFzeW5jIG5ldGRldiB3b3JrLCB0cmFja2VkIGluIG5ldGRldi1cdTAwM2V3b3JrX2NvcmVfcGVuZGluZy4gKi9cbitlbnVtIG5ldGRldl93b3JrX2NvcmUge1xuK1x0TkVUREVWX1dPUktfUlhfTU9ERVx0PSBCSVQoMCksXHQvKiBydW4gdGhlIHJ4X21vZGUgdXBkYXRlICovXG4rfTtcbitcbit2b2lkIF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KTtcbit1bnNpZ25lZCBsb25nXG4rX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spO1xuK1xuIHZvaWQgX19kZXZfbm90aWZ5X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBvbGRfZmxhZ3MsXG4gXHRcdFx0dW5zaWduZWQgaW50IGdjaGFuZ2VzLCB1MzIgcG9ydGlkLFxuIFx0XHRcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoKTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jIGIvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1xuaW5kZXggZTE3ZjY0YTY1ZTE3YmUuLjA4NTI4Y2EwYThiMzE0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1xuKysrIGIvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1xuQEAgLTEyLDE3ICsxMiwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNja3VuaXQvdmlzaWJpbGl0eS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJkZXYuaFwiXG4gXG4tc3RhdGljIHZvaWQgbmV0ZGV2X3J4X21vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLVxuLXN0YXRpYyBMSVNUX0hFQUQocnhfbW9kZV9saXN0KTtcbi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJ4X21vZGVfbG9jayk7XG4tc3RhdGljIERFQ0xBUkVfV09SSyhyeF9tb2RlX3dvcmssIG5ldGRldl9yeF9tb2RlX3dvcmspO1xuLVxuIC8qXG4gICogR2VuZXJhbCBsaXN0IGhhbmRsaW5nIGZ1bmN0aW9uc1xuICAqL1xuQEAgLTEyODEsNyArMTI3NCw3IEBAIHZvaWQgbmV0aWZfcnhfbW9kZV9jYW5jZWxfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldi1cdTAwM2VyeF9tb2RlX3JldHJ5X2NvdW50ID0gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit2b2lkIG5ldGlmX3J4X21vZGVfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgdWNfc25hcCwgbWNfc25hcCwgdWNfcmVmLCBtY19yZWY7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuQEAgLTEzMzksNDkgKzEzMzIsOSBAQCBzdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRkZXZfcnhfbW9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi17XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuLVxuLVx0cnRubF9sb2NrKCk7XG4tXG4tXHR3aGlsZSAodHJ1ZSkge1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cnhfbW9kZV9sb2NrKTtcbi1cdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cnhfbW9kZV9saXN0KSkge1xuLVx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4X21vZGVfbG9jayk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0ZGV2ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZyeF9tb2RlX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLFxuLVx0XHRcdFx0ICAgICAgIHJ4X21vZGVfbm9kZSk7XG4tXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfbm9kZSk7XG4tXHRcdC8qIFdlIG11c3QgZnJlZSBuZXRkZXYgdHJhY2tlciB1bmRlclxuLVx0XHQgKiB0aGUgc3BpbmxvY2sgcHJvdGVjdGlvbi5cbi1cdFx0ICovXG4tXHRcdG5ldGRldl90cmFja2VyX2ZyZWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV90cmFja2VyKTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhfbW9kZV9sb2NrKTtcbi1cbi1cdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4tXHRcdG5ldGlmX3J4X21vZGVfcnVuKGRldik7XG4tXHRcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tXHRcdC8qIFVzZSBfX2Rldl9wdXQoKSBiZWNhdXNlIG5ldGRldl90cmFja2VyX2ZyZWUoKSB3YXMgYWxyZWFkeVxuLVx0XHQgKiBjYWxsZWQgYWJvdmUuIE11c3QgYmUgYWZ0ZXIgbmV0ZGV2X3VubG9ja19vcHMoKSB0byBwcmV2ZW50XG4tXHRcdCAqIG5ldGRldl9ydW5fdG9kbygpIGZyb20gZnJlZWluZyB0aGUgZGV2aWNlIHdoaWxlIHN0aWxsIGluIHVzZS5cbi1cdFx0ICovXG4tXHRcdF9fZGV2X3B1dChkZXYpO1xuLVx0fVxuLVxuLVx0cnRubF91bmxvY2soKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZyeF9tb2RlX2xvY2spO1xuLVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfbm9kZSkpIHtcbi1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9ub2RlLCBcdTAwMjZyeF9tb2RlX2xpc3QpO1xuLVx0XHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuLVx0fVxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhfbW9kZV9sb2NrKTtcbi1cdHNjaGVkdWxlX3dvcmsoXHUwMDI2cnhfbW9kZV93b3JrKTtcbitcdF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3JldHJ5KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuQEAgLTEzOTQsNyArMTM0Nyw2IEBAIHN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcmV0cnkoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXG4gdm9pZCBuZXRpZl9yeF9tb2RlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9ub2RlKTtcbiBcdF9faHdfYWRkcl9pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfcmV0cnlfdGltZXIsIG5ldGlmX3J4X21vZGVfcmV0cnksIDApO1xuIH1cbkBAIC0xNDQyLDI0ICsxMzk0LDYgQEAgdm9pZCBkZXZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XG4gfVxuIFxuLWJvb2wgbmV0aWZfcnhfbW9kZV9jbGVhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLXtcbi1cdGJvb2wgY2xlYW4gPSBmYWxzZTtcbi1cbi1cdHNwaW5fbG9ja19iaChcdTAwMjZyeF9tb2RlX2xvY2spO1xuLVx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX25vZGUpKSB7XG4tXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfbm9kZSk7XG4tXHRcdGNsZWFuID0gdHJ1ZTtcbi1cdFx0LyogV2UgbXVzdCByZWxlYXNlIG5ldGRldiB0cmFja2VyIHVuZGVyXG4tXHRcdCAqIHRoZSBzcGlubG9jayBwcm90ZWN0aW9uLlxuLVx0XHQgKi9cbi1cdFx0bmV0ZGV2X3RyYWNrZXJfZnJlZShkZXYsIFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX3RyYWNrZXIpO1xuLVx0fVxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhfbW9kZV9sb2NrKTtcbi1cbi1cdHJldHVybiBjbGVhbjtcbi19XG4tXG4gLyoqXG4gICogbmV0aWZfcnhfbW9kZV9zeW5jKCkgLSBzeW5jIHJ4IG1vZGUgaW5saW5lXG4gICogQGRldjogbmV0d29yayBkZXZpY2VcbkBAIC0xNDczLDExICsxNDA3LDYgQEAgYm9vbCBuZXRpZl9yeF9tb2RlX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gICovXG4gdm9pZCBuZXRpZl9yeF9tb2RlX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRpZiAobmV0aWZfcnhfbW9kZV9jbGVhbihkZXYpKSB7XG4rXHRpZiAoX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpKVxuIFx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuLVx0XHQvKiBVc2UgX19kZXZfcHV0KCkgYmVjYXVzZSBuZXRkZXZfdHJhY2tlcl9mcmVlKCkgd2FzIGFscmVhZHlcbi1cdFx0ICogY2FsbGVkIGluc2lkZSBuZXRpZl9yeF9tb2RlX2NsZWFuKCkuXG4tXHRcdCAqL1xuLVx0XHRfX2Rldl9wdXQoZGV2KTtcbi1cdH1cbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuYyBiL25ldC9jb3JlL25ldGRldl93b3JrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzEwOWZhZTEzMmFkMThcbi0tLSAvZGV2L251bGxcbisrKyBiL25ldC9jb3JlL25ldGRldl93b3JrLmNcbkBAIC0wLDAgKzEsMTYyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiZGV2LmhcIlxuK1xuK3N0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbitcbisvKiBAbmV0ZGV2X3dvcmtfbG9jayBwcm90ZWN0czpcbisgKiAgLSBAbmV0ZGV2X3dvcmtfbGlzdFxuKyAqICAtIHdpdGhpbiB0aGUgbGlzdCBlbnRyaWVzIChzdHJ1Y3QgbmV0X2RldmljZSBmaWVsZHMpOlxuKyAqXHQtIHdvcmtfbm9kZVxuKyAqXHQtIHdvcmtfdHJhY2tlclxuKyAqXHQtIHdvcmtfcGVuZGluZ1xuKyAqXHQtIHdvcmtfY29yZV9wZW5kaW5nXG4rICovXG4rc3RhdGljIExJU1RfSEVBRChuZXRkZXZfd29ya19saXN0KTtcbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5ldGRldl93b3JrX2xvY2spO1xuK3N0YXRpYyBERUNMQVJFX1dPUksobmV0ZGV2X3dvcmssIG5ldGRldl93b3JrX3Byb2MpO1xuK1xuK3N0YXRpYyB2b2lkIG5ldGRldl93b3JrX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4rXHRcdFx0XHR1bnNpZ25lZCBsb25nIGNvcmUpXG4re1xuK1x0aWYgKCFldmVudHMgXHUwMDI2XHUwMDI2ICFjb3JlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKSkge1xuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUsIFx1MDAyNm5ldGRldl93b3JrX2xpc3QpO1xuK1x0XHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuK1x0fVxuK1x0ZGV2LVx1MDAzZXdvcmtfcGVuZGluZyB8PSBldmVudHM7XG4rXHRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcgfD0gY29yZTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuK1xuK1x0c2NoZWR1bGVfd29yayhcdTAwMjZuZXRkZXZfd29yayk7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nXG4rbmV0ZGV2X3dvcmtfZGVxdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nICpwZW5kaW5nLFxuK1x0XHQgICAgdW5zaWduZWQgbG9uZyBtYXNrKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZXZlbnRzO1xuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuK1x0ZXZlbnRzID0gKnBlbmRpbmcgXHUwMDI2IG1hc2s7XG4rXHQqcGVuZGluZyBcdTAwMjY9IH5ldmVudHM7XG4rXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWRldi1cdTAwM2V3b3JrX3BlbmRpbmcgXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKTtcbitcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIpO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4rXG4rXHRyZXR1cm4gZXZlbnRzO1xuK31cbitcbit2b2lkIG5ldGRldl93b3JrX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxuK3tcbitcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCBldmVudHMsIDApO1xuK31cbitFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTtcbitcbisvKipcbisgKiBuZXRkZXZfd29ya19jYW5jZWwoKSAtIGNhbmNlbCBzZWxlY3RlZCB3b3JrIGZvciBhIG5ldGRldlxuKyAqIEBkZXY6IG5ldF9kZXZpY2VcbisgKiBAbWFzazogZXZlbnRzIHRvIGNhbmNlbFxuKyAqXG4rICogQ2xlYXIgQG1hc2sgZnJvbSB0aGUgZGV2aWNlJ3Mgd29yayBwZW5kaW5nIG1hc2suIElmIG5vIHdvcmsgaXMgbGVmdCBwZW5kaW5nXG4rICogdGhlIGRldmljZSBpcyBkZXF1ZXVlZCBhbmQgaXRzIG5kb193b3JrIHdvbid0IGJlIGNhbGxlZC5cbisgKlxuKyAqIE5vIGV4cGVjdGF0aW9ucyBvbiBsb2NraW5nLCBidXQgYWxzbyBubyBndWFyYW50ZWVzIHByb3ZpZGVkLiBJZiB0aGUgY2FsbGVyXG4rICogd2FudHMgdG8gdG91Y2ggQGRldiBhZnRlcndhcmRzIChlLmcuIGNhbGwgdGhlIHdvcmsgdGhhdCBnb3QgY2FuY2VsZWQpXG4rICogdGhleSBoYXZlIHRvIGVuc3VyZSBAZGV2IGRvZXMgbm90IGdldCBmcmVlZC5cbisgKlxuKyAqIFJldHVybnM6IHRoZSBzdWJzZXQgb2YgQG1hc2sgdGhhdCB3YXMgYWN0dWFsbHkgcGVuZGluZywgc28gdGhlIGNhbGxlciBjYW4gcnVuXG4rICogdGhvc2UgZXZlbnRzIGlubGluZS5cbisgKi9cbit1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXG4re1xuK1x0cmV0dXJuIG5ldGRldl93b3JrX2RlcXVldWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya19wZW5kaW5nLCBtYXNrKTtcbit9XG4rRVhQT1JUX1NZTUJPTChuZXRkZXZfd29ya19jYW5jZWwpO1xuK1xuK3ZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxuK3tcbitcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCAwLCBldmVudHMpO1xuK31cbitcbit1bnNpZ25lZCBsb25nXG4rX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXG4re1xuK1x0cmV0dXJuIG5ldGRldl93b3JrX2RlcXVldWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcsIG1hc2spO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4rXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgY29yZSlcbit7XG4rXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChjb3JlIFx1MDAyNiBORVRERVZfV09SS19SWF9NT0RFKVxuK1x0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuK1x0aWYgKGV2ZW50cyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3dvcmspXG4rXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb193b3JrKGRldiwgZXZlbnRzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0cnRubF9sb2NrKCk7XG4rXG4rXHR3aGlsZSAodHJ1ZSkge1xuK1x0XHR1bnNpZ25lZCBsb25nIGV2ZW50cyA9IDAsIGNvcmUgPSAwO1xuK1x0XHRuZXRkZXZpY2VfdHJhY2tlciB0cmFja2VyO1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuK1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4rXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm5ldGRldl93b3JrX2xpc3QpKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0ZGV2ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXRkZXZfd29ya19saXN0LCBzdHJ1Y3QgbmV0X2RldmljZSxcbitcdFx0XHRcdCAgICAgICB3b3JrX25vZGUpO1xuK1x0XHQvKiBUYWtlIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzbyBAZGV2IGNhbid0IGJlIGZyZWVkIHdoaWxlIHdlXG4rXHRcdCAqIGRyb3AgdGhlIGxvY2sgdG8gZ3JhYiBpdHMgb3BzIGxvY2s7IHRoZSB3b3JrIHJlZmVyZW5jZSBpc1xuK1x0XHQgKiBvbmx5IHJlbGVhc2VkIG9uY2Ugd2UgY2xhaW0gdGhlIHdvcmsgYmVsb3cuXG4rXHRcdCAqIFRoZSByZS1sb2NraW5nIGRhbmNlIGlzIHRvIGVuc3VyZSB0aGF0IG9wcyBsb2NrIGlzIGVub3VnaFxuK1x0XHQgKiB0byBlbnN1cmUgY2FuY2VsaW5nIHdvcmsgaXMgbm90IHJhY3kgd2l0aCBkZXF1ZXVlLlxuK1x0XHQgKi9cbitcdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4rXG4rXHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4rXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKSkge1xuK1x0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSk7XG4rXHRcdFx0Y29yZSA9IGRldi1cdTAwM2V3b3JrX2NvcmVfcGVuZGluZztcbitcdFx0XHRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcgPSAwO1xuK1x0XHRcdGV2ZW50cyA9IGRldi1cdTAwM2V3b3JrX3BlbmRpbmc7XG4rXHRcdFx0ZGV2LVx1MDAzZXdvcmtfcGVuZGluZyA9IDA7XG4rXHRcdFx0LyogV2UgdG9vayBhbm90aGVyIHJlZiBhYm92ZSAqL1xuK1x0XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya190cmFja2VyKTtcbitcbitcdFx0XHRpZiAoIWRldl9pc2FsaXZlKGRldikpXG4rXHRcdFx0XHRjb3JlID0gZXZlbnRzID0gMDtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbitcbitcdFx0bmV0ZGV2X3dvcmtfcnVuKGRldiwgZXZlbnRzLCBjb3JlKTtcbitcdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbitcbitcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnRyYWNrZXIpO1xuK1x0fVxuK1xuK1x0cnRubF91bmxvY2soKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcbmluZGV4IGJlMTMwYmY1ODVhNDE5Li42MzY0Y2EwMjY0MmQ2OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcbkBAIC0xMyw2ICsxMyw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGJvbmRfb3B0aW9ucy5zaCBcXFxuIFx0Ym9uZF9wYXNzaXZlX2xhY3Auc2ggXFxcbiBcdGJvbmRfc3RhY2tlZF9oZWFkZXJfcGFyc2Uuc2ggXFxcbitcdGJvbmRfdmxhbl9yZWFsX2Rldi5zaCBcXFxuIFx0ZGV2X2FkZHJfbGlzdHMuc2ggXFxcbiBcdG1vZGUtMS1yZWNvdmVyeS11cGRlbGF5LnNoIFxcXG4gXHRtb2RlLTItcmVjb3ZlcnktdXBkZWxheS5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF92bGFuX3JlYWxfZGV2LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3ZsYW5fcmVhbF9kZXYuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTQyZDlmZmM0ODE5Zjlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF92bGFuX3JlYWxfZGV2LnNoXG5AQCAtMCwwICsxLDE4MCBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgcHJvcGFnYXRpb24gb2YgYSByZWFsIGRldmljZSdzIHN0YXRlIHRvIHRoZSBWTEFOcyBzdGFja2VkIG9uIHRvcCBvZiBpdFxuKyMgd2hlbiB0aGUgcmVhbCBkZXZpY2UgaXMgKG9yIGJlY29tZXMpIGEgYm9uZCBtZW1iZXIuXG4rI1xuKyMgVGhlIGtlcm5lbCBtaXJyb3JzIGEgcmVhbCBkZXZpY2UncyBVUC9ET1dOLCBNVFUgYW5kIGZlYXR1cmUgY2hhbmdlcyBvbnRvIGl0c1xuKyMgVkxBTnMuICBUaGlzIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgKG5ldGRldl93b3JrKTogZG9pbmcgaXQgc3luY2hyb25vdXNseSBmcm9tXG4rIyB0aGUgcmVhbCBkZXZpY2UncyBub3RpZmllciBjb3VsZCBkZWFkbG9jay4gIElmIHRoZSByZWFsIGRldmljZSBpcyBicm91Z2h0IHVwXG4rIyB3aGlsZSBlbnNsYXZlZCB0byBhIGJvbmQgLSBzbyBpdHMgaW5zdGFuY2UgbG9jayBpcyBoZWxkIGFjcm9zcyBORVRERVZfVVAgLSBhbmRcbisjIGEgVkxBTiBvbiB0b3Agb2YgaXQgaXMgaXRzZWxmIGEgYm9uZCBtZW1iZXIsIHRoZSBzeW5jaHJvbm91cyBwcm9wYWdhdGlvblxuKyMgcmUtZW50ZXJlZCB0aGUgc3RhY2sgYW5kIHRyaWVkIHRvIHRha2UgdGhlIHNhbWUgaW5zdGFuY2UgbG9jayBhZ2Fpbi5cbisjXG4rIyBDb3ZlciBib3RoIGhhbHZlczpcbisjICAtIHRoZSBkZWZlcnJlZCBVUC9ET1dOLCBNVFUgYW5kIGZlYXR1cmUgcHJvcGFnYXRpb24gYWN0dWFsbHkgbGFuZHMgb24gdGhlXG4rIyAgICBWTEFOIChsaW5rIHN0YXRlIGFuZCBNVFUgdXNlIGFuIG9wcy1sb2NrZWQgZHVtbXksIGkuZS4gdGhlIGRlZmVycmFsIHBhdGgpLFxuKyMgIC0gdGhlIGRlYWRsb2NrLXByb25lIHRvcG9sb2d5IC0gYSBWTEFOIG9uIGEgZHVtbXksIHdpdGggdGhlIFZMQU4gYW5kIHRoZVxuKyMgICAgZHVtbXkgZWFjaCBlbnNsYXZlZCB0byBhIGRpZmZlcmVudCBib25kIC0gY2FuIGJlIGJ1aWx0IHdpdGhvdXQgaGFuZ2luZy5cbitcbitBTExfVEVTVFM9XCJcbitcdHZsYW5fbGlua19zdGF0ZVxuK1x0dmxhbl9tdHVcbitcdHZsYW5fZmVhdHVyZXNcbitcdHZsYW5fcmVhbF9kZXZfZW5zbGF2ZVxuK1wiXG4rXG4rUkVRVUlSRV9NWj1ub1xuK05VTV9ORVRJRlM9MFxuK2xpYl9kaXI9JChkaXJuYW1lIFwiJDBcIilcbitzb3VyY2UgXCIkbGliX2RpclwiLy4uLy4uLy4uL25ldC9mb3J3YXJkaW5nL2xpYi5zaFxuK1xuKyMgUmV0dXJuIDAgaWYgJGRldiBpbiBuZXRucyAkbnMgaGFzIGZsYWcgJGZsYWcgc2V0IChlLmcuIFVQKSBpbiBpdHMgXHUwMDNjLi4uXHUwMDNlIGZsYWdzLlxuK2xpbmtfaGFzX2ZsYWcoKVxuK3tcbitcdGxvY2FsIG5zPSQxIGRldj0kMiBmbGFnPSQzXG4rXG4rXHRpcCAtbiBcIiRuc1wiIGxpbmsgc2hvdyBkZXYgXCIkZGV2XCIgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXEgXCJbXHUwMDNjLF0ke2ZsYWd9WyxcdTAwM2VdXCJcbit9XG4rXG4rbGlua19sYWNrc19mbGFnKClcbit7XG4rXHQhIGxpbmtfaGFzX2ZsYWcgXCIkQFwiXG4rfVxuK1xuK2xpbmtfbXR1X2lzKClcbit7XG4rXHRsb2NhbCBucz0kMSBkZXY9JDIgd2FudD0kMyBjdXJcbitcbitcdGN1cj0kKGlwIC1uIFwiJG5zXCIgbGluayBzaG93IGRldiBcIiRkZXZcIiAyXHUwMDNlL2Rldi9udWxsIHwgXFxcbitcdFx0c2VkIC1uICdzLy4qIG10dSBcXChbMC05XVxcK1xcKS4qL1xcMS9wJylcbitcdFsgXCIkY3VyXCIgPSBcIiR3YW50XCIgXVxuK31cbitcbit2bGFuX2ZlYXR1cmVfaXMoKVxuK3tcbitcdGxvY2FsIG5zPSQxIGRldj0kMiBmZWF0dXJlPSQzIHZhbHVlPSQ0XG4rXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zXCIgZXRodG9vbCAtayBcIiRkZXZcIiAyXHUwMDNlL2Rldi9udWxsIHwgXFxcbitcdFx0Z3JlcCAtcSBcIl4kZmVhdHVyZTogJHZhbHVlXCJcbit9XG4rXG4rbGlua19oYXNfbWFzdGVyKClcbit7XG4rXHRsb2NhbCBucz0kMSBkZXY9JDIgbWFzdGVyPSQzXG4rXG4rXHRpcCAtbiBcIiRuc1wiIC1vIGxpbmsgc2hvdyBkZXYgXCIkZGV2XCIgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXEgXCJtYXN0ZXIgJG1hc3RlclwiXG4rfVxuK1xuK3ZsYW5fbGlua19zdGF0ZSgpXG4re1xuK1x0UkVUPTBcbitcbitcdGlwIC1uIFwiJE5TXCIgbGluayBhZGQgbHNfZHVtbXkgdHlwZSBkdW1teVxuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGFkZCBsaW5rIGxzX2R1bW15IG5hbWUgbHNfdmxhbiB0eXBlIHZsYW4gaWQgMTAwXG4rXG4rXHQjIEJyaW5naW5nIHRoZSByZWFsIGRldmljZSB1cCBtdXN0IHByb3BhZ2F0ZSBVUCB0byB0aGUgVkxBTi5cbitcdGlwIC1uIFwiJE5TXCIgbGluayBzZXQgbHNfZHVtbXkgdXBcbitcdGJ1c3l3YWl0IFwiJEJVU1lXQUlUX1RJTUVPVVRcIiBsaW5rX2hhc19mbGFnIFwiJE5TXCIgbHNfdmxhbiBVUFxuK1x0Y2hlY2tfZXJyICQ/IFwiVkxBTiBkaWQgbm90IGdvIFVQIGFmdGVyIHRoZSByZWFsIGRldmljZSB3ZW50IFVQXCJcbitcbitcdCMgLi4uIGFuZCBsaWtld2lzZSBmb3IgRE9XTi5cbitcdGlwIC1uIFwiJE5TXCIgbGluayBzZXQgbHNfZHVtbXkgZG93blxuK1x0YnVzeXdhaXQgXCIkQlVTWVdBSVRfVElNRU9VVFwiIGxpbmtfbGFja3NfZmxhZyBcIiROU1wiIGxzX3ZsYW4gVVBcbitcdGNoZWNrX2VyciAkPyBcIlZMQU4gZGlkIG5vdCBnbyBET1dOIGFmdGVyIHRoZSByZWFsIGRldmljZSB3ZW50IERPV05cIlxuK1xuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGRlbCBsc192bGFuXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgZGVsIGxzX2R1bW15XG4rXG4rXHRsb2dfdGVzdCBcIlZMQU4gbGluayBzdGF0ZSBmb2xsb3dzIHRoZSByZWFsIGRldmljZVwiXG4rfVxuK1xuK3ZsYW5fbXR1KClcbit7XG4rXHRSRVQ9MFxuK1xuK1x0IyBUaGUgVkxBTiBpbmhlcml0cyB0aGUgcmVhbCBkZXZpY2UncyBNVFUgKDIwMDApIGF0IGNyZWF0aW9uIHRpbWUuXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgYWRkIG10dV9kdW1teSBtdHUgMjAwMCB0eXBlIGR1bW15XG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgYWRkIGxpbmsgbXR1X2R1bW15IG5hbWUgbXR1X3ZsYW4gdHlwZSB2bGFuIGlkIDEwMFxuK1xuK1x0IyBTaHJpbmtpbmcgdGhlIHJlYWwgZGV2aWNlJ3MgTVRVIG11c3QgY2xhbXAgdGhlIFZMQU4ncyBNVFUuXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgc2V0IG10dV9kdW1teSBtdHUgMTUwMFxuK1x0YnVzeXdhaXQgXCIkQlVTWVdBSVRfVElNRU9VVFwiIGxpbmtfbXR1X2lzIFwiJE5TXCIgbXR1X3ZsYW4gMTUwMFxuK1x0Y2hlY2tfZXJyICQ/IFwiVkxBTiBNVFUgbm90IGNsYW1wZWQgYWZ0ZXIgdGhlIHJlYWwgZGV2aWNlJ3MgTVRVIHNocmFua1wiXG4rXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgZGVsIG10dV92bGFuXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgZGVsIG10dV9kdW1teVxuK1xuK1x0bG9nX3Rlc3QgXCJWTEFOIE1UVSBjbGFtcGVkIHRvIHRoZSByZWFsIGRldmljZVwiXG4rfVxuK1xuK3ZsYW5fZmVhdHVyZXMoKVxuK3tcbitcdFJFVD0wXG4rXG4rXHQjIFVzZSB2ZXRoIGFzIHRoZSByZWFsIGRldmljZTogdW5saWtlIGR1bW15IGl0IGV4cG9ydHMgdmxhbl9mZWF0dXJlcywgc29cbitcdCMgdGhlIFZMQU4gYWN0dWFsbHkgaW5oZXJpdHMgYSB0b2dnbGVhYmxlIG9mZmxvYWQgdG8gYXNzZXJ0IG9uLlxuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGFkZCBmdF92ZXRoIHR5cGUgdmV0aCBwZWVyIG5hbWUgZnRfdmV0aF9wclxuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGFkZCBsaW5rIGZ0X3ZldGggbmFtZSBmdF92bGFuIHR5cGUgdmxhbiBpZCAxMDBcbitcbitcdHZsYW5fZmVhdHVyZV9pcyBcIiROU1wiIGZ0X3ZsYW4gc2NhdHRlci1nYXRoZXIgb25cbitcdGNoZWNrX2VyciAkPyBcIlZMQU4gZGlkIG5vdCBpbmhlcml0IHNjYXR0ZXItZ2F0aGVyIGZyb20gdGhlIHJlYWwgZGV2aWNlXCJcbitcbitcdCMgVG9nZ2xpbmcgdGhlIG9mZmxvYWQgb24gdGhlIHJlYWwgZGV2aWNlIG11c3QgcHJvcGFnYXRlIHRvIHRoZSBWTEFOLlxuK1x0aXAgbmV0bnMgZXhlYyBcIiROU1wiIGV0aHRvb2wgLUsgZnRfdmV0aCBzZyBvZmZcbitcdGJ1c3l3YWl0IFwiJEJVU1lXQUlUX1RJTUVPVVRcIiBcXFxuK1x0XHR2bGFuX2ZlYXR1cmVfaXMgXCIkTlNcIiBmdF92bGFuIHNjYXR0ZXItZ2F0aGVyIG9mZlxuK1x0Y2hlY2tfZXJyICQ/IFwiVkxBTiBzY2F0dGVyLWdhdGhlciBzdGlsbCBvbiBhZnRlciBkaXNhYmxpbmcgaXQgb24gcmVhbCBkZXZcIlxuK1xuK1x0aXAgbmV0bnMgZXhlYyBcIiROU1wiIGV0aHRvb2wgLUsgZnRfdmV0aCBzZyBvblxuK1x0YnVzeXdhaXQgXCIkQlVTWVdBSVRfVElNRU9VVFwiIFxcXG4rXHRcdHZsYW5fZmVhdHVyZV9pcyBcIiROU1wiIGZ0X3ZsYW4gc2NhdHRlci1nYXRoZXIgb25cbitcdGNoZWNrX2VyciAkPyBcIlZMQU4gc2NhdHRlci1nYXRoZXIgc3RpbGwgb2ZmIGFmdGVyIGVuYWJsaW5nIGl0IG9uIHJlYWwgZGV2XCJcbitcbitcdGlwIC1uIFwiJE5TXCIgbGluayBkZWwgZnRfdmxhblxuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGRlbCBmdF92ZXRoXG4rXG4rXHRsb2dfdGVzdCBcIlZMQU4gZmVhdHVyZXMgZm9sbG93IHRoZSByZWFsIGRldmljZVwiXG4rfVxuK1xuK3ZsYW5fcmVhbF9kZXZfZW5zbGF2ZSgpXG4re1xuK1x0UkVUPTBcbitcbitcdCMgZHVtbXkgXHUwMDNjLSBWTEFOIC1cdTAwM2UgYm9uZDAsIHRoZW4gZW5zbGF2ZSB0aGUgZHVtbXkgaXRzZWxmIHRvIGJvbmQxLiAgVGhlXG4rXHQjIGxhc3Qgc3RlcCBicmluZ3MgdGhlIGR1bW15IHVwIHVuZGVyIGJvbmQxJ3MgaW5zdGFuY2UgbG9jaywgd2hpY2ggdXNlZFxuK1x0IyB0byBkZWFkbG9jayB3aGlsZSBzeW5jaHJvbm91c2x5IHByb3BhZ2F0aW5nIFVQIHRvIHRoZSAoYm9uZC1lbnNsYXZlZClcbitcdCMgVkxBTiBvbiB0b3AuXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgYWRkIGRsX2R1bW15IHR5cGUgZHVtbXlcbitcdGlwIC1uIFwiJE5TXCIgbGluayBzZXQgZGxfZHVtbXkgdXBcbitcdGlwIC1uIFwiJE5TXCIgbGluayBhZGQgbGluayBkbF9kdW1teSBuYW1lIGRsX3ZsYW4gdHlwZSB2bGFuIGlkIDEwMFxuK1xuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGFkZCBkbF9ib25kMCB0eXBlIGJvbmQgbW9kZSBhY3RpdmUtYmFja3VwXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgc2V0IGRsX3ZsYW4gZG93blxuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIHNldCBkbF92bGFuIG1hc3RlciBkbF9ib25kMFxuK1x0Y2hlY2tfZXJyICQ/IFwiY291bGQgbm90IGVuc2xhdmUgdGhlIFZMQU4gdG8gYm9uZDBcIlxuK1xuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGFkZCBkbF9ib25kMSB0eXBlIGJvbmQgbW9kZSBhY3RpdmUtYmFja3VwXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgc2V0IGRsX2R1bW15IGRvd25cbitcdGlwIC1uIFwiJE5TXCIgbGluayBzZXQgZGxfZHVtbXkgbWFzdGVyIGRsX2JvbmQxXG4rXHRjaGVja19lcnIgJD8gXCJjb3VsZCBub3QgZW5zbGF2ZSB0aGUgcmVhbCBkZXZpY2UgdG8gYm9uZDFcIlxuK1xuK1x0IyBJZiB3ZSBnb3QgaGVyZSB0aGUga2VybmVsIGRpZCBub3QgZGVhZGxvY2s7IG1ha2Ugc3VyZSBpdCBpcyBzdGlsbFxuK1x0IyByZXNwb25zaXZlIGFuZCB0aGUgZW5zbGF2ZSByZWFsbHkgdG9vayBlZmZlY3QuXG4rXHRsaW5rX2hhc19tYXN0ZXIgXCIkTlNcIiBkbF9kdW1teSBkbF9ib25kMVxuK1x0Y2hlY2tfZXJyICQ/IFwicmVhbCBkZXZpY2Ugbm90IGVuc2xhdmVkIHRvIGJvbmQxXCJcbitcbitcdGlwIC1uIFwiJE5TXCIgbGluayBkZWwgZGxfYm9uZDFcbitcdGlwIC1uIFwiJE5TXCIgbGluayBkZWwgZGxfYm9uZDBcbitcdGlwIC1uIFwiJE5TXCIgbGluayBkZWwgZGxfdmxhblxuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGRlbCBkbF9kdW1teVxuK1xuK1x0bG9nX3Rlc3QgXCJWTEFOIHJlYWwgZGV2aWNlIGVuc2xhdmVkIHRvIGEgc2Vjb25kIGJvbmRcIlxuK31cbitcbitzZXR1cF9ucyBOU1xuK3RyYXAgJ2NsZWFudXBfbnMgJE5TJyBFWElUXG4rXG4rdGVzdHNfcnVuXG4rXG4rZXhpdCBcIiRFWElUX1NUQVRVU1wiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxODo0NToxOS41Nzk5ODgzOTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mjg2OTAyODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGZvciBEZWZlcnJlZCBOZXR3b3JrIERldmljZSBXb3JrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQncyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIG5ldHdvcmsgZGV2aWNlIGV2ZW50cywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgVkxBTnMgYW5kIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4gVGhlIGdvYWwgaGVyZSBpcyB0byBpbnRyb2R1Y2UgYSBkZWZlcnJlZCB3b3JrIG1lY2hhbmlzbSB0byBhdm9pZCBzb21lIG5hc3R5IHBvdGVudGlhbCBkZWFkbG9ja3MgdGhhdCBjYW4gYXJpc2UgZnJvbSBuZXN0ZWQgbm90aWZpY2F0aW9ucywgcGFydGljdWxhcmx5IGFyb3VuZCB0aGluZ3MgbGlrZSBgTkVUREVWX0RPV05gLCBgTkVUREVWX1VQYCwgYE5FVERFVl9DSEFOR0VNVFVgLCBhbmQgYE5FVERFVl9GRUFUX0NIQU5HRWAuIEVzc2VudGlhbGx5LCB3ZSdyZSByZXBsYWNpbmcgdGhlIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiB3aXRoIGFzeW5jaHJvbm91cyB3b3JrIHRvIGJlIGRvbmUgbGF0ZXIuXG5cblRoZSBjaGFuZ2VzIGFyZSBmYWlybHkgd2lkZXNwcmVhZCwgdG91Y2hpbmcgZmlsZXMgaW4gYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgLCB2YXJpb3VzIFZMQU4tcmVsYXRlZCBmaWxlcyAoYHZsYW4uY2AsIGB2bGFuLmhgLCBgdmxhbl9kZXYuY2ApLCBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyAoYGRldi5jYCwgYGRldi5oYCwgYGRldl9hZGRyX2xpc3RzLmNgLCBgTWFrZWZpbGVgKSwgYW5kIGV2ZW4gYSBuZXcgZmlsZSBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZGVmZXJyZWQgd29yayAoYG5ldGRldl93b3JrLmNgKSDigJMgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIGEgbmV3IHNlbGZ0ZXN0IHNjcmlwdCwgYGJvbmRfdmxhbl9yZWFsX2Rldi5zaGAsIHdoaWNoIGlzIGEgZ29vZCBzaWduOyB0aGF0J3MgZ3JlYXQgZm9yIHZlcmlmeWluZyB0aGF0IHRoZXNlIGNoYW5nZXMgd29yayBhcyBpbnRlbmRlZC5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgZ2l2ZW4gaXRzIGltcGFjdCBvbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLCB0aGlzIHBhdGNoIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nIGFuZCBmdXJ0aGVyIHNjcnV0aW55LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgY29yZSBzeW1ib2xzIGludm9sdmVkLiBJIHNlZSBhIGZldyBrZXkgZnVuY3Rpb25zOiBgbmV0ZGV2X3dvcmtfc2NoZWRgLCBgbmV0ZGV2X3dvcmtfY2FuY2VsYCwgYF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZGAsIGBfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsYCwgYG5ldGRldl93b3JrX3J1bmAsIGBuZXRkZXZfd29ya19wcm9jYCwgYW5kIG9mIGNvdXJzZSB0aGUgVkxBTi1zcGVjaWZpYyBgdmxhbl9kZXZfd29ya2AuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5cG9pbnQgdG8gbG9vayBmb3IgY2FsbGVycyBhbmQgdGhlaXIgYmVoYXZpb3IuXG5cbkkgd2FudCB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24uIEkga25vdyB0aGUgY2hhbmdlcyBhcmUgbW9zdGx5IGluIGBuZXQvY29yZS9gIGFuZCBgbmV0LzgwMjFxL2AuIGBuZXQvY29yZS9gIGlzIHByZXR0eSBtdWNoIGFsd2F5cyBpbmNsdWRlZCwgYnV0IHRoZSBWTEFOIGNvZGUgaXMgZ29pbmcgdG8gZGVwZW5kIG9uIGBDT05GSUdfVkxBTl84MDIxUWAuIEkgc2hvdWxkIHZlcmlmeSB0aGF0IHRoYXQncyB0aGUgb25seSByZWxldmFudCBjb25maWcsIHNvIEknbGwgZG91YmxlLWNoZWNrIGBuZXQvODAyMXEvS2NvbmZpZ2AgYW5kIGBuZXQvTWFrZWZpbGVgIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE4OjQ1OjI4Ljg2Njg5MzU2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ3NTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJWTEFOXzgwMjFRXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC84MDIxcS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzgwMjFxL0tjb25maWctNS1cXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXFxubmV0LzgwMjFxL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XFxcIlxcbi0tXFxubmV0LzgwMjFxL0tjb25maWctMjEtXFxubmV0LzgwMjFxL0tjb25maWc6MjI6Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxcbm5ldC84MDIxcS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkdWUlAgKEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxubmV0LzgwMjFxL0tjb25maWc6MjQ6XFx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXFxubmV0LzgwMjFxL0tjb25maWctMjUtXFx0c2VsZWN0IEdBUlBcXG4tLVxcbm5ldC84MDIxcS9LY29uZmlnLTMxLVxcbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcXG5uZXQvODAyMXEvS2NvbmZpZy0zMy1cXHRib29sIFxcXCJNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG5uZXQvODAyMXEvS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcXG5uZXQvODAyMXEvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTVJQXFxuLS1cXG5uZXQvODAyMXEvTWFrZWZpbGUtNC0jXFxubmV0LzgwMjFxL01ha2VmaWxlOjU6b2JqLSQoc3Vic3QgbSx5LCQoQ09ORklHX1ZMQU5fODAyMVEpKVxcdCs9IHZsYW5fY29yZS5vXFxubmV0LzgwMjFxL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpXFx0XFx0Kz0gODAyMXEub1xcbm5ldC84MDIxcS9NYWtlZmlsZS03LVxcbm5ldC84MDIxcS9NYWtlZmlsZS04LTgwMjFxLXlcXHRcXHRcXHRcXHRcXHQ6PSB2bGFuLm8gdmxhbl9kZXYubyB2bGFuX25ldGxpbmsub1xcbm5ldC84MDIxcS9NYWtlZmlsZTo5OjgwMjFxLSQoQ09ORklHX1ZMQU5fODAyMVFfR1ZSUClcXHRcXHQrPSB2bGFuX2d2cnAub1xcbm5ldC84MDIxcS9NYWtlZmlsZToxMDo4MDIxcS0kKENPTkZJR19WTEFOXzgwMjFRX01WUlApXFx0XFx0Kz0gdmxhbl9tdnJwLm9cXG5uZXQvODAyMXEvTWFrZWZpbGUtMTEtODAyMXEtJChDT05GSUdfUFJPQ19GUylcXHRcXHRcXHQrPSB2bGFucHJvYy5vXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5oPTE1OD1zdGF0aWMgaW5saW5lIHUzMiB2bGFuX2dldF9pbmdyZXNzX3ByaW9yaXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5oLTE2NS1cXG5uZXQvODAyMXEvdmxhbi5oOjE2NjojaWZkZWYgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUFxcbm5ldC84MDIxcS92bGFuLmgtMTY3LWludCB2bGFuX2d2cnBfcmVxdWVzdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0LzgwMjFxL3ZsYW4uaD0xNzk9c3RhdGljIGlubGluZSB2b2lkIHZsYW5fZ3ZycF91bmluaXQodm9pZCkge31cXG4tLVxcbm5ldC84MDIxcS92bGFuLmgtMTgxLVxcbm5ldC84MDIxcS92bGFuLmg6MTgyOiNpZmRlZiBDT05GSUdfVkxBTl84MDIxUV9NVlJQXFxubmV0LzgwMjFxL3ZsYW4uaC0xODMtaW50IHZsYW5fbXZycF9yZXF1ZXN0X2pvaW4oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE4OjQ1OjI4LjkyNDM4MjI4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTA0MTMwODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIE5ldHdvcmsgRGV2aWNlIEFzeW5jaHJvbm91cyBXb3JrIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIHRoZSBjb25maWcgdW5kZXIgY29uc2lkZXJhdGlvbiBoZXJlIGlzIGBWTEFOXzgwMjFRYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucywgYnV0IEkgc3VzcGVjdCB0aGF0IHRoaXMgaXMgdGhlIHByaW1hcnkgZm9jdXMuIEdpdmVuIHRoYXQgdGhlIHRlc3QgZnJhbWV3b3JrIGxldmVyYWdlcyBib25kaW5nLCBgQk9ORElOR2AgY291bGQgYmUgdXNlZnVsIHRvIGVuYWJsZSwgYWx0aG91Z2ggdGhlIGNvcmUgbG9naWMgSSdtIGludGVyZXN0ZWQgaW4gaXMgY2xlYXJseSBpbiBgbmV0ZGV2X3dvcmsuY2AgYW5kIGB2bGFuX2Rldi5jYC4gSSdsbCBhZGQgYm90aCBgVkxBTl84MDIxUWAgYW5kIGBCT05ESU5HYCB0byBgRW5hYmxlQ29uZmlnc2AuXG5cbk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIHN5bWJvbHMgYXMgcG90ZW50aWFsIHRhcmdldHMgZm9yIGZ1enppbmc6IGBuZXRkZXZfd29ya19zY2hlZGAsIGBuZXRkZXZfd29ya19jYW5jZWxgLCBgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkYCwgYF9fbmV0ZGV2X3dvcmtfY29yZV9jYW5jZWxgLCBgbmV0ZGV2X3dvcmtfcnVuYCwgYG5ldGRldl93b3JrX3Byb2NgLCBhbmQgYHZsYW5fZGV2X3dvcmtgLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGUgdmlzaWJpbGl0eSBvZiB0aGVzZSBzeW1ib2xzLCBhbmQgd2hldGhlciB0aGV5IGFyZSBzdGF0aWMgb3IgZXhwb3J0ZWQuIE9rYXksIGBuZXRkZXZfd29ya19wcm9jYCwgYG5ldGRldl93b3JrX3J1bmAgYW5kIGB2bGFuX2Rldl93b3JrYCBhcmUgc3RhdGljLCB3aGlsZSBgbmV0ZGV2X3dvcmtfc2NoZWRgIGFuZCBgbmV0ZGV2X3dvcmtfY2FuY2VsYCBhcmUgZXhwb3J0ZWQuIFRoZSBgX19uZXRkZXZfd29ya19jb3JlXypgIHN5bWJvbHMgYXJlIGdsb2JhbCwgYnV0IG5vdCBleHBvcnRlZC5cblxuTXkgZnV6eiB0YXJnZXQgbGlzdCB3aWxsIGNvbnNpc3Qgb2Y6XG4qICAgYG5ldGRldl93b3JrX3NjaGVkYFxuKiAgIGBuZXRkZXZfd29ya19jYW5jZWxgXG4qICAgYG5ldGRldl93b3JrX3Byb2NgXG4qICAgYG5ldGRldl93b3JrX3J1bmBcbiogICBgdmxhbl9kZXZfd29ya2BcbiogICBgdmxhbl9kZXZpY2VfZXZlbnRgICh3aGljaCB3YXMgbW9kaWZpZWQgaW4gdGhlIHBhdGNoKVxuKiAgIGB2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCAoYW5vdGhlciBtb2RpZmllZCBmdW5jdGlvbilcblxuSSdsbCBjb25maXJtIHRoYXQgYG5ldGRldl93b3JrX3Byb2NgIGlzIGluZGVlZCB0aGUgd29ya3F1ZXVlIGNhbGxiYWNrLiBZZXMsIGl0IGlzLlxuXG5UaGUgcmF0aW9uYWxlIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXN5bmNocm9ub3VzIHdvcmsgbWVjaGFuaXNtIChgbmV0ZGV2X3dvcmtgKSBmb3IgbmV0d29yayBkZXZpY2VzIGFuZCBpbnRlZ3JhdGVzIGl0IHdpdGggdGhlIFZMQU4gZHJpdmVyLiBUaGUgZ29hbCBpcyB0byBoYW5kbGUgc3RhdGUgcHJvcGFnYXRpb24gKE1UVSwgZmVhdHVyZXMsIGxpbmsgc3RhdGUpIG1vcmUgZWZmaWNpZW50bHkgYW5kIGF2b2lkIHBvdGVudGlhbCBkZWFkbG9ja3MuIFRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZSB0byB0aGUgY29yZSBuZXR3b3JrIGFuZCBWTEFOIGxvZ2ljLiBDcml0aWNhbGx5LCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rIGFuZCBpb2N0bHMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZ1enogdGhpcyBpbXBsZW1lbnRhdGlvbiB0aG9yb3VnaGx5IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMsIG9yIGNvbmN1cnJlbmN5IGJ1Z3MgdGhhdCB0aGlzIG5ldyBhc3luY2hyb25vdXMgbWVjaGFuaXNtIG1pZ2h0IGludHJvZHVjZS5cblxuVGhlIGZvY3VzIHN5bWJvbHMgbG9vayBnb29kIHRvIG1lLiBUaGlzIGNoYW5nZSBpcyBhYnNvbHV0ZWx5IFwiV29ydGhGdXp6aW5nOiB0cnVlXCIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTg0LCJPdXRwdXRUb2tlbnMiOjIxMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxODo0NTozOS40Mjg1MTYwMjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NjkyMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJCT05ESU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZGV2X3dvcmtfc2NoZWRcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbFwiLFxuICAgIFwibmV0ZGV2X3dvcmtfcHJvY1wiLFxuICAgIFwibmV0ZGV2X3dvcmtfcnVuXCIsXG4gICAgXCJ2bGFuX2Rldl93b3JrXCIsXG4gICAgXCJ2bGFuX2RldmljZV9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGFzeW5jaHJvbm91cyB3b3JrIG1lY2hhbmlzbSAoYG5ldGRldl93b3JrYCkgZm9yIG5ldHdvcmsgZGV2aWNlcyBhbmQgbW9kaWZpZXMgdGhlIFZMQU4gZHJpdmVyIHRvIHVzZSBpdCBmb3Igc3RhdGUgcHJvcGFnYXRpb24gKE1UVSwgZmVhdHVyZXMsIGxpbmsgc3RhdGUpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgbmVzdGVkIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG5ldHdvcmtpbmcgYW5kIFZMQU4gbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBtb2RpZnlpbmcgZGV2aWNlIHN0YXRlcyAoZS5nLiwgYnJpbmdpbmcgZGV2aWNlcyB1cC9kb3duLCBjaGFuZ2luZyBNVFUpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGFzeW5jaHJvbm91cyBtZWNoYW5pc20gZG9lc24ndCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgY29uY3VycmVuY3kgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJCT05ESU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZGV2X3dvcmtfc2NoZWRcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbFwiLFxuICAgIFwibmV0ZGV2X3dvcmtfcHJvY1wiLFxuICAgIFwibmV0ZGV2X3dvcmtfcnVuXCIsXG4gICAgXCJ2bGFuX2Rldl93b3JrXCIsXG4gICAgXCJ2bGFuX2RldmljZV9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGFzeW5jaHJvbm91cyB3b3JrIG1lY2hhbmlzbSAoYG5ldGRldl93b3JrYCkgZm9yIG5ldHdvcmsgZGV2aWNlcyBhbmQgbW9kaWZpZXMgdGhlIFZMQU4gZHJpdmVyIHRvIHVzZSBpdCBmb3Igc3RhdGUgcHJvcGFnYXRpb24gKE1UVSwgZmVhdHVyZXMsIGxpbmsgc3RhdGUpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgbmVzdGVkIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG5ldHdvcmtpbmcgYW5kIFZMQU4gbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBtb2RpZnlpbmcgZGV2aWNlIHN0YXRlcyAoZS5nLiwgYnJpbmdpbmcgZGV2aWNlcyB1cC9kb3duLCBjaGFuZ2luZyBNVFUpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGFzeW5jaHJvbm91cyBtZWNoYW5pc20gZG9lc24ndCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgY29uY3VycmVuY3kgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlg8s7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-24 18:36:10 +0000 UTC FinishedAt: 2026-06-24 18:45:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d87363b0edfc7504ff2b144fe4cdd8154f90f42e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "BONDING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d87363b0edfc7504ff2b144fe4cdd8154f90f42e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VLAN_8021Q", "BONDING" ], "series_id": "181fc8f6-6f07-4299-893b-0835ffdfaa53" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netdev_work_sched", "netdev_work_cancel", "netdev_work_proc", "netdev_work_run", "vlan_dev_work", "vlan_device_event" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI0IDE4OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAgICYjMzQ7Qk9ORElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGRldl93b3JrX3NjaGVkJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX2NhbmNlbCYjMzQ7LAogICAgJiMzNDtuZXRkZXZfd29ya19wcm9jJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3J1biYjMzQ7LAogICAgJiMzNDt2bGFuX2Rldl93b3JrJiMzNDssCiAgICAmIzM0O3ZsYW5fZGV2aWNlX2V2ZW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGFzeW5jaHJvbm91cyB3b3JrIG1lY2hhbmlzbSAoYG5ldGRldl93b3JrYCkgZm9yIG5ldHdvcmsgZGV2aWNlcyBhbmQgbW9kaWZpZXMgdGhlIFZMQU4gZHJpdmVyIHRvIHVzZSBpdCBmb3Igc3RhdGUgcHJvcGFnYXRpb24gKE1UVSwgZmVhdHVyZXMsIGxpbmsgc3RhdGUpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgbmVzdGVkIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG5ldHdvcmtpbmcgYW5kIFZMQU4gbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBtb2RpZnlpbmcgZGV2aWNlIHN0YXRlcyAoZS5nLiwgYnJpbmdpbmcgZGV2aWNlcyB1cC9kb3duLCBjaGFuZ2luZyBNVFUpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGFzeW5jaHJvbm91cyBtZWNoYW5pc20gZG9lc24mIzM5O3QgaW50cm9kdWNlIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIGNvbmN1cnJlbmN5IGJ1Z3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTg6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzN2UwOGU4YTEyZTNiNTU3MWZiNzdlM2U5OWQwY2YwNjE3NGE5YzFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTg6NDU6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XG5pbmRleCBmZGU2MDFhY2QxZDI1YS4uZDJhMjM4ZjhjYzhiOTEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxuQEAgLTQzMyw2ICYjNDM7NDMzLDggQEAgZXhjZXB0aW9ucykgbm90aWZpZXJzIHJ1biB1bmRlciB0aGUgaW5zdGFuY2UgbG9jay4gUGxlYXNlIGV4dGVuZCB0aGlzXG4gZG9jdW1lbnRhdGlvbiB3aGVuZXZlciB5b3UgbWFrZSBleHBsaWNpdCBhc3N1bXB0aW9uIGFib3V0IGxvY2sgYmVpbmcgaGVsZFxuIGZyb20gYSBub3RpZmllci5cbiBcbiYjNDM7RHJpdmVycyAqKm11c3Qgbm90KiogZ2VuZXJhdGUgbmVzdGVkIG5vdGlmaWNhdGlvbnMgb2YgdGhlIG9wcy1sb2NrZWQgdHlwZXMuXG4mIzQzO1xuIE5FVERFVl9JTlRFUk5BTCBzeW1ib2wgbmFtZXNwYWNlXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggYjY3YTEyNTQxZWFjMjguLjk5ODFkNjM3ZjhiNTQ2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTExMzEsNiAmIzQzOzExMzEsOSBAQCBzdHJ1Y3QgbmV0ZGV2X25ldF9ub3RpZmllciB7XG4gICpcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKS4gUmV0dXJuIDAgb24gc3VjY2VzcyBvciBhXG4gICpcdG5lZ2F0aXZlIGVycm5vIHRvIHJlcXVlc3QgYSByZXRyeSB2aWEgdGhlIGNvcmUgYmFja29mZi5cbiAgKlxuJiM0MzsgKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcbiYjNDM7ICpcdFJ1biBkZWZlcnJlZCB3b3JrIHNjaGVkdWxlZCB3aXRoIG5ldGRldl93b3JrX3NjaGVkKEBldmVudHMpLlxuJiM0MzsgKlxuICAqIGludCAoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpO1xuICAqXHRUaGlzIGZ1bmN0aW9uICBpcyBjYWxsZWQgd2hlbiB0aGUgTWVkaWEgQWNjZXNzIENvbnRyb2wgYWRkcmVzc1xuICAqXHRuZWVkcyB0byBiZSBjaGFuZ2VkLiBJZiB0aGlzIGludGVyZmFjZSBpcyBub3QgZGVmaW5lZCwgdGhlXG5AQCAtMTQ2MCw2ICYjNDM7MTQ2Myw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XG4gXHRcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcbiBcdFx0XHRcdFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKTtcbiYjNDM7XHR2b2lkXHRcdFx0KCpuZG9fd29yaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGV2ZW50cyk7XG4gXHRpbnRcdFx0XHQoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdFx0ICAgICAgIHZvaWQgKmFkZHIpO1xuIFx0aW50XHRcdFx0KCpuZG9fdmFsaWRhdGVfYWRkcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5AQCAtMTkzMCw4ICYjNDM7MTkzNSwxMSBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuICAqXHRcdFx0XHRoYXMgYmVlbiBlbmFibGVkIGR1ZSB0byB0aGUgbmVlZCB0byBsaXN0ZW4gdG9cbiAgKlx0XHRcdFx0YWRkaXRpb25hbCB1bmljYXN0IGFkZHJlc3NlcyBpbiBhIGRldmljZSB0aGF0XG4gICpcdFx0XHRcdGRvZXMgbm90IGltcGxlbWVudCBuZG9fc2V0X3J4X21vZGUoKVxuLSAqXHRAcnhfbW9kZV9ub2RlOlx0XHRMaXN0IGVudHJ5IGZvciByeF9tb2RlIHdvcmsgcHJvY2Vzc2luZ1xuLSAqXHRAcnhfbW9kZV90cmFja2VyOlx0UmVmY291bnQgdHJhY2tlciBmb3IgcnhfbW9kZSB3b3JrXG4mIzQzOyAqXHRAd29ya19ub2RlOlx0XHRMaXN0IGVudHJ5IGZvciBhc3luYyBuZXRkZXZfd29yayBwcm9jZXNzaW5nXG4mIzQzOyAqXHRAd29ya190cmFja2VyOlx0XHRSZWZjb3VudCB0cmFja2VyIGZvciBhc3luYyBuZXRkZXZfd29ya1xuJiM0MzsgKlx0QHdvcmtfcGVuZGluZzpcdFx0RHJpdmVyLWRlZmluZWQgcGVuZGluZyBuZXRkZXZfd29yaywgcGFzc2VkIHRvXG4mIzQzOyAqXHRcdFx0XHRuZG9fd29yaygpIChzZWUgbmV0ZGV2X3dvcmtfc2NoZWQoKSlcbiYjNDM7ICpcdEB3b3JrX2NvcmVfcGVuZGluZzpcdENvcmUtZGVmaW5lZCBwZW5kaW5nIG5ldGRldl93b3JrIChORVRERVZfV09SS18qKVxuICAqXHRAcnhfbW9kZV9hZGRyX2NhY2hlOlx0UmVjeWNsZWQgc25hcHNob3QgZW50cmllcyBmb3IgcnhfbW9kZSB3b3JrXG4gICpcdEByeF9tb2RlX3JldHJ5X3RpbWVyOlx0VGltZXIgdGhhdCByZS1xdWV1ZXMgcnhfbW9kZSB3b3JrIGFmdGVyIGZhaWx1cmVcbiAgKlx0QHJ4X21vZGVfcmV0cnlfY291bnQ6XHROdW1iZXIgb2YgY29uc2VjdXRpdmUgcmV0cmllcyBhbHJlYWR5IHNjaGVkdWxlZFxuQEAgLTIzMjYsOCAmIzQzOzIzMzQsMTAgQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50XHRcdHByb21pc2N1aXR5O1xuIFx0dW5zaWduZWQgaW50XHRcdGFsbG11bHRpO1xuIFx0Ym9vbFx0XHRcdHVjX3Byb21pc2M7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkXHRyeF9tb2RlX25vZGU7XG4tXHRuZXRkZXZpY2VfdHJhY2tlclx0cnhfbW9kZV90cmFja2VyO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdHdvcmtfbm9kZTtcbiYjNDM7XHRuZXRkZXZpY2VfdHJhY2tlclx0d29ya190cmFja2VyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0d29ya19wZW5kaW5nO1xuJiM0MztcdHVuc2lnbmVkIGxvbmdcdFx0d29ya19jb3JlX3BlbmRpbmc7XG4gXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdFx0cnhfbW9kZV9hZGRyX2NhY2hlO1xuIFx0c3RydWN0IHRpbWVyX2xpc3RcdHJ4X21vZGVfcmV0cnlfdGltZXI7XG4gXHR1bnNpZ25lZCBpbnRcdFx0cnhfbW9kZV9yZXRyeV9jb3VudDtcbkBAIC01MTc2LDYgJiM0Mzs1MTg2LDkgQEAgdm9pZCBkZXZfZmV0Y2hfc3dfbmV0c3RhdHMoc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzLFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzIF9fcGVyY3B1ICpuZXRzdGF0cyk7XG4gdm9pZCBkZXZfZ2V0X3RzdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqcyk7XG4gXG4mIzQzO3ZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spO1xuJiM0MztcbiBlbnVtIHtcbiBcdE5FU1RFRF9TWU5DX0lNTV9CSVQsXG4gXHRORVNURURfU1lOQ19UT0RPX0JJVCxcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uY1xuaW5kZXggMmI3NGVkNTZlYjE2NmQuLjJkMmVmYjg3Nzk3NWQ1IDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0LzgwMjFxL3ZsYW4uY1xuQEAgLTc3LDkgJiM0Mzs3Nyw5IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RkZXYsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pXG4mIzQzO3ZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbilcbiB7XG4gXHRpZiAoISh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfQlJJREdFX0JJTkRJTkcpKVxuIFx0XHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpO1xuQEAgLTMxNiwyOSAmIzQzOzMxNiw2IEBAIHN0YXRpYyB2b2lkIHZsYW5fc3luY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRldGhlcl9hZGRyX2NvcHkodmxhbi1cdTAwM2VyZWFsX2Rldl9hZGRyLCBkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldilcbi17XG4tXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XG4tXG4tXHRuZXRpZl9pbmhlcml0X3Rzb19tYXgodmxhbmRldiwgZGV2KTtcbi1cbi1cdGlmICh2bGFuX2h3X29mZmxvYWRfY2FwYWJsZShkZXYtXHUwMDNlZmVhdHVyZXMsIHZsYW4tXHUwMDNldmxhbl9wcm90bykpXG4tXHRcdHZsYW5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbi1cdGVsc2Vcbi1cdFx0dmxhbmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICYjNDM7IFZMQU5fSExFTjtcbi1cbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfRkNPRSlcbi1cdHZsYW5kZXYtXHUwMDNlZmNvZV9kZHBfeGlkID0gZGV2LVx1MDAzZWZjb2VfZGRwX3hpZDtcbi0jZW5kaWZcbi1cbi1cdHZsYW5kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfWE1JVF9EU1RfUkVMRUFTRTtcbi1cdHZsYW5kZXYtXHUwMDNlcHJpdl9mbGFncyB8PSAodmxhbi1cdTAwM2VyZWFsX2Rldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBJRkZfWE1JVF9EU1RfUkVMRUFTRSk7XG4tXHR2bGFuZGV2LVx1MDAzZWh3X2VuY19mZWF0dXJlcyA9IHZsYW5fdG5sX2ZlYXR1cmVzKHZsYW4tXHUwMDNlcmVhbF9kZXYpO1xuLVxuLVx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyh2bGFuZGV2KTtcbi19XG4tXG4gc3RhdGljIGludCBfX3ZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpXG4ge1xuIFx0aW50IGVyciA9IDA7XG5AQCAtMzkxLDEzICYjNDM7MzY4LDExIEBAIHN0YXRpYyB2b2lkIHZsYW5fdmlkMF9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW50IHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuIFx0XHRcdCAgICAgdm9pZCAqcHRyKVxuIHtcbi1cdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2V4dGFjayhwdHIpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFx0c3RydWN0IHZsYW5fZ3JvdXAgKmdycDtcbiBcdHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbztcbiBcdGludCBpLCBmbGdzO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXY7XG4tXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbjtcbiBcdGJvb2wgbGFzdCA9IGZhbHNlO1xuIFx0TElTVF9IRUFEKGxpc3QpO1xuIFx0aW50IGVycjtcbkBAIC00NDcsNTQgJiM0Mzs0MjIsMTkgQEAgc3RhdGljIGludCB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCxcbiBcdFx0XHRpZiAodmxhbmRldi1cdTAwM2VtdHUgXHUwMDNjPSBkZXYtXHUwMDNlbXR1KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0ZGV2X3NldF9tdHUodmxhbmRldiwgZGV2LVx1MDAzZW10dSk7XG4mIzQzO1x0XHRcdG5ldGRldl93b3JrX3NjaGVkKHZsYW5kZXYsIFZMQU5fV09SS19NVFUpO1xuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBORVRERVZfRkVBVF9DSEFOR0U6XG4tXHRcdC8qIFByb3BhZ2F0ZSBkZXZpY2UgZmVhdHVyZXMgdG8gdW5kZXJseWluZyBkZXZpY2UgKi9cbiBcdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KVxuLVx0XHRcdHZsYW5fdHJhbnNmZXJfZmVhdHVyZXMoZGV2LCB2bGFuZGV2KTtcbiYjNDM7XHRcdFx0bmV0ZGV2X3dvcmtfc2NoZWQodmxhbmRldiwgVkxBTl9XT1JLX0ZFQVRVUkVTKTtcbiBcdFx0YnJlYWs7XG4gXG4tXHRjYXNlIE5FVERFVl9ET1dOOiB7XG4tXHRcdHN0cnVjdCBuZXRfZGV2aWNlICp0bXA7XG4tXHRcdExJU1RfSEVBRChjbG9zZV9saXN0KTtcbi1cbi1cdFx0LyogUHV0IGFsbCBWTEFOcyBmb3IgdGhpcyBkZXYgaW4gdGhlIGRvd24gc3RhdGUgdG9vLiAgKi9cbi1cdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KSB7XG4tXHRcdFx0ZmxncyA9IHZsYW5kZXYtXHUwMDNlZmxhZ3M7XG4tXHRcdFx0aWYgKCEoZmxncyBcdTAwMjYgSUZGX1VQKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdHZsYW4gPSB2bGFuX2Rldl9wcml2KHZsYW5kZXYpO1xuLVx0XHRcdGlmICghKHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFZMQU5fRkxBR19MT09TRV9CSU5ESU5HKSlcbi1cdFx0XHRcdGxpc3RfYWRkKFx1MDAyNnZsYW5kZXYtXHUwMDNlY2xvc2VfbGlzdCwgXHUwMDI2Y2xvc2VfbGlzdCk7XG4tXHRcdH1cbi1cbi1cdFx0bmV0aWZfY2xvc2VfbWFueShcdTAwMjZjbG9zZV9saXN0LCBmYWxzZSk7XG4tXG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuZGV2LCB0bXAsIFx1MDAyNmNsb3NlX2xpc3QsIGNsb3NlX2xpc3QpIHtcbi1cdFx0XHR2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGRldiwgdmxhbmRldixcbi1cdFx0XHRcdFx0XHRcdHZsYW5fZGV2X3ByaXYodmxhbmRldikpO1xuLVx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2dmxhbmRldi1cdTAwM2VjbG9zZV9saXN0KTtcbi1cdFx0fVxuLVx0XHRsaXN0X2RlbChcdTAwMjZjbG9zZV9saXN0KTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4mIzQzO1x0Y2FzZSBORVRERVZfRE9XTjpcbiBcdGNhc2UgTkVUREVWX1VQOlxuLVx0XHQvKiBQdXQgYWxsIFZMQU5zIGZvciB0aGlzIGRldiBpbiB0aGUgdXAgc3RhdGUgdG9vLiAgKi9cbi1cdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KSB7XG4tXHRcdFx0ZmxncyA9IG5ldGlmX2dldF9mbGFncyh2bGFuZGV2KTtcbi1cdFx0XHRpZiAoZmxncyBcdTAwMjYgSUZGX1VQKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0dmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XG4tXHRcdFx0aWYgKCEodmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgVkxBTl9GTEFHX0xPT1NFX0JJTkRJTkcpKVxuLVx0XHRcdFx0ZGV2X2NoYW5nZV9mbGFncyh2bGFuZGV2LCBmbGdzIHwgSUZGX1VQLFxuLVx0XHRcdFx0XHRcdCBleHRhY2spO1xuLVx0XHRcdHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoZGV2LCB2bGFuZGV2LCB2bGFuKTtcbi1cdFx0fVxuJiM0MztcdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KVxuJiM0MztcdFx0XHRuZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfTElOS19TVEFURSk7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaFxuaW5kZXggYzdmZmU1OTFkNTkzNjYuLmM0MWNhYWY5NDA5NWYzIDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0LzgwMjFxL3ZsYW4uaFxuQEAgLTEyNSw2ICYjNDM7MTI1LDE3IEBAIHN0YXRpYyBpbmxpbmUgbmV0ZGV2X2ZlYXR1cmVzX3Qgdmxhbl90bmxfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2KVxuIGludCB2bGFuX2ZpbHRlcl9wdXNoX3ZpZHMoc3RydWN0IHZsYW5faW5mbyAqdmxhbl9pbmZvLCBfX2JlMTYgcHJvdG8pO1xuIHZvaWQgdmxhbl9maWx0ZXJfZHJvcF92aWRzKHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbywgX19iZTE2IHByb3RvKTtcbiBcbiYjNDM7LyogbmV0ZGV2X3dvcmsgZXZlbnRzIHByb3BhZ2F0ZWQgZnJvbSB0aGUgcmVhbCBkZXZpY2UsIHNlZSB2bGFuX2Rldl93b3JrKCkuICovXG4mIzQzO2VudW0ge1xuJiM0MztcdFZMQU5fV09SS19MSU5LX1NUQVRFXHQ9IEJJVCgwKSwgLyogc3luYyB1cC9kb3duIHdpdGggcmVhbF9kZXYgKi9cbiYjNDM7XHRWTEFOX1dPUktfTVRVXHRcdD0gQklUKDEpLCAvKiBjbGFtcCBtdHUgdG8gcmVhbF9kZXYmIzM5O3MgKi9cbiYjNDM7XHRWTEFOX1dPUktfRkVBVFVSRVNcdD0gQklUKDIpLCAvKiByZS1pbmhlcml0IHJlYWxfZGV2IGZlYXR1cmVzICovXG4mIzQzO307XG4mIzQzO1xuJiM0Mzt2b2lkIHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pO1xuJiM0MztcbiAvKiBmb3VuZCBpbiB2bGFuX2Rldi5jICovXG4gdm9pZCB2bGFuX2Rldl9zZXRfaW5ncmVzc19wcmlvcml0eShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgdTMyIHNrYl9wcmlvLCB1MTYgdmxhbl9wcmlvKTtcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jXG5pbmRleCA3YWEzYWY4YjEwZWFkMC4uZWMyNTY5YjNmOGRhYzYgMTAwNjQ0XG4tLS0gYS9uZXQvODAyMXEvdmxhbl9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmNcbkBAIC0yNzAsNiAmIzQzOzI3MCw5IEBAIHN0YXRpYyBpbnQgdmxhbl9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ICAgICEodmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgVkxBTl9GTEFHX0xPT1NFX0JJTkRJTkcpKVxuIFx0XHRyZXR1cm4gLUVORVRET1dOO1xuIFxuJiM0MztcdC8qIFRoZSBleHBsaWNpdCBvcGVuIHN1cGVyc2VkZXMgYW55IGRlZmVycmVkIGxpbmstc3RhdGUgc3luYyAqL1xuJiM0MztcdG5ldGRldl93b3JrX2NhbmNlbChkZXYsIFZMQU5fV09SS19MSU5LX1NUQVRFKTtcbiYjNDM7XG4gXHRpZiAoIWV0aGVyX2FkZHJfZXF1YWwoZGV2LVx1MDAzZWRldl9hZGRyLCByZWFsX2Rldi1cdTAwM2VkZXZfYWRkcikgXHUwMDI2XHUwMDI2XG4gXHQgICAgIXZsYW5fZGV2X2luaGVyaXRfYWRkcmVzcyhkZXYsIHJlYWxfZGV2KSkge1xuIFx0XHRlcnIgPSBkZXZfdWNfYWRkKHJlYWxfZGV2LCBkZXYtXHUwMDNlZGV2X2FkZHIpO1xuQEAgLTMwMCw2ICYjNDM7MzAzLDkgQEAgc3RhdGljIGludCB2bGFuX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tXHUwMDNlcmVhbF9kZXY7XG4gXG4mIzQzO1x0LyogVGhlIGV4cGxpY2l0IGNsb3NlIHN1cGVyc2VkZXMgYW55IGRlZmVycmVkIGxpbmstc3RhdGUgc3luYyAqL1xuJiM0MztcdG5ldGRldl93b3JrX2NhbmNlbChkZXYsIFZMQU5fV09SS19MSU5LX1NUQVRFKTtcbiYjNDM7XG4gXHRkZXZfbWNfdW5zeW5jKHJlYWxfZGV2LCBkZXYpO1xuIFx0ZGV2X3VjX3Vuc3luYyhyZWFsX2RldiwgZGV2KTtcbiBcbkBAIC0xMDE2LDYgJiM0MzsxMDIyLDU5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdmxhbl9ldGh0b29sX29wcyA9IHtcbiBcdC5nZXRfdHNfaW5mb1x0XHQ9IHZsYW5fZXRodG9vbF9nZXRfdHNfaW5mbyxcbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCB2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XG4mIzQzO1xuJiM0MztcdG5ldGlmX2luaGVyaXRfdHNvX21heCh2bGFuZGV2LCBkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAodmxhbl9od19vZmZsb2FkX2NhcGFibGUoZGV2LVx1MDAzZWZlYXR1cmVzLCB2bGFuLVx1MDAzZXZsYW5fcHJvdG8pKVxuJiM0MztcdFx0dmxhbmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZsYW5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyBWTEFOX0hMRU47XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfRkNPRSlcbiYjNDM7XHR2bGFuZGV2LVx1MDAzZWZjb2VfZGRwX3hpZCA9IGRldi1cdTAwM2VmY29lX2RkcF94aWQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHR2bGFuZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2PSB+SUZGX1hNSVRfRFNUX1JFTEVBU0U7XG4mIzQzO1x0dmxhbmRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9ICh2bGFuLVx1MDAzZXJlYWxfZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9YTUlUX0RTVF9SRUxFQVNFKTtcbiYjNDM7XHR2bGFuZGV2LVx1MDAzZWh3X2VuY19mZWF0dXJlcyA9IHZsYW5fdG5sX2ZlYXR1cmVzKHZsYW4tXHUwMDNlcmVhbF9kZXYpO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKHZsYW5kZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB2bGFuX2Rldl93b3JrKHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdih2bGFuZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLVx1MDAzZXJlYWxfZGV2O1xuJiM0MztcdGJvb2wgbG9vc2UgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfTE9PU0VfQklORElORztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZmxncztcbiYjNDM7XG4mIzQzO1x0aWYgKGV2ZW50cyBcdTAwMjYgVkxBTl9XT1JLX0xJTktfU1RBVEUpIHtcbiYjNDM7XHRcdGZsZ3MgPSBuZXRpZl9nZXRfZmxhZ3ModmxhbmRldik7XG4mIzQzO1x0XHRpZiAocmVhbF9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkge1xuJiM0MztcdFx0XHRpZiAoIShmbGdzIFx1MDAyNiBJRkZfVVApKSB7XG4mIzQzO1x0XHRcdFx0aWYgKCFsb29zZSlcbiYjNDM7XHRcdFx0XHRcdG5ldGlmX2NoYW5nZV9mbGFncyh2bGFuZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIGZsZ3MgfCBJRkZfVVAsIE5VTEwpO1xuJiM0MztcdFx0XHRcdHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocmVhbF9kZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHR2bGFuZGV2LCB2bGFuKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIGlmICgoZmxncyBcdTAwMjYgSUZGX1VQKSBcdTAwMjZcdTAwMjYgIWxvb3NlKSB7XG4mIzQzO1x0XHRcdG5ldGlmX2NoYW5nZV9mbGFncyh2bGFuZGV2LCBmbGdzIFx1MDAyNiB+SUZGX1VQLCBOVUxMKTtcbiYjNDM7XHRcdFx0dmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyZWFsX2RldiwgdmxhbmRldiwgdmxhbik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoKGV2ZW50cyBcdTAwMjYgVkxBTl9XT1JLX01UVSkgXHUwMDI2XHUwMDI2IHZsYW5kZXYtXHUwMDNlbXR1IFx1MDAzZSByZWFsX2Rldi1cdTAwM2VtdHUpXG4mIzQzO1x0XHRuZXRpZl9zZXRfbXR1KHZsYW5kZXYsIHJlYWxfZGV2LVx1MDAzZW10dSk7XG4mIzQzO1xuJiM0MztcdGlmIChldmVudHMgXHUwMDI2IFZMQU5fV09SS19GRUFUVVJFUylcbiYjNDM7XHRcdHZsYW5fdHJhbnNmZXJfZmVhdHVyZXMocmVhbF9kZXYsIHZsYW5kZXYpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gdmxhbl9kZXZfY2hhbmdlX210dSxcbiBcdC5uZG9faW5pdFx0XHQ9IHZsYW5fZGV2X2luaXQsXG5AQCAtMTAyNyw2ICYjNDM7MTA4Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gdmxhbl9kZXZfc2V0X21hY19hZGRyZXNzLFxuIFx0Lm5kb19zZXRfcnhfbW9kZVx0PSB2bGFuX2Rldl9zZXRfcnhfbW9kZSxcbiBcdC5uZG9fY2hhbmdlX3J4X2ZsYWdzXHQ9IHZsYW5fZGV2X2NoYW5nZV9yeF9mbGFncyxcbiYjNDM7XHQubmRvX3dvcmtcdFx0PSB2bGFuX2Rldl93b3JrLFxuIFx0Lm5kb19ldGhfaW9jdGxcdFx0PSB2bGFuX2Rldl9pb2N0bCxcbiBcdC5uZG9fbmVpZ2hfc2V0dXBcdD0gdmxhbl9kZXZfbmVpZ2hfc2V0dXAsXG4gXHQubmRvX2dldF9zdGF0czY0XHQ9IHZsYW5fZGV2X2dldF9zdGF0czY0LFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGVcbmluZGV4IGRjMTdjNWE2MWU5YTRhLi5iM2ZkY2I0ZTM1NWZhNiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9NYWtlZmlsZVxuQEAgLTEzLDcgJiM0MzsxMyw3IEBAIG9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbiBcdFx0XHRuZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcXFxuIFx0XHRcdHNvY2tfZGlhZy5vIGRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXFxcbiBcdFx0XHRmaWJfbm90aWZpZXIubyB4ZHAubyBmbG93X29mZmxvYWQubyBncm8ubyBcXFxuLVx0XHRcdG5ldGRldi1nZW5sLm8gbmV0ZGV2LWdlbmwtZ2VuLm8gZ3NvLm9cbiYjNDM7XHRcdFx0bmV0ZGV2LWdlbmwubyBuZXRkZXYtZ2VubC1nZW4ubyBuZXRkZXZfd29yay5vIGdzby5vXG4gXG4gb2JqLSQoQ09ORklHX05FVERFVl9BRERSX0xJU1RfVEVTVCkgJiM0Mzs9IGRldl9hZGRyX2xpc3RzX3Rlc3Qub1xuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDVjMDFkZmFhNmM0NDUwLi40YjNkNWNmZGY2ZTAwZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTk4MjIsNiAmIzQzOzk4MjIsNyBAQCBpbnQgbmV0aWZfY2hhbmdlX2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBmbGFncyxcbiBcdF9fZGV2X25vdGlmeV9mbGFncyhkZXYsIG9sZF9mbGFncywgY2hhbmdlcywgMCwgTlVMTCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTChuZXRpZl9jaGFuZ2VfZmxhZ3MpO1xuIFxuIGludCBfX25ldGlmX3NldF9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuQEAgLTEyMDkzLDYgJiM0MzsxMjA5NCw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VwdHlwZV9hbGwpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXB0eXBlX3NwZWNpZmljKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VuZXRfbm90aWZpZXJfbGlzdCk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSk7XG4gI2lmZGVmIENPTkZJR19ORVRfU0NIRURcbiBcdGhhc2hfaW5pdChkZXYtXHUwMDNlcWRpc2NfaGFzaCk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmggYi9uZXQvY29yZS9kZXYuaFxuaW5kZXggNDEyMWM1MGU3Yzg4YmUuLjVkMGIwMzA1ZDNiYWFmIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5oXG5AQCAtMTY3LDEwICYjNDM7MTY3LDE5IEBAIGludCBkZXZfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcik7XG4gdm9pZCBfX2Rldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgX19kZXZfc2V0X3Byb21pc2N1aXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMsIGJvb2wgbm90aWZ5KTtcbiB2b2lkIG5ldGlmX3J4X21vZGVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi1ib29sIG5ldGlmX3J4X21vZGVfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzQzO3ZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBuZXRpZl9yeF9tb2RlX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gdm9pZCBuZXRpZl9yeF9tb2RlX2NhbmNlbF9yZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBcbiYjNDM7LyogRXZlbnRzIGZvciB0aGUgYXN5bmMgbmV0ZGV2IHdvcmssIHRyYWNrZWQgaW4gbmV0ZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nLiAqL1xuJiM0MztlbnVtIG5ldGRldl93b3JrX2NvcmUge1xuJiM0MztcdE5FVERFVl9XT1JLX1JYX01PREVcdD0gQklUKDApLFx0LyogcnVuIHRoZSByeF9tb2RlIHVwZGF0ZSAqL1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dm9pZCBfX25ldGRldl93b3JrX2NvcmVfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCk7XG4mIzQzO3Vuc2lnbmVkIGxvbmdcbiYjNDM7X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spO1xuJiM0MztcbiB2b2lkIF9fZGV2X25vdGlmeV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2xkX2ZsYWdzLFxuIFx0XHRcdHVuc2lnbmVkIGludCBnY2hhbmdlcywgdTMyIHBvcnRpZCxcbiBcdFx0XHRjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcbmluZGV4IGUxN2Y2NGE2NWUxN2JlLi4wODUyOGNhMGE4YjMxNCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcbkBAIC0xMiwxNyAmIzQzOzEyLDEwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtkZXYuaFwmIzM0O1xuIFxuLXN0YXRpYyB2b2lkIG5ldGRldl9yeF9tb2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbi1cbi1zdGF0aWMgTElTVF9IRUFEKHJ4X21vZGVfbGlzdCk7XG4tc3RhdGljIERFRklORV9TUElOTE9DSyhyeF9tb2RlX2xvY2spO1xuLXN0YXRpYyBERUNMQVJFX1dPUksocnhfbW9kZV93b3JrLCBuZXRkZXZfcnhfbW9kZV93b3JrKTtcbi1cbiAvKlxuICAqIEdlbmVyYWwgbGlzdCBoYW5kbGluZyBmdW5jdGlvbnNcbiAgKi9cbkBAIC0xMjgxLDcgJiM0MzsxMjc0LDcgQEAgdm9pZCBuZXRpZl9yeF9tb2RlX2NhbmNlbF9yZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2LVx1MDAzZXJ4X21vZGVfcmV0cnlfY291bnQgPSAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt2b2lkIG5ldGlmX3J4X21vZGVfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgdWNfc25hcCwgbWNfc25hcCwgdWNfcmVmLCBtY19yZWY7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuQEAgLTEzMzksNDkgJiM0MzsxMzMyLDkgQEAgc3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgbmV0ZGV2X3J4X21vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4te1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbi1cbi1cdHJ0bmxfbG9jaygpO1xuLVxuLVx0d2hpbGUgKHRydWUpIHtcbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnJ4X21vZGVfbG9jayk7XG4tXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnJ4X21vZGVfbGlzdCkpIHtcbi1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZyeF9tb2RlX2xvY2spO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHRcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2cnhfbW9kZV9saXN0LCBzdHJ1Y3QgbmV0X2RldmljZSxcbi1cdFx0XHRcdCAgICAgICByeF9tb2RlX25vZGUpO1xuLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX25vZGUpO1xuLVx0XHQvKiBXZSBtdXN0IGZyZWUgbmV0ZGV2IHRyYWNrZXIgdW5kZXJcbi1cdFx0ICogdGhlIHNwaW5sb2NrIHByb3RlY3Rpb24uXG4tXHRcdCAqL1xuLVx0XHRuZXRkZXZfdHJhY2tlcl9mcmVlKGRldiwgXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfdHJhY2tlcik7XG4tXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4X21vZGVfbG9jayk7XG4tXG4tXHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuLVx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuLVx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuLVx0XHQvKiBVc2UgX19kZXZfcHV0KCkgYmVjYXVzZSBuZXRkZXZfdHJhY2tlcl9mcmVlKCkgd2FzIGFscmVhZHlcbi1cdFx0ICogY2FsbGVkIGFib3ZlLiBNdXN0IGJlIGFmdGVyIG5ldGRldl91bmxvY2tfb3BzKCkgdG8gcHJldmVudFxuLVx0XHQgKiBuZXRkZXZfcnVuX3RvZG8oKSBmcm9tIGZyZWVpbmcgdGhlIGRldmljZSB3aGlsZSBzdGlsbCBpbiB1c2UuXG4tXHRcdCAqL1xuLVx0XHRfX2Rldl9wdXQoZGV2KTtcbi1cdH1cbi1cbi1cdHJ0bmxfdW5sb2NrKCk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2cnhfbW9kZV9sb2NrKTtcbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX25vZGUpKSB7XG4tXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfbm9kZSwgXHUwMDI2cnhfbW9kZV9saXN0KTtcbi1cdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV90cmFja2VyLCBHRlBfQVRPTUlDKTtcbi1cdH1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4X21vZGVfbG9jayk7XG4tXHRzY2hlZHVsZV93b3JrKFx1MDAyNnJ4X21vZGVfd29yayk7XG4mIzQzO1x0X19uZXRkZXZfd29ya19jb3JlX3NjaGVkKGRldiwgTkVUREVWX1dPUktfUlhfTU9ERSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcmV0cnkoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5AQCAtMTM5NCw3ICYjNDM7MTM0Nyw2IEBAIHN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcmV0cnkoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXG4gdm9pZCBuZXRpZl9yeF9tb2RlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9ub2RlKTtcbiBcdF9faHdfYWRkcl9pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfcmV0cnlfdGltZXIsIG5ldGlmX3J4X21vZGVfcmV0cnksIDApO1xuIH1cbkBAIC0xNDQyLDI0ICYjNDM7MTM5NCw2IEBAIHZvaWQgZGV2X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xuIH1cbiBcbi1ib29sIG5ldGlmX3J4X21vZGVfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi17XG4tXHRib29sIGNsZWFuID0gZmFsc2U7XG4tXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2cnhfbW9kZV9sb2NrKTtcbi1cdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9ub2RlKSkge1xuLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX25vZGUpO1xuLVx0XHRjbGVhbiA9IHRydWU7XG4tXHRcdC8qIFdlIG11c3QgcmVsZWFzZSBuZXRkZXYgdHJhY2tlciB1bmRlclxuLVx0XHQgKiB0aGUgc3BpbmxvY2sgcHJvdGVjdGlvbi5cbi1cdFx0ICovXG4tXHRcdG5ldGRldl90cmFja2VyX2ZyZWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV90cmFja2VyKTtcbi1cdH1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4X21vZGVfbG9jayk7XG4tXG4tXHRyZXR1cm4gY2xlYW47XG4tfVxuLVxuIC8qKlxuICAqIG5ldGlmX3J4X21vZGVfc3luYygpIC0gc3luYyByeCBtb2RlIGlubGluZVxuICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlXG5AQCAtMTQ3MywxMSAmIzQzOzE0MDcsNiBAQCBib29sIG5ldGlmX3J4X21vZGVfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAgKi9cbiB2b2lkIG5ldGlmX3J4X21vZGVfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdGlmIChuZXRpZl9yeF9tb2RlX2NsZWFuKGRldikpIHtcbiYjNDM7XHRpZiAoX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpKVxuIFx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuLVx0XHQvKiBVc2UgX19kZXZfcHV0KCkgYmVjYXVzZSBuZXRkZXZfdHJhY2tlcl9mcmVlKCkgd2FzIGFscmVhZHlcbi1cdFx0ICogY2FsbGVkIGluc2lkZSBuZXRpZl9yeF9tb2RlX2NsZWFuKCkuXG4tXHRcdCAqL1xuLVx0XHRfX2Rldl9wdXQoZGV2KTtcbi1cdH1cbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuYyBiL25ldC9jb3JlL25ldGRldl93b3JrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzEwOWZhZTEzMmFkMThcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL25ldGRldl93b3JrLmNcbkBAIC0wLDAgJiM0MzsxLDE2MiBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2Rldi5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4mIzQzO1xuJiM0MzsvKiBAbmV0ZGV2X3dvcmtfbG9jayBwcm90ZWN0czpcbiYjNDM7ICogIC0gQG5ldGRldl93b3JrX2xpc3RcbiYjNDM7ICogIC0gd2l0aGluIHRoZSBsaXN0IGVudHJpZXMgKHN0cnVjdCBuZXRfZGV2aWNlIGZpZWxkcyk6XG4mIzQzOyAqXHQtIHdvcmtfbm9kZVxuJiM0MzsgKlx0LSB3b3JrX3RyYWNrZXJcbiYjNDM7ICpcdC0gd29ya19wZW5kaW5nXG4mIzQzOyAqXHQtIHdvcmtfY29yZV9wZW5kaW5nXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgTElTVF9IRUFEKG5ldGRldl93b3JrX2xpc3QpO1xuJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5ldGRldl93b3JrX2xvY2spO1xuJiM0MztzdGF0aWMgREVDTEFSRV9XT1JLKG5ldGRldl93b3JrLCBuZXRkZXZfd29ya19wcm9jKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG5ldGRldl93b3JrX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgbG9uZyBjb3JlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFldmVudHMgXHUwMDI2XHUwMDI2ICFjb3JlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4mIzQzO1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkpIHtcbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSwgXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCk7XG4mIzQzO1x0XHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuJiM0MztcdH1cbiYjNDM7XHRkZXYtXHUwMDNld29ya19wZW5kaW5nIHw9IGV2ZW50cztcbiYjNDM7XHRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcgfD0gY29yZTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0c2NoZWR1bGVfd29yayhcdTAwMjZuZXRkZXZfd29yayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nXG4mIzQzO25ldGRldl93b3JrX2RlcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyAqcGVuZGluZyxcbiYjNDM7XHRcdCAgICB1bnNpZ25lZCBsb25nIG1hc2spXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGV2ZW50cztcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuJiM0MztcdGV2ZW50cyA9ICpwZW5kaW5nIFx1MDAyNiBtYXNrO1xuJiM0MztcdCpwZW5kaW5nIFx1MDAyNj0gfmV2ZW50cztcbiYjNDM7XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFkZXYtXHUwMDNld29ya19wZW5kaW5nIFx1MDAyNlx1MDAyNiAhZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpO1xuJiM0MztcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGV2ZW50cztcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBuZXRkZXZfd29ya19zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcbiYjNDM7e1xuJiM0MztcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCBldmVudHMsIDApO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIG5ldGRldl93b3JrX2NhbmNlbCgpIC0gY2FuY2VsIHNlbGVjdGVkIHdvcmsgZm9yIGEgbmV0ZGV2XG4mIzQzOyAqIEBkZXY6IG5ldF9kZXZpY2VcbiYjNDM7ICogQG1hc2s6IGV2ZW50cyB0byBjYW5jZWxcbiYjNDM7ICpcbiYjNDM7ICogQ2xlYXIgQG1hc2sgZnJvbSB0aGUgZGV2aWNlJiMzOTtzIHdvcmsgcGVuZGluZyBtYXNrLiBJZiBubyB3b3JrIGlzIGxlZnQgcGVuZGluZ1xuJiM0MzsgKiB0aGUgZGV2aWNlIGlzIGRlcXVldWVkIGFuZCBpdHMgbmRvX3dvcmsgd29uJiMzOTt0IGJlIGNhbGxlZC5cbiYjNDM7ICpcbiYjNDM7ICogTm8gZXhwZWN0YXRpb25zIG9uIGxvY2tpbmcsIGJ1dCBhbHNvIG5vIGd1YXJhbnRlZXMgcHJvdmlkZWQuIElmIHRoZSBjYWxsZXJcbiYjNDM7ICogd2FudHMgdG8gdG91Y2ggQGRldiBhZnRlcndhcmRzIChlLmcuIGNhbGwgdGhlIHdvcmsgdGhhdCBnb3QgY2FuY2VsZWQpXG4mIzQzOyAqIHRoZXkgaGF2ZSB0byBlbnN1cmUgQGRldiBkb2VzIG5vdCBnZXQgZnJlZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IHRoZSBzdWJzZXQgb2YgQG1hc2sgdGhhdCB3YXMgYWN0dWFsbHkgcGVuZGluZywgc28gdGhlIGNhbGxlciBjYW4gcnVuXG4mIzQzOyAqIHRob3NlIGV2ZW50cyBpbmxpbmUuXG4mIzQzOyAqL1xuJiM0Mzt1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3BlbmRpbmcsIG1hc2spO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfY2FuY2VsKTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxuJiM0Mzt7XG4mIzQzO1x0bmV0ZGV2X3dvcmtfZW5xdWV1ZShkZXYsIDAsIGV2ZW50cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGxvbmdcbiYjNDM7X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX2NvcmVfcGVuZGluZywgbWFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG5ldGRldl93b3JrX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyxcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgY29yZSlcbiYjNDM7e1xuJiM0MztcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcmUgXHUwMDI2IE5FVERFVl9XT1JLX1JYX01PREUpXG4mIzQzO1x0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuJiM0MztcdGlmIChldmVudHMgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb193b3JrKVxuJiM0MztcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3dvcmsoZGV2LCBldmVudHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAodHJ1ZSkge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBldmVudHMgPSAwLCBjb3JlID0gMDtcbiYjNDM7XHRcdG5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiYjNDM7XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm5ldGRldl93b3JrX2xpc3QpKSB7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHdvcmtfbm9kZSk7XG4mIzQzO1x0XHQvKiBUYWtlIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzbyBAZGV2IGNhbiYjMzk7dCBiZSBmcmVlZCB3aGlsZSB3ZVxuJiM0MztcdFx0ICogZHJvcCB0aGUgbG9jayB0byBncmFiIGl0cyBvcHMgbG9jazsgdGhlIHdvcmsgcmVmZXJlbmNlIGlzXG4mIzQzO1x0XHQgKiBvbmx5IHJlbGVhc2VkIG9uY2Ugd2UgY2xhaW0gdGhlIHdvcmsgYmVsb3cuXG4mIzQzO1x0XHQgKiBUaGUgcmUtbG9ja2luZyBkYW5jZSBpcyB0byBlbnN1cmUgdGhhdCBvcHMgbG9jayBpcyBlbm91Z2hcbiYjNDM7XHRcdCAqIHRvIGVuc3VyZSBjYW5jZWxpbmcgd29yayBpcyBub3QgcmFjeSB3aXRoIGRlcXVldWUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2dHJhY2tlciwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiYjNDM7XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKSkge1xuJiM0MztcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpO1xuJiM0MztcdFx0XHRjb3JlID0gZGV2LVx1MDAzZXdvcmtfY29yZV9wZW5kaW5nO1xuJiM0MztcdFx0XHRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcgPSAwO1xuJiM0MztcdFx0XHRldmVudHMgPSBkZXYtXHUwMDNld29ya19wZW5kaW5nO1xuJiM0MztcdFx0XHRkZXYtXHUwMDNld29ya19wZW5kaW5nID0gMDtcbiYjNDM7XHRcdFx0LyogV2UgdG9vayBhbm90aGVyIHJlZiBhYm92ZSAqL1xuJiM0MztcdFx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2LVx1MDAzZXdvcmtfdHJhY2tlcik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWRldl9pc2FsaXZlKGRldikpXG4mIzQzO1x0XHRcdFx0Y29yZSA9IGV2ZW50cyA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpO1xuJiM0MztcdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbiYjNDM7XG4mIzQzO1x0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2dHJhY2tlcik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcbmluZGV4IGJlMTMwYmY1ODVhNDE5Li42MzY0Y2EwMjY0MmQ2OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcbkBAIC0xMyw2ICYjNDM7MTMsNyBAQCBURVNUX1BST0dTIDo9IFxcXG4gXHRib25kX29wdGlvbnMuc2ggXFxcbiBcdGJvbmRfcGFzc2l2ZV9sYWNwLnNoIFxcXG4gXHRib25kX3N0YWNrZWRfaGVhZGVyX3BhcnNlLnNoIFxcXG4mIzQzO1x0Ym9uZF92bGFuX3JlYWxfZGV2LnNoIFxcXG4gXHRkZXZfYWRkcl9saXN0cy5zaCBcXFxuIFx0bW9kZS0xLXJlY292ZXJ5LXVwZGVsYXkuc2ggXFxcbiBcdG1vZGUtMi1yZWNvdmVyeS11cGRlbGF5LnNoIFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3ZsYW5fcmVhbF9kZXYuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfdmxhbl9yZWFsX2Rldi5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41NDJkOWZmYzQ4MTlmOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3ZsYW5fcmVhbF9kZXYuc2hcbkBAIC0wLDAgJiM0MzsxLDE4MCBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBUZXN0IHByb3BhZ2F0aW9uIG9mIGEgcmVhbCBkZXZpY2UmIzM5O3Mgc3RhdGUgdG8gdGhlIFZMQU5zIHN0YWNrZWQgb24gdG9wIG9mIGl0XG4mIzQzOyMgd2hlbiB0aGUgcmVhbCBkZXZpY2UgaXMgKG9yIGJlY29tZXMpIGEgYm9uZCBtZW1iZXIuXG4mIzQzOyNcbiYjNDM7IyBUaGUga2VybmVsIG1pcnJvcnMgYSByZWFsIGRldmljZSYjMzk7cyBVUC9ET1dOLCBNVFUgYW5kIGZlYXR1cmUgY2hhbmdlcyBvbnRvIGl0c1xuJiM0MzsjIFZMQU5zLiAgVGhpcyBpcyBkb25lIGFzeW5jaHJvbm91c2x5IChuZXRkZXZfd29yayk6IGRvaW5nIGl0IHN5bmNocm9ub3VzbHkgZnJvbVxuJiM0MzsjIHRoZSByZWFsIGRldmljZSYjMzk7cyBub3RpZmllciBjb3VsZCBkZWFkbG9jay4gIElmIHRoZSByZWFsIGRldmljZSBpcyBicm91Z2h0IHVwXG4mIzQzOyMgd2hpbGUgZW5zbGF2ZWQgdG8gYSBib25kIC0gc28gaXRzIGluc3RhbmNlIGxvY2sgaXMgaGVsZCBhY3Jvc3MgTkVUREVWX1VQIC0gYW5kXG4mIzQzOyMgYSBWTEFOIG9uIHRvcCBvZiBpdCBpcyBpdHNlbGYgYSBib25kIG1lbWJlciwgdGhlIHN5bmNocm9ub3VzIHByb3BhZ2F0aW9uXG4mIzQzOyMgcmUtZW50ZXJlZCB0aGUgc3RhY2sgYW5kIHRyaWVkIHRvIHRha2UgdGhlIHNhbWUgaW5zdGFuY2UgbG9jayBhZ2Fpbi5cbiYjNDM7I1xuJiM0MzsjIENvdmVyIGJvdGggaGFsdmVzOlxuJiM0MzsjICAtIHRoZSBkZWZlcnJlZCBVUC9ET1dOLCBNVFUgYW5kIGZlYXR1cmUgcHJvcGFnYXRpb24gYWN0dWFsbHkgbGFuZHMgb24gdGhlXG4mIzQzOyMgICAgVkxBTiAobGluayBzdGF0ZSBhbmQgTVRVIHVzZSBhbiBvcHMtbG9ja2VkIGR1bW15LCBpLmUuIHRoZSBkZWZlcnJhbCBwYXRoKSxcbiYjNDM7IyAgLSB0aGUgZGVhZGxvY2stcHJvbmUgdG9wb2xvZ3kgLSBhIFZMQU4gb24gYSBkdW1teSwgd2l0aCB0aGUgVkxBTiBhbmQgdGhlXG4mIzQzOyMgICAgZHVtbXkgZWFjaCBlbnNsYXZlZCB0byBhIGRpZmZlcmVudCBib25kIC0gY2FuIGJlIGJ1aWx0IHdpdGhvdXQgaGFuZ2luZy5cbiYjNDM7XG4mIzQzO0FMTF9URVNUUz1cJiMzNDtcbiYjNDM7XHR2bGFuX2xpbmtfc3RhdGVcbiYjNDM7XHR2bGFuX210dVxuJiM0MztcdHZsYW5fZmVhdHVyZXNcbiYjNDM7XHR2bGFuX3JlYWxfZGV2X2Vuc2xhdmVcbiYjNDM7XCYjMzQ7XG4mIzQzO1xuJiM0MztSRVFVSVJFX01aPW5vXG4mIzQzO05VTV9ORVRJRlM9MFxuJiM0MztsaWJfZGlyPSQoZGlybmFtZSBcJiMzNDskMFwmIzM0OylcbiYjNDM7c291cmNlIFwmIzM0OyRsaWJfZGlyXCYjMzQ7Ly4uLy4uLy4uL25ldC9mb3J3YXJkaW5nL2xpYi5zaFxuJiM0MztcbiYjNDM7IyBSZXR1cm4gMCBpZiAkZGV2IGluIG5ldG5zICRucyBoYXMgZmxhZyAkZmxhZyBzZXQgKGUuZy4gVVApIGluIGl0cyBcdTAwM2MuLi5cdTAwM2UgZmxhZ3MuXG4mIzQzO2xpbmtfaGFzX2ZsYWcoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9JDEgZGV2PSQyIGZsYWc9JDNcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JG5zXCYjMzQ7IGxpbmsgc2hvdyBkZXYgXCYjMzQ7JGRldlwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHwgZ3JlcCAtcSBcJiMzNDtbXHUwMDNjLF0ke2ZsYWd9WyxcdTAwM2VdXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2xpbmtfbGFja3NfZmxhZygpXG4mIzQzO3tcbiYjNDM7XHQhIGxpbmtfaGFzX2ZsYWcgXCYjMzQ7JEBcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bGlua19tdHVfaXMoKVxuJiM0Mzt7XG4mIzQzO1x0bG9jYWwgbnM9JDEgZGV2PSQyIHdhbnQ9JDMgY3VyXG4mIzQzO1xuJiM0MztcdGN1cj0kKGlwIC1uIFwmIzM0OyRuc1wmIzM0OyBsaW5rIHNob3cgZGV2IFwmIzM0OyRkZXZcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8IFxcXG4mIzQzO1x0XHRzZWQgLW4gJiMzOTtzLy4qIG10dSBcXChbMC05XVxcJiM0MztcXCkuKi9cXDEvcCYjMzk7KVxuJiM0MztcdFsgXCYjMzQ7JGN1clwmIzM0OyA9IFwmIzM0OyR3YW50XCYjMzQ7IF1cbiYjNDM7fVxuJiM0MztcbiYjNDM7dmxhbl9mZWF0dXJlX2lzKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPSQxIGRldj0kMiBmZWF0dXJlPSQzIHZhbHVlPSQ0XG4mIzQzO1xuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zXCYjMzQ7IGV0aHRvb2wgLWsgXCYjMzQ7JGRldlwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHwgXFxcbiYjNDM7XHRcdGdyZXAgLXEgXCYjMzQ7XiRmZWF0dXJlOiAkdmFsdWVcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bGlua19oYXNfbWFzdGVyKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIG5zPSQxIGRldj0kMiBtYXN0ZXI9JDNcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JG5zXCYjMzQ7IC1vIGxpbmsgc2hvdyBkZXYgXCYjMzQ7JGRldlwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHwgZ3JlcCAtcSBcJiMzNDttYXN0ZXIgJG1hc3RlclwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2bGFuX2xpbmtfc3RhdGUoKVxuJiM0Mzt7XG4mIzQzO1x0UkVUPTBcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgYWRkIGxzX2R1bW15IHR5cGUgZHVtbXlcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNcJiMzNDsgbGluayBhZGQgbGluayBsc19kdW1teSBuYW1lIGxzX3ZsYW4gdHlwZSB2bGFuIGlkIDEwMFxuJiM0MztcbiYjNDM7XHQjIEJyaW5naW5nIHRoZSByZWFsIGRldmljZSB1cCBtdXN0IHByb3BhZ2F0ZSBVUCB0byB0aGUgVkxBTi5cbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNcJiMzNDsgbGluayBzZXQgbHNfZHVtbXkgdXBcbiYjNDM7XHRidXN5d2FpdCBcJiMzNDskQlVTWVdBSVRfVElNRU9VVFwmIzM0OyBsaW5rX2hhc19mbGFnIFwmIzM0OyROU1wmIzM0OyBsc192bGFuIFVQXG4mIzQzO1x0Y2hlY2tfZXJyICQ/IFwmIzM0O1ZMQU4gZGlkIG5vdCBnbyBVUCBhZnRlciB0aGUgcmVhbCBkZXZpY2Ugd2VudCBVUFwmIzM0O1xuJiM0MztcbiYjNDM7XHQjIC4uLiBhbmQgbGlrZXdpc2UgZm9yIERPV04uXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgc2V0IGxzX2R1bW15IGRvd25cbiYjNDM7XHRidXN5d2FpdCBcJiMzNDskQlVTWVdBSVRfVElNRU9VVFwmIzM0OyBsaW5rX2xhY2tzX2ZsYWcgXCYjMzQ7JE5TXCYjMzQ7IGxzX3ZsYW4gVVBcbiYjNDM7XHRjaGVja19lcnIgJD8gXCYjMzQ7VkxBTiBkaWQgbm90IGdvIERPV04gYWZ0ZXIgdGhlIHJlYWwgZGV2aWNlIHdlbnQgRE9XTlwmIzM0O1xuJiM0MztcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNcJiMzNDsgbGluayBkZWwgbHNfdmxhblxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGRlbCBsc19kdW1teVxuJiM0MztcbiYjNDM7XHRsb2dfdGVzdCBcJiMzNDtWTEFOIGxpbmsgc3RhdGUgZm9sbG93cyB0aGUgcmVhbCBkZXZpY2VcJiMzNDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dmxhbl9tdHUoKVxuJiM0Mzt7XG4mIzQzO1x0UkVUPTBcbiYjNDM7XG4mIzQzO1x0IyBUaGUgVkxBTiBpbmhlcml0cyB0aGUgcmVhbCBkZXZpY2UmIzM5O3MgTVRVICgyMDAwKSBhdCBjcmVhdGlvbiB0aW1lLlxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGFkZCBtdHVfZHVtbXkgbXR1IDIwMDAgdHlwZSBkdW1teVxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGFkZCBsaW5rIG10dV9kdW1teSBuYW1lIG10dV92bGFuIHR5cGUgdmxhbiBpZCAxMDBcbiYjNDM7XG4mIzQzO1x0IyBTaHJpbmtpbmcgdGhlIHJlYWwgZGV2aWNlJiMzOTtzIE1UVSBtdXN0IGNsYW1wIHRoZSBWTEFOJiMzOTtzIE1UVS5cbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNcJiMzNDsgbGluayBzZXQgbXR1X2R1bW15IG10dSAxNTAwXG4mIzQzO1x0YnVzeXdhaXQgXCYjMzQ7JEJVU1lXQUlUX1RJTUVPVVRcJiMzNDsgbGlua19tdHVfaXMgXCYjMzQ7JE5TXCYjMzQ7IG10dV92bGFuIDE1MDBcbiYjNDM7XHRjaGVja19lcnIgJD8gXCYjMzQ7VkxBTiBNVFUgbm90IGNsYW1wZWQgYWZ0ZXIgdGhlIHJlYWwgZGV2aWNlJiMzOTtzIE1UVSBzaHJhbmtcJiMzNDtcbiYjNDM7XG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgZGVsIG10dV92bGFuXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgZGVsIG10dV9kdW1teVxuJiM0MztcbiYjNDM7XHRsb2dfdGVzdCBcJiMzNDtWTEFOIE1UVSBjbGFtcGVkIHRvIHRoZSByZWFsIGRldmljZVwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2bGFuX2ZlYXR1cmVzKClcbiYjNDM7e1xuJiM0MztcdFJFVD0wXG4mIzQzO1xuJiM0MztcdCMgVXNlIHZldGggYXMgdGhlIHJlYWwgZGV2aWNlOiB1bmxpa2UgZHVtbXkgaXQgZXhwb3J0cyB2bGFuX2ZlYXR1cmVzLCBzb1xuJiM0MztcdCMgdGhlIFZMQU4gYWN0dWFsbHkgaW5oZXJpdHMgYSB0b2dnbGVhYmxlIG9mZmxvYWQgdG8gYXNzZXJ0IG9uLlxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGFkZCBmdF92ZXRoIHR5cGUgdmV0aCBwZWVyIG5hbWUgZnRfdmV0aF9wclxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGFkZCBsaW5rIGZ0X3ZldGggbmFtZSBmdF92bGFuIHR5cGUgdmxhbiBpZCAxMDBcbiYjNDM7XG4mIzQzO1x0dmxhbl9mZWF0dXJlX2lzIFwmIzM0OyROU1wmIzM0OyBmdF92bGFuIHNjYXR0ZXItZ2F0aGVyIG9uXG4mIzQzO1x0Y2hlY2tfZXJyICQ/IFwmIzM0O1ZMQU4gZGlkIG5vdCBpbmhlcml0IHNjYXR0ZXItZ2F0aGVyIGZyb20gdGhlIHJlYWwgZGV2aWNlXCYjMzQ7XG4mIzQzO1xuJiM0MztcdCMgVG9nZ2xpbmcgdGhlIG9mZmxvYWQgb24gdGhlIHJlYWwgZGV2aWNlIG11c3QgcHJvcGFnYXRlIHRvIHRoZSBWTEFOLlxuJiM0MztcdGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JE5TXCYjMzQ7IGV0aHRvb2wgLUsgZnRfdmV0aCBzZyBvZmZcbiYjNDM7XHRidXN5d2FpdCBcJiMzNDskQlVTWVdBSVRfVElNRU9VVFwmIzM0OyBcXFxuJiM0MztcdFx0dmxhbl9mZWF0dXJlX2lzIFwmIzM0OyROU1wmIzM0OyBmdF92bGFuIHNjYXR0ZXItZ2F0aGVyIG9mZlxuJiM0MztcdGNoZWNrX2VyciAkPyBcJiMzNDtWTEFOIHNjYXR0ZXItZ2F0aGVyIHN0aWxsIG9uIGFmdGVyIGRpc2FibGluZyBpdCBvbiByZWFsIGRldlwmIzM0O1xuJiM0MztcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyROU1wmIzM0OyBldGh0b29sIC1LIGZ0X3ZldGggc2cgb25cbiYjNDM7XHRidXN5d2FpdCBcJiMzNDskQlVTWVdBSVRfVElNRU9VVFwmIzM0OyBcXFxuJiM0MztcdFx0dmxhbl9mZWF0dXJlX2lzIFwmIzM0OyROU1wmIzM0OyBmdF92bGFuIHNjYXR0ZXItZ2F0aGVyIG9uXG4mIzQzO1x0Y2hlY2tfZXJyICQ/IFwmIzM0O1ZMQU4gc2NhdHRlci1nYXRoZXIgc3RpbGwgb2ZmIGFmdGVyIGVuYWJsaW5nIGl0IG9uIHJlYWwgZGV2XCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGRlbCBmdF92bGFuXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgZGVsIGZ0X3ZldGhcbiYjNDM7XG4mIzQzO1x0bG9nX3Rlc3QgXCYjMzQ7VkxBTiBmZWF0dXJlcyBmb2xsb3cgdGhlIHJlYWwgZGV2aWNlXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZsYW5fcmVhbF9kZXZfZW5zbGF2ZSgpXG4mIzQzO3tcbiYjNDM7XHRSRVQ9MFxuJiM0MztcbiYjNDM7XHQjIGR1bW15IFx1MDAzYy0gVkxBTiAtXHUwMDNlIGJvbmQwLCB0aGVuIGVuc2xhdmUgdGhlIGR1bW15IGl0c2VsZiB0byBib25kMS4gIFRoZVxuJiM0MztcdCMgbGFzdCBzdGVwIGJyaW5ncyB0aGUgZHVtbXkgdXAgdW5kZXIgYm9uZDEmIzM5O3MgaW5zdGFuY2UgbG9jaywgd2hpY2ggdXNlZFxuJiM0MztcdCMgdG8gZGVhZGxvY2sgd2hpbGUgc3luY2hyb25vdXNseSBwcm9wYWdhdGluZyBVUCB0byB0aGUgKGJvbmQtZW5zbGF2ZWQpXG4mIzQzO1x0IyBWTEFOIG9uIHRvcC5cbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNcJiMzNDsgbGluayBhZGQgZGxfZHVtbXkgdHlwZSBkdW1teVxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIHNldCBkbF9kdW1teSB1cFxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGFkZCBsaW5rIGRsX2R1bW15IG5hbWUgZGxfdmxhbiB0eXBlIHZsYW4gaWQgMTAwXG4mIzQzO1xuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGFkZCBkbF9ib25kMCB0eXBlIGJvbmQgbW9kZSBhY3RpdmUtYmFja3VwXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgc2V0IGRsX3ZsYW4gZG93blxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIHNldCBkbF92bGFuIG1hc3RlciBkbF9ib25kMFxuJiM0MztcdGNoZWNrX2VyciAkPyBcJiMzNDtjb3VsZCBub3QgZW5zbGF2ZSB0aGUgVkxBTiB0byBib25kMFwmIzM0O1xuJiM0MztcbiYjNDM7XHRpcCAtbiBcJiMzNDskTlNcJiMzNDsgbGluayBhZGQgZGxfYm9uZDEgdHlwZSBib25kIG1vZGUgYWN0aXZlLWJhY2t1cFxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIHNldCBkbF9kdW1teSBkb3duXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgc2V0IGRsX2R1bW15IG1hc3RlciBkbF9ib25kMVxuJiM0MztcdGNoZWNrX2VyciAkPyBcJiMzNDtjb3VsZCBub3QgZW5zbGF2ZSB0aGUgcmVhbCBkZXZpY2UgdG8gYm9uZDFcJiMzNDtcbiYjNDM7XG4mIzQzO1x0IyBJZiB3ZSBnb3QgaGVyZSB0aGUga2VybmVsIGRpZCBub3QgZGVhZGxvY2s7IG1ha2Ugc3VyZSBpdCBpcyBzdGlsbFxuJiM0MztcdCMgcmVzcG9uc2l2ZSBhbmQgdGhlIGVuc2xhdmUgcmVhbGx5IHRvb2sgZWZmZWN0LlxuJiM0MztcdGxpbmtfaGFzX21hc3RlciBcJiMzNDskTlNcJiMzNDsgZGxfZHVtbXkgZGxfYm9uZDFcbiYjNDM7XHRjaGVja19lcnIgJD8gXCYjMzQ7cmVhbCBkZXZpY2Ugbm90IGVuc2xhdmVkIHRvIGJvbmQxXCYjMzQ7XG4mIzQzO1xuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGRlbCBkbF9ib25kMVxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGRlbCBkbF9ib25kMFxuJiM0MztcdGlwIC1uIFwmIzM0OyROU1wmIzM0OyBsaW5rIGRlbCBkbF92bGFuXG4mIzQzO1x0aXAgLW4gXCYjMzQ7JE5TXCYjMzQ7IGxpbmsgZGVsIGRsX2R1bW15XG4mIzQzO1xuJiM0MztcdGxvZ190ZXN0IFwmIzM0O1ZMQU4gcmVhbCBkZXZpY2UgZW5zbGF2ZWQgdG8gYSBzZWNvbmQgYm9uZFwmIzM0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzZXR1cF9ucyBOU1xuJiM0Mzt0cmFwICYjMzk7Y2xlYW51cF9ucyAkTlMmIzM5OyBFWElUXG4mIzQzO1xuJiM0Mzt0ZXN0c19ydW5cbiYjNDM7XG4mIzQzO2V4aXQgXCYjMzQ7JEVYSVRfU1RBVFVTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTg6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtCT05ESU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X3dvcmtfc2NoZWQmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfY2FuY2VsJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3Byb2MmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssCiAgICAmIzM0O3ZsYW5fZGV2X3dvcmsmIzM0OywKICAgICYjMzQ7dmxhbl9kZXZpY2VfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXN5bmNocm9ub3VzIHdvcmsgbWVjaGFuaXNtIChgbmV0ZGV2X3dvcmtgKSBmb3IgbmV0d29yayBkZXZpY2VzIGFuZCBtb2RpZmllcyB0aGUgVkxBTiBkcml2ZXIgdG8gdXNlIGl0IGZvciBzdGF0ZSBwcm9wYWdhdGlvbiAoTVRVLCBmZWF0dXJlcywgbGluayBzdGF0ZSkgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyBuZXN0ZWQgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbmV0d29ya2luZyBhbmQgVkxBTiBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IG1vZGlmeWluZyBkZXZpY2Ugc3RhdGVzIChlLmcuLCBicmluZ2luZyBkZXZpY2VzIHVwL2Rvd24sIGNoYW5naW5nIE1UVSkuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgYXN5bmNocm9ub3VzIG1lY2hhbmlzbSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgY29uY3VycmVuY3kgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzdlMDhlOGExMmUzYjU1NzFmYjc3ZTNlOTlkMGNmMDYxNzRhOWMxZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVuIDI0IDE4OjQ1OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0CmluZGV4IGZkZTYwMWFjZDFkMjVhLi5kMmEyMzhmOGNjOGI5MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdApAQCAtNDMzLDYgJiM0Mzs0MzMsOCBAQCBleGNlcHRpb25zKSBub3RpZmllcnMgcnVuIHVuZGVyIHRoZSBpbnN0YW5jZSBsb2NrLiBQbGVhc2UgZXh0ZW5kIHRoaXMKIGRvY3VtZW50YXRpb24gd2hlbmV2ZXIgeW91IG1ha2UgZXhwbGljaXQgYXNzdW1wdGlvbiBhYm91dCBsb2NrIGJlaW5nIGhlbGQKIGZyb20gYSBub3RpZmllci4KIAomIzQzO0RyaXZlcnMgKiptdXN0IG5vdCoqIGdlbmVyYXRlIG5lc3RlZCBub3RpZmljYXRpb25zIG9mIHRoZSBvcHMtbG9ja2VkIHR5cGVzLgomIzQzOwogTkVUREVWX0lOVEVSTkFMIHN5bWJvbCBuYW1lc3BhY2UKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IGI2N2ExMjU0MWVhYzI4Li45OTgxZDYzN2Y4YjU0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0xMTMxLDYgJiM0MzsxMTMxLDkgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIgewogICoJbmV0ZGV2X2h3X2FkZHJfbGlzdF9mb3JfZWFjaChoYSwgdWMpLiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIGEKICAqCW5lZ2F0aXZlIGVycm5vIHRvIHJlcXVlc3QgYSByZXRyeSB2aWEgdGhlIGNvcmUgYmFja29mZi4KICAqCiYjNDM7ICogdm9pZCAoKm5kb193b3JrKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyk7CiYjNDM7ICoJUnVuIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoQGV2ZW50cykuCiYjNDM7ICoKICAqIGludCAoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpOwogICoJVGhpcyBmdW5jdGlvbiAgaXMgY2FsbGVkIHdoZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIGFkZHJlc3MKICAqCW5lZWRzIHRvIGJlIGNoYW5nZWQuIElmIHRoaXMgaW50ZXJmYWNlIGlzIG5vdCBkZWZpbmVkLCB0aGUKQEAgLTE0NjAsNiAmIzQzOzE0NjMsOCBAQCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgewogCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdWMsCiAJCQkJCXN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICptYyk7CiYjNDM7CXZvaWQJCQkoKm5kb193b3JrKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTsKIAlpbnQJCQkoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgICAgdm9pZCAqYWRkcik7CiAJaW50CQkJKCpuZG9fdmFsaWRhdGVfYWRkcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xOTMwLDggJiM0MzsxOTM1LDExIEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7CiAgKgkJCQloYXMgYmVlbiBlbmFibGVkIGR1ZSB0byB0aGUgbmVlZCB0byBsaXN0ZW4gdG8KICAqCQkJCWFkZGl0aW9uYWwgdW5pY2FzdCBhZGRyZXNzZXMgaW4gYSBkZXZpY2UgdGhhdAogICoJCQkJZG9lcyBub3QgaW1wbGVtZW50IG5kb19zZXRfcnhfbW9kZSgpCi0gKglAcnhfbW9kZV9ub2RlOgkJTGlzdCBlbnRyeSBmb3IgcnhfbW9kZSB3b3JrIHByb2Nlc3NpbmcKLSAqCUByeF9tb2RlX3RyYWNrZXI6CVJlZmNvdW50IHRyYWNrZXIgZm9yIHJ4X21vZGUgd29yawomIzQzOyAqCUB3b3JrX25vZGU6CQlMaXN0IGVudHJ5IGZvciBhc3luYyBuZXRkZXZfd29yayBwcm9jZXNzaW5nCiYjNDM7ICoJQHdvcmtfdHJhY2tlcjoJCVJlZmNvdW50IHRyYWNrZXIgZm9yIGFzeW5jIG5ldGRldl93b3JrCiYjNDM7ICoJQHdvcmtfcGVuZGluZzoJCURyaXZlci1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmssIHBhc3NlZCB0bwomIzQzOyAqCQkJCW5kb193b3JrKCkgKHNlZSBuZXRkZXZfd29ya19zY2hlZCgpKQomIzQzOyAqCUB3b3JrX2NvcmVfcGVuZGluZzoJQ29yZS1kZWZpbmVkIHBlbmRpbmcgbmV0ZGV2X3dvcmsgKE5FVERFVl9XT1JLXyopCiAgKglAcnhfbW9kZV9hZGRyX2NhY2hlOglSZWN5Y2xlZCBzbmFwc2hvdCBlbnRyaWVzIGZvciByeF9tb2RlIHdvcmsKICAqCUByeF9tb2RlX3JldHJ5X3RpbWVyOglUaW1lciB0aGF0IHJlLXF1ZXVlcyByeF9tb2RlIHdvcmsgYWZ0ZXIgZmFpbHVyZQogICoJQHJ4X21vZGVfcmV0cnlfY291bnQ6CU51bWJlciBvZiBjb25zZWN1dGl2ZSByZXRyaWVzIGFscmVhZHkgc2NoZWR1bGVkCkBAIC0yMzI2LDggJiM0MzsyMzM0LDEwIEBAIHN0cnVjdCBuZXRfZGV2aWNlIHsKIAl1bnNpZ25lZCBpbnQJCXByb21pc2N1aXR5OwogCXVuc2lnbmVkIGludAkJYWxsbXVsdGk7CiAJYm9vbAkJCXVjX3Byb21pc2M7Ci0Jc3RydWN0IGxpc3RfaGVhZAlyeF9tb2RlX25vZGU7Ci0JbmV0ZGV2aWNlX3RyYWNrZXIJcnhfbW9kZV90cmFja2VyOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCXdvcmtfbm9kZTsKJiM0MzsJbmV0ZGV2aWNlX3RyYWNrZXIJd29ya190cmFja2VyOwomIzQzOwl1bnNpZ25lZCBsb25nCQl3b3JrX3BlbmRpbmc7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCXdvcmtfY29yZV9wZW5kaW5nOwogCXN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0CXJ4X21vZGVfYWRkcl9jYWNoZTsKIAlzdHJ1Y3QgdGltZXJfbGlzdAlyeF9tb2RlX3JldHJ5X3RpbWVyOwogCXVuc2lnbmVkIGludAkJcnhfbW9kZV9yZXRyeV9jb3VudDsKQEAgLTUxNzYsNiAmIzQzOzUxODYsOSBAQCB2b2lkIGRldl9mZXRjaF9zd19uZXRzdGF0cyhzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnMsCiAJCQkgICBjb25zdCBzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyBfX3BlcmNwdSAqbmV0c3RhdHMpOwogdm9pZCBkZXZfZ2V0X3RzdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqcyk7CiAKJiM0Mzt2b2lkIG5ldGRldl93b3JrX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTsKJiM0Mzt1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spOwomIzQzOwogZW51bSB7CiAJTkVTVEVEX1NZTkNfSU1NX0JJVCwKIAlORVNURURfU1lOQ19UT0RPX0JJVCwKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IDJiNzRlZDU2ZWIxNjZkLi4yZDJlZmI4Nzc5NzVkNSAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbi5jCkBAIC03Nyw5ICYjNDM7NzcsOSBAQCBzdGF0aWMgaW50IHZsYW5fZ3JvdXBfcHJlYWxsb2NfdmlkKHN0cnVjdCB2bGFuX2dyb3VwICp2ZywKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldiwKLQkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbikKJiM0Mzt2b2lkIHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RkZXYsCiYjNDM7CQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbikKIHsKIAlpZiAoISh2bGFuLSZndDtmbGFncyAmYW1wOyBWTEFOX0ZMQUdfQlJJREdFX0JJTkRJTkcpKQogCQluZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpOwpAQCAtMzE2LDI5ICYjNDM7MzE2LDYgQEAgc3RhdGljIHZvaWQgdmxhbl9zeW5jX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlldGhlcl9hZGRyX2NvcHkodmxhbi0mZ3Q7cmVhbF9kZXZfYWRkciwgZGV2LSZndDtkZXZfYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIHZsYW5fdHJhbnNmZXJfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldikKLXsKLQlzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7Ci0KLQluZXRpZl9pbmhlcml0X3Rzb19tYXgodmxhbmRldiwgZGV2KTsKLQotCWlmICh2bGFuX2h3X29mZmxvYWRfY2FwYWJsZShkZXYtJmd0O2ZlYXR1cmVzLCB2bGFuLSZndDt2bGFuX3Byb3RvKSkKLQkJdmxhbmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47Ci0JZWxzZQotCQl2bGFuZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gPSBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmIzQzOyBWTEFOX0hMRU47Ci0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19GQ09FKQotCXZsYW5kZXYtJmd0O2Zjb2VfZGRwX3hpZCA9IGRldi0mZ3Q7ZmNvZV9kZHBfeGlkOwotI2VuZGlmCi0KLQl2bGFuZGV2LSZndDtwcml2X2ZsYWdzICZhbXA7PSB+SUZGX1hNSVRfRFNUX1JFTEVBU0U7Ci0JdmxhbmRldi0mZ3Q7cHJpdl9mbGFncyB8PSAodmxhbi0mZ3Q7cmVhbF9kZXYtJmd0O3ByaXZfZmxhZ3MgJmFtcDsgSUZGX1hNSVRfRFNUX1JFTEVBU0UpOwotCXZsYW5kZXYtJmd0O2h3X2VuY19mZWF0dXJlcyA9IHZsYW5fdG5sX2ZlYXR1cmVzKHZsYW4tJmd0O3JlYWxfZGV2KTsKLQotCW5ldGRldl91cGRhdGVfZmVhdHVyZXModmxhbmRldik7Ci19Ci0KIHN0YXRpYyBpbnQgX192bGFuX2RldmljZV9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KQogewogCWludCBlcnIgPSAwOwpAQCAtMzkxLDEzICYjNDM7MzY4LDExIEBAIHN0YXRpYyB2b2lkIHZsYW5fdmlkMF9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHN0YXRpYyBpbnQgdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCiAJCQkgICAgIHZvaWQgKnB0cikKIHsKLQlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19leHRhY2socHRyKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiAJc3RydWN0IHZsYW5fZ3JvdXAgKmdycDsKIAlzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm87CiAJaW50IGksIGZsZ3M7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXY7Ci0Jc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW47CiAJYm9vbCBsYXN0ID0gZmFsc2U7CiAJTElTVF9IRUFEKGxpc3QpOwogCWludCBlcnI7CkBAIC00NDcsNTQgJiM0Mzs0MjIsMTkgQEAgc3RhdGljIGludCB2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCwKIAkJCWlmICh2bGFuZGV2LSZndDttdHUgJmx0Oz0gZGV2LSZndDttdHUpCiAJCQkJY29udGludWU7CiAKLQkJCWRldl9zZXRfbXR1KHZsYW5kZXYsIGRldi0mZ3Q7bXR1KTsKJiM0MzsJCQluZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfTVRVKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOgotCQkvKiBQcm9wYWdhdGUgZGV2aWNlIGZlYXR1cmVzIHRvIHVuZGVybHlpbmcgZGV2aWNlICovCiAJCXZsYW5fZ3JvdXBfZm9yX2VhY2hfZGV2KGdycCwgaSwgdmxhbmRldikKLQkJCXZsYW5fdHJhbnNmZXJfZmVhdHVyZXMoZGV2LCB2bGFuZGV2KTsKJiM0MzsJCQluZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfRkVBVFVSRVMpOwogCQlicmVhazsKIAotCWNhc2UgTkVUREVWX0RPV046IHsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKnRtcDsKLQkJTElTVF9IRUFEKGNsb3NlX2xpc3QpOwotCi0JCS8qIFB1dCBhbGwgVkxBTnMgZm9yIHRoaXMgZGV2IGluIHRoZSBkb3duIHN0YXRlIHRvby4gICovCi0JCXZsYW5fZ3JvdXBfZm9yX2VhY2hfZGV2KGdycCwgaSwgdmxhbmRldikgewotCQkJZmxncyA9IHZsYW5kZXYtJmd0O2ZsYWdzOwotCQkJaWYgKCEoZmxncyAmYW1wOyBJRkZfVVApKQotCQkJCWNvbnRpbnVlOwotCi0JCQl2bGFuID0gdmxhbl9kZXZfcHJpdih2bGFuZGV2KTsKLQkJCWlmICghKHZsYW4tJmd0O2ZsYWdzICZhbXA7IFZMQU5fRkxBR19MT09TRV9CSU5ESU5HKSkKLQkJCQlsaXN0X2FkZCgmYW1wO3ZsYW5kZXYtJmd0O2Nsb3NlX2xpc3QsICZhbXA7Y2xvc2VfbGlzdCk7Ci0JCX0KLQotCQluZXRpZl9jbG9zZV9tYW55KCZhbXA7Y2xvc2VfbGlzdCwgZmFsc2UpOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuZGV2LCB0bXAsICZhbXA7Y2xvc2VfbGlzdCwgY2xvc2VfbGlzdCkgewotCQkJdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShkZXYsIHZsYW5kZXYsCi0JCQkJCQkJdmxhbl9kZXZfcHJpdih2bGFuZGV2KSk7Ci0JCQlsaXN0X2RlbF9pbml0KCZhbXA7dmxhbmRldi0mZ3Q7Y2xvc2VfbGlzdCk7Ci0JCX0KLQkJbGlzdF9kZWwoJmFtcDtjbG9zZV9saXN0KTsKLQkJYnJlYWs7Ci0JfQomIzQzOwljYXNlIE5FVERFVl9ET1dOOgogCWNhc2UgTkVUREVWX1VQOgotCQkvKiBQdXQgYWxsIFZMQU5zIGZvciB0aGlzIGRldiBpbiB0aGUgdXAgc3RhdGUgdG9vLiAgKi8KLQkJdmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KSB7Ci0JCQlmbGdzID0gbmV0aWZfZ2V0X2ZsYWdzKHZsYW5kZXYpOwotCQkJaWYgKGZsZ3MgJmFtcDsgSUZGX1VQKQotCQkJCWNvbnRpbnVlOwotCi0JCQl2bGFuID0gdmxhbl9kZXZfcHJpdih2bGFuZGV2KTsKLQkJCWlmICghKHZsYW4tJmd0O2ZsYWdzICZhbXA7IFZMQU5fRkxBR19MT09TRV9CSU5ESU5HKSkKLQkJCQlkZXZfY2hhbmdlX2ZsYWdzKHZsYW5kZXYsIGZsZ3MgfCBJRkZfVVAsCi0JCQkJCQkgZXh0YWNrKTsKLQkJCXZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoZGV2LCB2bGFuZGV2LCB2bGFuKTsKLQkJfQomIzQzOwkJdmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KQomIzQzOwkJCW5ldGRldl93b3JrX3NjaGVkKHZsYW5kZXYsIFZMQU5fV09SS19MSU5LX1NUQVRFKTsKIAkJYnJlYWs7CiAKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uaCBiL25ldC84MDIxcS92bGFuLmgKaW5kZXggYzdmZmU1OTFkNTkzNjYuLmM0MWNhYWY5NDA5NWYzIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC84MDIxcS92bGFuLmgKQEAgLTEyNSw2ICYjNDM7MTI1LDE3IEBAIHN0YXRpYyBpbmxpbmUgbmV0ZGV2X2ZlYXR1cmVzX3Qgdmxhbl90bmxfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2KQogaW50IHZsYW5fZmlsdGVyX3B1c2hfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7CiB2b2lkIHZsYW5fZmlsdGVyX2Ryb3BfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7CiAKJiM0MzsvKiBuZXRkZXZfd29yayBldmVudHMgcHJvcGFnYXRlZCBmcm9tIHRoZSByZWFsIGRldmljZSwgc2VlIHZsYW5fZGV2X3dvcmsoKS4gKi8KJiM0MztlbnVtIHsKJiM0MzsJVkxBTl9XT1JLX0xJTktfU1RBVEUJPSBCSVQoMCksIC8qIHN5bmMgdXAvZG93biB3aXRoIHJlYWxfZGV2ICovCiYjNDM7CVZMQU5fV09SS19NVFUJCT0gQklUKDEpLCAvKiBjbGFtcCBtdHUgdG8gcmVhbF9kZXYmIzM5O3MgKi8KJiM0MzsJVkxBTl9XT1JLX0ZFQVRVUkVTCT0gQklUKDIpLCAvKiByZS1pbmhlcml0IHJlYWxfZGV2IGZlYXR1cmVzICovCiYjNDM7fTsKJiM0MzsKJiM0Mzt2b2lkIHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RkZXYsCiYjNDM7CQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbik7CiYjNDM7CiAvKiBmb3VuZCBpbiB2bGFuX2Rldi5jICovCiB2b2lkIHZsYW5fZGV2X3NldF9pbmdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgdTMyIHNrYl9wcmlvLCB1MTYgdmxhbl9wcmlvKTsKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2Rldi5jIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmMKaW5kZXggN2FhM2FmOGIxMGVhZDAuLmVjMjU2OWIzZjhkYWM2IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbl9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvODAyMXEvdmxhbl9kZXYuYwpAQCAtMjcwLDYgJiM0MzsyNzAsOSBAQCBzdGF0aWMgaW50IHZsYW5fZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkgICAgISh2bGFuLSZndDtmbGFncyAmYW1wOyBWTEFOX0ZMQUdfTE9PU0VfQklORElORykpCiAJCXJldHVybiAtRU5FVERPV047CiAKJiM0MzsJLyogVGhlIGV4cGxpY2l0IG9wZW4gc3VwZXJzZWRlcyBhbnkgZGVmZXJyZWQgbGluay1zdGF0ZSBzeW5jICovCiYjNDM7CW5ldGRldl93b3JrX2NhbmNlbChkZXYsIFZMQU5fV09SS19MSU5LX1NUQVRFKTsKJiM0MzsKIAlpZiAoIWV0aGVyX2FkZHJfZXF1YWwoZGV2LSZndDtkZXZfYWRkciwgcmVhbF9kZXYtJmd0O2Rldl9hZGRyKSAmYW1wOyZhbXA7CiAJICAgICF2bGFuX2Rldl9pbmhlcml0X2FkZHJlc3MoZGV2LCByZWFsX2RldikpIHsKIAkJZXJyID0gZGV2X3VjX2FkZChyZWFsX2RldiwgZGV2LSZndDtkZXZfYWRkcik7CkBAIC0zMDAsNiAmIzQzOzMwMyw5IEBAIHN0YXRpYyBpbnQgdmxhbl9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tJmd0O3JlYWxfZGV2OwogCiYjNDM7CS8qIFRoZSBleHBsaWNpdCBjbG9zZSBzdXBlcnNlZGVzIGFueSBkZWZlcnJlZCBsaW5rLXN0YXRlIHN5bmMgKi8KJiM0MzsJbmV0ZGV2X3dvcmtfY2FuY2VsKGRldiwgVkxBTl9XT1JLX0xJTktfU1RBVEUpOwomIzQzOwogCWRldl9tY191bnN5bmMocmVhbF9kZXYsIGRldik7CiAJZGV2X3VjX3Vuc3luYyhyZWFsX2RldiwgZGV2KTsKIApAQCAtMTAxNiw2ICYjNDM7MTAyMiw1OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHZsYW5fZXRodG9vbF9vcHMgPSB7CiAJLmdldF90c19pbmZvCQk9IHZsYW5fZXRodG9vbF9nZXRfdHNfaW5mbywKIH07CiAKJiM0MztzdGF0aWMgdm9pZCB2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KHZsYW5kZXYpOwomIzQzOwomIzQzOwluZXRpZl9pbmhlcml0X3Rzb19tYXgodmxhbmRldiwgZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHZsYW5faHdfb2ZmbG9hZF9jYXBhYmxlKGRldi0mZ3Q7ZmVhdHVyZXMsIHZsYW4tJmd0O3ZsYW5fcHJvdG8pKQomIzQzOwkJdmxhbmRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gZGV2LSZndDtoYXJkX2hlYWRlcl9sZW47CiYjNDM7CWVsc2UKJiM0MzsJCXZsYW5kZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7IFZMQU5fSExFTjsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfRkNPRSkKJiM0MzsJdmxhbmRldi0mZ3Q7ZmNvZV9kZHBfeGlkID0gZGV2LSZndDtmY29lX2RkcF94aWQ7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXZsYW5kZXYtJmd0O3ByaXZfZmxhZ3MgJmFtcDs9IH5JRkZfWE1JVF9EU1RfUkVMRUFTRTsKJiM0MzsJdmxhbmRldi0mZ3Q7cHJpdl9mbGFncyB8PSAodmxhbi0mZ3Q7cmVhbF9kZXYtJmd0O3ByaXZfZmxhZ3MgJmFtcDsgSUZGX1hNSVRfRFNUX1JFTEVBU0UpOwomIzQzOwl2bGFuZGV2LSZndDtod19lbmNfZmVhdHVyZXMgPSB2bGFuX3RubF9mZWF0dXJlcyh2bGFuLSZndDtyZWFsX2Rldik7CiYjNDM7CiYjNDM7CW5ldGRldl91cGRhdGVfZmVhdHVyZXModmxhbmRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZsYW5fZGV2X3dvcmsoc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKQomIzQzO3sKJiM0MzsJc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KHZsYW5kZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLSZndDtyZWFsX2RldjsKJiM0MzsJYm9vbCBsb29zZSA9IHZsYW4tJmd0O2ZsYWdzICZhbXA7IFZMQU5fRkxBR19MT09TRV9CSU5ESU5HOwomIzQzOwl1bnNpZ25lZCBpbnQgZmxnczsKJiM0MzsKJiM0MzsJaWYgKGV2ZW50cyAmYW1wOyBWTEFOX1dPUktfTElOS19TVEFURSkgewomIzQzOwkJZmxncyA9IG5ldGlmX2dldF9mbGFncyh2bGFuZGV2KTsKJiM0MzsJCWlmIChyZWFsX2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1VQKSB7CiYjNDM7CQkJaWYgKCEoZmxncyAmYW1wOyBJRkZfVVApKSB7CiYjNDM7CQkJCWlmICghbG9vc2UpCiYjNDM7CQkJCQluZXRpZl9jaGFuZ2VfZmxhZ3ModmxhbmRldiwKJiM0MzsJCQkJCQkJICAgZmxncyB8IElGRl9VUCwgTlVMTCk7CiYjNDM7CQkJCXZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocmVhbF9kZXYsCiYjNDM7CQkJCQkJCQl2bGFuZGV2LCB2bGFuKTsKJiM0MzsJCQl9CiYjNDM7CQl9IGVsc2UgaWYgKChmbGdzICZhbXA7IElGRl9VUCkgJmFtcDsmYW1wOyAhbG9vc2UpIHsKJiM0MzsJCQluZXRpZl9jaGFuZ2VfZmxhZ3ModmxhbmRldiwgZmxncyAmYW1wOyB+SUZGX1VQLCBOVUxMKTsKJiM0MzsJCQl2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHJlYWxfZGV2LCB2bGFuZGV2LCB2bGFuKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoKGV2ZW50cyAmYW1wOyBWTEFOX1dPUktfTVRVKSAmYW1wOyZhbXA7IHZsYW5kZXYtJmd0O210dSAmZ3Q7IHJlYWxfZGV2LSZndDttdHUpCiYjNDM7CQluZXRpZl9zZXRfbXR1KHZsYW5kZXYsIHJlYWxfZGV2LSZndDttdHUpOwomIzQzOwomIzQzOwlpZiAoZXZlbnRzICZhbXA7IFZMQU5fV09SS19GRUFUVVJFUykKJiM0MzsJCXZsYW5fdHJhbnNmZXJfZmVhdHVyZXMocmVhbF9kZXYsIHZsYW5kZXYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0gewogCS5uZG9fY2hhbmdlX210dQkJPSB2bGFuX2Rldl9jaGFuZ2VfbXR1LAogCS5uZG9faW5pdAkJPSB2bGFuX2Rldl9pbml0LApAQCAtMTAyNyw2ICYjNDM7MTA4Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0gewogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gdmxhbl9kZXZfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc2V0X3J4X21vZGUJPSB2bGFuX2Rldl9zZXRfcnhfbW9kZSwKIAkubmRvX2NoYW5nZV9yeF9mbGFncwk9IHZsYW5fZGV2X2NoYW5nZV9yeF9mbGFncywKJiM0MzsJLm5kb193b3JrCQk9IHZsYW5fZGV2X3dvcmssCiAJLm5kb19ldGhfaW9jdGwJCT0gdmxhbl9kZXZfaW9jdGwsCiAJLm5kb19uZWlnaF9zZXR1cAk9IHZsYW5fZGV2X25laWdoX3NldHVwLAogCS5uZG9fZ2V0X3N0YXRzNjQJPSB2bGFuX2Rldl9nZXRfc3RhdHM2NCwKZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGUKaW5kZXggZGMxN2M1YTYxZTlhNGEuLmIzZmRjYjRlMzU1ZmE2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9NYWtlZmlsZQpAQCAtMTMsNyAmIzQzOzEzLDcgQEAgb2JqLXkJCSAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXAogCQkJbmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXAogCQkJc29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcCiAJCQlmaWJfbm90aWZpZXIubyB4ZHAubyBmbG93X29mZmxvYWQubyBncm8ubyBcCi0JCQluZXRkZXYtZ2VubC5vIG5ldGRldi1nZW5sLWdlbi5vIGdzby5vCiYjNDM7CQkJbmV0ZGV2LWdlbmwubyBuZXRkZXYtZ2VubC1nZW4ubyBuZXRkZXZfd29yay5vIGdzby5vCiAKIG9iai0kKENPTkZJR19ORVRERVZfQUREUl9MSVNUX1RFU1QpICYjNDM7PSBkZXZfYWRkcl9saXN0c190ZXN0Lm8KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA1YzAxZGZhYTZjNDQ1MC4uNGIzZDVjZmRmNmUwMGYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC05ODIyLDYgJiM0Mzs5ODIyLDcgQEAgaW50IG5ldGlmX2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiAJX19kZXZfbm90aWZ5X2ZsYWdzKGRldiwgb2xkX2ZsYWdzLCBjaGFuZ2VzLCAwLCBOVUxMKTsKIAlyZXR1cm4gcmV0OwogfQomIzQzO0VYUE9SVF9TWU1CT0wobmV0aWZfY2hhbmdlX2ZsYWdzKTsKIAogaW50IF9fbmV0aWZfc2V0X210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKQEAgLTEyMDkzLDYgJiM0MzsxMjA5NCw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSwKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7cHR5cGVfYWxsKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2Rldi0mZ3Q7cHR5cGVfc3BlY2lmaWMpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2LSZndDtuZXRfbm90aWZpZXJfbGlzdCk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2LSZndDt3b3JrX25vZGUpOwogI2lmZGVmIENPTkZJR19ORVRfU0NIRUQKIAloYXNoX2luaXQoZGV2LSZndDtxZGlzY19oYXNoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmggYi9uZXQvY29yZS9kZXYuaAppbmRleCA0MTIxYzUwZTdjODhiZS4uNWQwYjAzMDVkM2JhYWYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5oCkBAIC0xNjcsMTAgJiM0MzsxNjcsMTkgQEAgaW50IGRldl9jaGFuZ2VfY2FycmllcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5ld19jYXJyaWVyKTsKIHZvaWQgX19kZXZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgX19kZXZfc2V0X3Byb21pc2N1aXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMsIGJvb2wgbm90aWZ5KTsKIHZvaWQgbmV0aWZfcnhfbW9kZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotYm9vbCBuZXRpZl9yeF9tb2RlX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzO3ZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIG5ldGlmX3J4X21vZGVfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgbmV0aWZfcnhfbW9kZV9jYW5jZWxfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKJiM0MzsvKiBFdmVudHMgZm9yIHRoZSBhc3luYyBuZXRkZXYgd29yaywgdHJhY2tlZCBpbiBuZXRkZXYtJmd0O3dvcmtfY29yZV9wZW5kaW5nLiAqLwomIzQzO2VudW0gbmV0ZGV2X3dvcmtfY29yZSB7CiYjNDM7CU5FVERFVl9XT1JLX1JYX01PREUJPSBCSVQoMCksCS8qIHJ1biB0aGUgcnhfbW9kZSB1cGRhdGUgKi8KJiM0Mzt9OwomIzQzOwomIzQzO3ZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpOwomIzQzO3Vuc2lnbmVkIGxvbmcKJiM0MztfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzayk7CiYjNDM7CiB2b2lkIF9fZGV2X25vdGlmeV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2xkX2ZsYWdzLAogCQkJdW5zaWduZWQgaW50IGdjaGFuZ2VzLCB1MzIgcG9ydGlkLAogCQkJY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMKaW5kZXggZTE3ZjY0YTY1ZTE3YmUuLjA4NTI4Y2EwYThiMzE0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMKQEAgLTEyLDE3ICYjNDM7MTIsMTAgQEAKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKICNpbmNsdWRlICZsdDtrdW5pdC92aXNpYmlsaXR5LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7ZGV2LmgmIzM0OwogCi1zdGF0aWMgdm9pZCBuZXRkZXZfcnhfbW9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLXN0YXRpYyBMSVNUX0hFQUQocnhfbW9kZV9saXN0KTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socnhfbW9kZV9sb2NrKTsKLXN0YXRpYyBERUNMQVJFX1dPUksocnhfbW9kZV93b3JrLCBuZXRkZXZfcnhfbW9kZV93b3JrKTsKLQogLyoKICAqIEdlbmVyYWwgbGlzdCBoYW5kbGluZyBmdW5jdGlvbnMKICAqLwpAQCAtMTI4MSw3ICYjNDM7MTI3NCw3IEBAIHZvaWQgbmV0aWZfcnhfbW9kZV9jYW5jZWxfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlkZXYtJmd0O3J4X21vZGVfcmV0cnlfY291bnQgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3ZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCB1Y19zbmFwLCBtY19zbmFwLCB1Y19yZWYsIG1jX3JlZjsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi0mZ3Q7bmV0ZGV2X29wczsKQEAgLTEzMzksNDkgJiM0MzsxMzMyLDkgQEAgc3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG5ldGRldl9yeF9tb2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0KLQlydG5sX2xvY2soKTsKLQotCXdoaWxlICh0cnVlKSB7Ci0JCXNwaW5fbG9ja19iaCgmYW1wO3J4X21vZGVfbG9jayk7Ci0JCWlmIChsaXN0X2VtcHR5KCZhbXA7cnhfbW9kZV9saXN0KSkgewotCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtyeF9tb2RlX2xvY2spOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGV2ID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO3J4X21vZGVfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsCi0JCQkJICAgICAgIHJ4X21vZGVfbm9kZSk7Ci0JCWxpc3RfZGVsX2luaXQoJmFtcDtkZXYtJmd0O3J4X21vZGVfbm9kZSk7Ci0JCS8qIFdlIG11c3QgZnJlZSBuZXRkZXYgdHJhY2tlciB1bmRlcgotCQkgKiB0aGUgc3BpbmxvY2sgcHJvdGVjdGlvbi4KLQkJICovCi0JCW5ldGRldl90cmFja2VyX2ZyZWUoZGV2LCAmYW1wO2Rldi0mZ3Q7cnhfbW9kZV90cmFja2VyKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtyeF9tb2RlX2xvY2spOwotCi0JCW5ldGRldl9sb2NrX29wcyhkZXYpOwotCQluZXRpZl9yeF9tb2RlX3J1bihkZXYpOwotCQluZXRkZXZfdW5sb2NrX29wcyhkZXYpOwotCQkvKiBVc2UgX19kZXZfcHV0KCkgYmVjYXVzZSBuZXRkZXZfdHJhY2tlcl9mcmVlKCkgd2FzIGFscmVhZHkKLQkJICogY2FsbGVkIGFib3ZlLiBNdXN0IGJlIGFmdGVyIG5ldGRldl91bmxvY2tfb3BzKCkgdG8gcHJldmVudAotCQkgKiBuZXRkZXZfcnVuX3RvZG8oKSBmcm9tIGZyZWVpbmcgdGhlIGRldmljZSB3aGlsZSBzdGlsbCBpbiB1c2UuCi0JCSAqLwotCQlfX2Rldl9wdXQoZGV2KTsKLQl9Ci0KLQlydG5sX3VubG9jaygpOwotfQotCiBzdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3Bpbl9sb2NrX2JoKCZhbXA7cnhfbW9kZV9sb2NrKTsKLQlpZiAobGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7cnhfbW9kZV9ub2RlKSkgewotCQlsaXN0X2FkZF90YWlsKCZhbXA7ZGV2LSZndDtyeF9tb2RlX25vZGUsICZhbXA7cnhfbW9kZV9saXN0KTsKLQkJbmV0ZGV2X2hvbGQoZGV2LCAmYW1wO2Rldi0mZ3Q7cnhfbW9kZV90cmFja2VyLCBHRlBfQVRPTUlDKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtyeF9tb2RlX2xvY2spOwotCXNjaGVkdWxlX3dvcmsoJmFtcDtyeF9tb2RlX3dvcmspOwomIzQzOwlfX25ldGRldl93b3JrX2NvcmVfc2NoZWQoZGV2LCBORVRERVZfV09SS19SWF9NT0RFKTsKIH0KIAogc3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9yZXRyeShzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKQEAgLTEzOTQsNyAmIzQzOzEzNDcsNiBAQCBzdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3JldHJ5KHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCiB2b2lkIG5ldGlmX3J4X21vZGVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2LSZndDtyeF9tb2RlX25vZGUpOwogCV9faHdfYWRkcl9pbml0KCZhbXA7ZGV2LSZndDtyeF9tb2RlX2FkZHJfY2FjaGUpOwogCXRpbWVyX3NldHVwKCZhbXA7ZGV2LSZndDtyeF9tb2RlX3JldHJ5X3RpbWVyLCBuZXRpZl9yeF9tb2RlX3JldHJ5LCAwKTsKIH0KQEAgLTE0NDIsMjQgJiM0MzsxMzk0LDYgQEAgdm9pZCBkZXZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAluZXRpZl9hZGRyX3VubG9ja19iaChkZXYpOwogfQogCi1ib29sIG5ldGlmX3J4X21vZGVfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlib29sIGNsZWFuID0gZmFsc2U7Ci0KLQlzcGluX2xvY2tfYmgoJmFtcDtyeF9tb2RlX2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7cnhfbW9kZV9ub2RlKSkgewotCQlsaXN0X2RlbF9pbml0KCZhbXA7ZGV2LSZndDtyeF9tb2RlX25vZGUpOwotCQljbGVhbiA9IHRydWU7Ci0JCS8qIFdlIG11c3QgcmVsZWFzZSBuZXRkZXYgdHJhY2tlciB1bmRlcgotCQkgKiB0aGUgc3BpbmxvY2sgcHJvdGVjdGlvbi4KLQkJICovCi0JCW5ldGRldl90cmFja2VyX2ZyZWUoZGV2LCAmYW1wO2Rldi0mZ3Q7cnhfbW9kZV90cmFja2VyKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDtyeF9tb2RlX2xvY2spOwotCi0JcmV0dXJuIGNsZWFuOwotfQotCiAvKioKICAqIG5ldGlmX3J4X21vZGVfc3luYygpIC0gc3luYyByeCBtb2RlIGlubGluZQogICogQGRldjogbmV0d29yayBkZXZpY2UKQEAgLTE0NzMsMTEgJiM0MzsxNDA3LDYgQEAgYm9vbCBuZXRpZl9yeF9tb2RlX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAgKi8KIHZvaWQgbmV0aWZfcnhfbW9kZV9zeW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaWYgKG5ldGlmX3J4X21vZGVfY2xlYW4oZGV2KSkgewomIzQzOwlpZiAoX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpKQogCQluZXRpZl9yeF9tb2RlX3J1bihkZXYpOwotCQkvKiBVc2UgX19kZXZfcHV0KCkgYmVjYXVzZSBuZXRkZXZfdHJhY2tlcl9mcmVlKCkgd2FzIGFscmVhZHkKLQkJICogY2FsbGVkIGluc2lkZSBuZXRpZl9yeF9tb2RlX2NsZWFuKCkuCi0JCSAqLwotCQlfX2Rldl9wdXQoZGV2KTsKLQl9CiB9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXZfd29yay5jIGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzEwOWZhZTEzMmFkMTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9uZXRkZXZfd29yay5jCkBAIC0wLDAgJiM0MzsxLDE2MiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9uZXRkZXZfbG9jay5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7ZGV2LmgmIzM0OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKJiM0MzsKJiM0MzsvKiBAbmV0ZGV2X3dvcmtfbG9jayBwcm90ZWN0czoKJiM0MzsgKiAgLSBAbmV0ZGV2X3dvcmtfbGlzdAomIzQzOyAqICAtIHdpdGhpbiB0aGUgbGlzdCBlbnRyaWVzIChzdHJ1Y3QgbmV0X2RldmljZSBmaWVsZHMpOgomIzQzOyAqCS0gd29ya19ub2RlCiYjNDM7ICoJLSB3b3JrX3RyYWNrZXIKJiM0MzsgKgktIHdvcmtfcGVuZGluZwomIzQzOyAqCS0gd29ya19jb3JlX3BlbmRpbmcKJiM0MzsgKi8KJiM0MztzdGF0aWMgTElTVF9IRUFEKG5ldGRldl93b3JrX2xpc3QpOwomIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmV0ZGV2X3dvcmtfbG9jayk7CiYjNDM7c3RhdGljIERFQ0xBUkVfV09SSyhuZXRkZXZfd29yaywgbmV0ZGV2X3dvcmtfcHJvYyk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfZW5xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cywKJiM0MzsJCQkJdW5zaWduZWQgbG9uZyBjb3JlKQomIzQzO3sKJiM0MzsJaWYgKCFldmVudHMgJmFtcDsmYW1wOyAhY29yZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmV0ZGV2X3dvcmtfbG9jayk7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7ZGV2LSZndDt3b3JrX25vZGUpKSB7CiYjNDM7CQlsaXN0X2FkZF90YWlsKCZhbXA7ZGV2LSZndDt3b3JrX25vZGUsICZhbXA7bmV0ZGV2X3dvcmtfbGlzdCk7CiYjNDM7CQluZXRkZXZfaG9sZChkZXYsICZhbXA7ZGV2LSZndDt3b3JrX3RyYWNrZXIsIEdGUF9BVE9NSUMpOwomIzQzOwl9CiYjNDM7CWRldi0mZ3Q7d29ya19wZW5kaW5nIHw9IGV2ZW50czsKJiM0MzsJZGV2LSZndDt3b3JrX2NvcmVfcGVuZGluZyB8PSBjb3JlOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25ldGRldl93b3JrX2xvY2spOwomIzQzOwomIzQzOwlzY2hlZHVsZV93b3JrKCZhbXA7bmV0ZGV2X3dvcmspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZwomIzQzO25ldGRldl93b3JrX2RlcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyAqcGVuZGluZywKJiM0MzsJCSAgICB1bnNpZ25lZCBsb25nIG1hc2spCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGV2ZW50czsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmV0ZGV2X3dvcmtfbG9jayk7CiYjNDM7CWV2ZW50cyA9ICpwZW5kaW5nICZhbXA7IG1hc2s7CiYjNDM7CSpwZW5kaW5nICZhbXA7PSB+ZXZlbnRzOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtkZXYtJmd0O3dvcmtfbm9kZSkgJmFtcDsmYW1wOwomIzQzOwkgICAgIWRldi0mZ3Q7d29ya19wZW5kaW5nICZhbXA7JmFtcDsgIWRldi0mZ3Q7d29ya19jb3JlX3BlbmRpbmcpIHsKJiM0MzsJCWxpc3RfZGVsX2luaXQoJmFtcDtkZXYtJmd0O3dvcmtfbm9kZSk7CiYjNDM7CQluZXRkZXZfcHV0KGRldiwgJmFtcDtkZXYtJmd0O3dvcmtfdHJhY2tlcik7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZXRkZXZfd29ya19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGV2ZW50czsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBuZXRkZXZfd29ya19zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cykKJiM0Mzt7CiYjNDM7CW5ldGRldl93b3JrX2VucXVldWUoZGV2LCBldmVudHMsIDApOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBuZXRkZXZfd29ya19jYW5jZWwoKSAtIGNhbmNlbCBzZWxlY3RlZCB3b3JrIGZvciBhIG5ldGRldgomIzQzOyAqIEBkZXY6IG5ldF9kZXZpY2UKJiM0MzsgKiBAbWFzazogZXZlbnRzIHRvIGNhbmNlbAomIzQzOyAqCiYjNDM7ICogQ2xlYXIgQG1hc2sgZnJvbSB0aGUgZGV2aWNlJiMzOTtzIHdvcmsgcGVuZGluZyBtYXNrLiBJZiBubyB3b3JrIGlzIGxlZnQgcGVuZGluZwomIzQzOyAqIHRoZSBkZXZpY2UgaXMgZGVxdWV1ZWQgYW5kIGl0cyBuZG9fd29yayB3b24mIzM5O3QgYmUgY2FsbGVkLgomIzQzOyAqCiYjNDM7ICogTm8gZXhwZWN0YXRpb25zIG9uIGxvY2tpbmcsIGJ1dCBhbHNvIG5vIGd1YXJhbnRlZXMgcHJvdmlkZWQuIElmIHRoZSBjYWxsZXIKJiM0MzsgKiB3YW50cyB0byB0b3VjaCBAZGV2IGFmdGVyd2FyZHMgKGUuZy4gY2FsbCB0aGUgd29yayB0aGF0IGdvdCBjYW5jZWxlZCkKJiM0MzsgKiB0aGV5IGhhdmUgdG8gZW5zdXJlIEBkZXYgZG9lcyBub3QgZ2V0IGZyZWVkLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogdGhlIHN1YnNldCBvZiBAbWFzayB0aGF0IHdhcyBhY3R1YWxseSBwZW5kaW5nLCBzbyB0aGUgY2FsbGVyIGNhbiBydW4KJiM0MzsgKiB0aG9zZSBldmVudHMgaW5saW5lLgomIzQzOyAqLwomIzQzO3Vuc2lnbmVkIGxvbmcgbmV0ZGV2X3dvcmtfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgJmFtcDtkZXYtJmd0O3dvcmtfcGVuZGluZywgbWFzayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfY2FuY2VsKTsKJiM0MzsKJiM0Mzt2b2lkIF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cykKJiM0Mzt7CiYjNDM7CW5ldGRldl93b3JrX2VucXVldWUoZGV2LCAwLCBldmVudHMpOwomIzQzO30KJiM0MzsKJiM0Mzt1bnNpZ25lZCBsb25nCiYjNDM7X19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spCiYjNDM7ewomIzQzOwlyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsICZhbXA7ZGV2LSZndDt3b3JrX2NvcmVfcGVuZGluZywgbWFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG5ldGRldl93b3JrX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cywKJiM0MzsJCQkgICAgdW5zaWduZWQgbG9uZyBjb3JlKQomIzQzO3sKJiM0MzsJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoY29yZSAmYW1wOyBORVRERVZfV09SS19SWF9NT0RFKQomIzQzOwkJbmV0aWZfcnhfbW9kZV9ydW4oZGV2KTsKJiM0MzsJaWYgKGV2ZW50cyAmYW1wOyZhbXA7IGRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX3dvcmspCiYjNDM7CQlkZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb193b3JrKGRldiwgZXZlbnRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlydG5sX2xvY2soKTsKJiM0MzsKJiM0MzsJd2hpbGUgKHRydWUpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMCwgY29yZSA9IDA7CiYjNDM7CQluZXRkZXZpY2VfdHJhY2tlciB0cmFja2VyOwomIzQzOwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsKJiM0MzsJCXNwaW5fbG9ja19iaCgmYW1wO25ldGRldl93b3JrX2xvY2spOwomIzQzOwkJaWYgKGxpc3RfZW1wdHkoJmFtcDtuZXRkZXZfd29ya19saXN0KSkgewomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmV0ZGV2X3dvcmtfbG9jayk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7bmV0ZGV2X3dvcmtfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsCiYjNDM7CQkJCSAgICAgICB3b3JrX25vZGUpOwomIzQzOwkJLyogVGFrZSBhIHRlbXBvcmFyeSByZWZlcmVuY2Ugc28gQGRldiBjYW4mIzM5O3QgYmUgZnJlZWQgd2hpbGUgd2UKJiM0MzsJCSAqIGRyb3AgdGhlIGxvY2sgdG8gZ3JhYiBpdHMgb3BzIGxvY2s7IHRoZSB3b3JrIHJlZmVyZW5jZSBpcwomIzQzOwkJICogb25seSByZWxlYXNlZCBvbmNlIHdlIGNsYWltIHRoZSB3b3JrIGJlbG93LgomIzQzOwkJICogVGhlIHJlLWxvY2tpbmcgZGFuY2UgaXMgdG8gZW5zdXJlIHRoYXQgb3BzIGxvY2sgaXMgZW5vdWdoCiYjNDM7CQkgKiB0byBlbnN1cmUgY2FuY2VsaW5nIHdvcmsgaXMgbm90IHJhY3kgd2l0aCBkZXF1ZXVlLgomIzQzOwkJICovCiYjNDM7CQluZXRkZXZfaG9sZChkZXYsICZhbXA7dHJhY2tlciwgR0ZQX0FUT01JQyk7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25ldGRldl93b3JrX2xvY2spOwomIzQzOwomIzQzOwkJbmV0ZGV2X2xvY2tfb3BzKGRldik7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZXRkZXZfd29ya19sb2NrKTsKJiM0MzsJCWlmICghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7d29ya19ub2RlKSkgewomIzQzOwkJCWxpc3RfZGVsX2luaXQoJmFtcDtkZXYtJmd0O3dvcmtfbm9kZSk7CiYjNDM7CQkJY29yZSA9IGRldi0mZ3Q7d29ya19jb3JlX3BlbmRpbmc7CiYjNDM7CQkJZGV2LSZndDt3b3JrX2NvcmVfcGVuZGluZyA9IDA7CiYjNDM7CQkJZXZlbnRzID0gZGV2LSZndDt3b3JrX3BlbmRpbmc7CiYjNDM7CQkJZGV2LSZndDt3b3JrX3BlbmRpbmcgPSAwOwomIzQzOwkJCS8qIFdlIHRvb2sgYW5vdGhlciByZWYgYWJvdmUgKi8KJiM0MzsJCQluZXRkZXZfcHV0KGRldiwgJmFtcDtkZXYtJmd0O3dvcmtfdHJhY2tlcik7CiYjNDM7CiYjNDM7CQkJaWYgKCFkZXZfaXNhbGl2ZShkZXYpKQomIzQzOwkJCQljb3JlID0gZXZlbnRzID0gMDsKJiM0MzsJCX0KJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmV0ZGV2X3dvcmtfbG9jayk7CiYjNDM7CiYjNDM7CQluZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpOwomIzQzOwkJbmV0ZGV2X3VubG9ja19vcHMoZGV2KTsKJiM0MzsKJiM0MzsJCW5ldGRldl9wdXQoZGV2LCAmYW1wO3RyYWNrZXIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUKaW5kZXggYmUxMzBiZjU4NWE0MTkuLjYzNjRjYTAyNjQyZDY4IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGUKQEAgLTEzLDYgJiM0MzsxMyw3IEBAIFRFU1RfUFJPR1MgOj0gXAogCWJvbmRfb3B0aW9ucy5zaCBcCiAJYm9uZF9wYXNzaXZlX2xhY3Auc2ggXAogCWJvbmRfc3RhY2tlZF9oZWFkZXJfcGFyc2Uuc2ggXAomIzQzOwlib25kX3ZsYW5fcmVhbF9kZXYuc2ggXAogCWRldl9hZGRyX2xpc3RzLnNoIFwKIAltb2RlLTEtcmVjb3ZlcnktdXBkZWxheS5zaCBcCiAJbW9kZS0yLXJlY292ZXJ5LXVwZGVsYXkuc2ggXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3ZsYW5fcmVhbF9kZXYuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfdmxhbl9yZWFsX2Rldi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMC4uNTQyZDlmZmM0ODE5ZjkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfdmxhbl9yZWFsX2Rldi5zaApAQCAtMCwwICYjNDM7MSwxODAgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBUZXN0IHByb3BhZ2F0aW9uIG9mIGEgcmVhbCBkZXZpY2UmIzM5O3Mgc3RhdGUgdG8gdGhlIFZMQU5zIHN0YWNrZWQgb24gdG9wIG9mIGl0CiYjNDM7IyB3aGVuIHRoZSByZWFsIGRldmljZSBpcyAob3IgYmVjb21lcykgYSBib25kIG1lbWJlci4KJiM0MzsjCiYjNDM7IyBUaGUga2VybmVsIG1pcnJvcnMgYSByZWFsIGRldmljZSYjMzk7cyBVUC9ET1dOLCBNVFUgYW5kIGZlYXR1cmUgY2hhbmdlcyBvbnRvIGl0cwomIzQzOyMgVkxBTnMuICBUaGlzIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgKG5ldGRldl93b3JrKTogZG9pbmcgaXQgc3luY2hyb25vdXNseSBmcm9tCiYjNDM7IyB0aGUgcmVhbCBkZXZpY2UmIzM5O3Mgbm90aWZpZXIgY291bGQgZGVhZGxvY2suICBJZiB0aGUgcmVhbCBkZXZpY2UgaXMgYnJvdWdodCB1cAomIzQzOyMgd2hpbGUgZW5zbGF2ZWQgdG8gYSBib25kIC0gc28gaXRzIGluc3RhbmNlIGxvY2sgaXMgaGVsZCBhY3Jvc3MgTkVUREVWX1VQIC0gYW5kCiYjNDM7IyBhIFZMQU4gb24gdG9wIG9mIGl0IGlzIGl0c2VsZiBhIGJvbmQgbWVtYmVyLCB0aGUgc3luY2hyb25vdXMgcHJvcGFnYXRpb24KJiM0MzsjIHJlLWVudGVyZWQgdGhlIHN0YWNrIGFuZCB0cmllZCB0byB0YWtlIHRoZSBzYW1lIGluc3RhbmNlIGxvY2sgYWdhaW4uCiYjNDM7IwomIzQzOyMgQ292ZXIgYm90aCBoYWx2ZXM6CiYjNDM7IyAgLSB0aGUgZGVmZXJyZWQgVVAvRE9XTiwgTVRVIGFuZCBmZWF0dXJlIHByb3BhZ2F0aW9uIGFjdHVhbGx5IGxhbmRzIG9uIHRoZQomIzQzOyMgICAgVkxBTiAobGluayBzdGF0ZSBhbmQgTVRVIHVzZSBhbiBvcHMtbG9ja2VkIGR1bW15LCBpLmUuIHRoZSBkZWZlcnJhbCBwYXRoKSwKJiM0MzsjICAtIHRoZSBkZWFkbG9jay1wcm9uZSB0b3BvbG9neSAtIGEgVkxBTiBvbiBhIGR1bW15LCB3aXRoIHRoZSBWTEFOIGFuZCB0aGUKJiM0MzsjICAgIGR1bW15IGVhY2ggZW5zbGF2ZWQgdG8gYSBkaWZmZXJlbnQgYm9uZCAtIGNhbiBiZSBidWlsdCB3aXRob3V0IGhhbmdpbmcuCiYjNDM7CiYjNDM7QUxMX1RFU1RTPSYjMzQ7CiYjNDM7CXZsYW5fbGlua19zdGF0ZQomIzQzOwl2bGFuX210dQomIzQzOwl2bGFuX2ZlYXR1cmVzCiYjNDM7CXZsYW5fcmVhbF9kZXZfZW5zbGF2ZQomIzQzOyYjMzQ7CiYjNDM7CiYjNDM7UkVRVUlSRV9NWj1ubwomIzQzO05VTV9ORVRJRlM9MAomIzQzO2xpYl9kaXI9JChkaXJuYW1lICYjMzQ7JDAmIzM0OykKJiM0Mztzb3VyY2UgJiMzNDskbGliX2RpciYjMzQ7Ly4uLy4uLy4uL25ldC9mb3J3YXJkaW5nL2xpYi5zaAomIzQzOwomIzQzOyMgUmV0dXJuIDAgaWYgJGRldiBpbiBuZXRucyAkbnMgaGFzIGZsYWcgJGZsYWcgc2V0IChlLmcuIFVQKSBpbiBpdHMgJmx0Oy4uLiZndDsgZmxhZ3MuCiYjNDM7bGlua19oYXNfZmxhZygpCiYjNDM7ewomIzQzOwlsb2NhbCBucz0kMSBkZXY9JDIgZmxhZz0kMwomIzQzOwomIzQzOwlpcCAtbiAmIzM0OyRucyYjMzQ7IGxpbmsgc2hvdyBkZXYgJiMzNDskZGV2JiMzNDsgMiZndDsvZGV2L251bGwgfCBncmVwIC1xICYjMzQ7WyZsdDssXSR7ZmxhZ31bLCZndDtdJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7bGlua19sYWNrc19mbGFnKCkKJiM0Mzt7CiYjNDM7CSEgbGlua19oYXNfZmxhZyAmIzM0OyRAJiMzNDsKJiM0Mzt9CiYjNDM7CiYjNDM7bGlua19tdHVfaXMoKQomIzQzO3sKJiM0MzsJbG9jYWwgbnM9JDEgZGV2PSQyIHdhbnQ9JDMgY3VyCiYjNDM7CiYjNDM7CWN1cj0kKGlwIC1uICYjMzQ7JG5zJiMzNDsgbGluayBzaG93IGRldiAmIzM0OyRkZXYmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IFwKJiM0MzsJCXNlZCAtbiAmIzM5O3MvLiogbXR1IFwoWzAtOV1cJiM0MztcKS4qL1wxL3AmIzM5OykKJiM0MzsJWyAmIzM0OyRjdXImIzM0OyA9ICYjMzQ7JHdhbnQmIzM0OyBdCiYjNDM7fQomIzQzOwomIzQzO3ZsYW5fZmVhdHVyZV9pcygpCiYjNDM7ewomIzQzOwlsb2NhbCBucz0kMSBkZXY9JDIgZmVhdHVyZT0kMyB2YWx1ZT0kNAomIzQzOwomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JG5zJiMzNDsgZXRodG9vbCAtayAmIzM0OyRkZXYmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IFwKJiM0MzsJCWdyZXAgLXEgJiMzNDteJGZlYXR1cmU6ICR2YWx1ZSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO2xpbmtfaGFzX21hc3RlcigpCiYjNDM7ewomIzQzOwlsb2NhbCBucz0kMSBkZXY9JDIgbWFzdGVyPSQzCiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JG5zJiMzNDsgLW8gbGluayBzaG93IGRldiAmIzM0OyRkZXYmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IGdyZXAgLXEgJiMzNDttYXN0ZXIgJG1hc3RlciYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3ZsYW5fbGlua19zdGF0ZSgpCiYjNDM7ewomIzQzOwlSRVQ9MAomIzQzOwomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgYWRkIGxzX2R1bW15IHR5cGUgZHVtbXkKJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGFkZCBsaW5rIGxzX2R1bW15IG5hbWUgbHNfdmxhbiB0eXBlIHZsYW4gaWQgMTAwCiYjNDM7CiYjNDM7CSMgQnJpbmdpbmcgdGhlIHJlYWwgZGV2aWNlIHVwIG11c3QgcHJvcGFnYXRlIFVQIHRvIHRoZSBWTEFOLgomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgc2V0IGxzX2R1bW15IHVwCiYjNDM7CWJ1c3l3YWl0ICYjMzQ7JEJVU1lXQUlUX1RJTUVPVVQmIzM0OyBsaW5rX2hhc19mbGFnICYjMzQ7JE5TJiMzNDsgbHNfdmxhbiBVUAomIzQzOwljaGVja19lcnIgJD8gJiMzNDtWTEFOIGRpZCBub3QgZ28gVVAgYWZ0ZXIgdGhlIHJlYWwgZGV2aWNlIHdlbnQgVVAmIzM0OwomIzQzOwomIzQzOwkjIC4uLiBhbmQgbGlrZXdpc2UgZm9yIERPV04uCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBzZXQgbHNfZHVtbXkgZG93bgomIzQzOwlidXN5d2FpdCAmIzM0OyRCVVNZV0FJVF9USU1FT1VUJiMzNDsgbGlua19sYWNrc19mbGFnICYjMzQ7JE5TJiMzNDsgbHNfdmxhbiBVUAomIzQzOwljaGVja19lcnIgJD8gJiMzNDtWTEFOIGRpZCBub3QgZ28gRE9XTiBhZnRlciB0aGUgcmVhbCBkZXZpY2Ugd2VudCBET1dOJiMzNDsKJiM0MzsKJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGRlbCBsc192bGFuCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBkZWwgbHNfZHVtbXkKJiM0MzsKJiM0MzsJbG9nX3Rlc3QgJiMzNDtWTEFOIGxpbmsgc3RhdGUgZm9sbG93cyB0aGUgcmVhbCBkZXZpY2UmIzM0OwomIzQzO30KJiM0MzsKJiM0Mzt2bGFuX210dSgpCiYjNDM7ewomIzQzOwlSRVQ9MAomIzQzOwomIzQzOwkjIFRoZSBWTEFOIGluaGVyaXRzIHRoZSByZWFsIGRldmljZSYjMzk7cyBNVFUgKDIwMDApIGF0IGNyZWF0aW9uIHRpbWUuCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBhZGQgbXR1X2R1bW15IG10dSAyMDAwIHR5cGUgZHVtbXkKJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGFkZCBsaW5rIG10dV9kdW1teSBuYW1lIG10dV92bGFuIHR5cGUgdmxhbiBpZCAxMDAKJiM0MzsKJiM0MzsJIyBTaHJpbmtpbmcgdGhlIHJlYWwgZGV2aWNlJiMzOTtzIE1UVSBtdXN0IGNsYW1wIHRoZSBWTEFOJiMzOTtzIE1UVS4KJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIHNldCBtdHVfZHVtbXkgbXR1IDE1MDAKJiM0MzsJYnVzeXdhaXQgJiMzNDskQlVTWVdBSVRfVElNRU9VVCYjMzQ7IGxpbmtfbXR1X2lzICYjMzQ7JE5TJiMzNDsgbXR1X3ZsYW4gMTUwMAomIzQzOwljaGVja19lcnIgJD8gJiMzNDtWTEFOIE1UVSBub3QgY2xhbXBlZCBhZnRlciB0aGUgcmVhbCBkZXZpY2UmIzM5O3MgTVRVIHNocmFuayYjMzQ7CiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBkZWwgbXR1X3ZsYW4KJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGRlbCBtdHVfZHVtbXkKJiM0MzsKJiM0MzsJbG9nX3Rlc3QgJiMzNDtWTEFOIE1UVSBjbGFtcGVkIHRvIHRoZSByZWFsIGRldmljZSYjMzQ7CiYjNDM7fQomIzQzOwomIzQzO3ZsYW5fZmVhdHVyZXMoKQomIzQzO3sKJiM0MzsJUkVUPTAKJiM0MzsKJiM0MzsJIyBVc2UgdmV0aCBhcyB0aGUgcmVhbCBkZXZpY2U6IHVubGlrZSBkdW1teSBpdCBleHBvcnRzIHZsYW5fZmVhdHVyZXMsIHNvCiYjNDM7CSMgdGhlIFZMQU4gYWN0dWFsbHkgaW5oZXJpdHMgYSB0b2dnbGVhYmxlIG9mZmxvYWQgdG8gYXNzZXJ0IG9uLgomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgYWRkIGZ0X3ZldGggdHlwZSB2ZXRoIHBlZXIgbmFtZSBmdF92ZXRoX3ByCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBhZGQgbGluayBmdF92ZXRoIG5hbWUgZnRfdmxhbiB0eXBlIHZsYW4gaWQgMTAwCiYjNDM7CiYjNDM7CXZsYW5fZmVhdHVyZV9pcyAmIzM0OyROUyYjMzQ7IGZ0X3ZsYW4gc2NhdHRlci1nYXRoZXIgb24KJiM0MzsJY2hlY2tfZXJyICQ/ICYjMzQ7VkxBTiBkaWQgbm90IGluaGVyaXQgc2NhdHRlci1nYXRoZXIgZnJvbSB0aGUgcmVhbCBkZXZpY2UmIzM0OwomIzQzOwomIzQzOwkjIFRvZ2dsaW5nIHRoZSBvZmZsb2FkIG9uIHRoZSByZWFsIGRldmljZSBtdXN0IHByb3BhZ2F0ZSB0byB0aGUgVkxBTi4KJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyROUyYjMzQ7IGV0aHRvb2wgLUsgZnRfdmV0aCBzZyBvZmYKJiM0MzsJYnVzeXdhaXQgJiMzNDskQlVTWVdBSVRfVElNRU9VVCYjMzQ7IFwKJiM0MzsJCXZsYW5fZmVhdHVyZV9pcyAmIzM0OyROUyYjMzQ7IGZ0X3ZsYW4gc2NhdHRlci1nYXRoZXIgb2ZmCiYjNDM7CWNoZWNrX2VyciAkPyAmIzM0O1ZMQU4gc2NhdHRlci1nYXRoZXIgc3RpbGwgb24gYWZ0ZXIgZGlzYWJsaW5nIGl0IG9uIHJlYWwgZGV2JiMzNDsKJiM0MzsKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyROUyYjMzQ7IGV0aHRvb2wgLUsgZnRfdmV0aCBzZyBvbgomIzQzOwlidXN5d2FpdCAmIzM0OyRCVVNZV0FJVF9USU1FT1VUJiMzNDsgXAomIzQzOwkJdmxhbl9mZWF0dXJlX2lzICYjMzQ7JE5TJiMzNDsgZnRfdmxhbiBzY2F0dGVyLWdhdGhlciBvbgomIzQzOwljaGVja19lcnIgJD8gJiMzNDtWTEFOIHNjYXR0ZXItZ2F0aGVyIHN0aWxsIG9mZiBhZnRlciBlbmFibGluZyBpdCBvbiByZWFsIGRldiYjMzQ7CiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBkZWwgZnRfdmxhbgomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgZGVsIGZ0X3ZldGgKJiM0MzsKJiM0MzsJbG9nX3Rlc3QgJiMzNDtWTEFOIGZlYXR1cmVzIGZvbGxvdyB0aGUgcmVhbCBkZXZpY2UmIzM0OwomIzQzO30KJiM0MzsKJiM0Mzt2bGFuX3JlYWxfZGV2X2Vuc2xhdmUoKQomIzQzO3sKJiM0MzsJUkVUPTAKJiM0MzsKJiM0MzsJIyBkdW1teSAmbHQ7LSBWTEFOIC0mZ3Q7IGJvbmQwLCB0aGVuIGVuc2xhdmUgdGhlIGR1bW15IGl0c2VsZiB0byBib25kMS4gIFRoZQomIzQzOwkjIGxhc3Qgc3RlcCBicmluZ3MgdGhlIGR1bW15IHVwIHVuZGVyIGJvbmQxJiMzOTtzIGluc3RhbmNlIGxvY2ssIHdoaWNoIHVzZWQKJiM0MzsJIyB0byBkZWFkbG9jayB3aGlsZSBzeW5jaHJvbm91c2x5IHByb3BhZ2F0aW5nIFVQIHRvIHRoZSAoYm9uZC1lbnNsYXZlZCkKJiM0MzsJIyBWTEFOIG9uIHRvcC4KJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGFkZCBkbF9kdW1teSB0eXBlIGR1bW15CiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBzZXQgZGxfZHVtbXkgdXAKJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGFkZCBsaW5rIGRsX2R1bW15IG5hbWUgZGxfdmxhbiB0eXBlIHZsYW4gaWQgMTAwCiYjNDM7CiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBhZGQgZGxfYm9uZDAgdHlwZSBib25kIG1vZGUgYWN0aXZlLWJhY2t1cAomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgc2V0IGRsX3ZsYW4gZG93bgomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgc2V0IGRsX3ZsYW4gbWFzdGVyIGRsX2JvbmQwCiYjNDM7CWNoZWNrX2VyciAkPyAmIzM0O2NvdWxkIG5vdCBlbnNsYXZlIHRoZSBWTEFOIHRvIGJvbmQwJiMzNDsKJiM0MzsKJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGFkZCBkbF9ib25kMSB0eXBlIGJvbmQgbW9kZSBhY3RpdmUtYmFja3VwCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBzZXQgZGxfZHVtbXkgZG93bgomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgc2V0IGRsX2R1bW15IG1hc3RlciBkbF9ib25kMQomIzQzOwljaGVja19lcnIgJD8gJiMzNDtjb3VsZCBub3QgZW5zbGF2ZSB0aGUgcmVhbCBkZXZpY2UgdG8gYm9uZDEmIzM0OwomIzQzOwomIzQzOwkjIElmIHdlIGdvdCBoZXJlIHRoZSBrZXJuZWwgZGlkIG5vdCBkZWFkbG9jazsgbWFrZSBzdXJlIGl0IGlzIHN0aWxsCiYjNDM7CSMgcmVzcG9uc2l2ZSBhbmQgdGhlIGVuc2xhdmUgcmVhbGx5IHRvb2sgZWZmZWN0LgomIzQzOwlsaW5rX2hhc19tYXN0ZXIgJiMzNDskTlMmIzM0OyBkbF9kdW1teSBkbF9ib25kMQomIzQzOwljaGVja19lcnIgJD8gJiMzNDtyZWFsIGRldmljZSBub3QgZW5zbGF2ZWQgdG8gYm9uZDEmIzM0OwomIzQzOwomIzQzOwlpcCAtbiAmIzM0OyROUyYjMzQ7IGxpbmsgZGVsIGRsX2JvbmQxCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBkZWwgZGxfYm9uZDAKJiM0MzsJaXAgLW4gJiMzNDskTlMmIzM0OyBsaW5rIGRlbCBkbF92bGFuCiYjNDM7CWlwIC1uICYjMzQ7JE5TJiMzNDsgbGluayBkZWwgZGxfZHVtbXkKJiM0MzsKJiM0MzsJbG9nX3Rlc3QgJiMzNDtWTEFOIHJlYWwgZGV2aWNlIGVuc2xhdmVkIHRvIGEgc2Vjb25kIGJvbmQmIzM0OwomIzQzO30KJiM0MzsKJiM0MztzZXR1cF9ucyBOUwomIzQzO3RyYXAgJiMzOTtjbGVhbnVwX25zICROUyYjMzk7IEVYSVQKJiM0MzsKJiM0Mzt0ZXN0c19ydW4KJiM0MzsKJiM0MztleGl0ICYjMzQ7JEVYSVRfU1RBVFVTJiMzNDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIERlZmVycmVkIE5ldHdvcmsgRGV2aWNlIFdvcmsqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGhvdyB3ZSBoYW5kbGUgbmV0d29yayBkZXZpY2UgZXZlbnRzLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBWTEFOcyBhbmQgdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGludHJvZHVjZSBhIGRlZmVycmVkIHdvcmsgbWVjaGFuaXNtIHRvIGF2b2lkIHNvbWUgbmFzdHkgcG90ZW50aWFsIGRlYWRsb2NrcyB0aGF0IGNhbiBhcmlzZSBmcm9tIG5lc3RlZCBub3RpZmljYXRpb25zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoaW5ncyBsaWtlIGBORVRERVZfRE9XTmAsIGBORVRERVZfVVBgLCBgTkVUREVWX0NIQU5HRU1UVWAsIGFuZCBgTkVUREVWX0ZFQVRfQ0hBTkdFYC4gRXNzZW50aWFsbHksIHdlJiMzOTtyZSByZXBsYWNpbmcgdGhlIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiB3aXRoIGFzeW5jaHJvbm91cyB3b3JrIHRvIGJlIGRvbmUgbGF0ZXIuCgpUaGUgY2hhbmdlcyBhcmUgZmFpcmx5IHdpZGVzcHJlYWQsIHRvdWNoaW5nIGZpbGVzIGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYCwgdmFyaW91cyBWTEFOLXJlbGF0ZWQgZmlsZXMgKGB2bGFuLmNgLCBgdmxhbi5oYCwgYHZsYW5fZGV2LmNgKSwgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgKGBkZXYuY2AsIGBkZXYuaGAsIGBkZXZfYWRkcl9saXN0cy5jYCwgYE1ha2VmaWxlYCksIGFuZCBldmVuIGEgbmV3IGZpbGUgc3BlY2lmaWNhbGx5IGZvciB0aGlzIGRlZmVycmVkIHdvcmsgKGBuZXRkZXZfd29yay5jYCkg4oCTIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSBhIG5ldyBzZWxmdGVzdCBzY3JpcHQsIGBib25kX3ZsYW5fcmVhbF9kZXYuc2hgLCB3aGljaCBpcyBhIGdvb2Qgc2lnbjsgdGhhdCYjMzk7cyBncmVhdCBmb3IgdmVyaWZ5aW5nIHRoYXQgdGhlc2UgY2hhbmdlcyB3b3JrIGFzIGludGVuZGVkLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgZ2l2ZW4gaXRzIGltcGFjdCBvbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLCB0aGlzIHBhdGNoIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nIGFuZCBmdXJ0aGVyIHNjcnV0aW55LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgaW50cm9kdWNpbmcgYW55IHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29yZSBzeW1ib2xzIGludm9sdmVkLiBJIHNlZSBhIGZldyBrZXkgZnVuY3Rpb25zOiBgbmV0ZGV2X3dvcmtfc2NoZWRgLCBgbmV0ZGV2X3dvcmtfY2FuY2VsYCwgYF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZGAsIGBfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsYCwgYG5ldGRldl93b3JrX3J1bmAsIGBuZXRkZXZfd29ya19wcm9jYCwgYW5kIG9mIGNvdXJzZSB0aGUgVkxBTi1zcGVjaWZpYyBgdmxhbl9kZXZfd29ya2AuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5cG9pbnQgdG8gbG9vayBmb3IgY2FsbGVycyBhbmQgdGhlaXIgYmVoYXZpb3IuCgpJIHdhbnQgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uLiBJIGtub3cgdGhlIGNoYW5nZXMgYXJlIG1vc3RseSBpbiBgbmV0L2NvcmUvYCBhbmQgYG5ldC84MDIxcS9gLiBgbmV0L2NvcmUvYCBpcyBwcmV0dHkgbXVjaCBhbHdheXMgaW5jbHVkZWQsIGJ1dCB0aGUgVkxBTiBjb2RlIGlzIGdvaW5nIHRvIGRlcGVuZCBvbiBgQ09ORklHX1ZMQU5fODAyMVFgLiBJIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGF0JiMzOTtzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZywgc28gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBuZXQvODAyMXEvS2NvbmZpZ2AgYW5kIGBuZXQvTWFrZWZpbGVgIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDE4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1ZMQU5fODAyMVEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvODAyMXEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC84MDIxcS9LY29uZmlnLTUtXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXG5uZXQvODAyMXEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7ODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XCYjMzQ7XG4tLVxubmV0LzgwMjFxL0tjb25maWctMjEtXG5uZXQvODAyMXEvS2NvbmZpZzoyMjpjb25maWcgVkxBTl84MDIxUV9HVlJQXG5uZXQvODAyMXEvS2NvbmZpZy0yMy1cdGJvb2wgXCYjMzQ7R1ZSUCAoR0FSUCBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xubmV0LzgwMjFxL0tjb25maWc6MjQ6XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbm5ldC84MDIxcS9LY29uZmlnLTI1LVx0c2VsZWN0IEdBUlBcbi0tXG5uZXQvODAyMXEvS2NvbmZpZy0zMS1cbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcbm5ldC84MDIxcS9LY29uZmlnLTMzLVx0Ym9vbCBcJiMzNDtNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFwmIzM0O1xubmV0LzgwMjFxL0tjb25maWc6MzQ6XHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcbm5ldC84MDIxcS9LY29uZmlnLTM1LVx0c2VsZWN0IE1SUFxuLS1cbm5ldC84MDIxcS9NYWtlZmlsZS00LSNcbm5ldC84MDIxcS9NYWtlZmlsZTo1Om9iai0kKHN1YnN0IG0seSwkKENPTkZJR19WTEFOXzgwMjFRKSlcdCYjNDM7PSB2bGFuX2NvcmUub1xubmV0LzgwMjFxL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpXHRcdCYjNDM7PSA4MDIxcS5vXG5uZXQvODAyMXEvTWFrZWZpbGUtNy1cbm5ldC84MDIxcS9NYWtlZmlsZS04LTgwMjFxLXlcdFx0XHRcdFx0Oj0gdmxhbi5vIHZsYW5fZGV2Lm8gdmxhbl9uZXRsaW5rLm9cbm5ldC84MDIxcS9NYWtlZmlsZTo5OjgwMjFxLSQoQ09ORklHX1ZMQU5fODAyMVFfR1ZSUClcdFx0JiM0Mzs9IHZsYW5fZ3ZycC5vXG5uZXQvODAyMXEvTWFrZWZpbGU6MTA6ODAyMXEtJChDT05GSUdfVkxBTl84MDIxUV9NVlJQKVx0XHQmIzQzOz0gdmxhbl9tdnJwLm9cbm5ldC84MDIxcS9NYWtlZmlsZS0xMS04MDIxcS0kKENPTkZJR19QUk9DX0ZTKVx0XHRcdCYjNDM7PSB2bGFucHJvYy5vXG4tLVxubmV0LzgwMjFxL3ZsYW4uaD0xNTg9c3RhdGljIGlubGluZSB1MzIgdmxhbl9nZXRfaW5ncmVzc19wcmlvcml0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC84MDIxcS92bGFuLmgtMTY1LVxubmV0LzgwMjFxL3ZsYW4uaDoxNjY6I2lmZGVmIENPTkZJR19WTEFOXzgwMjFRX0dWUlBcbm5ldC84MDIxcS92bGFuLmgtMTY3LWludCB2bGFuX2d2cnBfcmVxdWVzdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuLS1cbm5ldC84MDIxcS92bGFuLmg9MTc5PXN0YXRpYyBpbmxpbmUgdm9pZCB2bGFuX2d2cnBfdW5pbml0KHZvaWQpIHt9XG4tLVxubmV0LzgwMjFxL3ZsYW4uaC0xODEtXG5uZXQvODAyMXEvdmxhbi5oOjE4MjojaWZkZWYgQ09ORklHX1ZMQU5fODAyMVFfTVZSUFxubmV0LzgwMjFxL3ZsYW4uaC0xODMtaW50IHZsYW5fbXZycF9yZXF1ZXN0X2pvaW4oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5ODQKCQkJCQkJCW91dHB1dDogMjExCgkJCQkJCQl0aG91Z2h0czogNTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIE5ldHdvcmsgRGV2aWNlIEFzeW5jaHJvbm91cyBXb3JrIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyB0aGUgY29uZmlnIHVuZGVyIGNvbnNpZGVyYXRpb24gaGVyZSBpcyBgVkxBTl84MDIxUWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGJ1dCBJIHN1c3BlY3QgdGhhdCB0aGlzIGlzIHRoZSBwcmltYXJ5IGZvY3VzLiBHaXZlbiB0aGF0IHRoZSB0ZXN0IGZyYW1ld29yayBsZXZlcmFnZXMgYm9uZGluZywgYEJPTkRJTkdgIGNvdWxkIGJlIHVzZWZ1bCB0byBlbmFibGUsIGFsdGhvdWdoIHRoZSBjb3JlIGxvZ2ljIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBpcyBjbGVhcmx5IGluIGBuZXRkZXZfd29yay5jYCBhbmQgYHZsYW5fZGV2LmNgLiBJJiMzOTtsbCBhZGQgYm90aCBgVkxBTl84MDIxUWAgYW5kIGBCT05ESU5HYCB0byBgRW5hYmxlQ29uZmlnc2AuCgpOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcyBwb3RlbnRpYWwgdGFyZ2V0cyBmb3IgZnV6emluZzogYG5ldGRldl93b3JrX3NjaGVkYCwgYG5ldGRldl93b3JrX2NhbmNlbGAsIGBfX25ldGRldl93b3JrX2NvcmVfc2NoZWRgLCBgX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbGAsIGBuZXRkZXZfd29ya19ydW5gLCBgbmV0ZGV2X3dvcmtfcHJvY2AsIGFuZCBgdmxhbl9kZXZfd29ya2AuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlIHZpc2liaWxpdHkgb2YgdGhlc2Ugc3ltYm9scywgYW5kIHdoZXRoZXIgdGhleSBhcmUgc3RhdGljIG9yIGV4cG9ydGVkLiBPa2F5LCBgbmV0ZGV2X3dvcmtfcHJvY2AsIGBuZXRkZXZfd29ya19ydW5gIGFuZCBgdmxhbl9kZXZfd29ya2AgYXJlIHN0YXRpYywgd2hpbGUgYG5ldGRldl93b3JrX3NjaGVkYCBhbmQgYG5ldGRldl93b3JrX2NhbmNlbGAgYXJlIGV4cG9ydGVkLiBUaGUgYF9fbmV0ZGV2X3dvcmtfY29yZV8qYCBzeW1ib2xzIGFyZSBnbG9iYWwsIGJ1dCBub3QgZXhwb3J0ZWQuCgpNeSBmdXp6IHRhcmdldCBsaXN0IHdpbGwgY29uc2lzdCBvZjoKKiAgIGBuZXRkZXZfd29ya19zY2hlZGAKKiAgIGBuZXRkZXZfd29ya19jYW5jZWxgCiogICBgbmV0ZGV2X3dvcmtfcHJvY2AKKiAgIGBuZXRkZXZfd29ya19ydW5gCiogICBgdmxhbl9kZXZfd29ya2AKKiAgIGB2bGFuX2RldmljZV9ldmVudGAgKHdoaWNoIHdhcyBtb2RpZmllZCBpbiB0aGUgcGF0Y2gpCiogICBgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgKGFub3RoZXIgbW9kaWZpZWQgZnVuY3Rpb24pCgpJJiMzOTtsbCBjb25maXJtIHRoYXQgYG5ldGRldl93b3JrX3Byb2NgIGlzIGluZGVlZCB0aGUgd29ya3F1ZXVlIGNhbGxiYWNrLiBZZXMsIGl0IGlzLgoKVGhlIHJhdGlvbmFsZSBoZXJlIGlzIHRoYXQgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGFzeW5jaHJvbm91cyB3b3JrIG1lY2hhbmlzbSAoYG5ldGRldl93b3JrYCkgZm9yIG5ldHdvcmsgZGV2aWNlcyBhbmQgaW50ZWdyYXRlcyBpdCB3aXRoIHRoZSBWTEFOIGRyaXZlci4gVGhlIGdvYWwgaXMgdG8gaGFuZGxlIHN0YXRlIHByb3BhZ2F0aW9uIChNVFUsIGZlYXR1cmVzLCBsaW5rIHN0YXRlKSBtb3JlIGVmZmljaWVudGx5IGFuZCBhdm9pZCBwb3RlbnRpYWwgZGVhZGxvY2tzLiBUaGlzIGlzIGEgY3J1Y2lhbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbmV0d29yayBhbmQgVkxBTiBsb2dpYy4gQ3JpdGljYWxseSwgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggbmV0bGluayBhbmQgaW9jdGxzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmdXp6IHRoaXMgaW1wbGVtZW50YXRpb24gdGhvcm91Z2hseSB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0aWVzLCBvciBjb25jdXJyZW5jeSBidWdzIHRoYXQgdGhpcyBuZXcgYXN5bmNocm9ub3VzIG1lY2hhbmlzbSBtaWdodCBpbnRyb2R1Y2UuCgpUaGUgZm9jdXMgc3ltYm9scyBsb29rIGdvb2QgdG8gbWUuIFRoaXMgY2hhbmdlIGlzIGFic29sdXRlbHkgJiMzNDtXb3J0aEZ1enppbmc6IHRydWUmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxODo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtCT05ESU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X3dvcmtfc2NoZWQmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfY2FuY2VsJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3Byb2MmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssCiAgICAmIzM0O3ZsYW5fZGV2X3dvcmsmIzM0OywKICAgICYjMzQ7dmxhbl9kZXZpY2VfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXN5bmNocm9ub3VzIHdvcmsgbWVjaGFuaXNtIChgbmV0ZGV2X3dvcmtgKSBmb3IgbmV0d29yayBkZXZpY2VzIGFuZCBtb2RpZmllcyB0aGUgVkxBTiBkcml2ZXIgdG8gdXNlIGl0IGZvciBzdGF0ZSBwcm9wYWdhdGlvbiAoTVRVLCBmZWF0dXJlcywgbGluayBzdGF0ZSkgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyBuZXN0ZWQgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbmV0d29ya2luZyBhbmQgVkxBTiBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IG1vZGlmeWluZyBkZXZpY2Ugc3RhdGVzIChlLmcuLCBicmluZ2luZyBkZXZpY2VzIHVwL2Rvd24sIGNoYW5naW5nIE1UVSkuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgYXN5bmNocm9ub3VzIG1lY2hhbmlzbSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgY29uY3VycmVuY3kgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkxBTl84MDIxUSYjMzQ7LAogICAgJiMzNDtCT05ESU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZGV2X3dvcmtfc2NoZWQmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfY2FuY2VsJiMzNDssCiAgICAmIzM0O25ldGRldl93b3JrX3Byb2MmIzM0OywKICAgICYjMzQ7bmV0ZGV2X3dvcmtfcnVuJiMzNDssCiAgICAmIzM0O3ZsYW5fZGV2X3dvcmsmIzM0OywKICAgICYjMzQ7dmxhbl9kZXZpY2VfZXZlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXN5bmNocm9ub3VzIHdvcmsgbWVjaGFuaXNtIChgbmV0ZGV2X3dvcmtgKSBmb3IgbmV0d29yayBkZXZpY2VzIGFuZCBtb2RpZmllcyB0aGUgVkxBTiBkcml2ZXIgdG8gdXNlIGl0IGZvciBzdGF0ZSBwcm9wYWdhdGlvbiAoTVRVLCBmZWF0dXJlcywgbGluayBzdGF0ZSkgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyBuZXN0ZWQgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbmV0d29ya2luZyBhbmQgVkxBTiBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IG1vZGlmeWluZyBkZXZpY2Ugc3RhdGVzIChlLmcuLCBicmluZ2luZyBkZXZpY2VzIHVwL2Rvd24sIGNoYW5naW5nIE1UVSkuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgYXN5bmNocm9ub3VzIG1lY2hhbmlzbSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgY29uY3VycmVuY3kgYnVncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE4OjQ1OjE5LjA1NTk2MTY5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDUyMjY3MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZMQU5fODAyMVFcIixcbiAgICBcIkJPTkRJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRkZXZfd29ya19zY2hlZFwiLFxuICAgIFwibmV0ZGV2X3dvcmtfY2FuY2VsXCIsXG4gICAgXCJuZXRkZXZfd29ya19wcm9jXCIsXG4gICAgXCJuZXRkZXZfd29ya19ydW5cIixcbiAgICBcInZsYW5fZGV2X3dvcmtcIixcbiAgICBcInZsYW5fZGV2aWNlX2V2ZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXN5bmNocm9ub3VzIHdvcmsgbWVjaGFuaXNtIChgbmV0ZGV2X3dvcmtgKSBmb3IgbmV0d29yayBkZXZpY2VzIGFuZCBtb2RpZmllcyB0aGUgVkxBTiBkcml2ZXIgdG8gdXNlIGl0IGZvciBzdGF0ZSBwcm9wYWdhdGlvbiAoTVRVLCBmZWF0dXJlcywgbGluayBzdGF0ZSkgdG8gYXZvaWQgZGVhZGxvY2tzIGR1cmluZyBuZXN0ZWQgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbmV0d29ya2luZyBhbmQgVkxBTiBsb2dpYywgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IG1vZGlmeWluZyBkZXZpY2Ugc3RhdGVzIChlLmcuLCBicmluZ2luZyBkZXZpY2VzIHVwL2Rvd24sIGNoYW5naW5nIE1UVSkuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgYXN5bmNocm9ub3VzIG1lY2hhbmlzbSBkb2Vzbid0IGludHJvZHVjZSByYWNlIGNvbmRpdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBvdGhlciBjb25jdXJyZW5jeSBidWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxODo0NToxOS4wNTU5Njc5NzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzAxNDAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM3ZTA4ZThhMTJlM2I1NTcxZmI3N2UzZTk5ZDBjZjA2MTc0YTljMWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTg6NDU6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XFxuaW5kZXggZmRlNjAxYWNkMWQyNWEuLmQyYTIzOGY4Y2M4YjkxIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxcbkBAIC00MzMsNiArNDMzLDggQEAgZXhjZXB0aW9ucykgbm90aWZpZXJzIHJ1biB1bmRlciB0aGUgaW5zdGFuY2UgbG9jay4gUGxlYXNlIGV4dGVuZCB0aGlzXFxuIGRvY3VtZW50YXRpb24gd2hlbmV2ZXIgeW91IG1ha2UgZXhwbGljaXQgYXNzdW1wdGlvbiBhYm91dCBsb2NrIGJlaW5nIGhlbGRcXG4gZnJvbSBhIG5vdGlmaWVyLlxcbiBcXG4rRHJpdmVycyAqKm11c3Qgbm90KiogZ2VuZXJhdGUgbmVzdGVkIG5vdGlmaWNhdGlvbnMgb2YgdGhlIG9wcy1sb2NrZWQgdHlwZXMuXFxuK1xcbiBORVRERVZfSU5URVJOQUwgc3ltYm9sIG5hbWVzcGFjZVxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5pbmRleCBiNjdhMTI1NDFlYWMyOC4uOTk4MWQ2MzdmOGI1NDYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG5AQCAtMTEzMSw2ICsxMTMxLDkgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xcbiAgKlxcdG5ldGRldl9od19hZGRyX2xpc3RfZm9yX2VhY2goaGEsIHVjKS4gUmV0dXJuIDAgb24gc3VjY2VzcyBvciBhXFxuICAqXFx0bmVnYXRpdmUgZXJybm8gdG8gcmVxdWVzdCBhIHJldHJ5IHZpYSB0aGUgY29yZSBiYWNrb2ZmLlxcbiAgKlxcbisgKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcXG4rICpcXHRSdW4gZGVmZXJyZWQgd29yayBzY2hlZHVsZWQgd2l0aCBuZXRkZXZfd29ya19zY2hlZChAZXZlbnRzKS5cXG4rICpcXG4gICogaW50ICgqbmRvX3NldF9tYWNfYWRkcmVzcykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcik7XFxuICAqXFx0VGhpcyBmdW5jdGlvbiAgaXMgY2FsbGVkIHdoZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIGFkZHJlc3NcXG4gICpcXHRuZWVkcyB0byBiZSBjaGFuZ2VkLiBJZiB0aGlzIGludGVyZmFjZSBpcyBub3QgZGVmaW5lZCwgdGhlXFxuQEAgLTE0NjAsNiArMTQ2Myw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKTtcXG4rXFx0dm9pZFxcdFxcdFxcdCgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGV2ZW50cyk7XFxuIFxcdGludFxcdFxcdFxcdCgqbmRvX3NldF9tYWNfYWRkcmVzcykoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHZvaWQgKmFkZHIpO1xcbiBcXHRpbnRcXHRcXHRcXHQoKm5kb192YWxpZGF0ZV9hZGRyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5AQCAtMTkzMCw4ICsxOTM1LDExIEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XFxuICAqXFx0XFx0XFx0XFx0aGFzIGJlZW4gZW5hYmxlZCBkdWUgdG8gdGhlIG5lZWQgdG8gbGlzdGVuIHRvXFxuICAqXFx0XFx0XFx0XFx0YWRkaXRpb25hbCB1bmljYXN0IGFkZHJlc3NlcyBpbiBhIGRldmljZSB0aGF0XFxuICAqXFx0XFx0XFx0XFx0ZG9lcyBub3QgaW1wbGVtZW50IG5kb19zZXRfcnhfbW9kZSgpXFxuLSAqXFx0QHJ4X21vZGVfbm9kZTpcXHRcXHRMaXN0IGVudHJ5IGZvciByeF9tb2RlIHdvcmsgcHJvY2Vzc2luZ1xcbi0gKlxcdEByeF9tb2RlX3RyYWNrZXI6XFx0UmVmY291bnQgdHJhY2tlciBmb3IgcnhfbW9kZSB3b3JrXFxuKyAqXFx0QHdvcmtfbm9kZTpcXHRcXHRMaXN0IGVudHJ5IGZvciBhc3luYyBuZXRkZXZfd29yayBwcm9jZXNzaW5nXFxuKyAqXFx0QHdvcmtfdHJhY2tlcjpcXHRcXHRSZWZjb3VudCB0cmFja2VyIGZvciBhc3luYyBuZXRkZXZfd29ya1xcbisgKlxcdEB3b3JrX3BlbmRpbmc6XFx0XFx0RHJpdmVyLWRlZmluZWQgcGVuZGluZyBuZXRkZXZfd29yaywgcGFzc2VkIHRvXFxuKyAqXFx0XFx0XFx0XFx0bmRvX3dvcmsoKSAoc2VlIG5ldGRldl93b3JrX3NjaGVkKCkpXFxuKyAqXFx0QHdvcmtfY29yZV9wZW5kaW5nOlxcdENvcmUtZGVmaW5lZCBwZW5kaW5nIG5ldGRldl93b3JrIChORVRERVZfV09SS18qKVxcbiAgKlxcdEByeF9tb2RlX2FkZHJfY2FjaGU6XFx0UmVjeWNsZWQgc25hcHNob3QgZW50cmllcyBmb3IgcnhfbW9kZSB3b3JrXFxuICAqXFx0QHJ4X21vZGVfcmV0cnlfdGltZXI6XFx0VGltZXIgdGhhdCByZS1xdWV1ZXMgcnhfbW9kZSB3b3JrIGFmdGVyIGZhaWx1cmVcXG4gICpcXHRAcnhfbW9kZV9yZXRyeV9jb3VudDpcXHROdW1iZXIgb2YgY29uc2VjdXRpdmUgcmV0cmllcyBhbHJlYWR5IHNjaGVkdWxlZFxcbkBAIC0yMzI2LDggKzIzMzQsMTAgQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRwcm9taXNjdWl0eTtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0YWxsbXVsdGk7XFxuIFxcdGJvb2xcXHRcXHRcXHR1Y19wcm9taXNjO1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0cnhfbW9kZV9ub2RlO1xcbi1cXHRuZXRkZXZpY2VfdHJhY2tlclxcdHJ4X21vZGVfdHJhY2tlcjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdHdvcmtfbm9kZTtcXG4rXFx0bmV0ZGV2aWNlX3RyYWNrZXJcXHR3b3JrX3RyYWNrZXI7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHR3b3JrX3BlbmRpbmc7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHR3b3JrX2NvcmVfcGVuZGluZztcXG4gXFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3RcXHRyeF9tb2RlX2FkZHJfY2FjaGU7XFxuIFxcdHN0cnVjdCB0aW1lcl9saXN0XFx0cnhfbW9kZV9yZXRyeV90aW1lcjtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0cnhfbW9kZV9yZXRyeV9jb3VudDtcXG5AQCAtNTE3Niw2ICs1MTg2LDkgQEAgdm9pZCBkZXZfZmV0Y2hfc3dfbmV0c3RhdHMoc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzLFxcbiBcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyBfX3BlcmNwdSAqbmV0c3RhdHMpO1xcbiB2b2lkIGRldl9nZXRfdHN0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzKTtcXG4gXFxuK3ZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xcbit1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spO1xcbitcXG4gZW51bSB7XFxuIFxcdE5FU1RFRF9TWU5DX0lNTV9CSVQsXFxuIFxcdE5FU1RFRF9TWU5DX1RPRE9fQklULFxcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uY1xcbmluZGV4IDJiNzRlZDU2ZWIxNjZkLi4yZDJlZmI4Nzc5NzVkNSAxMDA2NDRcXG4tLS0gYS9uZXQvODAyMXEvdmxhbi5jXFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uY1xcbkBAIC03Nyw5ICs3Nyw5IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbilcXG4rdm9pZCB2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pXFxuIHtcXG4gXFx0aWYgKCEodmxhbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTEFOX0ZMQUdfQlJJREdFX0JJTkRJTkcpKVxcbiBcXHRcXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpO1xcbkBAIC0zMTYsMjkgKzMxNiw2IEBAIHN0YXRpYyB2b2lkIHZsYW5fc3luY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGV0aGVyX2FkZHJfY29weSh2bGFuLVxcdTAwM2VyZWFsX2Rldl9hZGRyLCBkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgdmxhbl90cmFuc2Zlcl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldilcXG4te1xcbi1cXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XFxuLVxcbi1cXHRuZXRpZl9pbmhlcml0X3Rzb19tYXgodmxhbmRldiwgZGV2KTtcXG4tXFxuLVxcdGlmICh2bGFuX2h3X29mZmxvYWRfY2FwYWJsZShkZXYtXFx1MDAzZWZlYXR1cmVzLCB2bGFuLVxcdTAwM2V2bGFuX3Byb3RvKSlcXG4tXFx0XFx0dmxhbmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuLVxcdGVsc2VcXG4tXFx0XFx0dmxhbmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBWTEFOX0hMRU47XFxuLVxcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfRkNPRSlcXG4tXFx0dmxhbmRldi1cXHUwMDNlZmNvZV9kZHBfeGlkID0gZGV2LVxcdTAwM2VmY29lX2RkcF94aWQ7XFxuLSNlbmRpZlxcbi1cXG4tXFx0dmxhbmRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+SUZGX1hNSVRfRFNUX1JFTEVBU0U7XFxuLVxcdHZsYW5kZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gKHZsYW4tXFx1MDAzZXJlYWxfZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1hNSVRfRFNUX1JFTEVBU0UpO1xcbi1cXHR2bGFuZGV2LVxcdTAwM2Vod19lbmNfZmVhdHVyZXMgPSB2bGFuX3RubF9mZWF0dXJlcyh2bGFuLVxcdTAwM2VyZWFsX2Rldik7XFxuLVxcbi1cXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKHZsYW5kZXYpO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IF9fdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcXG4ge1xcbiBcXHRpbnQgZXJyID0gMDtcXG5AQCAtMzkxLDEzICszNjgsMTEgQEAgc3RhdGljIHZvaWQgdmxhbl92aWQwX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBzdGF0aWMgaW50IHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbiBcXHRcXHRcXHQgICAgIHZvaWQgKnB0cilcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19leHRhY2socHRyKTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiBcXHRzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwO1xcbiBcXHRzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm87XFxuIFxcdGludCBpLCBmbGdzO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldjtcXG4tXFx0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW47XFxuIFxcdGJvb2wgbGFzdCA9IGZhbHNlO1xcbiBcXHRMSVNUX0hFQUQobGlzdCk7XFxuIFxcdGludCBlcnI7XFxuQEAgLTQ0Nyw1NCArNDIyLDE5IEBAIHN0YXRpYyBpbnQgdmxhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXFxuIFxcdFxcdFxcdGlmICh2bGFuZGV2LVxcdTAwM2VtdHUgXFx1MDAzYz0gZGV2LVxcdTAwM2VtdHUpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0ZGV2X3NldF9tdHUodmxhbmRldiwgZGV2LVxcdTAwM2VtdHUpO1xcbitcXHRcXHRcXHRuZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfTVRVKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFxuIFxcdGNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOlxcbi1cXHRcXHQvKiBQcm9wYWdhdGUgZGV2aWNlIGZlYXR1cmVzIHRvIHVuZGVybHlpbmcgZGV2aWNlICovXFxuIFxcdFxcdHZsYW5fZ3JvdXBfZm9yX2VhY2hfZGV2KGdycCwgaSwgdmxhbmRldilcXG4tXFx0XFx0XFx0dmxhbl90cmFuc2Zlcl9mZWF0dXJlcyhkZXYsIHZsYW5kZXYpO1xcbitcXHRcXHRcXHRuZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfRkVBVFVSRVMpO1xcbiBcXHRcXHRicmVhaztcXG4gXFxuLVxcdGNhc2UgTkVUREVWX0RPV046IHtcXG4tXFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnRtcDtcXG4tXFx0XFx0TElTVF9IRUFEKGNsb3NlX2xpc3QpO1xcbi1cXG4tXFx0XFx0LyogUHV0IGFsbCBWTEFOcyBmb3IgdGhpcyBkZXYgaW4gdGhlIGRvd24gc3RhdGUgdG9vLiAgKi9cXG4tXFx0XFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KSB7XFxuLVxcdFxcdFxcdGZsZ3MgPSB2bGFuZGV2LVxcdTAwM2VmbGFncztcXG4tXFx0XFx0XFx0aWYgKCEoZmxncyBcXHUwMDI2IElGRl9VUCkpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0XFx0dmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XFxuLVxcdFxcdFxcdGlmICghKHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVkxBTl9GTEFHX0xPT1NFX0JJTkRJTkcpKVxcbi1cXHRcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2dmxhbmRldi1cXHUwMDNlY2xvc2VfbGlzdCwgXFx1MDAyNmNsb3NlX2xpc3QpO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHRuZXRpZl9jbG9zZV9tYW55KFxcdTAwMjZjbG9zZV9saXN0LCBmYWxzZSk7XFxuLVxcbi1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmxhbmRldiwgdG1wLCBcXHUwMDI2Y2xvc2VfbGlzdCwgY2xvc2VfbGlzdCkge1xcbi1cXHRcXHRcXHR2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGRldiwgdmxhbmRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0dmxhbl9kZXZfcHJpdih2bGFuZGV2KSk7XFxuLVxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnZsYW5kZXYtXFx1MDAzZWNsb3NlX2xpc3QpO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZjbG9zZV9saXN0KTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4rXFx0Y2FzZSBORVRERVZfRE9XTjpcXG4gXFx0Y2FzZSBORVRERVZfVVA6XFxuLVxcdFxcdC8qIFB1dCBhbGwgVkxBTnMgZm9yIHRoaXMgZGV2IGluIHRoZSB1cCBzdGF0ZSB0b28uICAqL1xcbi1cXHRcXHR2bGFuX2dyb3VwX2Zvcl9lYWNoX2RldihncnAsIGksIHZsYW5kZXYpIHtcXG4tXFx0XFx0XFx0ZmxncyA9IG5ldGlmX2dldF9mbGFncyh2bGFuZGV2KTtcXG4tXFx0XFx0XFx0aWYgKGZsZ3MgXFx1MDAyNiBJRkZfVVApXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0XFx0dmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XFxuLVxcdFxcdFxcdGlmICghKHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVkxBTl9GTEFHX0xPT1NFX0JJTkRJTkcpKVxcbi1cXHRcXHRcXHRcXHRkZXZfY2hhbmdlX2ZsYWdzKHZsYW5kZXYsIGZsZ3MgfCBJRkZfVVAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBleHRhY2spO1xcbi1cXHRcXHRcXHR2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGRldiwgdmxhbmRldiwgdmxhbik7XFxuLVxcdFxcdH1cXG4rXFx0XFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KVxcbitcXHRcXHRcXHRuZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfTElOS19TVEFURSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcXG5kaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uaCBiL25ldC84MDIxcS92bGFuLmhcXG5pbmRleCBjN2ZmZTU5MWQ1OTM2Ni4uYzQxY2FhZjk0MDk1ZjMgMTAwNjQ0XFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaFxcbisrKyBiL25ldC84MDIxcS92bGFuLmhcXG5AQCAtMTI1LDYgKzEyNSwxNyBAQCBzdGF0aWMgaW5saW5lIG5ldGRldl9mZWF0dXJlc190IHZsYW5fdG5sX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldilcXG4gaW50IHZsYW5fZmlsdGVyX3B1c2hfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XFxuIHZvaWQgdmxhbl9maWx0ZXJfZHJvcF92aWRzKHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbywgX19iZTE2IHByb3RvKTtcXG4gXFxuKy8qIG5ldGRldl93b3JrIGV2ZW50cyBwcm9wYWdhdGVkIGZyb20gdGhlIHJlYWwgZGV2aWNlLCBzZWUgdmxhbl9kZXZfd29yaygpLiAqL1xcbitlbnVtIHtcXG4rXFx0VkxBTl9XT1JLX0xJTktfU1RBVEVcXHQ9IEJJVCgwKSwgLyogc3luYyB1cC9kb3duIHdpdGggcmVhbF9kZXYgKi9cXG4rXFx0VkxBTl9XT1JLX01UVVxcdFxcdD0gQklUKDEpLCAvKiBjbGFtcCBtdHUgdG8gcmVhbF9kZXYncyAqL1xcbitcXHRWTEFOX1dPUktfRkVBVFVSRVNcXHQ9IEJJVCgyKSwgLyogcmUtaW5oZXJpdCByZWFsX2RldiBmZWF0dXJlcyAqL1xcbit9O1xcbitcXG4rdm9pZCB2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pO1xcbitcXG4gLyogZm91bmQgaW4gdmxhbl9kZXYuYyAqL1xcbiB2b2lkIHZsYW5fZGV2X3NldF9pbmdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgIHUzMiBza2JfcHJpbywgdTE2IHZsYW5fcHJpbyk7XFxuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2Rldi5jIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmNcXG5pbmRleCA3YWEzYWY4YjEwZWFkMC4uZWMyNTY5YjNmOGRhYzYgMTAwNjQ0XFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW5fZGV2LmNcXG4rKysgYi9uZXQvODAyMXEvdmxhbl9kZXYuY1xcbkBAIC0yNzAsNiArMjcwLDkgQEAgc3RhdGljIGludCB2bGFuX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdCAgICAhKHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVkxBTl9GTEFHX0xPT1NFX0JJTkRJTkcpKVxcbiBcXHRcXHRyZXR1cm4gLUVORVRET1dOO1xcbiBcXG4rXFx0LyogVGhlIGV4cGxpY2l0IG9wZW4gc3VwZXJzZWRlcyBhbnkgZGVmZXJyZWQgbGluay1zdGF0ZSBzeW5jICovXFxuK1xcdG5ldGRldl93b3JrX2NhbmNlbChkZXYsIFZMQU5fV09SS19MSU5LX1NUQVRFKTtcXG4rXFxuIFxcdGlmICghZXRoZXJfYWRkcl9lcXVhbChkZXYtXFx1MDAzZWRldl9hZGRyLCByZWFsX2Rldi1cXHUwMDNlZGV2X2FkZHIpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhdmxhbl9kZXZfaW5oZXJpdF9hZGRyZXNzKGRldiwgcmVhbF9kZXYpKSB7XFxuIFxcdFxcdGVyciA9IGRldl91Y19hZGQocmVhbF9kZXYsIGRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbkBAIC0zMDAsNiArMzAzLDkgQEAgc3RhdGljIGludCB2bGFuX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdHN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdihkZXYpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLVxcdTAwM2VyZWFsX2RldjtcXG4gXFxuK1xcdC8qIFRoZSBleHBsaWNpdCBjbG9zZSBzdXBlcnNlZGVzIGFueSBkZWZlcnJlZCBsaW5rLXN0YXRlIHN5bmMgKi9cXG4rXFx0bmV0ZGV2X3dvcmtfY2FuY2VsKGRldiwgVkxBTl9XT1JLX0xJTktfU1RBVEUpO1xcbitcXG4gXFx0ZGV2X21jX3Vuc3luYyhyZWFsX2RldiwgZGV2KTtcXG4gXFx0ZGV2X3VjX3Vuc3luYyhyZWFsX2RldiwgZGV2KTtcXG4gXFxuQEAgLTEwMTYsNiArMTAyMiw1OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHZsYW5fZXRodG9vbF9vcHMgPSB7XFxuIFxcdC5nZXRfdHNfaW5mb1xcdFxcdD0gdmxhbl9ldGh0b29sX2dldF90c19pbmZvLFxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgdmxhbl90cmFuc2Zlcl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldilcXG4re1xcbitcXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XFxuK1xcbitcXHRuZXRpZl9pbmhlcml0X3Rzb19tYXgodmxhbmRldiwgZGV2KTtcXG4rXFxuK1xcdGlmICh2bGFuX2h3X29mZmxvYWRfY2FwYWJsZShkZXYtXFx1MDAzZWZlYXR1cmVzLCB2bGFuLVxcdTAwM2V2bGFuX3Byb3RvKSlcXG4rXFx0XFx0dmxhbmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmxhbmRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBWTEFOX0hMRU47XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfRkNPRSlcXG4rXFx0dmxhbmRldi1cXHUwMDNlZmNvZV9kZHBfeGlkID0gZGV2LVxcdTAwM2VmY29lX2RkcF94aWQ7XFxuKyNlbmRpZlxcbitcXG4rXFx0dmxhbmRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+SUZGX1hNSVRfRFNUX1JFTEVBU0U7XFxuK1xcdHZsYW5kZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gKHZsYW4tXFx1MDAzZXJlYWxfZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1hNSVRfRFNUX1JFTEVBU0UpO1xcbitcXHR2bGFuZGV2LVxcdTAwM2Vod19lbmNfZmVhdHVyZXMgPSB2bGFuX3RubF9mZWF0dXJlcyh2bGFuLVxcdTAwM2VyZWFsX2Rldik7XFxuK1xcbitcXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKHZsYW5kZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB2bGFuX2Rldl93b3JrKHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcXG4re1xcbitcXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYodmxhbmRldik7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tXFx1MDAzZXJlYWxfZGV2O1xcbitcXHRib29sIGxvb3NlID0gdmxhbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBWTEFOX0ZMQUdfTE9PU0VfQklORElORztcXG4rXFx0dW5zaWduZWQgaW50IGZsZ3M7XFxuK1xcbitcXHRpZiAoZXZlbnRzIFxcdTAwMjYgVkxBTl9XT1JLX0xJTktfU1RBVEUpIHtcXG4rXFx0XFx0ZmxncyA9IG5ldGlmX2dldF9mbGFncyh2bGFuZGV2KTtcXG4rXFx0XFx0aWYgKHJlYWxfZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkge1xcbitcXHRcXHRcXHRpZiAoIShmbGdzIFxcdTAwMjYgSUZGX1VQKSkge1xcbitcXHRcXHRcXHRcXHRpZiAoIWxvb3NlKVxcbitcXHRcXHRcXHRcXHRcXHRuZXRpZl9jaGFuZ2VfZmxhZ3ModmxhbmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmxncyB8IElGRl9VUCwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocmVhbF9kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHZsYW5kZXYsIHZsYW4pO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSBpZiAoKGZsZ3MgXFx1MDAyNiBJRkZfVVApIFxcdTAwMjZcXHUwMDI2ICFsb29zZSkge1xcbitcXHRcXHRcXHRuZXRpZl9jaGFuZ2VfZmxhZ3ModmxhbmRldiwgZmxncyBcXHUwMDI2IH5JRkZfVVAsIE5VTEwpO1xcbitcXHRcXHRcXHR2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHJlYWxfZGV2LCB2bGFuZGV2LCB2bGFuKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoKGV2ZW50cyBcXHUwMDI2IFZMQU5fV09SS19NVFUpIFxcdTAwMjZcXHUwMDI2IHZsYW5kZXYtXFx1MDAzZW10dSBcXHUwMDNlIHJlYWxfZGV2LVxcdTAwM2VtdHUpXFxuK1xcdFxcdG5ldGlmX3NldF9tdHUodmxhbmRldiwgcmVhbF9kZXYtXFx1MDAzZW10dSk7XFxuK1xcbitcXHRpZiAoZXZlbnRzIFxcdTAwMjYgVkxBTl9XT1JLX0ZFQVRVUkVTKVxcbitcXHRcXHR2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKHJlYWxfZGV2LCB2bGFuZGV2KTtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fY2hhbmdlX210dVxcdFxcdD0gdmxhbl9kZXZfY2hhbmdlX210dSxcXG4gXFx0Lm5kb19pbml0XFx0XFx0PSB2bGFuX2Rldl9pbml0LFxcbkBAIC0xMDI3LDYgKzEwODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IHZsYW5fZGV2X3NldF9tYWNfYWRkcmVzcyxcXG4gXFx0Lm5kb19zZXRfcnhfbW9kZVxcdD0gdmxhbl9kZXZfc2V0X3J4X21vZGUsXFxuIFxcdC5uZG9fY2hhbmdlX3J4X2ZsYWdzXFx0PSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsXFxuK1xcdC5uZG9fd29ya1xcdFxcdD0gdmxhbl9kZXZfd29yayxcXG4gXFx0Lm5kb19ldGhfaW9jdGxcXHRcXHQ9IHZsYW5fZGV2X2lvY3RsLFxcbiBcXHQubmRvX25laWdoX3NldHVwXFx0PSB2bGFuX2Rldl9uZWlnaF9zZXR1cCxcXG4gXFx0Lm5kb19nZXRfc3RhdHM2NFxcdD0gdmxhbl9kZXZfZ2V0X3N0YXRzNjQsXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGVcXG5pbmRleCBkYzE3YzVhNjFlOWE0YS4uYjNmZGNiNGUzNTVmYTYgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGVcXG4rKysgYi9uZXQvY29yZS9NYWtlZmlsZVxcbkBAIC0xMyw3ICsxMyw3IEBAIG9iai15XFx0XFx0ICAgICArPSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXFxcXG4gXFx0XFx0XFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcXFxcbiBcXHRcXHRcXHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXFxcXG4gXFx0XFx0XFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcXFxcbi1cXHRcXHRcXHRuZXRkZXYtZ2VubC5vIG5ldGRldi1nZW5sLWdlbi5vIGdzby5vXFxuK1xcdFxcdFxcdG5ldGRldi1nZW5sLm8gbmV0ZGV2LWdlbmwtZ2VuLm8gbmV0ZGV2X3dvcmsubyBnc28ub1xcbiBcXG4gb2JqLSQoQ09ORklHX05FVERFVl9BRERSX0xJU1RfVEVTVCkgKz0gZGV2X2FkZHJfbGlzdHNfdGVzdC5vXFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXFxuaW5kZXggNWMwMWRmYWE2YzQ0NTAuLjRiM2Q1Y2ZkZjZlMDBmIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtOTgyMiw2ICs5ODIyLDcgQEAgaW50IG5ldGlmX2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuIFxcdF9fZGV2X25vdGlmeV9mbGFncyhkZXYsIG9sZF9mbGFncywgY2hhbmdlcywgMCwgTlVMTCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTChuZXRpZl9jaGFuZ2VfZmxhZ3MpO1xcbiBcXG4gaW50IF9fbmV0aWZfc2V0X210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4ge1xcbkBAIC0xMjA5Myw2ICsxMjA5NCw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNlcHR5cGVfYWxsKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNlcHR5cGVfc3BlY2lmaWMpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2LVxcdTAwM2VuZXRfbm90aWZpZXJfbGlzdCk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfbm9kZSk7XFxuICNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXFxuIFxcdGhhc2hfaW5pdChkZXYtXFx1MDAzZXFkaXNjX2hhc2gpO1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmggYi9uZXQvY29yZS9kZXYuaFxcbmluZGV4IDQxMjFjNTBlN2M4OGJlLi41ZDBiMDMwNWQzYmFhZiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuaFxcbisrKyBiL25ldC9jb3JlL2Rldi5oXFxuQEAgLTE2NywxMCArMTY3LDE5IEBAIGludCBkZXZfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcik7XFxuIHZvaWQgX19kZXZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGludCBfX2Rldl9zZXRfcHJvbWlzY3VpdHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGluYywgYm9vbCBub3RpZnkpO1xcbiB2b2lkIG5ldGlmX3J4X21vZGVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4tYm9vbCBuZXRpZl9yeF9tb2RlX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbit2b2lkIG5ldGlmX3J4X21vZGVfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiB2b2lkIG5ldGlmX3J4X21vZGVfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gdm9pZCBuZXRpZl9yeF9tb2RlX2NhbmNlbF9yZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gXFxuKy8qIEV2ZW50cyBmb3IgdGhlIGFzeW5jIG5ldGRldiB3b3JrLCB0cmFja2VkIGluIG5ldGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcuICovXFxuK2VudW0gbmV0ZGV2X3dvcmtfY29yZSB7XFxuK1xcdE5FVERFVl9XT1JLX1JYX01PREVcXHQ9IEJJVCgwKSxcXHQvKiBydW4gdGhlIHJ4X21vZGUgdXBkYXRlICovXFxuK307XFxuK1xcbit2b2lkIF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KTtcXG4rdW5zaWduZWQgbG9uZ1xcbitfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzayk7XFxuK1xcbiB2b2lkIF9fZGV2X25vdGlmeV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2xkX2ZsYWdzLFxcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZ2NoYW5nZXMsIHUzMiBwb3J0aWQsXFxuIFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcXG5pbmRleCBlMTdmNjRhNjVlMTdiZS4uMDg1MjhjYTBhOGIzMTQgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1xcbisrKyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcXG5AQCAtMTIsMTcgKzEyLDEwIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3QuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2t1bml0L3Zpc2liaWxpdHkuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJkZXYuaFxcXCJcXG4gXFxuLXN0YXRpYyB2b2lkIG5ldGRldl9yeF9tb2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4tXFxuLXN0YXRpYyBMSVNUX0hFQUQocnhfbW9kZV9saXN0KTtcXG4tc3RhdGljIERFRklORV9TUElOTE9DSyhyeF9tb2RlX2xvY2spO1xcbi1zdGF0aWMgREVDTEFSRV9XT1JLKHJ4X21vZGVfd29yaywgbmV0ZGV2X3J4X21vZGVfd29yayk7XFxuLVxcbiAvKlxcbiAgKiBHZW5lcmFsIGxpc3QgaGFuZGxpbmcgZnVuY3Rpb25zXFxuICAqL1xcbkBAIC0xMjgxLDcgKzEyNzQsNyBAQCB2b2lkIG5ldGlmX3J4X21vZGVfY2FuY2VsX3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGRldi1cXHUwMDNlcnhfbW9kZV9yZXRyeV9jb3VudCA9IDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3ZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCB1Y19zbmFwLCBtY19zbmFwLCB1Y19yZWYsIG1jX3JlZjtcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuQEAgLTEzMzksNDkgKzEzMzIsOSBAQCBzdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5ldGRldl9yeF9tb2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi17XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuLVxcbi1cXHRydG5sX2xvY2soKTtcXG4tXFxuLVxcdHdoaWxlICh0cnVlKSB7XFxuLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cnhfbW9kZV9sb2NrKTtcXG4tXFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnJ4X21vZGVfbGlzdCkpIHtcXG4tXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnJ4X21vZGVfbG9jayk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGRldiA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNnJ4X21vZGVfbGlzdCwgc3RydWN0IG5ldF9kZXZpY2UsXFxuLVxcdFxcdFxcdFxcdCAgICAgICByeF9tb2RlX25vZGUpO1xcbi1cXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJ4X21vZGVfbm9kZSk7XFxuLVxcdFxcdC8qIFdlIG11c3QgZnJlZSBuZXRkZXYgdHJhY2tlciB1bmRlclxcbi1cXHRcXHQgKiB0aGUgc3BpbmxvY2sgcHJvdGVjdGlvbi5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdG5ldGRldl90cmFja2VyX2ZyZWUoZGV2LCBcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX3RyYWNrZXIpO1xcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhfbW9kZV9sb2NrKTtcXG4tXFxuLVxcdFxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbi1cXHRcXHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xcbi1cXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbi1cXHRcXHQvKiBVc2UgX19kZXZfcHV0KCkgYmVjYXVzZSBuZXRkZXZfdHJhY2tlcl9mcmVlKCkgd2FzIGFscmVhZHlcXG4tXFx0XFx0ICogY2FsbGVkIGFib3ZlLiBNdXN0IGJlIGFmdGVyIG5ldGRldl91bmxvY2tfb3BzKCkgdG8gcHJldmVudFxcbi1cXHRcXHQgKiBuZXRkZXZfcnVuX3RvZG8oKSBmcm9tIGZyZWVpbmcgdGhlIGRldmljZSB3aGlsZSBzdGlsbCBpbiB1c2UuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRfX2Rldl9wdXQoZGV2KTtcXG4tXFx0fVxcbi1cXG4tXFx0cnRubF91bmxvY2soKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cnhfbW9kZV9sb2NrKTtcXG4tXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmRldi1cXHUwMDNlcnhfbW9kZV9ub2RlKSkge1xcbi1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXJ4X21vZGVfbm9kZSwgXFx1MDAyNnJ4X21vZGVfbGlzdCk7XFxuLVxcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldi1cXHUwMDNlcnhfbW9kZV90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4tXFx0fVxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhfbW9kZV9sb2NrKTtcXG4tXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2cnhfbW9kZV93b3JrKTtcXG4rXFx0X19uZXRkZXZfd29ya19jb3JlX3NjaGVkKGRldiwgTkVUREVWX1dPUktfUlhfTU9ERSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcmV0cnkoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuQEAgLTEzOTQsNyArMTM0Nyw2IEBAIHN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcmV0cnkoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIFxcbiB2b2lkIG5ldGlmX3J4X21vZGVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkZXYtXFx1MDAzZXJ4X21vZGVfbm9kZSk7XFxuIFxcdF9faHdfYWRkcl9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJ4X21vZGVfYWRkcl9jYWNoZSk7XFxuIFxcdHRpbWVyX3NldHVwKFxcdTAwMjZkZXYtXFx1MDAzZXJ4X21vZGVfcmV0cnlfdGltZXIsIG5ldGlmX3J4X21vZGVfcmV0cnksIDApO1xcbiB9XFxuQEAgLTE0NDIsMjQgKzEzOTQsNiBAQCB2b2lkIGRldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRuZXRpZl9hZGRyX3VubG9ja19iaChkZXYpO1xcbiB9XFxuIFxcbi1ib29sIG5ldGlmX3J4X21vZGVfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4te1xcbi1cXHRib29sIGNsZWFuID0gZmFsc2U7XFxuLVxcbi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJ4X21vZGVfbG9jayk7XFxuLVxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2VyeF9tb2RlX25vZGUpKSB7XFxuLVxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlcnhfbW9kZV9ub2RlKTtcXG4tXFx0XFx0Y2xlYW4gPSB0cnVlO1xcbi1cXHRcXHQvKiBXZSBtdXN0IHJlbGVhc2UgbmV0ZGV2IHRyYWNrZXIgdW5kZXJcXG4tXFx0XFx0ICogdGhlIHNwaW5sb2NrIHByb3RlY3Rpb24uXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRuZXRkZXZfdHJhY2tlcl9mcmVlKGRldiwgXFx1MDAyNmRldi1cXHUwMDNlcnhfbW9kZV90cmFja2VyKTtcXG4tXFx0fVxcbi1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2cnhfbW9kZV9sb2NrKTtcXG4tXFxuLVxcdHJldHVybiBjbGVhbjtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIG5ldGlmX3J4X21vZGVfc3luYygpIC0gc3luYyByeCBtb2RlIGlubGluZVxcbiAgKiBAZGV2OiBuZXR3b3JrIGRldmljZVxcbkBAIC0xNDczLDExICsxNDA3LDYgQEAgYm9vbCBuZXRpZl9yeF9tb2RlX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICAqL1xcbiB2b2lkIG5ldGlmX3J4X21vZGVfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuLVxcdGlmIChuZXRpZl9yeF9tb2RlX2NsZWFuKGRldikpIHtcXG4rXFx0aWYgKF9fbmV0ZGV2X3dvcmtfY29yZV9jYW5jZWwoZGV2LCBORVRERVZfV09SS19SWF9NT0RFKSlcXG4gXFx0XFx0bmV0aWZfcnhfbW9kZV9ydW4oZGV2KTtcXG4tXFx0XFx0LyogVXNlIF9fZGV2X3B1dCgpIGJlY2F1c2UgbmV0ZGV2X3RyYWNrZXJfZnJlZSgpIHdhcyBhbHJlYWR5XFxuLVxcdFxcdCAqIGNhbGxlZCBpbnNpZGUgbmV0aWZfcnhfbW9kZV9jbGVhbigpLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0X19kZXZfcHV0KGRldik7XFxuLVxcdH1cXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRkZXZfd29yay5jIGIvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjMxMDlmYWUxMzJhZDE4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL25ldC9jb3JlL25ldGRldl93b3JrLmNcXG5AQCAtMCwwICsxLDE2MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V4cG9ydC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImRldi5oXFxcIlxcbitcXG4rc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbitcXG4rLyogQG5ldGRldl93b3JrX2xvY2sgcHJvdGVjdHM6XFxuKyAqICAtIEBuZXRkZXZfd29ya19saXN0XFxuKyAqICAtIHdpdGhpbiB0aGUgbGlzdCBlbnRyaWVzIChzdHJ1Y3QgbmV0X2RldmljZSBmaWVsZHMpOlxcbisgKlxcdC0gd29ya19ub2RlXFxuKyAqXFx0LSB3b3JrX3RyYWNrZXJcXG4rICpcXHQtIHdvcmtfcGVuZGluZ1xcbisgKlxcdC0gd29ya19jb3JlX3BlbmRpbmdcXG4rICovXFxuK3N0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3dvcmtfbGlzdCk7XFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmV0ZGV2X3dvcmtfbG9jayk7XFxuK3N0YXRpYyBERUNMQVJFX1dPUksobmV0ZGV2X3dvcmssIG5ldGRldl93b3JrX3Byb2MpO1xcbitcXG4rc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfZW5xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cyxcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBjb3JlKVxcbit7XFxuK1xcdGlmICghZXZlbnRzIFxcdTAwMjZcXHUwMDI2ICFjb3JlKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpKSB7XFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlLCBcXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCk7XFxuK1xcdFxcdG5ldGRldl9ob2xkKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4rXFx0fVxcbitcXHRkZXYtXFx1MDAzZXdvcmtfcGVuZGluZyB8PSBldmVudHM7XFxuK1xcdGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcgfD0gY29yZTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbitcXG4rXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bmV0ZGV2X3dvcmspO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZ1xcbituZXRkZXZfd29ya19kZXF1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgKnBlbmRpbmcsXFxuK1xcdFxcdCAgICB1bnNpZ25lZCBsb25nIG1hc2spXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBldmVudHM7XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbitcXHRldmVudHMgPSAqcGVuZGluZyBcXHUwMDI2IG1hc2s7XFxuK1xcdCpwZW5kaW5nIFxcdTAwMjY9IH5ldmVudHM7XFxuK1xcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhZGV2LVxcdTAwM2V3b3JrX3BlbmRpbmcgXFx1MDAyNlxcdTAwMjYgIWRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcpIHtcXG4rXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpO1xcbitcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya190cmFja2VyKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gZXZlbnRzO1xcbit9XFxuK1xcbit2b2lkIG5ldGRldl93b3JrX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxcbit7XFxuK1xcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCBldmVudHMsIDApO1xcbit9XFxuK0VYUE9SVF9TWU1CT0wobmV0ZGV2X3dvcmtfc2NoZWQpO1xcbitcXG4rLyoqXFxuKyAqIG5ldGRldl93b3JrX2NhbmNlbCgpIC0gY2FuY2VsIHNlbGVjdGVkIHdvcmsgZm9yIGEgbmV0ZGV2XFxuKyAqIEBkZXY6IG5ldF9kZXZpY2VcXG4rICogQG1hc2s6IGV2ZW50cyB0byBjYW5jZWxcXG4rICpcXG4rICogQ2xlYXIgQG1hc2sgZnJvbSB0aGUgZGV2aWNlJ3Mgd29yayBwZW5kaW5nIG1hc2suIElmIG5vIHdvcmsgaXMgbGVmdCBwZW5kaW5nXFxuKyAqIHRoZSBkZXZpY2UgaXMgZGVxdWV1ZWQgYW5kIGl0cyBuZG9fd29yayB3b24ndCBiZSBjYWxsZWQuXFxuKyAqXFxuKyAqIE5vIGV4cGVjdGF0aW9ucyBvbiBsb2NraW5nLCBidXQgYWxzbyBubyBndWFyYW50ZWVzIHByb3ZpZGVkLiBJZiB0aGUgY2FsbGVyXFxuKyAqIHdhbnRzIHRvIHRvdWNoIEBkZXYgYWZ0ZXJ3YXJkcyAoZS5nLiBjYWxsIHRoZSB3b3JrIHRoYXQgZ290IGNhbmNlbGVkKVxcbisgKiB0aGV5IGhhdmUgdG8gZW5zdXJlIEBkZXYgZG9lcyBub3QgZ2V0IGZyZWVkLlxcbisgKlxcbisgKiBSZXR1cm5zOiB0aGUgc3Vic2V0IG9mIEBtYXNrIHRoYXQgd2FzIGFjdHVhbGx5IHBlbmRpbmcsIHNvIHRoZSBjYWxsZXIgY2FuIHJ1blxcbisgKiB0aG9zZSBldmVudHMgaW5saW5lLlxcbisgKi9cXG4rdW5zaWduZWQgbG9uZyBuZXRkZXZfd29ya19jYW5jZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBtYXNrKVxcbit7XFxuK1xcdHJldHVybiBuZXRkZXZfd29ya19kZXF1ZXVlKGRldiwgXFx1MDAyNmRldi1cXHUwMDNld29ya19wZW5kaW5nLCBtYXNrKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX2NhbmNlbCk7XFxuK1xcbit2b2lkIF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50cylcXG4re1xcbitcXHRuZXRkZXZfd29ya19lbnF1ZXVlKGRldiwgMCwgZXZlbnRzKTtcXG4rfVxcbitcXG4rdW5zaWduZWQgbG9uZ1xcbitfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzaylcXG4re1xcbitcXHRyZXR1cm4gbmV0ZGV2X3dvcmtfZGVxdWV1ZShkZXYsIFxcdTAwMjZkZXYtXFx1MDAzZXdvcmtfY29yZV9wZW5kaW5nLCBtYXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzLFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBjb3JlKVxcbit7XFxuK1xcdGlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKGNvcmUgXFx1MDAyNiBORVRERVZfV09SS19SWF9NT0RFKVxcbitcXHRcXHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xcbitcXHRpZiAoZXZlbnRzIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3dvcmspXFxuK1xcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX3dvcmsoZGV2LCBldmVudHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19wcm9jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFxuK1xcdHdoaWxlICh0cnVlKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgZXZlbnRzID0gMCwgY29yZSA9IDA7XFxuK1xcdFxcdG5ldGRldmljZV90cmFja2VyIHRyYWNrZXI7XFxuK1xcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuK1xcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbitcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bmV0ZGV2X3dvcmtfbGlzdCkpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZuZXRkZXZfd29ya19saXN0LCBzdHJ1Y3QgbmV0X2RldmljZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHdvcmtfbm9kZSk7XFxuK1xcdFxcdC8qIFRha2UgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHNvIEBkZXYgY2FuJ3QgYmUgZnJlZWQgd2hpbGUgd2VcXG4rXFx0XFx0ICogZHJvcCB0aGUgbG9jayB0byBncmFiIGl0cyBvcHMgbG9jazsgdGhlIHdvcmsgcmVmZXJlbmNlIGlzXFxuK1xcdFxcdCAqIG9ubHkgcmVsZWFzZWQgb25jZSB3ZSBjbGFpbSB0aGUgd29yayBiZWxvdy5cXG4rXFx0XFx0ICogVGhlIHJlLWxvY2tpbmcgZGFuY2UgaXMgdG8gZW5zdXJlIHRoYXQgb3BzIGxvY2sgaXMgZW5vdWdoXFxuK1xcdFxcdCAqIHRvIGVuc3VyZSBjYW5jZWxpbmcgd29yayBpcyBub3QgcmFjeSB3aXRoIGRlcXVldWUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xcbitcXG4rXFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuK1xcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX25vZGUpKSB7XFxuK1xcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmRldi1cXHUwMDNld29ya19ub2RlKTtcXG4rXFx0XFx0XFx0Y29yZSA9IGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmc7XFxuK1xcdFxcdFxcdGRldi1cXHUwMDNld29ya19jb3JlX3BlbmRpbmcgPSAwO1xcbitcXHRcXHRcXHRldmVudHMgPSBkZXYtXFx1MDAzZXdvcmtfcGVuZGluZztcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2V3b3JrX3BlbmRpbmcgPSAwO1xcbitcXHRcXHRcXHQvKiBXZSB0b29rIGFub3RoZXIgcmVmIGFib3ZlICovXFxuK1xcdFxcdFxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2ZGV2LVxcdTAwM2V3b3JrX3RyYWNrZXIpO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFkZXZfaXNhbGl2ZShkZXYpKVxcbitcXHRcXHRcXHRcXHRjb3JlID0gZXZlbnRzID0gMDtcXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XFxuK1xcbitcXHRcXHRuZXRkZXZfd29ya19ydW4oZGV2LCBldmVudHMsIGNvcmUpO1xcbitcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbitcXG4rXFx0XFx0bmV0ZGV2X3B1dChkZXYsIFxcdTAwMjZ0cmFja2VyKTtcXG4rXFx0fVxcbitcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZVxcbmluZGV4IGJlMTMwYmY1ODVhNDE5Li42MzY0Y2EwMjY0MmQ2OCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZVxcbkBAIC0xMyw2ICsxMyw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcXFxcbiBcXHRib25kX29wdGlvbnMuc2ggXFxcXFxcbiBcXHRib25kX3Bhc3NpdmVfbGFjcC5zaCBcXFxcXFxuIFxcdGJvbmRfc3RhY2tlZF9oZWFkZXJfcGFyc2Uuc2ggXFxcXFxcbitcXHRib25kX3ZsYW5fcmVhbF9kZXYuc2ggXFxcXFxcbiBcXHRkZXZfYWRkcl9saXN0cy5zaCBcXFxcXFxuIFxcdG1vZGUtMS1yZWNvdmVyeS11cGRlbGF5LnNoIFxcXFxcXG4gXFx0bW9kZS0yLXJlY292ZXJ5LXVwZGVsYXkuc2ggXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfdmxhbl9yZWFsX2Rldi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF92bGFuX3JlYWxfZGV2LnNoXFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTQyZDlmZmM0ODE5ZjlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3ZsYW5fcmVhbF9kZXYuc2hcXG5AQCAtMCwwICsxLDE4MCBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBUZXN0IHByb3BhZ2F0aW9uIG9mIGEgcmVhbCBkZXZpY2UncyBzdGF0ZSB0byB0aGUgVkxBTnMgc3RhY2tlZCBvbiB0b3Agb2YgaXRcXG4rIyB3aGVuIHRoZSByZWFsIGRldmljZSBpcyAob3IgYmVjb21lcykgYSBib25kIG1lbWJlci5cXG4rI1xcbisjIFRoZSBrZXJuZWwgbWlycm9ycyBhIHJlYWwgZGV2aWNlJ3MgVVAvRE9XTiwgTVRVIGFuZCBmZWF0dXJlIGNoYW5nZXMgb250byBpdHNcXG4rIyBWTEFOcy4gIFRoaXMgaXMgZG9uZSBhc3luY2hyb25vdXNseSAobmV0ZGV2X3dvcmspOiBkb2luZyBpdCBzeW5jaHJvbm91c2x5IGZyb21cXG4rIyB0aGUgcmVhbCBkZXZpY2UncyBub3RpZmllciBjb3VsZCBkZWFkbG9jay4gIElmIHRoZSByZWFsIGRldmljZSBpcyBicm91Z2h0IHVwXFxuKyMgd2hpbGUgZW5zbGF2ZWQgdG8gYSBib25kIC0gc28gaXRzIGluc3RhbmNlIGxvY2sgaXMgaGVsZCBhY3Jvc3MgTkVUREVWX1VQIC0gYW5kXFxuKyMgYSBWTEFOIG9uIHRvcCBvZiBpdCBpcyBpdHNlbGYgYSBib25kIG1lbWJlciwgdGhlIHN5bmNocm9ub3VzIHByb3BhZ2F0aW9uXFxuKyMgcmUtZW50ZXJlZCB0aGUgc3RhY2sgYW5kIHRyaWVkIHRvIHRha2UgdGhlIHNhbWUgaW5zdGFuY2UgbG9jayBhZ2Fpbi5cXG4rI1xcbisjIENvdmVyIGJvdGggaGFsdmVzOlxcbisjICAtIHRoZSBkZWZlcnJlZCBVUC9ET1dOLCBNVFUgYW5kIGZlYXR1cmUgcHJvcGFnYXRpb24gYWN0dWFsbHkgbGFuZHMgb24gdGhlXFxuKyMgICAgVkxBTiAobGluayBzdGF0ZSBhbmQgTVRVIHVzZSBhbiBvcHMtbG9ja2VkIGR1bW15LCBpLmUuIHRoZSBkZWZlcnJhbCBwYXRoKSxcXG4rIyAgLSB0aGUgZGVhZGxvY2stcHJvbmUgdG9wb2xvZ3kgLSBhIFZMQU4gb24gYSBkdW1teSwgd2l0aCB0aGUgVkxBTiBhbmQgdGhlXFxuKyMgICAgZHVtbXkgZWFjaCBlbnNsYXZlZCB0byBhIGRpZmZlcmVudCBib25kIC0gY2FuIGJlIGJ1aWx0IHdpdGhvdXQgaGFuZ2luZy5cXG4rXFxuK0FMTF9URVNUUz1cXFwiXFxuK1xcdHZsYW5fbGlua19zdGF0ZVxcbitcXHR2bGFuX210dVxcbitcXHR2bGFuX2ZlYXR1cmVzXFxuK1xcdHZsYW5fcmVhbF9kZXZfZW5zbGF2ZVxcbitcXFwiXFxuK1xcbitSRVFVSVJFX01aPW5vXFxuK05VTV9ORVRJRlM9MFxcbitsaWJfZGlyPSQoZGlybmFtZSBcXFwiJDBcXFwiKVxcbitzb3VyY2UgXFxcIiRsaWJfZGlyXFxcIi8uLi8uLi8uLi9uZXQvZm9yd2FyZGluZy9saWIuc2hcXG4rXFxuKyMgUmV0dXJuIDAgaWYgJGRldiBpbiBuZXRucyAkbnMgaGFzIGZsYWcgJGZsYWcgc2V0IChlLmcuIFVQKSBpbiBpdHMgXFx1MDAzYy4uLlxcdTAwM2UgZmxhZ3MuXFxuK2xpbmtfaGFzX2ZsYWcoKVxcbit7XFxuK1xcdGxvY2FsIG5zPSQxIGRldj0kMiBmbGFnPSQzXFxuK1xcbitcXHRpcCAtbiBcXFwiJG5zXFxcIiBsaW5rIHNob3cgZGV2IFxcXCIkZGV2XFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXEgXFxcIltcXHUwMDNjLF0ke2ZsYWd9WyxcXHUwMDNlXVxcXCJcXG4rfVxcbitcXG4rbGlua19sYWNrc19mbGFnKClcXG4re1xcbitcXHQhIGxpbmtfaGFzX2ZsYWcgXFxcIiRAXFxcIlxcbit9XFxuK1xcbitsaW5rX210dV9pcygpXFxuK3tcXG4rXFx0bG9jYWwgbnM9JDEgZGV2PSQyIHdhbnQ9JDMgY3VyXFxuK1xcbitcXHRjdXI9JChpcCAtbiBcXFwiJG5zXFxcIiBsaW5rIHNob3cgZGV2IFxcXCIkZGV2XFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IFxcXFxcXG4rXFx0XFx0c2VkIC1uICdzLy4qIG10dSBcXFxcKFswLTldXFxcXCtcXFxcKS4qL1xcXFwxL3AnKVxcbitcXHRbIFxcXCIkY3VyXFxcIiA9IFxcXCIkd2FudFxcXCIgXVxcbit9XFxuK1xcbit2bGFuX2ZlYXR1cmVfaXMoKVxcbit7XFxuK1xcdGxvY2FsIG5zPSQxIGRldj0kMiBmZWF0dXJlPSQzIHZhbHVlPSQ0XFxuK1xcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkbnNcXFwiIGV0aHRvb2wgLWsgXFxcIiRkZXZcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHwgXFxcXFxcbitcXHRcXHRncmVwIC1xIFxcXCJeJGZlYXR1cmU6ICR2YWx1ZVxcXCJcXG4rfVxcbitcXG4rbGlua19oYXNfbWFzdGVyKClcXG4re1xcbitcXHRsb2NhbCBucz0kMSBkZXY9JDIgbWFzdGVyPSQzXFxuK1xcbitcXHRpcCAtbiBcXFwiJG5zXFxcIiAtbyBsaW5rIHNob3cgZGV2IFxcXCIkZGV2XFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXEgXFxcIm1hc3RlciAkbWFzdGVyXFxcIlxcbit9XFxuK1xcbit2bGFuX2xpbmtfc3RhdGUoKVxcbit7XFxuK1xcdFJFVD0wXFxuK1xcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIGFkZCBsc19kdW1teSB0eXBlIGR1bW15XFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgYWRkIGxpbmsgbHNfZHVtbXkgbmFtZSBsc192bGFuIHR5cGUgdmxhbiBpZCAxMDBcXG4rXFxuK1xcdCMgQnJpbmdpbmcgdGhlIHJlYWwgZGV2aWNlIHVwIG11c3QgcHJvcGFnYXRlIFVQIHRvIHRoZSBWTEFOLlxcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIHNldCBsc19kdW1teSB1cFxcbitcXHRidXN5d2FpdCBcXFwiJEJVU1lXQUlUX1RJTUVPVVRcXFwiIGxpbmtfaGFzX2ZsYWcgXFxcIiROU1xcXCIgbHNfdmxhbiBVUFxcbitcXHRjaGVja19lcnIgJD8gXFxcIlZMQU4gZGlkIG5vdCBnbyBVUCBhZnRlciB0aGUgcmVhbCBkZXZpY2Ugd2VudCBVUFxcXCJcXG4rXFxuK1xcdCMgLi4uIGFuZCBsaWtld2lzZSBmb3IgRE9XTi5cXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBzZXQgbHNfZHVtbXkgZG93blxcbitcXHRidXN5d2FpdCBcXFwiJEJVU1lXQUlUX1RJTUVPVVRcXFwiIGxpbmtfbGFja3NfZmxhZyBcXFwiJE5TXFxcIiBsc192bGFuIFVQXFxuK1xcdGNoZWNrX2VyciAkPyBcXFwiVkxBTiBkaWQgbm90IGdvIERPV04gYWZ0ZXIgdGhlIHJlYWwgZGV2aWNlIHdlbnQgRE9XTlxcXCJcXG4rXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgZGVsIGxzX3ZsYW5cXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBkZWwgbHNfZHVtbXlcXG4rXFxuK1xcdGxvZ190ZXN0IFxcXCJWTEFOIGxpbmsgc3RhdGUgZm9sbG93cyB0aGUgcmVhbCBkZXZpY2VcXFwiXFxuK31cXG4rXFxuK3ZsYW5fbXR1KClcXG4re1xcbitcXHRSRVQ9MFxcbitcXG4rXFx0IyBUaGUgVkxBTiBpbmhlcml0cyB0aGUgcmVhbCBkZXZpY2UncyBNVFUgKDIwMDApIGF0IGNyZWF0aW9uIHRpbWUuXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgYWRkIG10dV9kdW1teSBtdHUgMjAwMCB0eXBlIGR1bW15XFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgYWRkIGxpbmsgbXR1X2R1bW15IG5hbWUgbXR1X3ZsYW4gdHlwZSB2bGFuIGlkIDEwMFxcbitcXG4rXFx0IyBTaHJpbmtpbmcgdGhlIHJlYWwgZGV2aWNlJ3MgTVRVIG11c3QgY2xhbXAgdGhlIFZMQU4ncyBNVFUuXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgc2V0IG10dV9kdW1teSBtdHUgMTUwMFxcbitcXHRidXN5d2FpdCBcXFwiJEJVU1lXQUlUX1RJTUVPVVRcXFwiIGxpbmtfbXR1X2lzIFxcXCIkTlNcXFwiIG10dV92bGFuIDE1MDBcXG4rXFx0Y2hlY2tfZXJyICQ/IFxcXCJWTEFOIE1UVSBub3QgY2xhbXBlZCBhZnRlciB0aGUgcmVhbCBkZXZpY2UncyBNVFUgc2hyYW5rXFxcIlxcbitcXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBkZWwgbXR1X3ZsYW5cXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBkZWwgbXR1X2R1bW15XFxuK1xcbitcXHRsb2dfdGVzdCBcXFwiVkxBTiBNVFUgY2xhbXBlZCB0byB0aGUgcmVhbCBkZXZpY2VcXFwiXFxuK31cXG4rXFxuK3ZsYW5fZmVhdHVyZXMoKVxcbit7XFxuK1xcdFJFVD0wXFxuK1xcbitcXHQjIFVzZSB2ZXRoIGFzIHRoZSByZWFsIGRldmljZTogdW5saWtlIGR1bW15IGl0IGV4cG9ydHMgdmxhbl9mZWF0dXJlcywgc29cXG4rXFx0IyB0aGUgVkxBTiBhY3R1YWxseSBpbmhlcml0cyBhIHRvZ2dsZWFibGUgb2ZmbG9hZCB0byBhc3NlcnQgb24uXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgYWRkIGZ0X3ZldGggdHlwZSB2ZXRoIHBlZXIgbmFtZSBmdF92ZXRoX3ByXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgYWRkIGxpbmsgZnRfdmV0aCBuYW1lIGZ0X3ZsYW4gdHlwZSB2bGFuIGlkIDEwMFxcbitcXG4rXFx0dmxhbl9mZWF0dXJlX2lzIFxcXCIkTlNcXFwiIGZ0X3ZsYW4gc2NhdHRlci1nYXRoZXIgb25cXG4rXFx0Y2hlY2tfZXJyICQ/IFxcXCJWTEFOIGRpZCBub3QgaW5oZXJpdCBzY2F0dGVyLWdhdGhlciBmcm9tIHRoZSByZWFsIGRldmljZVxcXCJcXG4rXFxuK1xcdCMgVG9nZ2xpbmcgdGhlIG9mZmxvYWQgb24gdGhlIHJlYWwgZGV2aWNlIG11c3QgcHJvcGFnYXRlIHRvIHRoZSBWTEFOLlxcbitcXHRpcCBuZXRucyBleGVjIFxcXCIkTlNcXFwiIGV0aHRvb2wgLUsgZnRfdmV0aCBzZyBvZmZcXG4rXFx0YnVzeXdhaXQgXFxcIiRCVVNZV0FJVF9USU1FT1VUXFxcIiBcXFxcXFxuK1xcdFxcdHZsYW5fZmVhdHVyZV9pcyBcXFwiJE5TXFxcIiBmdF92bGFuIHNjYXR0ZXItZ2F0aGVyIG9mZlxcbitcXHRjaGVja19lcnIgJD8gXFxcIlZMQU4gc2NhdHRlci1nYXRoZXIgc3RpbGwgb24gYWZ0ZXIgZGlzYWJsaW5nIGl0IG9uIHJlYWwgZGV2XFxcIlxcbitcXG4rXFx0aXAgbmV0bnMgZXhlYyBcXFwiJE5TXFxcIiBldGh0b29sIC1LIGZ0X3ZldGggc2cgb25cXG4rXFx0YnVzeXdhaXQgXFxcIiRCVVNZV0FJVF9USU1FT1VUXFxcIiBcXFxcXFxuK1xcdFxcdHZsYW5fZmVhdHVyZV9pcyBcXFwiJE5TXFxcIiBmdF92bGFuIHNjYXR0ZXItZ2F0aGVyIG9uXFxuK1xcdGNoZWNrX2VyciAkPyBcXFwiVkxBTiBzY2F0dGVyLWdhdGhlciBzdGlsbCBvZmYgYWZ0ZXIgZW5hYmxpbmcgaXQgb24gcmVhbCBkZXZcXFwiXFxuK1xcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIGRlbCBmdF92bGFuXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgZGVsIGZ0X3ZldGhcXG4rXFxuK1xcdGxvZ190ZXN0IFxcXCJWTEFOIGZlYXR1cmVzIGZvbGxvdyB0aGUgcmVhbCBkZXZpY2VcXFwiXFxuK31cXG4rXFxuK3ZsYW5fcmVhbF9kZXZfZW5zbGF2ZSgpXFxuK3tcXG4rXFx0UkVUPTBcXG4rXFxuK1xcdCMgZHVtbXkgXFx1MDAzYy0gVkxBTiAtXFx1MDAzZSBib25kMCwgdGhlbiBlbnNsYXZlIHRoZSBkdW1teSBpdHNlbGYgdG8gYm9uZDEuICBUaGVcXG4rXFx0IyBsYXN0IHN0ZXAgYnJpbmdzIHRoZSBkdW1teSB1cCB1bmRlciBib25kMSdzIGluc3RhbmNlIGxvY2ssIHdoaWNoIHVzZWRcXG4rXFx0IyB0byBkZWFkbG9jayB3aGlsZSBzeW5jaHJvbm91c2x5IHByb3BhZ2F0aW5nIFVQIHRvIHRoZSAoYm9uZC1lbnNsYXZlZClcXG4rXFx0IyBWTEFOIG9uIHRvcC5cXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBhZGQgZGxfZHVtbXkgdHlwZSBkdW1teVxcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIHNldCBkbF9kdW1teSB1cFxcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIGFkZCBsaW5rIGRsX2R1bW15IG5hbWUgZGxfdmxhbiB0eXBlIHZsYW4gaWQgMTAwXFxuK1xcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIGFkZCBkbF9ib25kMCB0eXBlIGJvbmQgbW9kZSBhY3RpdmUtYmFja3VwXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgc2V0IGRsX3ZsYW4gZG93blxcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIHNldCBkbF92bGFuIG1hc3RlciBkbF9ib25kMFxcbitcXHRjaGVja19lcnIgJD8gXFxcImNvdWxkIG5vdCBlbnNsYXZlIHRoZSBWTEFOIHRvIGJvbmQwXFxcIlxcbitcXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBhZGQgZGxfYm9uZDEgdHlwZSBib25kIG1vZGUgYWN0aXZlLWJhY2t1cFxcbitcXHRpcCAtbiBcXFwiJE5TXFxcIiBsaW5rIHNldCBkbF9kdW1teSBkb3duXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgc2V0IGRsX2R1bW15IG1hc3RlciBkbF9ib25kMVxcbitcXHRjaGVja19lcnIgJD8gXFxcImNvdWxkIG5vdCBlbnNsYXZlIHRoZSByZWFsIGRldmljZSB0byBib25kMVxcXCJcXG4rXFxuK1xcdCMgSWYgd2UgZ290IGhlcmUgdGhlIGtlcm5lbCBkaWQgbm90IGRlYWRsb2NrOyBtYWtlIHN1cmUgaXQgaXMgc3RpbGxcXG4rXFx0IyByZXNwb25zaXZlIGFuZCB0aGUgZW5zbGF2ZSByZWFsbHkgdG9vayBlZmZlY3QuXFxuK1xcdGxpbmtfaGFzX21hc3RlciBcXFwiJE5TXFxcIiBkbF9kdW1teSBkbF9ib25kMVxcbitcXHRjaGVja19lcnIgJD8gXFxcInJlYWwgZGV2aWNlIG5vdCBlbnNsYXZlZCB0byBib25kMVxcXCJcXG4rXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgZGVsIGRsX2JvbmQxXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgZGVsIGRsX2JvbmQwXFxuK1xcdGlwIC1uIFxcXCIkTlNcXFwiIGxpbmsgZGVsIGRsX3ZsYW5cXG4rXFx0aXAgLW4gXFxcIiROU1xcXCIgbGluayBkZWwgZGxfZHVtbXlcXG4rXFxuK1xcdGxvZ190ZXN0IFxcXCJWTEFOIHJlYWwgZGV2aWNlIGVuc2xhdmVkIHRvIGEgc2Vjb25kIGJvbmRcXFwiXFxuK31cXG4rXFxuK3NldHVwX25zIE5TXFxuK3RyYXAgJ2NsZWFudXBfbnMgJE5TJyBFWElUXFxuK1xcbit0ZXN0c19ydW5cXG4rXFxuK2V4aXQgXFxcIiRFWElUX1NUQVRVU1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTg6NDU6MTkuNTc5OTg2ODE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTkyODIyNTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJCT05ESU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZGV2X3dvcmtfc2NoZWRcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbFwiLFxuICAgIFwibmV0ZGV2X3dvcmtfcHJvY1wiLFxuICAgIFwibmV0ZGV2X3dvcmtfcnVuXCIsXG4gICAgXCJ2bGFuX2Rldl93b3JrXCIsXG4gICAgXCJ2bGFuX2RldmljZV9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGFzeW5jaHJvbm91cyB3b3JrIG1lY2hhbmlzbSAoYG5ldGRldl93b3JrYCkgZm9yIG5ldHdvcmsgZGV2aWNlcyBhbmQgbW9kaWZpZXMgdGhlIFZMQU4gZHJpdmVyIHRvIHVzZSBpdCBmb3Igc3RhdGUgcHJvcGFnYXRpb24gKE1UVSwgZmVhdHVyZXMsIGxpbmsgc3RhdGUpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgbmVzdGVkIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG5ldHdvcmtpbmcgYW5kIFZMQU4gbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBtb2RpZnlpbmcgZGV2aWNlIHN0YXRlcyAoZS5nLiwgYnJpbmdpbmcgZGV2aWNlcyB1cC9kb3duLCBjaGFuZ2luZyBNVFUpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGFzeW5jaHJvbm91cyBtZWNoYW5pc20gZG9lc24ndCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgY29uY3VycmVuY3kgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzN2UwOGU4YTEyZTNiNTU3MWZiNzdlM2U5OWQwY2YwNjE3NGE5YzFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTg6NDU6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0ZGV2aWNlcy5yc3RcbmluZGV4IGZkZTYwMWFjZDFkMjVhLi5kMmEyMzhmOGNjOGI5MSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMucnN0XG5AQCAtNDMzLDYgKzQzMyw4IEBAIGV4Y2VwdGlvbnMpIG5vdGlmaWVycyBydW4gdW5kZXIgdGhlIGluc3RhbmNlIGxvY2suIFBsZWFzZSBleHRlbmQgdGhpc1xuIGRvY3VtZW50YXRpb24gd2hlbmV2ZXIgeW91IG1ha2UgZXhwbGljaXQgYXNzdW1wdGlvbiBhYm91dCBsb2NrIGJlaW5nIGhlbGRcbiBmcm9tIGEgbm90aWZpZXIuXG4gXG4rRHJpdmVycyAqKm11c3Qgbm90KiogZ2VuZXJhdGUgbmVzdGVkIG5vdGlmaWNhdGlvbnMgb2YgdGhlIG9wcy1sb2NrZWQgdHlwZXMuXG4rXG4gTkVUREVWX0lOVEVSTkFMIHN5bWJvbCBuYW1lc3BhY2VcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCBiNjdhMTI1NDFlYWMyOC4uOTk4MWQ2MzdmOGI1NDYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMTEzMSw2ICsxMTMxLDkgQEAgc3RydWN0IG5ldGRldl9uZXRfbm90aWZpZXIge1xuICAqXHRuZXRkZXZfaHdfYWRkcl9saXN0X2Zvcl9lYWNoKGhhLCB1YykuIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgYVxuICAqXHRuZWdhdGl2ZSBlcnJubyB0byByZXF1ZXN0IGEgcmV0cnkgdmlhIHRoZSBjb3JlIGJhY2tvZmYuXG4gICpcbisgKiB2b2lkICgqbmRvX3dvcmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKTtcbisgKlx0UnVuIGRlZmVycmVkIHdvcmsgc2NoZWR1bGVkIHdpdGggbmV0ZGV2X3dvcmtfc2NoZWQoQGV2ZW50cykuXG4rICpcbiAgKiBpbnQgKCpuZG9fc2V0X21hY19hZGRyZXNzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKTtcbiAgKlx0VGhpcyBmdW5jdGlvbiAgaXMgY2FsbGVkIHdoZW4gdGhlIE1lZGlhIEFjY2VzcyBDb250cm9sIGFkZHJlc3NcbiAgKlx0bmVlZHMgdG8gYmUgY2hhbmdlZC4gSWYgdGhpcyBpbnRlcmZhY2UgaXMgbm90IGRlZmluZWQsIHRoZVxuQEAgLTE0NjAsNiArMTQ2Myw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XG4gXHRcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICp1YyxcbiBcdFx0XHRcdFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKm1jKTtcbitcdHZvaWRcdFx0XHQoKm5kb193b3JrKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuIFx0aW50XHRcdFx0KCpuZG9fc2V0X21hY19hZGRyZXNzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgICB2b2lkICphZGRyKTtcbiBcdGludFx0XHRcdCgqbmRvX3ZhbGlkYXRlX2FkZHIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuQEAgLTE5MzAsOCArMTkzNSwxMSBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuICAqXHRcdFx0XHRoYXMgYmVlbiBlbmFibGVkIGR1ZSB0byB0aGUgbmVlZCB0byBsaXN0ZW4gdG9cbiAgKlx0XHRcdFx0YWRkaXRpb25hbCB1bmljYXN0IGFkZHJlc3NlcyBpbiBhIGRldmljZSB0aGF0XG4gICpcdFx0XHRcdGRvZXMgbm90IGltcGxlbWVudCBuZG9fc2V0X3J4X21vZGUoKVxuLSAqXHRAcnhfbW9kZV9ub2RlOlx0XHRMaXN0IGVudHJ5IGZvciByeF9tb2RlIHdvcmsgcHJvY2Vzc2luZ1xuLSAqXHRAcnhfbW9kZV90cmFja2VyOlx0UmVmY291bnQgdHJhY2tlciBmb3IgcnhfbW9kZSB3b3JrXG4rICpcdEB3b3JrX25vZGU6XHRcdExpc3QgZW50cnkgZm9yIGFzeW5jIG5ldGRldl93b3JrIHByb2Nlc3NpbmdcbisgKlx0QHdvcmtfdHJhY2tlcjpcdFx0UmVmY291bnQgdHJhY2tlciBmb3IgYXN5bmMgbmV0ZGV2X3dvcmtcbisgKlx0QHdvcmtfcGVuZGluZzpcdFx0RHJpdmVyLWRlZmluZWQgcGVuZGluZyBuZXRkZXZfd29yaywgcGFzc2VkIHRvXG4rICpcdFx0XHRcdG5kb193b3JrKCkgKHNlZSBuZXRkZXZfd29ya19zY2hlZCgpKVxuKyAqXHRAd29ya19jb3JlX3BlbmRpbmc6XHRDb3JlLWRlZmluZWQgcGVuZGluZyBuZXRkZXZfd29yayAoTkVUREVWX1dPUktfKilcbiAgKlx0QHJ4X21vZGVfYWRkcl9jYWNoZTpcdFJlY3ljbGVkIHNuYXBzaG90IGVudHJpZXMgZm9yIHJ4X21vZGUgd29ya1xuICAqXHRAcnhfbW9kZV9yZXRyeV90aW1lcjpcdFRpbWVyIHRoYXQgcmUtcXVldWVzIHJ4X21vZGUgd29yayBhZnRlciBmYWlsdXJlXG4gICpcdEByeF9tb2RlX3JldHJ5X2NvdW50Olx0TnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJldHJpZXMgYWxyZWFkeSBzY2hlZHVsZWRcbkBAIC0yMzI2LDggKzIzMzQsMTAgQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xuIFx0dW5zaWduZWQgaW50XHRcdHByb21pc2N1aXR5O1xuIFx0dW5zaWduZWQgaW50XHRcdGFsbG11bHRpO1xuIFx0Ym9vbFx0XHRcdHVjX3Byb21pc2M7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkXHRyeF9tb2RlX25vZGU7XG4tXHRuZXRkZXZpY2VfdHJhY2tlclx0cnhfbW9kZV90cmFja2VyO1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0d29ya19ub2RlO1xuK1x0bmV0ZGV2aWNlX3RyYWNrZXJcdHdvcmtfdHJhY2tlcjtcbitcdHVuc2lnbmVkIGxvbmdcdFx0d29ya19wZW5kaW5nO1xuK1x0dW5zaWduZWQgbG9uZ1x0XHR3b3JrX2NvcmVfcGVuZGluZztcbiBcdHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0XHRyeF9tb2RlX2FkZHJfY2FjaGU7XG4gXHRzdHJ1Y3QgdGltZXJfbGlzdFx0cnhfbW9kZV9yZXRyeV90aW1lcjtcbiBcdHVuc2lnbmVkIGludFx0XHRyeF9tb2RlX3JldHJ5X2NvdW50O1xuQEAgLTUxNzYsNiArNTE4Niw5IEBAIHZvaWQgZGV2X2ZldGNoX3N3X25ldHN0YXRzKHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqcyxcbiBcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyBfX3BlcmNwdSAqbmV0c3RhdHMpO1xuIHZvaWQgZGV2X2dldF90c3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnMpO1xuIFxuK3ZvaWQgbmV0ZGV2X3dvcmtfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpO1xuK3Vuc2lnbmVkIGxvbmcgbmV0ZGV2X3dvcmtfY2FuY2VsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzayk7XG4rXG4gZW51bSB7XG4gXHRORVNURURfU1lOQ19JTU1fQklULFxuIFx0TkVTVEVEX1NZTkNfVE9ET19CSVQsXG5kaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmNcbmluZGV4IDJiNzRlZDU2ZWIxNjZkLi4yZDJlZmI4Nzc5NzVkNSAxMDA2NDRcbi0tLSBhL25ldC84MDIxcS92bGFuLmNcbisrKyBiL25ldC84MDIxcS92bGFuLmNcbkBAIC03Nyw5ICs3Nyw5IEBAIHN0YXRpYyBpbnQgdmxhbl9ncm91cF9wcmVhbGxvY192aWQoc3RydWN0IHZsYW5fZ3JvdXAgKnZnLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZsYW5fc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RkZXYsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pXG4rdm9pZCB2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbilcbiB7XG4gXHRpZiAoISh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfQlJJREdFX0JJTkRJTkcpKVxuIFx0XHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyb290ZGV2LCBkZXYpO1xuQEAgLTMxNiwyOSArMzE2LDYgQEAgc3RhdGljIHZvaWQgdmxhbl9zeW5jX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGV0aGVyX2FkZHJfY29weSh2bGFuLVx1MDAzZXJlYWxfZGV2X2FkZHIsIGRldi1cdTAwM2VkZXZfYWRkcik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHZsYW5fdHJhbnNmZXJfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi1cdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuZGV2KVxuLXtcbi1cdHN0cnVjdCB2bGFuX2Rldl9wcml2ICp2bGFuID0gdmxhbl9kZXZfcHJpdih2bGFuZGV2KTtcbi1cbi1cdG5ldGlmX2luaGVyaXRfdHNvX21heCh2bGFuZGV2LCBkZXYpO1xuLVxuLVx0aWYgKHZsYW5faHdfb2ZmbG9hZF9jYXBhYmxlKGRldi1cdTAwM2VmZWF0dXJlcywgdmxhbi1cdTAwM2V2bGFuX3Byb3RvKSlcbi1cdFx0dmxhbmRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuLVx0ZWxzZVxuLVx0XHR2bGFuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gKyBWTEFOX0hMRU47XG4tXG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0ZDT0UpXG4tXHR2bGFuZGV2LVx1MDAzZWZjb2VfZGRwX3hpZCA9IGRldi1cdTAwM2VmY29lX2RkcF94aWQ7XG4tI2VuZGlmXG4tXG4tXHR2bGFuZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2PSB+SUZGX1hNSVRfRFNUX1JFTEVBU0U7XG4tXHR2bGFuZGV2LVx1MDAzZXByaXZfZmxhZ3MgfD0gKHZsYW4tXHUwMDNlcmVhbF9kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1hNSVRfRFNUX1JFTEVBU0UpO1xuLVx0dmxhbmRldi1cdTAwM2Vod19lbmNfZmVhdHVyZXMgPSB2bGFuX3RubF9mZWF0dXJlcyh2bGFuLVx1MDAzZXJlYWxfZGV2KTtcbi1cbi1cdG5ldGRldl91cGRhdGVfZmVhdHVyZXModmxhbmRldik7XG4tfVxuLVxuIHN0YXRpYyBpbnQgX192bGFuX2RldmljZV9ldmVudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxuIHtcbiBcdGludCBlcnIgPSAwO1xuQEAgLTM5MSwxMyArMzY4LDExIEBAIHN0YXRpYyB2b2lkIHZsYW5fdmlkMF9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW50IHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuIFx0XHRcdCAgICAgdm9pZCAqcHRyKVxuIHtcbi1cdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2V4dGFjayhwdHIpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFx0c3RydWN0IHZsYW5fZ3JvdXAgKmdycDtcbiBcdHN0cnVjdCB2bGFuX2luZm8gKnZsYW5faW5mbztcbiBcdGludCBpLCBmbGdzO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXY7XG4tXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbjtcbiBcdGJvb2wgbGFzdCA9IGZhbHNlO1xuIFx0TElTVF9IRUFEKGxpc3QpO1xuIFx0aW50IGVycjtcbkBAIC00NDcsNTQgKzQyMiwxOSBAQCBzdGF0aWMgaW50IHZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuIFx0XHRcdGlmICh2bGFuZGV2LVx1MDAzZW10dSBcdTAwM2M9IGRldi1cdTAwM2VtdHUpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRkZXZfc2V0X210dSh2bGFuZGV2LCBkZXYtXHUwMDNlbXR1KTtcbitcdFx0XHRuZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfTVRVKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOlxuLVx0XHQvKiBQcm9wYWdhdGUgZGV2aWNlIGZlYXR1cmVzIHRvIHVuZGVybHlpbmcgZGV2aWNlICovXG4gXHRcdHZsYW5fZ3JvdXBfZm9yX2VhY2hfZGV2KGdycCwgaSwgdmxhbmRldilcbi1cdFx0XHR2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKGRldiwgdmxhbmRldik7XG4rXHRcdFx0bmV0ZGV2X3dvcmtfc2NoZWQodmxhbmRldiwgVkxBTl9XT1JLX0ZFQVRVUkVTKTtcbiBcdFx0YnJlYWs7XG4gXG4tXHRjYXNlIE5FVERFVl9ET1dOOiB7XG4tXHRcdHN0cnVjdCBuZXRfZGV2aWNlICp0bXA7XG4tXHRcdExJU1RfSEVBRChjbG9zZV9saXN0KTtcbi1cbi1cdFx0LyogUHV0IGFsbCBWTEFOcyBmb3IgdGhpcyBkZXYgaW4gdGhlIGRvd24gc3RhdGUgdG9vLiAgKi9cbi1cdFx0dmxhbl9ncm91cF9mb3JfZWFjaF9kZXYoZ3JwLCBpLCB2bGFuZGV2KSB7XG4tXHRcdFx0ZmxncyA9IHZsYW5kZXYtXHUwMDNlZmxhZ3M7XG4tXHRcdFx0aWYgKCEoZmxncyBcdTAwMjYgSUZGX1VQKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdHZsYW4gPSB2bGFuX2Rldl9wcml2KHZsYW5kZXYpO1xuLVx0XHRcdGlmICghKHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFZMQU5fRkxBR19MT09TRV9CSU5ESU5HKSlcbi1cdFx0XHRcdGxpc3RfYWRkKFx1MDAyNnZsYW5kZXYtXHUwMDNlY2xvc2VfbGlzdCwgXHUwMDI2Y2xvc2VfbGlzdCk7XG4tXHRcdH1cbi1cbi1cdFx0bmV0aWZfY2xvc2VfbWFueShcdTAwMjZjbG9zZV9saXN0LCBmYWxzZSk7XG4tXG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuZGV2LCB0bXAsIFx1MDAyNmNsb3NlX2xpc3QsIGNsb3NlX2xpc3QpIHtcbi1cdFx0XHR2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGRldiwgdmxhbmRldixcbi1cdFx0XHRcdFx0XHRcdHZsYW5fZGV2X3ByaXYodmxhbmRldikpO1xuLVx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2dmxhbmRldi1cdTAwM2VjbG9zZV9saXN0KTtcbi1cdFx0fVxuLVx0XHRsaXN0X2RlbChcdTAwMjZjbG9zZV9saXN0KTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4rXHRjYXNlIE5FVERFVl9ET1dOOlxuIFx0Y2FzZSBORVRERVZfVVA6XG4tXHRcdC8qIFB1dCBhbGwgVkxBTnMgZm9yIHRoaXMgZGV2IGluIHRoZSB1cCBzdGF0ZSB0b28uICAqL1xuLVx0XHR2bGFuX2dyb3VwX2Zvcl9lYWNoX2RldihncnAsIGksIHZsYW5kZXYpIHtcbi1cdFx0XHRmbGdzID0gbmV0aWZfZ2V0X2ZsYWdzKHZsYW5kZXYpO1xuLVx0XHRcdGlmIChmbGdzIFx1MDAyNiBJRkZfVVApXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0XHR2bGFuID0gdmxhbl9kZXZfcHJpdih2bGFuZGV2KTtcbi1cdFx0XHRpZiAoISh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfTE9PU0VfQklORElORykpXG4tXHRcdFx0XHRkZXZfY2hhbmdlX2ZsYWdzKHZsYW5kZXYsIGZsZ3MgfCBJRkZfVVAsXG4tXHRcdFx0XHRcdFx0IGV4dGFjayk7XG4tXHRcdFx0dmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShkZXYsIHZsYW5kZXYsIHZsYW4pO1xuLVx0XHR9XG4rXHRcdHZsYW5fZ3JvdXBfZm9yX2VhY2hfZGV2KGdycCwgaSwgdmxhbmRldilcbitcdFx0XHRuZXRkZXZfd29ya19zY2hlZCh2bGFuZGV2LCBWTEFOX1dPUktfTElOS19TVEFURSk7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcbmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaFxuaW5kZXggYzdmZmU1OTFkNTkzNjYuLmM0MWNhYWY5NDA5NWYzIDEwMDY0NFxuLS0tIGEvbmV0LzgwMjFxL3ZsYW4uaFxuKysrIGIvbmV0LzgwMjFxL3ZsYW4uaFxuQEAgLTEyNSw2ICsxMjUsMTcgQEAgc3RhdGljIGlubGluZSBuZXRkZXZfZmVhdHVyZXNfdCB2bGFuX3RubF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYpXG4gaW50IHZsYW5fZmlsdGVyX3B1c2hfdmlkcyhzdHJ1Y3Qgdmxhbl9pbmZvICp2bGFuX2luZm8sIF9fYmUxNiBwcm90byk7XG4gdm9pZCB2bGFuX2ZpbHRlcl9kcm9wX3ZpZHMoc3RydWN0IHZsYW5faW5mbyAqdmxhbl9pbmZvLCBfX2JlMTYgcHJvdG8pO1xuIFxuKy8qIG5ldGRldl93b3JrIGV2ZW50cyBwcm9wYWdhdGVkIGZyb20gdGhlIHJlYWwgZGV2aWNlLCBzZWUgdmxhbl9kZXZfd29yaygpLiAqL1xuK2VudW0ge1xuK1x0VkxBTl9XT1JLX0xJTktfU1RBVEVcdD0gQklUKDApLCAvKiBzeW5jIHVwL2Rvd24gd2l0aCByZWFsX2RldiAqL1xuK1x0VkxBTl9XT1JLX01UVVx0XHQ9IEJJVCgxKSwgLyogY2xhbXAgbXR1IHRvIHJlYWxfZGV2J3MgKi9cbitcdFZMQU5fV09SS19GRUFUVVJFU1x0PSBCSVQoMiksIC8qIHJlLWluaGVyaXQgcmVhbF9kZXYgZmVhdHVyZXMgKi9cbit9O1xuK1xuK3ZvaWQgdmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4pO1xuK1xuIC8qIGZvdW5kIGluIHZsYW5fZGV2LmMgKi9cbiB2b2lkIHZsYW5fZGV2X3NldF9pbmdyZXNzX3ByaW9yaXR5KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICB1MzIgc2tiX3ByaW8sIHUxNiB2bGFuX3ByaW8pO1xuZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2Rldi5jIGIvbmV0LzgwMjFxL3ZsYW5fZGV2LmNcbmluZGV4IDdhYTNhZjhiMTBlYWQwLi5lYzI1NjliM2Y4ZGFjNiAxMDA2NDRcbi0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jXG4rKysgYi9uZXQvODAyMXEvdmxhbl9kZXYuY1xuQEAgLTI3MCw2ICsyNzAsOSBAQCBzdGF0aWMgaW50IHZsYW5fZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdCAgICAhKHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IFZMQU5fRkxBR19MT09TRV9CSU5ESU5HKSlcbiBcdFx0cmV0dXJuIC1FTkVURE9XTjtcbiBcbitcdC8qIFRoZSBleHBsaWNpdCBvcGVuIHN1cGVyc2VkZXMgYW55IGRlZmVycmVkIGxpbmstc3RhdGUgc3luYyAqL1xuK1x0bmV0ZGV2X3dvcmtfY2FuY2VsKGRldiwgVkxBTl9XT1JLX0xJTktfU1RBVEUpO1xuK1xuIFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKGRldi1cdTAwM2VkZXZfYWRkciwgcmVhbF9kZXYtXHUwMDNlZGV2X2FkZHIpIFx1MDAyNlx1MDAyNlxuIFx0ICAgICF2bGFuX2Rldl9pbmhlcml0X2FkZHJlc3MoZGV2LCByZWFsX2RldikpIHtcbiBcdFx0ZXJyID0gZGV2X3VjX2FkZChyZWFsX2RldiwgZGV2LVx1MDAzZWRldl9hZGRyKTtcbkBAIC0zMDAsNiArMzAzLDkgQEAgc3RhdGljIGludCB2bGFuX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3Qgdmxhbl9kZXZfcHJpdiAqdmxhbiA9IHZsYW5fZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW4tXHUwMDNlcmVhbF9kZXY7XG4gXG4rXHQvKiBUaGUgZXhwbGljaXQgY2xvc2Ugc3VwZXJzZWRlcyBhbnkgZGVmZXJyZWQgbGluay1zdGF0ZSBzeW5jICovXG4rXHRuZXRkZXZfd29ya19jYW5jZWwoZGV2LCBWTEFOX1dPUktfTElOS19TVEFURSk7XG4rXG4gXHRkZXZfbWNfdW5zeW5jKHJlYWxfZGV2LCBkZXYpO1xuIFx0ZGV2X3VjX3Vuc3luYyhyZWFsX2RldiwgZGV2KTtcbiBcbkBAIC0xMDE2LDYgKzEwMjIsNTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2bGFuX2V0aHRvb2xfb3BzID0ge1xuIFx0LmdldF90c19pbmZvXHRcdD0gdmxhbl9ldGh0b29sX2dldF90c19pbmZvLFxuIH07XG4gXG4rc3RhdGljIHZvaWQgdmxhbl90cmFuc2Zlcl9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5kZXYpXG4re1xuK1x0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KHZsYW5kZXYpO1xuK1xuK1x0bmV0aWZfaW5oZXJpdF90c29fbWF4KHZsYW5kZXYsIGRldik7XG4rXG4rXHRpZiAodmxhbl9od19vZmZsb2FkX2NhcGFibGUoZGV2LVx1MDAzZWZlYXR1cmVzLCB2bGFuLVx1MDAzZXZsYW5fcHJvdG8pKVxuK1x0XHR2bGFuZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4rXHRlbHNlXG4rXHRcdHZsYW5kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArIFZMQU5fSExFTjtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfRkNPRSlcbitcdHZsYW5kZXYtXHUwMDNlZmNvZV9kZHBfeGlkID0gZGV2LVx1MDAzZWZjb2VfZGRwX3hpZDtcbisjZW5kaWZcbitcbitcdHZsYW5kZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfWE1JVF9EU1RfUkVMRUFTRTtcbitcdHZsYW5kZXYtXHUwMDNlcHJpdl9mbGFncyB8PSAodmxhbi1cdTAwM2VyZWFsX2Rldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNiBJRkZfWE1JVF9EU1RfUkVMRUFTRSk7XG4rXHR2bGFuZGV2LVx1MDAzZWh3X2VuY19mZWF0dXJlcyA9IHZsYW5fdG5sX2ZlYXR1cmVzKHZsYW4tXHUwMDNlcmVhbF9kZXYpO1xuK1xuK1x0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyh2bGFuZGV2KTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdmxhbl9kZXZfd29yayhzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMpXG4re1xuK1x0c3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KHZsYW5kZXYpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbi1cdTAwM2VyZWFsX2RldjtcbitcdGJvb2wgbG9vc2UgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBWTEFOX0ZMQUdfTE9PU0VfQklORElORztcbitcdHVuc2lnbmVkIGludCBmbGdzO1xuK1xuK1x0aWYgKGV2ZW50cyBcdTAwMjYgVkxBTl9XT1JLX0xJTktfU1RBVEUpIHtcbitcdFx0ZmxncyA9IG5ldGlmX2dldF9mbGFncyh2bGFuZGV2KTtcbitcdFx0aWYgKHJlYWxfZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApIHtcbitcdFx0XHRpZiAoIShmbGdzIFx1MDAyNiBJRkZfVVApKSB7XG4rXHRcdFx0XHRpZiAoIWxvb3NlKVxuK1x0XHRcdFx0XHRuZXRpZl9jaGFuZ2VfZmxhZ3ModmxhbmRldixcbitcdFx0XHRcdFx0XHRcdCAgIGZsZ3MgfCBJRkZfVVAsIE5VTEwpO1xuK1x0XHRcdFx0dmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyZWFsX2RldixcbitcdFx0XHRcdFx0XHRcdFx0dmxhbmRldiwgdmxhbik7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2UgaWYgKChmbGdzIFx1MDAyNiBJRkZfVVApIFx1MDAyNlx1MDAyNiAhbG9vc2UpIHtcbitcdFx0XHRuZXRpZl9jaGFuZ2VfZmxhZ3ModmxhbmRldiwgZmxncyBcdTAwMjYgfklGRl9VUCwgTlVMTCk7XG4rXHRcdFx0dmxhbl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShyZWFsX2RldiwgdmxhbmRldiwgdmxhbik7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmICgoZXZlbnRzIFx1MDAyNiBWTEFOX1dPUktfTVRVKSBcdTAwMjZcdTAwMjYgdmxhbmRldi1cdTAwM2VtdHUgXHUwMDNlIHJlYWxfZGV2LVx1MDAzZW10dSlcbitcdFx0bmV0aWZfc2V0X210dSh2bGFuZGV2LCByZWFsX2Rldi1cdTAwM2VtdHUpO1xuK1xuK1x0aWYgKGV2ZW50cyBcdTAwMjYgVkxBTl9XT1JLX0ZFQVRVUkVTKVxuK1x0XHR2bGFuX3RyYW5zZmVyX2ZlYXR1cmVzKHJlYWxfZGV2LCB2bGFuZGV2KTtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bGFuX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX2NoYW5nZV9tdHVcdFx0PSB2bGFuX2Rldl9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19pbml0XHRcdD0gdmxhbl9kZXZfaW5pdCxcbkBAIC0xMDI3LDYgKzEwODYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IHZsYW5fZGV2X3NldF9tYWNfYWRkcmVzcyxcbiBcdC5uZG9fc2V0X3J4X21vZGVcdD0gdmxhbl9kZXZfc2V0X3J4X21vZGUsXG4gXHQubmRvX2NoYW5nZV9yeF9mbGFnc1x0PSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsXG4rXHQubmRvX3dvcmtcdFx0PSB2bGFuX2Rldl93b3JrLFxuIFx0Lm5kb19ldGhfaW9jdGxcdFx0PSB2bGFuX2Rldl9pb2N0bCxcbiBcdC5uZG9fbmVpZ2hfc2V0dXBcdD0gdmxhbl9kZXZfbmVpZ2hfc2V0dXAsXG4gXHQubmRvX2dldF9zdGF0czY0XHQ9IHZsYW5fZGV2X2dldF9zdGF0czY0LFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGVcbmluZGV4IGRjMTdjNWE2MWU5YTRhLi5iM2ZkY2I0ZTM1NWZhNiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL01ha2VmaWxlXG4rKysgYi9uZXQvY29yZS9NYWtlZmlsZVxuQEAgLTEzLDcgKzEzLDcgQEAgb2JqLXlcdFx0ICAgICArPSBkZXYubyBkZXZfYXBpLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFxcXG4gXHRcdFx0bmVpZ2hib3VyLm8gcnRuZXRsaW5rLm8gdXRpbHMubyBsaW5rX3dhdGNoLm8gZmlsdGVyLm8gXFxcbiBcdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG4gXHRcdFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcbi1cdFx0XHRuZXRkZXYtZ2VubC5vIG5ldGRldi1nZW5sLWdlbi5vIGdzby5vXG4rXHRcdFx0bmV0ZGV2LWdlbmwubyBuZXRkZXYtZ2VubC1nZW4ubyBuZXRkZXZfd29yay5vIGdzby5vXG4gXG4gb2JqLSQoQ09ORklHX05FVERFVl9BRERSX0xJU1RfVEVTVCkgKz0gZGV2X2FkZHJfbGlzdHNfdGVzdC5vXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggNWMwMWRmYWE2YzQ0NTAuLjRiM2Q1Y2ZkZjZlMDBmIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtOTgyMiw2ICs5ODIyLDcgQEAgaW50IG5ldGlmX2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4gXHRfX2Rldl9ub3RpZnlfZmxhZ3MoZGV2LCBvbGRfZmxhZ3MsIGNoYW5nZXMsIDAsIE5VTEwpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4rRVhQT1JUX1NZTUJPTChuZXRpZl9jaGFuZ2VfZmxhZ3MpO1xuIFxuIGludCBfX25ldGlmX3NldF9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuQEAgLTEyMDkzLDYgKzEyMDk0LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZXB0eXBlX2FsbCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlcHR5cGVfc3BlY2lmaWMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2LVx1MDAzZW5ldF9ub3RpZmllcl9saXN0KTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUpO1xuICNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG4gXHRoYXNoX2luaXQoZGV2LVx1MDAzZXFkaXNjX2hhc2gpO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5oIGIvbmV0L2NvcmUvZGV2LmhcbmluZGV4IDQxMjFjNTBlN2M4OGJlLi41ZDBiMDMwNWQzYmFhZiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5oXG4rKysgYi9uZXQvY29yZS9kZXYuaFxuQEAgLTE2NywxMCArMTY3LDE5IEBAIGludCBkZXZfY2hhbmdlX2NhcnJpZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcik7XG4gdm9pZCBfX2Rldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgX19kZXZfc2V0X3Byb21pc2N1aXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbmMsIGJvb2wgbm90aWZ5KTtcbiB2b2lkIG5ldGlmX3J4X21vZGVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi1ib29sIG5ldGlmX3J4X21vZGVfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rdm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX3J4X21vZGVfc3luYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiB2b2lkIG5ldGlmX3J4X21vZGVfY2FuY2VsX3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuKy8qIEV2ZW50cyBmb3IgdGhlIGFzeW5jIG5ldGRldiB3b3JrLCB0cmFja2VkIGluIG5ldGRldi1cdTAwM2V3b3JrX2NvcmVfcGVuZGluZy4gKi9cbitlbnVtIG5ldGRldl93b3JrX2NvcmUge1xuK1x0TkVUREVWX1dPUktfUlhfTU9ERVx0PSBCSVQoMCksXHQvKiBydW4gdGhlIHJ4X21vZGUgdXBkYXRlICovXG4rfTtcbitcbit2b2lkIF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KTtcbit1bnNpZ25lZCBsb25nXG4rX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spO1xuK1xuIHZvaWQgX19kZXZfbm90aWZ5X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBvbGRfZmxhZ3MsXG4gXHRcdFx0dW5zaWduZWQgaW50IGdjaGFuZ2VzLCB1MzIgcG9ydGlkLFxuIFx0XHRcdGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoKTtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jIGIvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1xuaW5kZXggZTE3ZjY0YTY1ZTE3YmUuLjA4NTI4Y2EwYThiMzE0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1xuKysrIGIvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1xuQEAgLTEyLDE3ICsxMiwxMCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNja3VuaXQvdmlzaWJpbGl0eS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJkZXYuaFwiXG4gXG4tc3RhdGljIHZvaWQgbmV0ZGV2X3J4X21vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLVxuLXN0YXRpYyBMSVNUX0hFQUQocnhfbW9kZV9saXN0KTtcbi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJ4X21vZGVfbG9jayk7XG4tc3RhdGljIERFQ0xBUkVfV09SSyhyeF9tb2RlX3dvcmssIG5ldGRldl9yeF9tb2RlX3dvcmspO1xuLVxuIC8qXG4gICogR2VuZXJhbCBsaXN0IGhhbmRsaW5nIGZ1bmN0aW9uc1xuICAqL1xuQEAgLTEyODEsNyArMTI3NCw3IEBAIHZvaWQgbmV0aWZfcnhfbW9kZV9jYW5jZWxfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldi1cdTAwM2VyeF9tb2RlX3JldHJ5X2NvdW50ID0gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit2b2lkIG5ldGlmX3J4X21vZGVfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgdWNfc25hcCwgbWNfc25hcCwgdWNfcmVmLCBtY19yZWY7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuQEAgLTEzMzksNDkgKzEzMzIsOSBAQCBzdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZXRkZXZfcnhfbW9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi17XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuLVxuLVx0cnRubF9sb2NrKCk7XG4tXG4tXHR3aGlsZSAodHJ1ZSkge1xuLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2cnhfbW9kZV9sb2NrKTtcbi1cdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cnhfbW9kZV9saXN0KSkge1xuLVx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnJ4X21vZGVfbG9jayk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0ZGV2ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZyeF9tb2RlX2xpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLFxuLVx0XHRcdFx0ICAgICAgIHJ4X21vZGVfbm9kZSk7XG4tXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfbm9kZSk7XG4tXHRcdC8qIFdlIG11c3QgZnJlZSBuZXRkZXYgdHJhY2tlciB1bmRlclxuLVx0XHQgKiB0aGUgc3BpbmxvY2sgcHJvdGVjdGlvbi5cbi1cdFx0ICovXG4tXHRcdG5ldGRldl90cmFja2VyX2ZyZWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV90cmFja2VyKTtcbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhfbW9kZV9sb2NrKTtcbi1cbi1cdFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XG4tXHRcdG5ldGlmX3J4X21vZGVfcnVuKGRldik7XG4tXHRcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tXHRcdC8qIFVzZSBfX2Rldl9wdXQoKSBiZWNhdXNlIG5ldGRldl90cmFja2VyX2ZyZWUoKSB3YXMgYWxyZWFkeVxuLVx0XHQgKiBjYWxsZWQgYWJvdmUuIE11c3QgYmUgYWZ0ZXIgbmV0ZGV2X3VubG9ja19vcHMoKSB0byBwcmV2ZW50XG4tXHRcdCAqIG5ldGRldl9ydW5fdG9kbygpIGZyb20gZnJlZWluZyB0aGUgZGV2aWNlIHdoaWxlIHN0aWxsIGluIHVzZS5cbi1cdFx0ICovXG4tXHRcdF9fZGV2X3B1dChkZXYpO1xuLVx0fVxuLVxuLVx0cnRubF91bmxvY2soKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgbmV0aWZfcnhfbW9kZV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdHNwaW5fbG9ja19iaChcdTAwMjZyeF9tb2RlX2xvY2spO1xuLVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfbm9kZSkpIHtcbi1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9ub2RlLCBcdTAwMjZyeF9tb2RlX2xpc3QpO1xuLVx0XHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuLVx0fVxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhfbW9kZV9sb2NrKTtcbi1cdHNjaGVkdWxlX3dvcmsoXHUwMDI2cnhfbW9kZV93b3JrKTtcbitcdF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZXRpZl9yeF9tb2RlX3JldHJ5KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuQEAgLTEzOTQsNyArMTM0Nyw2IEBAIHN0YXRpYyB2b2lkIG5ldGlmX3J4X21vZGVfcmV0cnkoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4gXG4gdm9pZCBuZXRpZl9yeF9tb2RlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlcnhfbW9kZV9ub2RlKTtcbiBcdF9faHdfYWRkcl9pbml0KFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX2FkZHJfY2FjaGUpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfcmV0cnlfdGltZXIsIG5ldGlmX3J4X21vZGVfcmV0cnksIDApO1xuIH1cbkBAIC0xNDQyLDI0ICsxMzk0LDYgQEAgdm9pZCBkZXZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7XG4gfVxuIFxuLWJvb2wgbmV0aWZfcnhfbW9kZV9jbGVhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLXtcbi1cdGJvb2wgY2xlYW4gPSBmYWxzZTtcbi1cbi1cdHNwaW5fbG9ja19iaChcdTAwMjZyeF9tb2RlX2xvY2spO1xuLVx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX25vZGUpKSB7XG4tXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4X21vZGVfbm9kZSk7XG4tXHRcdGNsZWFuID0gdHJ1ZTtcbi1cdFx0LyogV2UgbXVzdCByZWxlYXNlIG5ldGRldiB0cmFja2VyIHVuZGVyXG4tXHRcdCAqIHRoZSBzcGlubG9jayBwcm90ZWN0aW9uLlxuLVx0XHQgKi9cbi1cdFx0bmV0ZGV2X3RyYWNrZXJfZnJlZShkZXYsIFx1MDAyNmRldi1cdTAwM2VyeF9tb2RlX3RyYWNrZXIpO1xuLVx0fVxuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cnhfbW9kZV9sb2NrKTtcbi1cbi1cdHJldHVybiBjbGVhbjtcbi19XG4tXG4gLyoqXG4gICogbmV0aWZfcnhfbW9kZV9zeW5jKCkgLSBzeW5jIHJ4IG1vZGUgaW5saW5lXG4gICogQGRldjogbmV0d29yayBkZXZpY2VcbkBAIC0xNDczLDExICsxNDA3LDYgQEAgYm9vbCBuZXRpZl9yeF9tb2RlX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gICovXG4gdm9pZCBuZXRpZl9yeF9tb2RlX3N5bmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRpZiAobmV0aWZfcnhfbW9kZV9jbGVhbihkZXYpKSB7XG4rXHRpZiAoX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChkZXYsIE5FVERFVl9XT1JLX1JYX01PREUpKVxuIFx0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuLVx0XHQvKiBVc2UgX19kZXZfcHV0KCkgYmVjYXVzZSBuZXRkZXZfdHJhY2tlcl9mcmVlKCkgd2FzIGFscmVhZHlcbi1cdFx0ICogY2FsbGVkIGluc2lkZSBuZXRpZl9yeF9tb2RlX2NsZWFuKCkuXG4tXHRcdCAqL1xuLVx0XHRfX2Rldl9wdXQoZGV2KTtcbi1cdH1cbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0ZGV2X3dvcmsuYyBiL25ldC9jb3JlL25ldGRldl93b3JrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzEwOWZhZTEzMmFkMThcbi0tLSAvZGV2L251bGxcbisrKyBiL25ldC9jb3JlL25ldGRldl93b3JrLmNcbkBAIC0wLDAgKzEsMTYyIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiZGV2LmhcIlxuK1xuK3N0YXRpYyB2b2lkIG5ldGRldl93b3JrX3Byb2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbitcbisvKiBAbmV0ZGV2X3dvcmtfbG9jayBwcm90ZWN0czpcbisgKiAgLSBAbmV0ZGV2X3dvcmtfbGlzdFxuKyAqICAtIHdpdGhpbiB0aGUgbGlzdCBlbnRyaWVzIChzdHJ1Y3QgbmV0X2RldmljZSBmaWVsZHMpOlxuKyAqXHQtIHdvcmtfbm9kZVxuKyAqXHQtIHdvcmtfdHJhY2tlclxuKyAqXHQtIHdvcmtfcGVuZGluZ1xuKyAqXHQtIHdvcmtfY29yZV9wZW5kaW5nXG4rICovXG4rc3RhdGljIExJU1RfSEVBRChuZXRkZXZfd29ya19saXN0KTtcbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5ldGRldl93b3JrX2xvY2spO1xuK3N0YXRpYyBERUNMQVJFX1dPUksobmV0ZGV2X3dvcmssIG5ldGRldl93b3JrX3Byb2MpO1xuK1xuK3N0YXRpYyB2b2lkIG5ldGRldl93b3JrX2VucXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4rXHRcdFx0XHR1bnNpZ25lZCBsb25nIGNvcmUpXG4re1xuK1x0aWYgKCFldmVudHMgXHUwMDI2XHUwMDI2ICFjb3JlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKSkge1xuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRldi1cdTAwM2V3b3JrX25vZGUsIFx1MDAyNm5ldGRldl93b3JrX2xpc3QpO1xuK1x0XHRuZXRkZXZfaG9sZChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuK1x0fVxuK1x0ZGV2LVx1MDAzZXdvcmtfcGVuZGluZyB8PSBldmVudHM7XG4rXHRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcgfD0gY29yZTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuK1xuK1x0c2NoZWR1bGVfd29yayhcdTAwMjZuZXRkZXZfd29yayk7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nXG4rbmV0ZGV2X3dvcmtfZGVxdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nICpwZW5kaW5nLFxuK1x0XHQgICAgdW5zaWduZWQgbG9uZyBtYXNrKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZXZlbnRzO1xuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldGRldl93b3JrX2xvY2spO1xuK1x0ZXZlbnRzID0gKnBlbmRpbmcgXHUwMDI2IG1hc2s7XG4rXHQqcGVuZGluZyBcdTAwMjY9IH5ldmVudHM7XG4rXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWRldi1cdTAwM2V3b3JrX3BlbmRpbmcgXHUwMDI2XHUwMDI2ICFkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKTtcbitcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldi1cdTAwM2V3b3JrX3RyYWNrZXIpO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4rXG4rXHRyZXR1cm4gZXZlbnRzO1xuK31cbitcbit2b2lkIG5ldGRldl93b3JrX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxuK3tcbitcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCBldmVudHMsIDApO1xuK31cbitFWFBPUlRfU1lNQk9MKG5ldGRldl93b3JrX3NjaGVkKTtcbitcbisvKipcbisgKiBuZXRkZXZfd29ya19jYW5jZWwoKSAtIGNhbmNlbCBzZWxlY3RlZCB3b3JrIGZvciBhIG5ldGRldlxuKyAqIEBkZXY6IG5ldF9kZXZpY2VcbisgKiBAbWFzazogZXZlbnRzIHRvIGNhbmNlbFxuKyAqXG4rICogQ2xlYXIgQG1hc2sgZnJvbSB0aGUgZGV2aWNlJ3Mgd29yayBwZW5kaW5nIG1hc2suIElmIG5vIHdvcmsgaXMgbGVmdCBwZW5kaW5nXG4rICogdGhlIGRldmljZSBpcyBkZXF1ZXVlZCBhbmQgaXRzIG5kb193b3JrIHdvbid0IGJlIGNhbGxlZC5cbisgKlxuKyAqIE5vIGV4cGVjdGF0aW9ucyBvbiBsb2NraW5nLCBidXQgYWxzbyBubyBndWFyYW50ZWVzIHByb3ZpZGVkLiBJZiB0aGUgY2FsbGVyXG4rICogd2FudHMgdG8gdG91Y2ggQGRldiBhZnRlcndhcmRzIChlLmcuIGNhbGwgdGhlIHdvcmsgdGhhdCBnb3QgY2FuY2VsZWQpXG4rICogdGhleSBoYXZlIHRvIGVuc3VyZSBAZGV2IGRvZXMgbm90IGdldCBmcmVlZC5cbisgKlxuKyAqIFJldHVybnM6IHRoZSBzdWJzZXQgb2YgQG1hc2sgdGhhdCB3YXMgYWN0dWFsbHkgcGVuZGluZywgc28gdGhlIGNhbGxlciBjYW4gcnVuXG4rICogdGhvc2UgZXZlbnRzIGlubGluZS5cbisgKi9cbit1bnNpZ25lZCBsb25nIG5ldGRldl93b3JrX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXG4re1xuK1x0cmV0dXJuIG5ldGRldl93b3JrX2RlcXVldWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya19wZW5kaW5nLCBtYXNrKTtcbit9XG4rRVhQT1JUX1NZTUJPTChuZXRkZXZfd29ya19jYW5jZWwpO1xuK1xuK3ZvaWQgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnRzKVxuK3tcbitcdG5ldGRldl93b3JrX2VucXVldWUoZGV2LCAwLCBldmVudHMpO1xuK31cbitcbit1bnNpZ25lZCBsb25nXG4rX19uZXRkZXZfd29ya19jb3JlX2NhbmNlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIG1hc2spXG4re1xuK1x0cmV0dXJuIG5ldGRldl93b3JrX2RlcXVldWUoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcsIG1hc2spO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZXRkZXZfd29ya19ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudHMsXG4rXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgY29yZSlcbit7XG4rXHRpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChjb3JlIFx1MDAyNiBORVRERVZfV09SS19SWF9NT0RFKVxuK1x0XHRuZXRpZl9yeF9tb2RlX3J1bihkZXYpO1xuK1x0aWYgKGV2ZW50cyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3dvcmspXG4rXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb193b3JrKGRldiwgZXZlbnRzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbmV0ZGV2X3dvcmtfcHJvYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0cnRubF9sb2NrKCk7XG4rXG4rXHR3aGlsZSAodHJ1ZSkge1xuK1x0XHR1bnNpZ25lZCBsb25nIGV2ZW50cyA9IDAsIGNvcmUgPSAwO1xuK1x0XHRuZXRkZXZpY2VfdHJhY2tlciB0cmFja2VyO1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuK1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4rXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm5ldGRldl93b3JrX2xpc3QpKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0ZGV2ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXRkZXZfd29ya19saXN0LCBzdHJ1Y3QgbmV0X2RldmljZSxcbitcdFx0XHRcdCAgICAgICB3b3JrX25vZGUpO1xuK1x0XHQvKiBUYWtlIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzbyBAZGV2IGNhbid0IGJlIGZyZWVkIHdoaWxlIHdlXG4rXHRcdCAqIGRyb3AgdGhlIGxvY2sgdG8gZ3JhYiBpdHMgb3BzIGxvY2s7IHRoZSB3b3JrIHJlZmVyZW5jZSBpc1xuK1x0XHQgKiBvbmx5IHJlbGVhc2VkIG9uY2Ugd2UgY2xhaW0gdGhlIHdvcmsgYmVsb3cuXG4rXHRcdCAqIFRoZSByZS1sb2NraW5nIGRhbmNlIGlzIHRvIGVuc3VyZSB0aGF0IG9wcyBsb2NrIGlzIGVub3VnaFxuK1x0XHQgKiB0byBlbnN1cmUgY2FuY2VsaW5nIHdvcmsgaXMgbm90IHJhY3kgd2l0aCBkZXF1ZXVlLlxuK1x0XHQgKi9cbitcdFx0bmV0ZGV2X2hvbGQoZGV2LCBcdTAwMjZ0cmFja2VyLCBHRlBfQVRPTUlDKTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4rXG4rXHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmV0ZGV2X3dvcmtfbG9jayk7XG4rXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZkZXYtXHUwMDNld29ya19ub2RlKSkge1xuK1x0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXdvcmtfbm9kZSk7XG4rXHRcdFx0Y29yZSA9IGRldi1cdTAwM2V3b3JrX2NvcmVfcGVuZGluZztcbitcdFx0XHRkZXYtXHUwMDNld29ya19jb3JlX3BlbmRpbmcgPSAwO1xuK1x0XHRcdGV2ZW50cyA9IGRldi1cdTAwM2V3b3JrX3BlbmRpbmc7XG4rXHRcdFx0ZGV2LVx1MDAzZXdvcmtfcGVuZGluZyA9IDA7XG4rXHRcdFx0LyogV2UgdG9vayBhbm90aGVyIHJlZiBhYm92ZSAqL1xuK1x0XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXYtXHUwMDNld29ya190cmFja2VyKTtcbitcbitcdFx0XHRpZiAoIWRldl9pc2FsaXZlKGRldikpXG4rXHRcdFx0XHRjb3JlID0gZXZlbnRzID0gMDtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZXRkZXZfd29ya19sb2NrKTtcbitcbitcdFx0bmV0ZGV2X3dvcmtfcnVuKGRldiwgZXZlbnRzLCBjb3JlKTtcbitcdFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbitcbitcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNnRyYWNrZXIpO1xuK1x0fVxuK1xuK1x0cnRubF91bmxvY2soKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcbmluZGV4IGJlMTMwYmY1ODVhNDE5Li42MzY0Y2EwMjY0MmQ2OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvTWFrZWZpbGVcbkBAIC0xMyw2ICsxMyw3IEBAIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGJvbmRfb3B0aW9ucy5zaCBcXFxuIFx0Ym9uZF9wYXNzaXZlX2xhY3Auc2ggXFxcbiBcdGJvbmRfc3RhY2tlZF9oZWFkZXJfcGFyc2Uuc2ggXFxcbitcdGJvbmRfdmxhbl9yZWFsX2Rldi5zaCBcXFxuIFx0ZGV2X2FkZHJfbGlzdHMuc2ggXFxcbiBcdG1vZGUtMS1yZWNvdmVyeS11cGRlbGF5LnNoIFxcXG4gXHRtb2RlLTItcmVjb3ZlcnktdXBkZWxheS5zaCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF92bGFuX3JlYWxfZGV2LnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3ZsYW5fcmVhbF9kZXYuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTQyZDlmZmM0ODE5Zjlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF92bGFuX3JlYWxfZGV2LnNoXG5AQCAtMCwwICsxLDE4MCBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFRlc3QgcHJvcGFnYXRpb24gb2YgYSByZWFsIGRldmljZSdzIHN0YXRlIHRvIHRoZSBWTEFOcyBzdGFja2VkIG9uIHRvcCBvZiBpdFxuKyMgd2hlbiB0aGUgcmVhbCBkZXZpY2UgaXMgKG9yIGJlY29tZXMpIGEgYm9uZCBtZW1iZXIuXG4rI1xuKyMgVGhlIGtlcm5lbCBtaXJyb3JzIGEgcmVhbCBkZXZpY2UncyBVUC9ET1dOLCBNVFUgYW5kIGZlYXR1cmUgY2hhbmdlcyBvbnRvIGl0c1xuKyMgVkxBTnMuICBUaGlzIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkgKG5ldGRldl93b3JrKTogZG9pbmcgaXQgc3luY2hyb25vdXNseSBmcm9tXG4rIyB0aGUgcmVhbCBkZXZpY2UncyBub3RpZmllciBjb3VsZCBkZWFkbG9jay4gIElmIHRoZSByZWFsIGRldmljZSBpcyBicm91Z2h0IHVwXG4rIyB3aGlsZSBlbnNsYXZlZCB0byBhIGJvbmQgLSBzbyBpdHMgaW5zdGFuY2UgbG9jayBpcyBoZWxkIGFjcm9zcyBORVRERVZfVVAgLSBhbmRcbisjIGEgVkxBTiBvbiB0b3Agb2YgaXQgaXMgaXRzZWxmIGEgYm9uZCBtZW1iZXIsIHRoZSBzeW5jaHJvbm91cyBwcm9wYWdhdGlvblxuKyMgcmUtZW50ZXJlZCB0aGUgc3RhY2sgYW5kIHRyaWVkIHRvIHRha2UgdGhlIHNhbWUgaW5zdGFuY2UgbG9jayBhZ2Fpbi5cbisjXG4rIyBDb3ZlciBib3RoIGhhbHZlczpcbisjICAtIHRoZSBkZWZlcnJlZCBVUC9ET1dOLCBNVFUgYW5kIGZlYXR1cmUgcHJvcGFnYXRpb24gYWN0dWFsbHkgbGFuZHMgb24gdGhlXG4rIyAgICBWTEFOIChsaW5rIHN0YXRlIGFuZCBNVFUgdXNlIGFuIG9wcy1sb2NrZWQgZHVtbXksIGkuZS4gdGhlIGRlZmVycmFsIHBhdGgpLFxuKyMgIC0gdGhlIGRlYWRsb2NrLXByb25lIHRvcG9sb2d5IC0gYSBWTEFOIG9uIGEgZHVtbXksIHdpdGggdGhlIFZMQU4gYW5kIHRoZVxuKyMgICAgZHVtbXkgZWFjaCBlbnNsYXZlZCB0byBhIGRpZmZlcmVudCBib25kIC0gY2FuIGJlIGJ1aWx0IHdpdGhvdXQgaGFuZ2luZy5cbitcbitBTExfVEVTVFM9XCJcbitcdHZsYW5fbGlua19zdGF0ZVxuK1x0dmxhbl9tdHVcbitcdHZsYW5fZmVhdHVyZXNcbitcdHZsYW5fcmVhbF9kZXZfZW5zbGF2ZVxuK1wiXG4rXG4rUkVRVUlSRV9NWj1ub1xuK05VTV9ORVRJRlM9MFxuK2xpYl9kaXI9JChkaXJuYW1lIFwiJDBcIilcbitzb3VyY2UgXCIkbGliX2RpclwiLy4uLy4uLy4uL25ldC9mb3J3YXJkaW5nL2xpYi5zaFxuK1xuKyMgUmV0dXJuIDAgaWYgJGRldiBpbiBuZXRucyAkbnMgaGFzIGZsYWcgJGZsYWcgc2V0IChlLmcuIFVQKSBpbiBpdHMgXHUwMDNjLi4uXHUwMDNlIGZsYWdzLlxuK2xpbmtfaGFzX2ZsYWcoKVxuK3tcbitcdGxvY2FsIG5zPSQxIGRldj0kMiBmbGFnPSQzXG4rXG4rXHRpcCAtbiBcIiRuc1wiIGxpbmsgc2hvdyBkZXYgXCIkZGV2XCIgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXEgXCJbXHUwMDNjLF0ke2ZsYWd9WyxcdTAwM2VdXCJcbit9XG4rXG4rbGlua19sYWNrc19mbGFnKClcbit7XG4rXHQhIGxpbmtfaGFzX2ZsYWcgXCIkQFwiXG4rfVxuK1xuK2xpbmtfbXR1X2lzKClcbit7XG4rXHRsb2NhbCBucz0kMSBkZXY9JDIgd2FudD0kMyBjdXJcbitcbitcdGN1cj0kKGlwIC1uIFwiJG5zXCIgbGluayBzaG93IGRldiBcIiRkZXZcIiAyXHUwMDNlL2Rldi9udWxsIHwgXFxcbitcdFx0c2VkIC1uICdzLy4qIG10dSBcXChbMC05XVxcK1xcKS4qL1xcMS9wJylcbitcdFsgXCIkY3VyXCIgPSBcIiR3YW50XCIgXVxuK31cbitcbit2bGFuX2ZlYXR1cmVfaXMoKVxuK3tcbitcdGxvY2FsIG5zPSQxIGRldj0kMiBmZWF0dXJlPSQzIHZhbHVlPSQ0XG4rXG4rXHRpcCBuZXRucyBleGVjIFwiJG5zXCIgZXRodG9vbCAtayBcIiRkZXZcIiAyXHUwMDNlL2Rldi9udWxsIHwgXFxcbitcdFx0Z3JlcCAtcSBcIl4kZmVhdHVyZTogJHZhbHVlXCJcbit9XG4rXG4rbGlua19oYXNfbWFzdGVyKClcbit7XG4rXHRsb2NhbCBucz0kMSBkZXY9JDIgbWFzdGVyPSQzXG4rXG4rXHRpcCAtbiBcIiRuc1wiIC1vIGxpbmsgc2hvdyBkZXYgXCIkZGV2XCIgMlx1MDAzZS9kZXYvbnVsbCB8IGdyZXAgLXEgXCJtYXN0ZXIgJG1hc3RlclwiXG4rfVxuK1xuK3ZsYW5fbGlua19zdGF0ZSgpXG4re1xuK1x0UkVUPTBcbitcbitcdGlwIC1uIFwiJE5TXCIgbGluayBhZGQgbHNfZHVtbXkgdHlwZSBkdW1teVxuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGFkZCBsaW5rIGxzX2R1bW15IG5hbWUgbHNfdmxhbiB0eXBlIHZsYW4gaWQgMTAwXG4rXG4rXHQjIEJyaW5naW5nIHRoZSByZWFsIGRldmljZSB1cCBtdXN0IHByb3BhZ2F0ZSBVUCB0byB0aGUgVkxBTi5cbitcdGlwIC1uIFwiJE5TXCIgbGluayBzZXQgbHNfZHVtbXkgdXBcbitcdGJ1c3l3YWl0IFwiJEJVU1lXQUlUX1RJTUVPVVRcIiBsaW5rX2hhc19mbGFnIFwiJE5TXCIgbHNfdmxhbiBVUFxuK1x0Y2hlY2tfZXJyICQ/IFwiVkxBTiBkaWQgbm90IGdvIFVQIGFmdGVyIHRoZSByZWFsIGRldmljZSB3ZW50IFVQXCJcbitcbitcdCMgLi4uIGFuZCBsaWtld2lzZSBmb3IgRE9XTi5cbitcdGlwIC1uIFwiJE5TXCIgbGluayBzZXQgbHNfZHVtbXkgZG93blxuK1x0YnVzeXdhaXQgXCIkQlVTWVdBSVRfVElNRU9VVFwiIGxpbmtfbGFja3NfZmxhZyBcIiROU1wiIGxzX3ZsYW4gVVBcbitcdGNoZWNrX2VyciAkPyBcIlZMQU4gZGlkIG5vdCBnbyBET1dOIGFmdGVyIHRoZSByZWFsIGRldmljZSB3ZW50IERPV05cIlxuK1xuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGRlbCBsc192bGFuXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgZGVsIGxzX2R1bW15XG4rXG4rXHRsb2dfdGVzdCBcIlZMQU4gbGluayBzdGF0ZSBmb2xsb3dzIHRoZSByZWFsIGRldmljZVwiXG4rfVxuK1xuK3ZsYW5fbXR1KClcbit7XG4rXHRSRVQ9MFxuK1xuK1x0IyBUaGUgVkxBTiBpbmhlcml0cyB0aGUgcmVhbCBkZXZpY2UncyBNVFUgKDIwMDApIGF0IGNyZWF0aW9uIHRpbWUuXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgYWRkIG10dV9kdW1teSBtdHUgMjAwMCB0eXBlIGR1bW15XG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgYWRkIGxpbmsgbXR1X2R1bW15IG5hbWUgbXR1X3ZsYW4gdHlwZSB2bGFuIGlkIDEwMFxuK1xuK1x0IyBTaHJpbmtpbmcgdGhlIHJlYWwgZGV2aWNlJ3MgTVRVIG11c3QgY2xhbXAgdGhlIFZMQU4ncyBNVFUuXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgc2V0IG10dV9kdW1teSBtdHUgMTUwMFxuK1x0YnVzeXdhaXQgXCIkQlVTWVdBSVRfVElNRU9VVFwiIGxpbmtfbXR1X2lzIFwiJE5TXCIgbXR1X3ZsYW4gMTUwMFxuK1x0Y2hlY2tfZXJyICQ/IFwiVkxBTiBNVFUgbm90IGNsYW1wZWQgYWZ0ZXIgdGhlIHJlYWwgZGV2aWNlJ3MgTVRVIHNocmFua1wiXG4rXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgZGVsIG10dV92bGFuXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgZGVsIG10dV9kdW1teVxuK1xuK1x0bG9nX3Rlc3QgXCJWTEFOIE1UVSBjbGFtcGVkIHRvIHRoZSByZWFsIGRldmljZVwiXG4rfVxuK1xuK3ZsYW5fZmVhdHVyZXMoKVxuK3tcbitcdFJFVD0wXG4rXG4rXHQjIFVzZSB2ZXRoIGFzIHRoZSByZWFsIGRldmljZTogdW5saWtlIGR1bW15IGl0IGV4cG9ydHMgdmxhbl9mZWF0dXJlcywgc29cbitcdCMgdGhlIFZMQU4gYWN0dWFsbHkgaW5oZXJpdHMgYSB0b2dnbGVhYmxlIG9mZmxvYWQgdG8gYXNzZXJ0IG9uLlxuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGFkZCBmdF92ZXRoIHR5cGUgdmV0aCBwZWVyIG5hbWUgZnRfdmV0aF9wclxuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGFkZCBsaW5rIGZ0X3ZldGggbmFtZSBmdF92bGFuIHR5cGUgdmxhbiBpZCAxMDBcbitcbitcdHZsYW5fZmVhdHVyZV9pcyBcIiROU1wiIGZ0X3ZsYW4gc2NhdHRlci1nYXRoZXIgb25cbitcdGNoZWNrX2VyciAkPyBcIlZMQU4gZGlkIG5vdCBpbmhlcml0IHNjYXR0ZXItZ2F0aGVyIGZyb20gdGhlIHJlYWwgZGV2aWNlXCJcbitcbitcdCMgVG9nZ2xpbmcgdGhlIG9mZmxvYWQgb24gdGhlIHJlYWwgZGV2aWNlIG11c3QgcHJvcGFnYXRlIHRvIHRoZSBWTEFOLlxuK1x0aXAgbmV0bnMgZXhlYyBcIiROU1wiIGV0aHRvb2wgLUsgZnRfdmV0aCBzZyBvZmZcbitcdGJ1c3l3YWl0IFwiJEJVU1lXQUlUX1RJTUVPVVRcIiBcXFxuK1x0XHR2bGFuX2ZlYXR1cmVfaXMgXCIkTlNcIiBmdF92bGFuIHNjYXR0ZXItZ2F0aGVyIG9mZlxuK1x0Y2hlY2tfZXJyICQ/IFwiVkxBTiBzY2F0dGVyLWdhdGhlciBzdGlsbCBvbiBhZnRlciBkaXNhYmxpbmcgaXQgb24gcmVhbCBkZXZcIlxuK1xuK1x0aXAgbmV0bnMgZXhlYyBcIiROU1wiIGV0aHRvb2wgLUsgZnRfdmV0aCBzZyBvblxuK1x0YnVzeXdhaXQgXCIkQlVTWVdBSVRfVElNRU9VVFwiIFxcXG4rXHRcdHZsYW5fZmVhdHVyZV9pcyBcIiROU1wiIGZ0X3ZsYW4gc2NhdHRlci1nYXRoZXIgb25cbitcdGNoZWNrX2VyciAkPyBcIlZMQU4gc2NhdHRlci1nYXRoZXIgc3RpbGwgb2ZmIGFmdGVyIGVuYWJsaW5nIGl0IG9uIHJlYWwgZGV2XCJcbitcbitcdGlwIC1uIFwiJE5TXCIgbGluayBkZWwgZnRfdmxhblxuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGRlbCBmdF92ZXRoXG4rXG4rXHRsb2dfdGVzdCBcIlZMQU4gZmVhdHVyZXMgZm9sbG93IHRoZSByZWFsIGRldmljZVwiXG4rfVxuK1xuK3ZsYW5fcmVhbF9kZXZfZW5zbGF2ZSgpXG4re1xuK1x0UkVUPTBcbitcbitcdCMgZHVtbXkgXHUwMDNjLSBWTEFOIC1cdTAwM2UgYm9uZDAsIHRoZW4gZW5zbGF2ZSB0aGUgZHVtbXkgaXRzZWxmIHRvIGJvbmQxLiAgVGhlXG4rXHQjIGxhc3Qgc3RlcCBicmluZ3MgdGhlIGR1bW15IHVwIHVuZGVyIGJvbmQxJ3MgaW5zdGFuY2UgbG9jaywgd2hpY2ggdXNlZFxuK1x0IyB0byBkZWFkbG9jayB3aGlsZSBzeW5jaHJvbm91c2x5IHByb3BhZ2F0aW5nIFVQIHRvIHRoZSAoYm9uZC1lbnNsYXZlZClcbitcdCMgVkxBTiBvbiB0b3AuXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgYWRkIGRsX2R1bW15IHR5cGUgZHVtbXlcbitcdGlwIC1uIFwiJE5TXCIgbGluayBzZXQgZGxfZHVtbXkgdXBcbitcdGlwIC1uIFwiJE5TXCIgbGluayBhZGQgbGluayBkbF9kdW1teSBuYW1lIGRsX3ZsYW4gdHlwZSB2bGFuIGlkIDEwMFxuK1xuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGFkZCBkbF9ib25kMCB0eXBlIGJvbmQgbW9kZSBhY3RpdmUtYmFja3VwXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgc2V0IGRsX3ZsYW4gZG93blxuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIHNldCBkbF92bGFuIG1hc3RlciBkbF9ib25kMFxuK1x0Y2hlY2tfZXJyICQ/IFwiY291bGQgbm90IGVuc2xhdmUgdGhlIFZMQU4gdG8gYm9uZDBcIlxuK1xuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGFkZCBkbF9ib25kMSB0eXBlIGJvbmQgbW9kZSBhY3RpdmUtYmFja3VwXG4rXHRpcCAtbiBcIiROU1wiIGxpbmsgc2V0IGRsX2R1bW15IGRvd25cbitcdGlwIC1uIFwiJE5TXCIgbGluayBzZXQgZGxfZHVtbXkgbWFzdGVyIGRsX2JvbmQxXG4rXHRjaGVja19lcnIgJD8gXCJjb3VsZCBub3QgZW5zbGF2ZSB0aGUgcmVhbCBkZXZpY2UgdG8gYm9uZDFcIlxuK1xuK1x0IyBJZiB3ZSBnb3QgaGVyZSB0aGUga2VybmVsIGRpZCBub3QgZGVhZGxvY2s7IG1ha2Ugc3VyZSBpdCBpcyBzdGlsbFxuK1x0IyByZXNwb25zaXZlIGFuZCB0aGUgZW5zbGF2ZSByZWFsbHkgdG9vayBlZmZlY3QuXG4rXHRsaW5rX2hhc19tYXN0ZXIgXCIkTlNcIiBkbF9kdW1teSBkbF9ib25kMVxuK1x0Y2hlY2tfZXJyICQ/IFwicmVhbCBkZXZpY2Ugbm90IGVuc2xhdmVkIHRvIGJvbmQxXCJcbitcbitcdGlwIC1uIFwiJE5TXCIgbGluayBkZWwgZGxfYm9uZDFcbitcdGlwIC1uIFwiJE5TXCIgbGluayBkZWwgZGxfYm9uZDBcbitcdGlwIC1uIFwiJE5TXCIgbGluayBkZWwgZGxfdmxhblxuK1x0aXAgLW4gXCIkTlNcIiBsaW5rIGRlbCBkbF9kdW1teVxuK1xuK1x0bG9nX3Rlc3QgXCJWTEFOIHJlYWwgZGV2aWNlIGVuc2xhdmVkIHRvIGEgc2Vjb25kIGJvbmRcIlxuK31cbitcbitzZXR1cF9ucyBOU1xuK3RyYXAgJ2NsZWFudXBfbnMgJE5TJyBFWElUXG4rXG4rdGVzdHNfcnVuXG4rXG4rZXhpdCBcIiRFWElUX1NUQVRVU1wiXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxODo0NToxOS41Nzk5ODgzOTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mjg2OTAyODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGZvciBEZWZlcnJlZCBOZXR3b3JrIERldmljZSBXb3JrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlLCBhbmQgaXQncyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIG5ldHdvcmsgZGV2aWNlIGV2ZW50cywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgVkxBTnMgYW5kIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4gVGhlIGdvYWwgaGVyZSBpcyB0byBpbnRyb2R1Y2UgYSBkZWZlcnJlZCB3b3JrIG1lY2hhbmlzbSB0byBhdm9pZCBzb21lIG5hc3R5IHBvdGVudGlhbCBkZWFkbG9ja3MgdGhhdCBjYW4gYXJpc2UgZnJvbSBuZXN0ZWQgbm90aWZpY2F0aW9ucywgcGFydGljdWxhcmx5IGFyb3VuZCB0aGluZ3MgbGlrZSBgTkVUREVWX0RPV05gLCBgTkVUREVWX1VQYCwgYE5FVERFVl9DSEFOR0VNVFVgLCBhbmQgYE5FVERFVl9GRUFUX0NIQU5HRWAuIEVzc2VudGlhbGx5LCB3ZSdyZSByZXBsYWNpbmcgdGhlIHN5bmNocm9ub3VzIGV4ZWN1dGlvbiB3aXRoIGFzeW5jaHJvbm91cyB3b3JrIHRvIGJlIGRvbmUgbGF0ZXIuXG5cblRoZSBjaGFuZ2VzIGFyZSBmYWlybHkgd2lkZXNwcmVhZCwgdG91Y2hpbmcgZmlsZXMgaW4gYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgLCB2YXJpb3VzIFZMQU4tcmVsYXRlZCBmaWxlcyAoYHZsYW4uY2AsIGB2bGFuLmhgLCBgdmxhbl9kZXYuY2ApLCBjb3JlIG5ldHdvcmtpbmcgY29tcG9uZW50cyAoYGRldi5jYCwgYGRldi5oYCwgYGRldl9hZGRyX2xpc3RzLmNgLCBgTWFrZWZpbGVgKSwgYW5kIGV2ZW4gYSBuZXcgZmlsZSBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZGVmZXJyZWQgd29yayAoYG5ldGRldl93b3JrLmNgKSDigJMgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIGEgbmV3IHNlbGZ0ZXN0IHNjcmlwdCwgYGJvbmRfdmxhbl9yZWFsX2Rldi5zaGAsIHdoaWNoIGlzIGEgZ29vZCBzaWduOyB0aGF0J3MgZ3JlYXQgZm9yIHZlcmlmeWluZyB0aGF0IHRoZXNlIGNoYW5nZXMgd29yayBhcyBpbnRlbmRlZC5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgZ2l2ZW4gaXRzIGltcGFjdCBvbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLCB0aGlzIHBhdGNoIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nIGFuZCBmdXJ0aGVyIHNjcnV0aW55LiBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgY29yZSBzeW1ib2xzIGludm9sdmVkLiBJIHNlZSBhIGZldyBrZXkgZnVuY3Rpb25zOiBgbmV0ZGV2X3dvcmtfc2NoZWRgLCBgbmV0ZGV2X3dvcmtfY2FuY2VsYCwgYF9fbmV0ZGV2X3dvcmtfY29yZV9zY2hlZGAsIGBfX25ldGRldl93b3JrX2NvcmVfY2FuY2VsYCwgYG5ldGRldl93b3JrX3J1bmAsIGBuZXRkZXZfd29ya19wcm9jYCwgYW5kIG9mIGNvdXJzZSB0aGUgVkxBTi1zcGVjaWZpYyBgdmxhbl9kZXZfd29ya2AuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5cG9pbnQgdG8gbG9vayBmb3IgY2FsbGVycyBhbmQgdGhlaXIgYmVoYXZpb3IuXG5cbkkgd2FudCB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24uIEkga25vdyB0aGUgY2hhbmdlcyBhcmUgbW9zdGx5IGluIGBuZXQvY29yZS9gIGFuZCBgbmV0LzgwMjFxL2AuIGBuZXQvY29yZS9gIGlzIHByZXR0eSBtdWNoIGFsd2F5cyBpbmNsdWRlZCwgYnV0IHRoZSBWTEFOIGNvZGUgaXMgZ29pbmcgdG8gZGVwZW5kIG9uIGBDT05GSUdfVkxBTl84MDIxUWAuIEkgc2hvdWxkIHZlcmlmeSB0aGF0IHRoYXQncyB0aGUgb25seSByZWxldmFudCBjb25maWcsIHNvIEknbGwgZG91YmxlLWNoZWNrIGBuZXQvODAyMXEvS2NvbmZpZ2AgYW5kIGBuZXQvTWFrZWZpbGVgIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE4OjQ1OjI4Ljg2Njg5MzU2NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ3NTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJWTEFOXzgwMjFRXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC84MDIxcS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0LzgwMjFxL0tjb25maWctNS1cXG5uZXQvODAyMXEvS2NvbmZpZzo2OmNvbmZpZyBWTEFOXzgwMjFRXFxubmV0LzgwMjFxL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFRLzgwMi4xYWQgVkxBTiBTdXBwb3J0XFxcIlxcbi0tXFxubmV0LzgwMjFxL0tjb25maWctMjEtXFxubmV0LzgwMjFxL0tjb25maWc6MjI6Y29uZmlnIFZMQU5fODAyMVFfR1ZSUFxcbm5ldC84MDIxcS9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkdWUlAgKEdBUlAgVkxBTiBSZWdpc3RyYXRpb24gUHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxubmV0LzgwMjFxL0tjb25maWc6MjQ6XFx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXFxubmV0LzgwMjFxL0tjb25maWctMjUtXFx0c2VsZWN0IEdBUlBcXG4tLVxcbm5ldC84MDIxcS9LY29uZmlnLTMxLVxcbm5ldC84MDIxcS9LY29uZmlnOjMyOmNvbmZpZyBWTEFOXzgwMjFRX01WUlBcXG5uZXQvODAyMXEvS2NvbmZpZy0zMy1cXHRib29sIFxcXCJNVlJQIChNdWx0aXBsZSBWTEFOIFJlZ2lzdHJhdGlvbiBQcm90b2NvbCkgc3VwcG9ydFxcXCJcXG5uZXQvODAyMXEvS2NvbmZpZzozNDpcXHRkZXBlbmRzIG9uIFZMQU5fODAyMVFcXG5uZXQvODAyMXEvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTVJQXFxuLS1cXG5uZXQvODAyMXEvTWFrZWZpbGUtNC0jXFxubmV0LzgwMjFxL01ha2VmaWxlOjU6b2JqLSQoc3Vic3QgbSx5LCQoQ09ORklHX1ZMQU5fODAyMVEpKVxcdCs9IHZsYW5fY29yZS5vXFxubmV0LzgwMjFxL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1ZMQU5fODAyMVEpXFx0XFx0Kz0gODAyMXEub1xcbm5ldC84MDIxcS9NYWtlZmlsZS03LVxcbm5ldC84MDIxcS9NYWtlZmlsZS04LTgwMjFxLXlcXHRcXHRcXHRcXHRcXHQ6PSB2bGFuLm8gdmxhbl9kZXYubyB2bGFuX25ldGxpbmsub1xcbm5ldC84MDIxcS9NYWtlZmlsZTo5OjgwMjFxLSQoQ09ORklHX1ZMQU5fODAyMVFfR1ZSUClcXHRcXHQrPSB2bGFuX2d2cnAub1xcbm5ldC84MDIxcS9NYWtlZmlsZToxMDo4MDIxcS0kKENPTkZJR19WTEFOXzgwMjFRX01WUlApXFx0XFx0Kz0gdmxhbl9tdnJwLm9cXG5uZXQvODAyMXEvTWFrZWZpbGUtMTEtODAyMXEtJChDT05GSUdfUFJPQ19GUylcXHRcXHRcXHQrPSB2bGFucHJvYy5vXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5oPTE1OD1zdGF0aWMgaW5saW5lIHUzMiB2bGFuX2dldF9pbmdyZXNzX3ByaW9yaXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvODAyMXEvdmxhbi5oLTE2NS1cXG5uZXQvODAyMXEvdmxhbi5oOjE2NjojaWZkZWYgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUFxcbm5ldC84MDIxcS92bGFuLmgtMTY3LWludCB2bGFuX2d2cnBfcmVxdWVzdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi0tXFxubmV0LzgwMjFxL3ZsYW4uaD0xNzk9c3RhdGljIGlubGluZSB2b2lkIHZsYW5fZ3ZycF91bmluaXQodm9pZCkge31cXG4tLVxcbm5ldC84MDIxcS92bGFuLmgtMTgxLVxcbm5ldC84MDIxcS92bGFuLmg6MTgyOiNpZmRlZiBDT05GSUdfVkxBTl84MDIxUV9NVlJQXFxubmV0LzgwMjFxL3ZsYW4uaC0xODMtaW50IHZsYW5fbXZycF9yZXF1ZXN0X2pvaW4oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDE4OjQ1OjI4LjkyNDM4MjI4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTA0MTMwODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIE5ldHdvcmsgRGV2aWNlIEFzeW5jaHJvbm91cyBXb3JrIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIHRoZSBjb25maWcgdW5kZXIgY29uc2lkZXJhdGlvbiBoZXJlIGlzIGBWTEFOXzgwMjFRYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucywgYnV0IEkgc3VzcGVjdCB0aGF0IHRoaXMgaXMgdGhlIHByaW1hcnkgZm9jdXMuIEdpdmVuIHRoYXQgdGhlIHRlc3QgZnJhbWV3b3JrIGxldmVyYWdlcyBib25kaW5nLCBgQk9ORElOR2AgY291bGQgYmUgdXNlZnVsIHRvIGVuYWJsZSwgYWx0aG91Z2ggdGhlIGNvcmUgbG9naWMgSSdtIGludGVyZXN0ZWQgaW4gaXMgY2xlYXJseSBpbiBgbmV0ZGV2X3dvcmsuY2AgYW5kIGB2bGFuX2Rldi5jYC4gSSdsbCBhZGQgYm90aCBgVkxBTl84MDIxUWAgYW5kIGBCT05ESU5HYCB0byBgRW5hYmxlQ29uZmlnc2AuXG5cbk5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIHN5bWJvbHMgYXMgcG90ZW50aWFsIHRhcmdldHMgZm9yIGZ1enppbmc6IGBuZXRkZXZfd29ya19zY2hlZGAsIGBuZXRkZXZfd29ya19jYW5jZWxgLCBgX19uZXRkZXZfd29ya19jb3JlX3NjaGVkYCwgYF9fbmV0ZGV2X3dvcmtfY29yZV9jYW5jZWxgLCBgbmV0ZGV2X3dvcmtfcnVuYCwgYG5ldGRldl93b3JrX3Byb2NgLCBhbmQgYHZsYW5fZGV2X3dvcmtgLlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGUgdmlzaWJpbGl0eSBvZiB0aGVzZSBzeW1ib2xzLCBhbmQgd2hldGhlciB0aGV5IGFyZSBzdGF0aWMgb3IgZXhwb3J0ZWQuIE9rYXksIGBuZXRkZXZfd29ya19wcm9jYCwgYG5ldGRldl93b3JrX3J1bmAgYW5kIGB2bGFuX2Rldl93b3JrYCBhcmUgc3RhdGljLCB3aGlsZSBgbmV0ZGV2X3dvcmtfc2NoZWRgIGFuZCBgbmV0ZGV2X3dvcmtfY2FuY2VsYCBhcmUgZXhwb3J0ZWQuIFRoZSBgX19uZXRkZXZfd29ya19jb3JlXypgIHN5bWJvbHMgYXJlIGdsb2JhbCwgYnV0IG5vdCBleHBvcnRlZC5cblxuTXkgZnV6eiB0YXJnZXQgbGlzdCB3aWxsIGNvbnNpc3Qgb2Y6XG4qICAgYG5ldGRldl93b3JrX3NjaGVkYFxuKiAgIGBuZXRkZXZfd29ya19jYW5jZWxgXG4qICAgYG5ldGRldl93b3JrX3Byb2NgXG4qICAgYG5ldGRldl93b3JrX3J1bmBcbiogICBgdmxhbl9kZXZfd29ya2BcbiogICBgdmxhbl9kZXZpY2VfZXZlbnRgICh3aGljaCB3YXMgbW9kaWZpZWQgaW4gdGhlIHBhdGNoKVxuKiAgIGB2bGFuX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCAoYW5vdGhlciBtb2RpZmllZCBmdW5jdGlvbilcblxuSSdsbCBjb25maXJtIHRoYXQgYG5ldGRldl93b3JrX3Byb2NgIGlzIGluZGVlZCB0aGUgd29ya3F1ZXVlIGNhbGxiYWNrLiBZZXMsIGl0IGlzLlxuXG5UaGUgcmF0aW9uYWxlIGhlcmUgaXMgdGhhdCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYXN5bmNocm9ub3VzIHdvcmsgbWVjaGFuaXNtIChgbmV0ZGV2X3dvcmtgKSBmb3IgbmV0d29yayBkZXZpY2VzIGFuZCBpbnRlZ3JhdGVzIGl0IHdpdGggdGhlIFZMQU4gZHJpdmVyLiBUaGUgZ29hbCBpcyB0byBoYW5kbGUgc3RhdGUgcHJvcGFnYXRpb24gKE1UVSwgZmVhdHVyZXMsIGxpbmsgc3RhdGUpIG1vcmUgZWZmaWNpZW50bHkgYW5kIGF2b2lkIHBvdGVudGlhbCBkZWFkbG9ja3MuIFRoaXMgaXMgYSBjcnVjaWFsIGNoYW5nZSB0byB0aGUgY29yZSBuZXR3b3JrIGFuZCBWTEFOIGxvZ2ljLiBDcml0aWNhbGx5LCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rIGFuZCBpb2N0bHMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZ1enogdGhpcyBpbXBsZW1lbnRhdGlvbiB0aG9yb3VnaGx5IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMsIG9yIGNvbmN1cnJlbmN5IGJ1Z3MgdGhhdCB0aGlzIG5ldyBhc3luY2hyb25vdXMgbWVjaGFuaXNtIG1pZ2h0IGludHJvZHVjZS5cblxuVGhlIGZvY3VzIHN5bWJvbHMgbG9vayBnb29kIHRvIG1lLiBUaGlzIGNoYW5nZSBpcyBhYnNvbHV0ZWx5IFwiV29ydGhGdXp6aW5nOiB0cnVlXCIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTg0LCJPdXRwdXRUb2tlbnMiOjIxMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxODo0NTozOS40Mjg1MTYwMjNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NjkyMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJCT05ESU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZGV2X3dvcmtfc2NoZWRcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbFwiLFxuICAgIFwibmV0ZGV2X3dvcmtfcHJvY1wiLFxuICAgIFwibmV0ZGV2X3dvcmtfcnVuXCIsXG4gICAgXCJ2bGFuX2Rldl93b3JrXCIsXG4gICAgXCJ2bGFuX2RldmljZV9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGFzeW5jaHJvbm91cyB3b3JrIG1lY2hhbmlzbSAoYG5ldGRldl93b3JrYCkgZm9yIG5ldHdvcmsgZGV2aWNlcyBhbmQgbW9kaWZpZXMgdGhlIFZMQU4gZHJpdmVyIHRvIHVzZSBpdCBmb3Igc3RhdGUgcHJvcGFnYXRpb24gKE1UVSwgZmVhdHVyZXMsIGxpbmsgc3RhdGUpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgbmVzdGVkIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG5ldHdvcmtpbmcgYW5kIFZMQU4gbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBtb2RpZnlpbmcgZGV2aWNlIHN0YXRlcyAoZS5nLiwgYnJpbmdpbmcgZGV2aWNlcyB1cC9kb3duLCBjaGFuZ2luZyBNVFUpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGFzeW5jaHJvbm91cyBtZWNoYW5pc20gZG9lc24ndCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgY29uY3VycmVuY3kgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWTEFOXzgwMjFRXCIsXG4gICAgXCJCT05ESU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZGV2X3dvcmtfc2NoZWRcIixcbiAgICBcIm5ldGRldl93b3JrX2NhbmNlbFwiLFxuICAgIFwibmV0ZGV2X3dvcmtfcHJvY1wiLFxuICAgIFwibmV0ZGV2X3dvcmtfcnVuXCIsXG4gICAgXCJ2bGFuX2Rldl93b3JrXCIsXG4gICAgXCJ2bGFuX2RldmljZV9ldmVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGFzeW5jaHJvbm91cyB3b3JrIG1lY2hhbmlzbSAoYG5ldGRldl93b3JrYCkgZm9yIG5ldHdvcmsgZGV2aWNlcyBhbmQgbW9kaWZpZXMgdGhlIFZMQU4gZHJpdmVyIHRvIHVzZSBpdCBmb3Igc3RhdGUgcHJvcGFnYXRpb24gKE1UVSwgZmVhdHVyZXMsIGxpbmsgc3RhdGUpIHRvIGF2b2lkIGRlYWRsb2NrcyBkdXJpbmcgbmVzdGVkIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG5ldHdvcmtpbmcgYW5kIFZMQU4gbG9naWMsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBtb2RpZnlpbmcgZGV2aWNlIHN0YXRlcyAoZS5nLiwgYnJpbmdpbmcgZGV2aWNlcyB1cC9kb3duLCBjaGFuZ2luZyBNVFUpLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGFzeW5jaHJvbm91cyBtZWNoYW5pc20gZG9lc24ndCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3Igb3RoZXIgY29uY3VycmVuY3kgYnVncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlg8s7[1] Phase: Succeeded StartedAt: 2026-06-24 18:45:51 +0000 UTC FinishedAt: 2026-06-24 18:45:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-24 18:45:51 +0000 UTC FinishedAt: 2026-06-24 18:45:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2] Phase: Succeeded StartedAt: 2026-06-24 18:45:51 +0000 UTC FinishedAt: 2026-06-24 22:41:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-24 18:45:51 +0000 UTC FinishedAt: 2026-06-24 22:41:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-24 18:45:51 +0000 UTC FinishedAt: 2026-06-24 18:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-24 18:45:51 +0000 UTC FinishedAt: 2026-06-24 18:46:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlg8s7/series-workflowlg8s7-convert-artifact-2539889866/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-24 18:46:16 +0000 UTC FinishedAt: 2026-06-24 19:07:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-24 18:46:16 +0000 UTC FinishedAt: 2026-06-24 19:07:38 +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:*75b45e4d-a5e3-4579-9f94-630df4fc7640,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-workflowlg8s7/series-workflowlg8s7-convert-artifact-2539889866/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": "eca79ca2-b191-4135-94cd-25694dafdf9a", "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-workflowlg8s7/series-workflowlg8s7-build-action-3401071800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-24 18:46:16 +0000 UTC FinishedAt: 2026-06-24 19:07:28 +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:*75b45e4d-a5e3-4579-9f94-630df4fc7640,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-workflowlg8s7/series-workflowlg8s7-convert-artifact-2539889866/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": "eca79ca2-b191-4135-94cd-25694dafdf9a", "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-workflowlg8s7/series-workflowlg8s7-build-action-3401071800/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-24 19:07:38 +0000 UTC FinishedAt: 2026-06-24 19:07:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-24 19:07:38 +0000 UTC FinishedAt: 2026-06-24 19:07:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-24 19:07:38 +0000 UTC FinishedAt: 2026-06-24 19:07:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-24 19:07:38 +0000 UTC FinishedAt: 2026-06-24 19:07:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlg8s7/series-workflowlg8s7-convert-artifact-509729637/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-24 19:07:48 +0000 UTC FinishedAt: 2026-06-24 19:09:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-24 19:07:48 +0000 UTC FinishedAt: 2026-06-24 19:09:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eca79ca2-b191-4135-94cd-25694dafdf9a,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-workflowlg8s7/series-workflowlg8s7-build-action-3401071800/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-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-24 19:09:44 +0000 UTC FinishedAt: 2026-06-24 19:09:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-24 19:09:44 +0000 UTC FinishedAt: 2026-06-24 19:09:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-24 19:09:44 +0000 UTC FinishedAt: 2026-06-24 19:35:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-24 19:09:44 +0000 UTC FinishedAt: 2026-06-24 19:35:10 +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:*75b45e4d-a5e3-4579-9f94-630df4fc7640,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-workflowlg8s7/series-workflowlg8s7-convert-artifact-509729637/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": "6217dd02-8c90-4d99-baca-0012b1ee47f2", "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-workflowlg8s7/series-workflowlg8s7-build-action-3131355057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-24 19:09:44 +0000 UTC FinishedAt: 2026-06-24 19:34:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*75b45e4d-a5e3-4579-9f94-630df4fc7640,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-workflowlg8s7/series-workflowlg8s7-convert-artifact-509729637/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": "6217dd02-8c90-4d99-baca-0012b1ee47f2", "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-workflowlg8s7/series-workflowlg8s7-build-action-3131355057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-24 19:35:10 +0000 UTC FinishedAt: 2026-06-24 19:35:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-24 19:35:10 +0000 UTC FinishedAt: 2026-06-24 19:35:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-24 19:35:10 +0000 UTC FinishedAt: 2026-06-24 19:37:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-24 19:35:10 +0000 UTC FinishedAt: 2026-06-24 19:37:30 +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:*6217dd02-8c90-4d99-baca-0012b1ee47f2,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-workflowlg8s7/series-workflowlg8s7-build-action-3131355057/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-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-24 19:37:40 +0000 UTC FinishedAt: 2026-06-24 22:41:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-24 19:37:40 +0000 UTC FinishedAt: 2026-06-24 22:41:10 +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":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"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:*eca79ca2-b191-4135-94cd-25694dafdf9a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6217dd02-8c90-4d99-baca-0012b1ee47f2,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-workflowlg8s7/series-workflowlg8s7-build-action-3401071800/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-workflowlg8s7/series-workflowlg8s7-build-action-3131355057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-24 19:37:40 +0000 UTC FinishedAt: 2026-06-24 19:38:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-24 19:37:40 +0000 UTC FinishedAt: 2026-06-24 19:38:01 +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":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"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-workflowlg8s7/series-workflowlg8s7-convert-artifact-2048893162/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-24 19:37:40 +0000 UTC FinishedAt: 2026-06-24 19:37:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-24 19:37:40 +0000 UTC FinishedAt: 2026-06-24 19:37:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-24 19:37:40 +0000 UTC FinishedAt: 2026-06-24 19:37:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-24 19:38:09 +0000 UTC FinishedAt: 2026-06-24 22:41:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlg8s7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netdev_work_sched","netdev_work_cancel","netdev_work_proc","netdev_work_run","vlan_dev_work","vlan_device_event"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VLAN_8021Q","BONDING"],"series_id":"181fc8f6-6f07-4299-893b-0835ffdfaa53","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-24 19:38:09 +0000 UTC FinishedAt: 2026-06-24 22:41:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eca79ca2-b191-4135-94cd-25694dafdf9a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6217dd02-8c90-4d99-baca-0012b1ee47f2,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-workflowlg8s7/series-workflowlg8s7-build-action-3401071800/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-workflowlg8s7/series-workflowlg8s7-build-action-3131355057/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-workflowlg8s7/series-workflowlg8s7-convert-artifact-2048893162/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,}