Name: series-workflowr7zbs Phase: Succeeded StartedAt: 2026-06-26 22:23:45 +0000 UTC FinishedAt: 2026-06-27 00:36:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[0] Phase: Succeeded StartedAt: 2026-06-26 22:23:45 +0000 UTC FinishedAt: 2026-06-26 22:33:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 22:23:45 +0000 UTC FinishedAt: 2026-06-26 22:33:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REGULATOR", "PHYLIB", "SFP", "FWNODE_MDIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REGULATOR", "PHYLIB", "SFP", "FWNODE_MDIO" ], "series_id": "f0856b49-cdc4-440d-91b0-22741fe2e183" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phy_try_attach_pse", "phy_pse_attach_one", "phy_pse_detach_one", "phy_pse_notifier_event", "__phy_device_register", "phy_device_register_locked", "phy_device_register", "pse_register_notifier", "pse_unregister_notifier", "pse_control_matches_pcdev", "sfp_sm_probe_phy" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUdVTEFUT1ImIzM0OywKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtGV05PREVfTURJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BoeV90cnlfYXR0YWNoX3BzZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX2F0dGFjaF9vbmUmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9kZXRhY2hfb25lJiMzNDssCiAgICAmIzM0O3BoeV9wc2Vfbm90aWZpZXJfZXZlbnQmIzM0OywKICAgICYjMzQ7X19waHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cHNlX3JlZ2lzdGVyX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O3BzZV91bnJlZ2lzdGVyX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O3BzZV9jb250cm9sX21hdGNoZXNfcGNkZXYmIzM0OywKICAgICYjMzQ7c2ZwX3NtX3Byb2JlX3BoeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBQSFkgcmVnaXN0cmF0aW9uIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIGEgbm90aWZpZXIgbWVjaGFuaXNtIGZvciBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlcnMuIEl0IGNoYW5nZXMgaG93IFBTRSBjb250cm9sbGVycyBhcmUgYXR0YWNoZWQgdG8gUEhZIGRldmljZXMsIG1vdmluZyBmcm9tIGEgc3luY2hyb25vdXMgbG9va3VwIHRvIGEgbm90aWZpZXItYmFzZWQgYXBwcm9hY2ggdGhhdCBoYW5kbGVzIGFzeW5jaHJvbm91cyByZWdpc3RyYXRpb24uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0d29ya2luZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc29mdHdhcmUtZW11bGF0ZWQgTURJTyBidXNlcywgUEhZcywgYW5kIHBsYXRmb3JtIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNDNjNWZiNGI4NDdmODJhOGZkNTFkNTA2MDIxMjhjNzMwNTBkMWE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMjI6Mjk6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jXG5pbmRleCBiYTcwOTE1MTgyNjU0MC4uN2JkOTc5YjU5ZjQ5NjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xuQEAgLTExLDMzICYjNDM7MTEsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9md25vZGVfbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4gXG4gTU9EVUxFX0FVVEhPUihcJiMzNDtDYWx2aW4gSm9obnNvbiBcdTAwM2NjYWx2aW4uam9obnNvbkBvc3MubnhwLmNvbVx1MDAzZVwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RldOT0RFIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1wmIzM0Oyk7XG4gXG4tc3RhdGljIHN0cnVjdCBwc2VfY29udHJvbCAqXG4tZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcbi1cdFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLXtcbi1cdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcbi1cdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4tXG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRucCA9IHRvX29mX25vZGUoZndub2RlKTtcbi1cdGlmICghbnApXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cHNlYyA9IG9mX3BzZV9jb250cm9sX2dldChucCwgcGh5ZGV2KTtcbi1cdGlmIChQVFJfRVJSKHBzZWMpID09IC1FTk9FTlQpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cmV0dXJuIHBzZWM7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICpcbiBmd25vZGVfZmluZF9taWlfdGltZXN0YW1wZXIoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbiB7XG5AQCAtMTE4LDcgJiM0Mzs5Niw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbiBcdFx0XHRcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpjaGlsZCwgdTMyIGFkZHIpXG4ge1xuIFx0c3RydWN0IG1paV90aW1lc3RhbXBlciAqbWlpX3RzID0gTlVMTDtcbi1cdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyA9IE5VTEw7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5O1xuIFx0Ym9vbCBpc19jNDU7XG4gXHR1MzIgcGh5X2lkO1xuQEAgLTE1OSwxNCAmIzQzOzEzNiw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbiBcdFx0XHRnb3RvIGNsZWFuX3BoeTtcbiBcdH1cbiBcbi1cdHBzZWMgPSBmd25vZGVfZmluZF9wc2VfY29udHJvbChjaGlsZCwgcGh5KTtcbi1cdGlmIChJU19FUlIocHNlYykpIHtcbi1cdFx0cmMgPSBQVFJfRVJSKHBzZWMpO1xuLVx0XHRnb3RvIHVucmVnaXN0ZXJfcGh5O1xuLVx0fVxuLVxuLVx0cGh5LVx1MDAzZXBzZWMgPSBwc2VjO1xuLVxuIFx0LyogcGh5LVx1MDAzZW1paV90cyBtYXkgYWxyZWFkeSBiZSBkZWZpbmVkIGJ5IHRoZSBQSFkgZHJpdmVyLiBBXG4gXHQgKiBtaWlfdGltZXN0YW1wZXIgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2lsbCBzdGlsbCBoYXZlXG4gXHQgKiBwcmVjZWRlbmNlLlxuQEAgLTE3Niw5ICYjNDM7MTQ1LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuIFxuIFx0cmV0dXJuIDA7XG4gXG4tdW5yZWdpc3Rlcl9waHk6XG4tXHRpZiAoaXNfYWNwaV9ub2RlKGNoaWxkKSB8fCBpc19vZl9ub2RlKGNoaWxkKSlcbi1cdFx0cGh5X2RldmljZV9yZW1vdmUocGh5KTtcbiBjbGVhbl9waHk6XG4gXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcbiBjbGVhbl9taWlfdHM6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbmluZGV4IDA2MTUyMjg0NTllZjQyLi5mNWZlYmZmNGIwMGI4ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbkBAIC0yMjMsOCAmIzQzOzIyMywxOSBAQCBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfZnJlZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXG4gc3RhdGljIHZvaWQgcGh5X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiB7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTtcbiYjNDM7XG4mIzQzO1x0LyogYnVzX2Zvcl9lYWNoX2RldigpIGhvbGRzIGdldF9kZXZpY2UoKSBhY3Jvc3MgZWFjaCBpdGVyYXRpb25cbiYjNDM7XHQgKiBzdGVwLCBkZWZlcnJpbmcgdGhpcyByZWxlYXNlIGNhbGxiYWNrIHVudGlsIGFueSBpbi1mbGlnaHQgUFNFXG4mIzQzO1x0ICogbm90aWZpZXIgd2FsayBoYXMgYWR2YW5jZWQgcGFzdCB0aGlzIHBoeS4gcHNlX2NvbnRyb2xfcHV0KClcbiYjNDM7XHQgKiB0YWtlcyBwc2VfbGlzdF9tdXRleCwgc28gdGhpcyBwYXRoIG11c3QgcnVuIGluIHNsZWVwYWJsZVxuJiM0MztcdCAqIGNvbnRleHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWlnaHRfc2xlZXAoKTtcbiYjNDM7XHRwc2VfY29udHJvbF9wdXQocGh5ZGV2LVx1MDAzZXBzZWMpO1xuJiM0MztcbiBcdGZ3bm9kZV9oYW5kbGVfcHV0KGRldi1cdTAwM2Vmd25vZGUpO1xuLVx0a2ZyZWUodG9fcGh5X2RldmljZShkZXYpKTtcbiYjNDM7XHRrZnJlZShwaHlkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbkBAIC0xMTAyLDExICYjNDM7MTExMywxMDMgQEAgc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7XG4gXG4tLyoqXG4tICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuLSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xuJiM0MzsvKiBCZXN0LWVmZm9ydCBhdHRhY2ggb2YgcGh5ZGV2LVx1MDAzZXBzZWMgZnJvbSBhIERUIGBwc2VzID0gXHUwMDNjXHUwMDI2Li4uXHUwMDNlYCBwaGFuZGxlLlxuJiM0MzsgKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmwuIEEgbWlzc2luZyBwaGFuZGxlICgtRU5PRU5UKSBvciBhIG5vdC15ZXQtcmVnaXN0ZXJlZFxuJiM0MzsgKiBjb250cm9sbGVyICgtRVBST0JFX0RFRkVSKSBpcyBzaWxlbnQ7IHRoZSBub3RpZmllciByZXRyaWVzIHRoZSBsYXR0ZXIgYXRcbiYjNDM7ICogUFNFX1JFR0lTVEVSRUQgdGltZS4gQW55IG90aGVyIGVycm9yIG1lYW5zIGEgYnJva2VuIGJpbmRpbmcgYW5kIGlzIHdhcm5lZFxuJiM0MzsgKiBhYm91dCwgYnV0IGxlZnQgbm9uLWZhdGFsIHNvIHRoZSBwaHkgc3RpbGwgcmVnaXN0ZXJzLlxuICAqL1xuLWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3N0YXRpYyB2b2lkIHBoeV90cnlfYXR0YWNoX3BzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBzZV9jb250cm9sICpwc2VjO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdG5wID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4mIzQzO1x0aWYgKCFucClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2Vwc2VjKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xuJiM0MztcdGlmIChJU19FUlIocHNlYykpIHtcbiYjNDM7XHRcdGlmIChQVFJfRVJSKHBzZWMpICE9IC1FUFJPQkVfREVGRVIgXHUwMDI2XHUwMDI2IFBUUl9FUlIocHNlYykgIT0gLUVOT0VOVClcbiYjNDM7XHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtmYWlsZWQgdG8gZ2V0IFBTRSBjb250cm9sOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHBzZWMpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBzZWMgPSBwc2VjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cGh5X3RyeV9hdHRhY2hfcHNlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2ID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2V0eXBlICE9IFx1MDAyNm1kaW9fYnVzX3BoeV90eXBlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTtcbiYjNDM7XHRwc2VjID0gcGh5ZGV2LVx1MDAzZXBzZWM7XG4mIzQzO1x0aWYgKCFwc2VjIHx8ICFwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHBzZWMsIHBjZGV2KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlcHNlYyA9IE5VTEw7XG4mIzQzO1x0cHNlX2NvbnRyb2xfcHV0KHBzZWMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGV2ZW50KSB7XG4mIzQzO1x0Y2FzZSBQU0VfUkVHSVNURVJFRDpcbiYjNDM7XHRcdHJ0bmxfbG9jaygpO1xuJiM0MztcdFx0YnVzX2Zvcl9lYWNoX2RldihcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxuJiM0MztcdFx0XHRcdCBwaHlfcHNlX2F0dGFjaF9vbmUpO1xuJiM0MztcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfT0s7XG4mIzQzO1x0Y2FzZSBQU0VfVU5SRUdJU1RFUkVEOlxuJiM0MztcdFx0cnRubF9sb2NrKCk7XG4mIzQzO1x0XHRidXNfZm9yX2VhY2hfZGV2KFx1MDAyNm1kaW9fYnVzX3R5cGUsIE5VTEwsIGRhdGEsXG4mIzQzO1x0XHRcdFx0IHBoeV9wc2VfZGV0YWNoX29uZSk7XG4mIzQzO1x0XHRydG5sX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9PSztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwaHlfcHNlX25vdGlmaWVyIF9fcmVhZF9tb3N0bHkgPSB7XG4mIzQzO1x0Lm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogQ29yZSByZWdpc3RyYXRpb246IGFkZCB0aGUgcGh5IHRvIHRoZSBNRElPIGJ1cy4gRG9lcyBub3QgdG91Y2ggcnRubCBvclxuJiM0MzsgKiBQU0UuIHBoeWRldi1cdTAwM2Vwc2VjIGlzIGF0dGFjaGVkIGJ5IHRoZSBjYWxsZXJzIGJlbG93LCBhZnRlciBkZXZpY2VfYWRkKClcbiYjNDM7ICogaGFzIG1hZGUgdGhlIHBoeSB2aXNpYmxlIG9uIG1kaW9fYnVzX3R5cGUsIHNvIHRoYXQgYSBjb25jdXJyZW50IFBTRVxuJiM0MzsgKiBub3RpZmllciB3YWxrIGFuZCB0aGUgYXR0YWNoIGNhbiBuZXZlciBsZWF2ZSB0aGUgcGh5IHVuYXR0YWNoZWQuIEtlZXBpbmdcbiYjNDM7ICogZGV2aWNlX2FkZCgpIG91dCBvZiBydG5sIGFsc28gYXZvaWRzIGRlYWRsb2NraW5nIHdoZW4gYmluZGluZyBhIHBoeSB0aGF0XG4mIzQzOyAqIGl0c2VsZiBwcm92aWRlcyBhbiBTRlAgY2FnZSAocGh5X3Byb2JlKCkgLVx1MDAzZSBwaHlfc2ZwX3Byb2JlKCkgLVx1MDAzZVxuJiM0MzsgKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIHRha2VzIHJ0bmwpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTExMzUsMTAgJiM0MzsxMjM4LDU0IEBAIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gIG91dDpcbiBcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG4gXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XG4tXG4gXHRtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG4mIzQzOyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xuJiM0MzsgKlxuJiM0MzsgKiBTYW1lIGFzIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKSBidXQgY2FsbGVyIG11c3QgYWxyZWFkeSBob2xkIHJ0bmxfbG9jaygpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcbiYjNDM7ICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdHBoeV90cnlfYXR0YWNoX3BzZShwaHlkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcbiBcbiAvKipcbkBAIC0xMTUyLDggJiM0MzsxMjk5LDYgQEAgRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcbiB2b2lkIHBoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0dW5yZWdpc3Rlcl9taWlfdGltZXN0YW1wZXIocGh5ZGV2LVx1MDAzZW1paV90cyk7XG4tXHRwc2VfY29udHJvbF9wdXQocGh5ZGV2LVx1MDAzZXBzZWMpO1xuLVxuIFx0ZGV2aWNlX2RlbChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuIFxuIFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbkBAIC0zOTgxLDggJiM0Mzs0MTI2LDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpXG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX2M0NTtcbiBcbiYjNDM7XHRyYyA9IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZwaHlfcHNlX25vdGlmaWVyKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRnb3RvIGVycl9nZW5waHk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO2Vycl9nZW5waHk6XG4mIzQzO1x0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9kcml2ZXIpO1xuIGVycl9jNDU6XG4gXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2M0NV9kcml2ZXIpO1xuIGVycl9ldGh0b29sX3BoeV9vcHM6XG5AQCAtMzk5OSw2ICYjNDM7NDE1MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgX19leGl0IHBoeV9leGl0KHZvaWQpXG4ge1xuJiM0MztcdHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNnBoeV9wc2Vfbm90aWZpZXIpO1xuIFx0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9jNDVfZHJpdmVyKTtcbiBcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZnZW5waHlfZHJpdmVyKTtcbiBcdHJ0bmxfbG9jaygpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuaW5kZXggMDNiZmQ4NjQwZGI5NjMuLjE4ODY4YmRkNjQ4NTJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbkBAIC0yMDgzLDcgJiM0MzsyMDgzLDcgQEAgc3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuIFx0LyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi9cbiBcdHBoeS1cdTAwM2Vpc19vbl9zZnBfbW9kdWxlID0gdHJ1ZTtcbiBcbi1cdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcbiYjNDM7XHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChwaHkpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcbiBcdFx0ZGV2X2VycihzZnAtXHUwMDNlZGV2LCBcJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZDogJXBlXFxuXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbmluZGV4IDY5ZGJkYmRlOWQ3MWE3Li42MTE1NDBkZjQzYmIxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuQEAgLTIzLDYgJiM0MzsyNCwzOSBAQCBzdGF0aWMgTElTVF9IRUFEKHBzZV9jb250cm9sbGVyX2xpc3QpO1xuIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHBzZV9wd19kX21hcCk7XG4gc3RhdGljIERFRklORV9NVVRFWChwc2VfcHdfZF9tdXRleCk7XG4gXG4mIzQzO3N0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHBzZV9jb250cm9sbGVyX25vdGlmaWVyKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwc2VfcmVnaXN0ZXJfbm90aWZpZXIgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBQU0UgY29udHJvbGxlciBldmVudHNcbiYjNDM7ICogQG5iOiBub3RpZmllciBibG9jayB0byByZWdpc3RlclxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCBmb3IgZXZlbnRzIGZpcmVkIGFuZCB0aGVpciBzdWJzY3JpYmVyXG4mIzQzOyAqIGNvbnRyYWN0LiBDYWxsYmFja3MgcnVuIGluIHByb2Nlc3MgY29udGV4dDsgdGhleSBtYXkgc2xlZXAsIHRha2VcbiYjNDM7ICogcnRubCwgYW5kIGNhbGwgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuIFRoZSBjaGFpbiBmaXJlcyBzeW5jaHJvbm91c2x5LFxuJiM0MzsgKiBzbyBhIFBTRSBjb250cm9sbGVyIGRyaXZlciYjMzk7cyBwcm9iZS91bmJpbmQgcGF0aCBtdXN0IG5vdCBob2xkIGFueVxuJiM0MzsgKiBzdWNoIGxvY2sgd2hlbiBjYWxsaW5nIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKCkgb3JcbiYjNDM7ICogcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcigpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4mIzQzOyAqL1xuJiM0MztpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwc2VfcmVnaXN0ZXJfbm90aWZpZXIpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyIC0gdW5yZWdpc3RlciBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFja1xuJiM0MzsgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHByZXZpb3VzbHkgcGFzc2VkIHRvIHBzZV9yZWdpc3Rlcl9ub3RpZmllcigpXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcik7XG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBwc2VfY29udHJvbCAtIGEgUFNFIGNvbnRyb2xcbiAgKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXG5AQCAtMTEwNCw2ICYjNDM7MTEzOCw5IEBAIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbiBcdGxpc3RfYWRkKFx1MDAyNnBjZGV2LVx1MDAzZWxpc3QsIFx1MDAyNnBzZV9jb250cm9sbGVyX2xpc3QpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBzZV9saXN0X211dGV4KTtcbiBcbiYjNDM7XHRibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLFxuJiM0MztcdFx0XHRcdCAgICAgUFNFX1JFR0lTVEVSRUQsIHBjZGV2KTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xuQEAgLTExMTQsNiAmIzQzOzExNTEsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG4gICovXG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuIHtcbiYjNDM7XHRibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLFxuJiM0MztcdFx0XHRcdCAgICAgUFNFX1VOUkVHSVNURVJFRCwgcGNkZXYpO1xuJiM0MztcbiBcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XG4gXHRwc2VfcmVsZWFzZV9waXMocGNkZXYpO1xuIFx0aWYgKHBjZGV2LVx1MDAzZWlycSlcbkBAIC0xOTgxLDMgJiM0MzsyMDIxLDE3IEBAIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKVxuIFx0cmV0dXJuIHBzZWMtXHUwMDNlcGNkZXYtXHUwMDNldHlwZXMgXHUwMDI2IEVUSFRPT0xfUFNFX0MzMztcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocHNlX2hhc19jMzMpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYgLSBUZXN0IHdoZXRoZXIgYSBwc2VfY29udHJvbCB0YXJnZXRzIGEgY29udHJvbGxlclxuJiM0MzsgKiBAcHNlYzogcHNlX2NvbnRyb2wgb2J0YWluZWQgZnJvbSBvZl9wc2VfY29udHJvbF9nZXQoKVxuJiM0MzsgKiBAcGNkZXY6IFBTRSBjb250cm9sbGVyIHRvIGNvbXBhcmUgYWdhaW5zdFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46ICV0cnVlIGlmIEBwc2VjIHdhcyBvYnRhaW5lZCBmcm9tIEBwY2RldiwgJWZhbHNlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwc2VjLVx1MDAzZXBjZGV2ID09IHBjZGV2O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uODY1YjliYWRkYjg1ZmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjE1OCw2ICYjNDM7MjE1OCw4IEBAIHN0cnVjdCBwaHlfZGV2aWNlICpmd25vZGVfcGh5X2ZpbmRfZGV2aWNlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpwaHlfZndub2RlKTtcbiBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlX2dldF9waHlfbm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcbiBzdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KTtcbiBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcbiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCBydG5sX2xvY2soKTsgc2VlIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKSBmb3IgdGhlIHB1YmxpYyBmb3JtLiAqL1xuJiM0MztpbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSk7XG4gdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgcGh5X2dldF9jNDVfaWRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcbmluZGV4IDRlNTY5NmNmYWRlN2NjLi5kNDMxMGNhNzFhM2UwOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuQEAgLTIxLDYgJiM0MzsyMSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlO1xuIHN0cnVjdCBwaHlfZGV2aWNlO1xuIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXY7XG4gc3RydWN0IG5ldGxpbmtfZXh0X2FjaztcbiYjNDM7c3RydWN0IG5vdGlmaWVyX2Jsb2NrO1xuIFxuIC8qIEMzMyBQU0UgZXh0ZW5kZWQgc3RhdGUgYW5kIHN1YnN0YXRlLiAqL1xuIHN0cnVjdCBldGh0b29sX2MzM19wc2VfZXh0X3N0YXRlX2luZm8ge1xuQEAgLTMzNyw2ICYjNDM7MzM4LDI0IEBAIGVudW0gcHNlX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMge1xuIFx0UFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUNcdD0gMSBcdTAwM2NcdTAwM2MgMixcbiB9O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCAtIFBTRSBjb250cm9sbGVyIGxpZmVjeWNsZSBldmVudHNcbiYjNDM7ICpcbiYjNDM7ICogRXZlbnQgZGF0YSBpbiBjYWxsYmFja3MgaXMgYWx3YXlzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0XG4mIzQzOyAqIHBzZV9jb250cm9sbGVyX2RldiBmaXJpbmcgdGhlIGV2ZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBAUFNFX1JFR0lTVEVSRUQ6IGNvbnRyb2xsZXIgYWRkZWQgdG8gcHNlX2NvbnRyb2xsZXJfbGlzdCBhbmRcbiYjNDM7ICpcdHJlc29sdmFibGUgYnkgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuXG4mIzQzOyAqIEBQU0VfVU5SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbVxuJiM0MzsgKlx0cHNlX2NvbnRyb2xsZXJfbGlzdC4gU3Vic2NyaWJlcnMgaG9sZGluZyBwc2VfY29udHJvbCByZWZlcmVuY2VzXG4mIzQzOyAqXHR0YXJnZXRpbmcgaXQgbXVzdCBkcm9wIHRoZW0gYmVmb3JlIHJldHVybmluZyBhbmQgbXVzdCBub3RcbiYjNDM7ICpcdGFjcXVpcmUgbmV3IHJlZmVyZW5jZXMgZm9yIGl0LlxuJiM0MzsgKi9cbiYjNDM7ZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCB7XG4mIzQzO1x0UFNFX1JFR0lTVEVSRUQsXG4mIzQzO1x0UFNFX1VOUkVHSVNURVJFRCxcbiYjNDM7fTtcbiYjNDM7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKVxuIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbkBAIC0zNjYsNiAmIzQzOzM4NSwxMiBAQCBpbnQgcHNlX2V0aHRvb2xfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuIGJvb2wgcHNlX2hhc19wb2RsKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7XG4gYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpO1xuIFxuJiM0Mztib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xuJiM0MztcbiYjNDM7aW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbiYjNDM7aW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xuJiM0MztcbiAjZWxzZVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBzZV9jb250cm9sICpvZl9wc2VfY29udHJvbF9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuQEAgLTQxNiw2ICYjNDM7NDQxLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG4gXG4gI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFNFX0NPTlRST0xMRVImIzM0OywKICAgICYjMzQ7UFNFX1JFR1VMQVRPUiYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O0ZXTk9ERV9NRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X3RyeV9hdHRhY2hfcHNlJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfYXR0YWNoX29uZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX2RldGFjaF9vbmUmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9ub3RpZmllcl9ldmVudCYjMzQ7LAogICAgJiMzNDtfX3BoeV9kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwc2VfcmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7cHNlX3VucmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7cHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldiYjMzQ7LAogICAgJiMzNDtzZnBfc21fcHJvYmVfcGh5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFBIWSByZWdpc3RyYXRpb24gbG9naWMgYW5kIGludHJvZHVjZXMgYSBub3RpZmllciBtZWNoYW5pc20gZm9yIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVycy4gSXQgY2hhbmdlcyBob3cgUFNFIGNvbnRyb2xsZXJzIGFyZSBhdHRhY2hlZCB0byBQSFkgZGV2aWNlcywgbW92aW5nIGZyb20gYSBzeW5jaHJvbm91cyBsb29rdXAgdG8gYSBub3RpZmllci1iYXNlZCBhcHByb2FjaCB0aGF0IGhhbmRsZXMgYXN5bmNocm9ub3VzIHJlZ2lzdHJhdGlvbi4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCBNRElPIGJ1c2VzLCBQSFlzLCBhbmQgcGxhdGZvcm0gZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTQzYzVmYjRiODQ3ZjgyYThmZDUxZDUwNjAyMTI4YzczMDUwZDFhNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDIyOjI5OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jCmluZGV4IGJhNzA5MTUxODI2NTQwLi43YmQ5NzliNTlmNDk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYwpAQCAtMTEsMzMgJiM0MzsxMSwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Z3bm9kZV9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9wc2UtcGQvcHNlLmgmZ3Q7CiAKIE1PRFVMRV9BVVRIT1IoJiMzNDtDYWx2aW4gSm9obnNvbiAmbHQ7Y2FsdmluLmpvaG5zb25Ab3NzLm54cC5jb20mZ3Q7JiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzJiMzNDspOwogCi1zdGF0aWMgc3RydWN0IHBzZV9jb250cm9sICoKLWZ3bm9kZV9maW5kX3BzZV9jb250cm9sKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCi0JCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQotewotCXN0cnVjdCBwc2VfY29udHJvbCAqcHNlYzsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19QU0VfQ09OVFJPTExFUikpCi0JCXJldHVybiBOVUxMOwotCi0JbnAgPSB0b19vZl9ub2RlKGZ3bm9kZSk7Ci0JaWYgKCFucCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpOwotCWlmIChQVFJfRVJSKHBzZWMpID09IC1FTk9FTlQpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHBzZWM7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICoKIGZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQogewpAQCAtMTE4LDcgJiM0Mzs5Niw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cywKIAkJCQlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQsIHUzMiBhZGRyKQogewogCXN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cyA9IE5VTEw7Ci0Jc3RydWN0IHBzZV9jb250cm9sICpwc2VjID0gTlVMTDsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OwogCWJvb2wgaXNfYzQ1OwogCXUzMiBwaHlfaWQ7CkBAIC0xNTksMTQgJiM0MzsxMzYsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsCiAJCQlnb3RvIGNsZWFuX3BoeTsKIAl9CiAKLQlwc2VjID0gZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woY2hpbGQsIHBoeSk7Ci0JaWYgKElTX0VSUihwc2VjKSkgewotCQlyYyA9IFBUUl9FUlIocHNlYyk7Ci0JCWdvdG8gdW5yZWdpc3Rlcl9waHk7Ci0JfQotCi0JcGh5LSZndDtwc2VjID0gcHNlYzsKLQogCS8qIHBoeS0mZ3Q7bWlpX3RzIG1heSBhbHJlYWR5IGJlIGRlZmluZWQgYnkgdGhlIFBIWSBkcml2ZXIuIEEKIAkgKiBtaWlfdGltZXN0YW1wZXIgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2lsbCBzdGlsbCBoYXZlCiAJICogcHJlY2VkZW5jZS4KQEAgLTE3Niw5ICYjNDM7MTQ1LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLAogCiAJcmV0dXJuIDA7CiAKLXVucmVnaXN0ZXJfcGh5OgotCWlmIChpc19hY3BpX25vZGUoY2hpbGQpIHx8IGlzX29mX25vZGUoY2hpbGQpKQotCQlwaHlfZGV2aWNlX3JlbW92ZShwaHkpOwogY2xlYW5fcGh5OgogCXBoeV9kZXZpY2VfZnJlZShwaHkpOwogY2xlYW5fbWlpX3RzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKaW5kZXggMDYxNTIyODQ1OWVmNDIuLmY1ZmViZmY0YjAwYjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKQEAgLTIyMyw4ICYjNDM7MjIzLDE5IEBAIHN0YXRpYyB2b2lkIHBoeV9tZGlvX2RldmljZV9mcmVlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKIAogc3RhdGljIHZvaWQgcGh5X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTsKJiM0MzsKJiM0MzsJLyogYnVzX2Zvcl9lYWNoX2RldigpIGhvbGRzIGdldF9kZXZpY2UoKSBhY3Jvc3MgZWFjaCBpdGVyYXRpb24KJiM0MzsJICogc3RlcCwgZGVmZXJyaW5nIHRoaXMgcmVsZWFzZSBjYWxsYmFjayB1bnRpbCBhbnkgaW4tZmxpZ2h0IFBTRQomIzQzOwkgKiBub3RpZmllciB3YWxrIGhhcyBhZHZhbmNlZCBwYXN0IHRoaXMgcGh5LiBwc2VfY29udHJvbF9wdXQoKQomIzQzOwkgKiB0YWtlcyBwc2VfbGlzdF9tdXRleCwgc28gdGhpcyBwYXRoIG11c3QgcnVuIGluIHNsZWVwYWJsZQomIzQzOwkgKiBjb250ZXh0LgomIzQzOwkgKi8KJiM0MzsJbWlnaHRfc2xlZXAoKTsKJiM0MzsJcHNlX2NvbnRyb2xfcHV0KHBoeWRldi0mZ3Q7cHNlYyk7CiYjNDM7CiAJZndub2RlX2hhbmRsZV9wdXQoZGV2LSZndDtmd25vZGUpOwotCWtmcmVlKHRvX3BoeV9kZXZpY2UoZGV2KSk7CiYjNDM7CWtmcmVlKHBoeWRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHBoeV9tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQpAQCAtMTEwMiwxMSAmIzQzOzExMTMsMTAzIEBAIHN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpCiB9CiBFWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTsKIAotLyoqCi0gKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzCi0gKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXMKJiM0MzsvKiBCZXN0LWVmZm9ydCBhdHRhY2ggb2YgcGh5ZGV2LSZndDtwc2VjIGZyb20gYSBEVCBgcHNlcyA9ICZsdDsmYW1wOy4uLiZndDtgIHBoYW5kbGUuCiYjNDM7ICogQ2FsbGVyIG11c3QgaG9sZCBydG5sLiBBIG1pc3NpbmcgcGhhbmRsZSAoLUVOT0VOVCkgb3IgYSBub3QteWV0LXJlZ2lzdGVyZWQKJiM0MzsgKiBjb250cm9sbGVyICgtRVBST0JFX0RFRkVSKSBpcyBzaWxlbnQ7IHRoZSBub3RpZmllciByZXRyaWVzIHRoZSBsYXR0ZXIgYXQKJiM0MzsgKiBQU0VfUkVHSVNURVJFRCB0aW1lLiBBbnkgb3RoZXIgZXJyb3IgbWVhbnMgYSBicm9rZW4gYmluZGluZyBhbmQgaXMgd2FybmVkCiYjNDM7ICogYWJvdXQsIGJ1dCBsZWZ0IG5vbi1mYXRhbCBzbyB0aGUgcGh5IHN0aWxsIHJlZ2lzdGVycy4KICAqLwotaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0MztzdGF0aWMgdm9pZCBwaHlfdHJ5X2F0dGFjaF9wc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwc2VfY29udHJvbCAqcHNlYzsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucDsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJbnAgPSBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGU7CiYjNDM7CWlmICghbnApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BzZWMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBzZWMgPSBvZl9wc2VfY29udHJvbF9nZXQobnAsIHBoeWRldik7CiYjNDM7CWlmIChJU19FUlIocHNlYykpIHsKJiM0MzsJCWlmIChQVFJfRVJSKHBzZWMpICE9IC1FUFJPQkVfREVGRVIgJmFtcDsmYW1wOyBQVFJfRVJSKHBzZWMpICE9IC1FTk9FTlQpCiYjNDM7CQkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0O2ZhaWxlZCB0byBnZXQgUFNFIGNvbnRyb2w6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICBwc2VjKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3BzZWMgPSBwc2VjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpCiYjNDM7ewomIzQzOwlBU1NFUlRfUlROTCgpOwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDt0eXBlICE9ICZhbXA7bWRpb19idXNfcGh5X3R5cGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcGh5X3RyeV9hdHRhY2hfcHNlKHRvX3BoeV9kZXZpY2UoZGV2KSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV9wc2VfZGV0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiA9IGRhdGE7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCBwc2VfY29udHJvbCAqcHNlYzsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7dHlwZSAhPSAmYW1wO21kaW9fYnVzX3BoeV90eXBlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTsKJiM0MzsJcHNlYyA9IHBoeWRldi0mZ3Q7cHNlYzsKJiM0MzsJaWYgKCFwc2VjIHx8ICFwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHBzZWMsIHBjZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3BzZWMgPSBOVUxMOwomIzQzOwlwc2VfY29udHJvbF9wdXQocHNlYyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3dpdGNoIChldmVudCkgewomIzQzOwljYXNlIFBTRV9SRUdJU1RFUkVEOgomIzQzOwkJcnRubF9sb2NrKCk7CiYjNDM7CQlidXNfZm9yX2VhY2hfZGV2KCZhbXA7bWRpb19idXNfdHlwZSwgTlVMTCwgTlVMTCwKJiM0MzsJCQkJIHBoeV9wc2VfYXR0YWNoX29uZSk7CiYjNDM7CQlydG5sX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIE5PVElGWV9PSzsKJiM0MzsJY2FzZSBQU0VfVU5SRUdJU1RFUkVEOgomIzQzOwkJcnRubF9sb2NrKCk7CiYjNDM7CQlidXNfZm9yX2VhY2hfZGV2KCZhbXA7bWRpb19idXNfdHlwZSwgTlVMTCwgZGF0YSwKJiM0MzsJCQkJIHBoeV9wc2VfZGV0YWNoX29uZSk7CiYjNDM7CQlydG5sX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIE5PVElGWV9PSzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBoeV9wc2Vfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHsKJiM0MzsJLm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LAomIzQzO307CiYjNDM7CiYjNDM7LyogQ29yZSByZWdpc3RyYXRpb246IGFkZCB0aGUgcGh5IHRvIHRoZSBNRElPIGJ1cy4gRG9lcyBub3QgdG91Y2ggcnRubCBvcgomIzQzOyAqIFBTRS4gcGh5ZGV2LSZndDtwc2VjIGlzIGF0dGFjaGVkIGJ5IHRoZSBjYWxsZXJzIGJlbG93LCBhZnRlciBkZXZpY2VfYWRkKCkKJiM0MzsgKiBoYXMgbWFkZSB0aGUgcGh5IHZpc2libGUgb24gbWRpb19idXNfdHlwZSwgc28gdGhhdCBhIGNvbmN1cnJlbnQgUFNFCiYjNDM7ICogbm90aWZpZXIgd2FsayBhbmQgdGhlIGF0dGFjaCBjYW4gbmV2ZXIgbGVhdmUgdGhlIHBoeSB1bmF0dGFjaGVkLiBLZWVwaW5nCiYjNDM7ICogZGV2aWNlX2FkZCgpIG91dCBvZiBydG5sIGFsc28gYXZvaWRzIGRlYWRsb2NraW5nIHdoZW4gYmluZGluZyBhIHBoeSB0aGF0CiYjNDM7ICogaXRzZWxmIHByb3ZpZGVzIGFuIFNGUCBjYWdlIChwaHlfcHJvYmUoKSAtJmd0OyBwaHlfc2ZwX3Byb2JlKCkgLSZndDsKJiM0MzsgKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIHRha2VzIHJ0bmwpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJaW50IGVycjsKIApAQCAtMTEzNSwxMCAmIzQzOzEyMzgsNTQgQEAgaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKICBvdXQ6CiAJLyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi8KIAlwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7Ci0KIAltZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKCZhbXA7cGh5ZGV2LSZndDttZGlvKTsKIAlyZXR1cm4gZXJyOwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzCiYjNDM7ICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzCiYjNDM7ICoKJiM0MzsgKiBTYW1lIGFzIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKSBidXQgY2FsbGVyIG11c3QgYWxyZWFkeSBob2xkIHJ0bmxfbG9jaygpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CWVyciA9IF9fcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzCiYjNDM7ICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwlwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTsKIAogLyoqCkBAIC0xMTUyLDggJiM0MzsxMjk5LDYgQEAgRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTsKIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAl1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtJmd0O21paV90cyk7Ci0JcHNlX2NvbnRyb2xfcHV0KHBoeWRldi0mZ3Q7cHNlYyk7Ci0KIAlkZXZpY2VfZGVsKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldik7CiAKIAkvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqLwpAQCAtMzk4MSw4ICYjNDM7NDEyNiwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCBwaHlfaW5pdCh2b2lkKQogCWlmIChyYykKIAkJZ290byBlcnJfYzQ1OwogCiYjNDM7CXJjID0gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKCZhbXA7cGh5X3BzZV9ub3RpZmllcik7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gZXJyX2dlbnBoeTsKJiM0MzsKIAlyZXR1cm4gMDsKIAomIzQzO2Vycl9nZW5waHk6CiYjNDM7CXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2dlbnBoeV9kcml2ZXIpOwogZXJyX2M0NToKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDtnZW5waHlfYzQ1X2RyaXZlcik7CiBlcnJfZXRodG9vbF9waHlfb3BzOgpAQCAtMzk5OSw2ICYjNDM7NDE1MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwaHlfZXhpdCh2b2lkKQogewomIzQzOwlwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcigmYW1wO3BoeV9wc2Vfbm90aWZpZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2dlbnBoeV9jNDVfZHJpdmVyKTsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDtnZW5waHlfZHJpdmVyKTsKIAlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwppbmRleCAwM2JmZDg2NDBkYjk2My4uMTg4NjhiZGQ2NDg1MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKQEAgLTIwODMsNyAmIzQzOzIwODMsNyBAQCBzdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9waHkoc3RydWN0IHNmcCAqc2ZwLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpCiAJLyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi8KIAlwaHktJmd0O2lzX29uX3NmcF9tb2R1bGUgPSB0cnVlOwogCi0JZXJyID0gcGh5X2RldmljZV9yZWdpc3RlcihwaHkpOwomIzQzOwllcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChwaHkpOwogCWlmIChlcnIpIHsKIAkJcGh5X2RldmljZV9mcmVlKHBoeSk7CiAJCWRldl9lcnIoc2ZwLSZndDtkZXYsICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWQ6ICVwZVxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jCmluZGV4IDY5ZGJkYmRlOWQ3MWE3Li42MTE1NDBkZjQzYmIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aHRvb2wuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sX25ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbm90aWZpZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BzZS1wZC9wc2UuaCZndDsKQEAgLTIzLDYgJiM0MzsyNCwzOSBAQCBzdGF0aWMgTElTVF9IRUFEKHBzZV9jb250cm9sbGVyX2xpc3QpOwogc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MocHNlX3B3X2RfbWFwKTsKIHN0YXRpYyBERUZJTkVfTVVURVgocHNlX3B3X2RfbXV0ZXgpOwogCiYjNDM7c3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQocHNlX2NvbnRyb2xsZXJfbm90aWZpZXIpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBzZV9yZWdpc3Rlcl9ub3RpZmllciAtIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9yIFBTRSBjb250cm9sbGVyIGV2ZW50cwomIzQzOyAqIEBuYjogbm90aWZpZXIgYmxvY2sgdG8gcmVnaXN0ZXIKJiM0MzsgKgomIzQzOyAqIFNlZSBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IGZvciBldmVudHMgZmlyZWQgYW5kIHRoZWlyIHN1YnNjcmliZXIKJiM0MzsgKiBjb250cmFjdC4gQ2FsbGJhY2tzIHJ1biBpbiBwcm9jZXNzIGNvbnRleHQ7IHRoZXkgbWF5IHNsZWVwLCB0YWtlCiYjNDM7ICogcnRubCwgYW5kIGNhbGwgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuIFRoZSBjaGFpbiBmaXJlcyBzeW5jaHJvbm91c2x5LAomIzQzOyAqIHNvIGEgUFNFIGNvbnRyb2xsZXIgZHJpdmVyJiMzOTtzIHByb2JlL3VuYmluZCBwYXRoIG11c3Qgbm90IGhvbGQgYW55CiYjNDM7ICogc3VjaCBsb2NrIHdoZW4gY2FsbGluZyBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIG9yCiYjNDM7ICogcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcigpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKJiM0Mzt7CiYjNDM7CXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmYW1wO3BzZV9jb250cm9sbGVyX25vdGlmaWVyLCBuYik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBzZV9yZWdpc3Rlcl9ub3RpZmllcik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIgLSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGNhbGxiYWNrCiYjNDM7ICogQG5iOiBub3RpZmllciBibG9jayBwcmV2aW91c2x5IHBhc3NlZCB0byBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoKQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmFtcDtwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcik7CiYjNDM7CiAvKioKICAqIHN0cnVjdCBwc2VfY29udHJvbCAtIGEgUFNFIGNvbnRyb2wKICAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBQU0UgY29udHJvbGxlciBkZXZpY2UKQEAgLTExMDQsNiAmIzQzOzExMzgsOSBAQCBpbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpCiAJbGlzdF9hZGQoJmFtcDtwY2Rldi0mZ3Q7bGlzdCwgJmFtcDtwc2VfY29udHJvbGxlcl9saXN0KTsKIAltdXRleF91bmxvY2soJmFtcDtwc2VfbGlzdF9tdXRleCk7CiAKJiM0MzsJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmYW1wO3BzZV9jb250cm9sbGVyX25vdGlmaWVyLAomIzQzOwkJCQkgICAgIFBTRV9SRUdJU1RFUkVELCBwY2Rldik7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7CkBAIC0xMTE0LDYgJiM0MzsxMTUxLDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpOwogICovCiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpCiB7CiYjNDM7CWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmFtcDtwc2VfY29udHJvbGxlcl9ub3RpZmllciwKJiM0MzsJCQkJICAgICBQU0VfVU5SRUdJU1RFUkVELCBwY2Rldik7CiYjNDM7CiAJcHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTsKIAlwc2VfcmVsZWFzZV9waXMocGNkZXYpOwogCWlmIChwY2Rldi0mZ3Q7aXJxKQpAQCAtMTk4MSwzICYjNDM7MjAyMSwxNyBAQCBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYykKIAlyZXR1cm4gcHNlYy0mZ3Q7cGNkZXYtJmd0O3R5cGVzICZhbXA7IEVUSFRPT0xfUFNFX0MzMzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9oYXNfYzMzKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2IC0gVGVzdCB3aGV0aGVyIGEgcHNlX2NvbnRyb2wgdGFyZ2V0cyBhIGNvbnRyb2xsZXIKJiM0MzsgKiBAcHNlYzogcHNlX2NvbnRyb2wgb2J0YWluZWQgZnJvbSBvZl9wc2VfY29udHJvbF9nZXQoKQomIzQzOyAqIEBwY2RldjogUFNFIGNvbnRyb2xsZXIgdG8gY29tcGFyZSBhZ2FpbnN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46ICV0cnVlIGlmIEBwc2VjIHdhcyBvYnRhaW5lZCBmcm9tIEBwY2RldiwgJWZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0Mztib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBwc2VjLSZndDtwY2RldiA9PSBwY2RldjsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xfbWF0Y2hlc19wY2Rldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAxOTlhN2FhYTM0MWJmZC4uODY1YjliYWRkYjg1ZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjE1OCw2ICYjNDM7MjE1OCw4IEBAIHN0cnVjdCBwaHlfZGV2aWNlICpmd25vZGVfcGh5X2ZpbmRfZGV2aWNlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpwaHlfZndub2RlKTsKIHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGVfZ2V0X3BoeV9ub2RlKGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpOwogc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7CiBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTsKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmxfbG9jaygpOyBzZWUgcGh5X2RldmljZV9yZWdpc3RlcigpIGZvciB0aGUgcHVibGljIGZvcm0uICovCiYjNDM7aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpOwogdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiB2b2lkIHBoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IHBoeV9nZXRfYzQ1X2lkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmgKaW5kZXggNGU1Njk2Y2ZhZGU3Y2MuLmQ0MzEwY2E3MWEzZTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaApAQCAtMjEsNiAmIzQzOzIxLDcgQEAgc3RydWN0IG5ldF9kZXZpY2U7CiBzdHJ1Y3QgcGh5X2RldmljZTsKIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXY7CiBzdHJ1Y3QgbmV0bGlua19leHRfYWNrOwomIzQzO3N0cnVjdCBub3RpZmllcl9ibG9jazsKIAogLyogQzMzIFBTRSBleHRlbmRlZCBzdGF0ZSBhbmQgc3Vic3RhdGUuICovCiBzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX2V4dF9zdGF0ZV9pbmZvIHsKQEAgLTMzNyw2ICYjNDM7MzM4LDI0IEBAIGVudW0gcHNlX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgewogCVBTRV9CVURHRVRfRVZBTF9TVFJBVF9EWU5BTUlDCT0gMSAmbHQ7Jmx0OyAyLAogfTsKIAomIzQzOy8qKgomIzQzOyAqIGVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgLSBQU0UgY29udHJvbGxlciBsaWZlY3ljbGUgZXZlbnRzCiYjNDM7ICoKJiM0MzsgKiBFdmVudCBkYXRhIGluIGNhbGxiYWNrcyBpcyBhbHdheXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QKJiM0MzsgKiBwc2VfY29udHJvbGxlcl9kZXYgZmlyaW5nIHRoZSBldmVudC4KJiM0MzsgKgomIzQzOyAqIEBQU0VfUkVHSVNURVJFRDogY29udHJvbGxlciBhZGRlZCB0byBwc2VfY29udHJvbGxlcl9saXN0IGFuZAomIzQzOyAqCXJlc29sdmFibGUgYnkgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuCiYjNDM7ICogQFBTRV9VTlJFR0lTVEVSRUQ6IGNvbnRyb2xsZXIgYWJvdXQgdG8gYmUgcmVtb3ZlZCBmcm9tCiYjNDM7ICoJcHNlX2NvbnRyb2xsZXJfbGlzdC4gU3Vic2NyaWJlcnMgaG9sZGluZyBwc2VfY29udHJvbCByZWZlcmVuY2VzCiYjNDM7ICoJdGFyZ2V0aW5nIGl0IG11c3QgZHJvcCB0aGVtIGJlZm9yZSByZXR1cm5pbmcgYW5kIG11c3Qgbm90CiYjNDM7ICoJYWNxdWlyZSBuZXcgcmVmZXJlbmNlcyBmb3IgaXQuCiYjNDM7ICovCiYjNDM7ZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCB7CiYjNDM7CVBTRV9SRUdJU1RFUkVELAomIzQzOwlQU0VfVU5SRUdJU1RFUkVELAomIzQzO307CiYjNDM7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUFNFX0NPTlRST0xMRVIpCiBpbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpOwogdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTsKQEAgLTM2Niw2ICYjNDM7Mzg1LDEyIEBAIGludCBwc2VfZXRodG9vbF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsCiBib29sIHBzZV9oYXNfcG9kbChzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpOwogYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpOwogCiYjNDM7Ym9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYywKJiM0MzsJCQkgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpOwomIzQzOwomIzQzO2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiYjNDM7aW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwomIzQzOwogI2Vsc2UKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcHNlX2NvbnRyb2wgKm9mX3BzZV9jb250cm9sX2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCkBAIC00MTYsNiAmIzQzOzQ0MSwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYywKJiM0MzsJCQkJCSAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKIAogI2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxOTQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQU0UgQ29udHJvbGxlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHJlZmFjdG9yaW5nIGhvdyBQU0UgY29udHJvbGxlcnMgaW50ZXJhY3Qgd2l0aCBQSFkgZGV2aWNlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBhIG5vdGlmaWVyIHN5c3RlbSwgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAgYW5kIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAsIGluIGBwc2VfY29yZS5jYC4mIzM0OyBUaGF0JiMzOTtzIGdvb2Q7IGRlY291cGxpbmcgdGhyb3VnaCBub3RpZmljYXRpb25zIGlzIGEgY2xlYW4gYXBwcm9hY2guIFRoZW4gSSBzZWUgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIGBwaHlfZGV2aWNlLmNgIHRvIHJlZ2lzdGVyIGEgYHBoeV9wc2Vfbm90aWZpZXJgIHRoYXQgcmVhY3RzIHRvIGBQU0VfUkVHSVNURVJFRGAgYW5kIGBQU0VfVU5SRUdJU1RFUkVEYCBldmVudHMuIFRoaXMgaXMgbG9naWNhbCwgdGhlIFBIWXMgbmVlZCB0byBrbm93IGFib3V0IHRoZSBQU0UuCgpUaGUgY29yZSBvZiBpdCBpcyB0aGF0IHdoZW4gYSBQU0UgY29udHJvbGxlciByZWdpc3RlcnMsIGl0JiMzOTtsbCBpdGVyYXRlIHRocm91Z2ggYWxsIFBIWXMgb24gdGhlIE1ESU8gYnVzIGFuZCB0cnkgdG8gaG9vayBpdHNlbGYgdXAuIEFuZCB3aGVuIGl0IHVucmVnaXN0ZXJzLCBpdCBkZXRhY2hlcy4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KCk5vdywgdGhleSBhbHNvIGFsdGVyZWQgYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeWAg4oCTIHRoZXkgcmVtb3ZlZCB0aGF0IHN5bmNocm9ub3VzIGBmd25vZGVfZmluZF9wc2VfY29udHJvbGAgY2FsbCwgYW5kIG5vdyByZWx5IG9uIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBvciB0aGUgbm90aWZpZXIuIFRoaXMgaXMgYSBiaXQgbW9yZSBzdWJ0bGUsIG1ha2luZyBzdXJlIHRoZSBhdHRhY2htZW50IGlzIGFsd2F5cyBoYW5kbGVkIHRocm91Z2ggdGhlIHVwZGF0ZWQgbm90aWZpZXIgbWVjaGFuaXNtLiBHb29kLCB0aGF0JiMzOTtzIGltcG9ydGFudCBmb3IgdGhlIGludGVncml0eSBvZiB0aGUgcGF0Y2guCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCAmIzM0O0NhbiBJIHJlYWNoIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8mIzM0OyBUaGF0JiMzOTtzIHdoZXJlIGZ1enppbmcgYW5kIHRlc3RpbmcgY29tZXMgaW4sIG9mIGNvdXJzZS4gTURJTyBidXNlcyBhbmQgUEhZIGRldmljZXMgKmNhbiogYmUgY3JlYXRlZCB2aXJ0dWFsbHksIHJpZ2h0PyBOZXRkZXZzaW0sIGR1bW15IFBIWXMsIHZldGgvbWFjc2Vj4oCmIG9rYXksIHNvIFBIWXMgYXJlIHVzdWFsbHkgaGFyZHdhcmUgYnV0IHdlIGNhbiBtYWtlIHRoZW0gdmlydHVhbCwgcmlnaHQ/IFRoZXJlIGFyZSBzb21lIHZpcnR1YWwgZHJpdmVycywgYW5kIHdlIGNhbiBmdXp6IE1ESU8vUEhZIHJlZ2lzdHJhdGlvbiBpZiBuZWVkZWQuIEhvbGQgb24uLi4gRG9lcyBzeXprYWxsZXIgZG8gaXQ/IENhbiBpdCBjcmVhdGUgdmlydHVhbCBkZXZpY2VzIHRoYXQgcmVnaXN0ZXIgUEhZcy4uLiB3YWl0LCB3aGF0IGFib3V0IGBtYWM4MDIxMV9od3NpbWA/IE5vLCB0aGF0JiMzOTtzIG5vdCByaWdodCwgUEhZcyBhcmUgdXN1YWxseSBmb3IgRXRoZXJuZXQsIG5vdCB3aXJlbGVzcy4uLiBPa2F5LCBgbmV0ZGV2c2ltYCBkb2VzbiYjMzk7dCByZWdpc3RlciBQSFlzIHNwZWNpZmljYWxseS4gQnV0IHdoYXQgYWJvdXQgYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeWA/IFRoYXQmIzM5O3MgYWJvdXQgZGV2aWNlIHRyZWVzIGFuZCBBQ1BJLCByaWdodD8KClNvLCBjYW4gc3l6a2FsbGVyIHRyaWdnZXIgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGRpcmVjdGx5PyBNYXliZS4gVmlydHVhbCBkcml2ZXJzLCBkZWZpbml0ZWx5LiBVU0IgZHJpdmVycywgcG90ZW50aWFsbHkuIEZvciBleGFtcGxlLCBgdXNibmV0YCBkcml2ZXJzLCB0aGV5IG1pZ2h0IHJlZ2lzdGVyIFBIWXMuLi4KClRoZSBuZXh0IGNydWNpYWwgcG9pbnQgaXMsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgaXMgY2FsbGVkIGJ5IHRoZSBQU0UgY29udHJvbGxlciBkcml2ZXJzIHRoZW1zZWx2ZXMuIEFyZSB0aGVyZSAqYW55KiB2aXJ0dWFsIFBTRSBjb250cm9sbGVyIGRyaXZlcnM/IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4gV2UgbmVlZCB0byBjaGVjayBpZiBgQ09ORklHX1BTRV9DT05UUk9MTEVSYCBpcyBlbmFibGVkIGFuZCB0aGVuIGxvb2sgZm9yIFBTRSBkcml2ZXJzIHRoYXQgYXJlIHBvdGVudGlhbGx5IHRyaWdnZXJhYmxlLiBUaW1lIHRvIGdyZXAgZm9yIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgYW5kIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYz0xNzU2PXN0YXRpYyBpbnQgcGQ2OTJ4MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4MzgtXHRwcml2LVx1MDAzZXBjZGV2LnBpc19wcmlvX21heCA9IDI7XG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jOjE4Mzk6XHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwY2Rldik7XG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4NDAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTI3PXN0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHBzZV9jb250cm9sbGVyX25vdGlmaWVyKTtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0zNi0gKiBzbyBhIFBTRSBjb250cm9sbGVyIGRyaXZlciYjMzk7cyBwcm9iZS91bmJpbmQgcGF0aCBtdXN0IG5vdCBob2xkIGFueVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6Mzc6ICogc3VjaCBsb2NrIHdoZW4gY2FsbGluZyBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIG9yXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0zOC0gKiBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkuXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTA0Nj1zdGF0aWMgdm9pZCBwc2Vfc2VuZF9udGZfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDY3LS8qKlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTA2ODogKiBwc2VfY29udHJvbGxlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDY5LSAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBpbml0aWFsaXplZCBQU0UgY29udHJvbGxlciBkZXZpY2Vcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDcyLSAqL1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTA3MzppbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDc0LXtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTQ1LX1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExNDY6RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE0Ny1cbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xMTY5PXN0YXRpYyB2b2lkIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTc0LS8qKlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE3NTogKiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyIC0gcmVzb3VyY2UgbWFuYWdlZCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTc2LSAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUFNFIGNvbnRyb2xsZXJcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTc4LSAqXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTc5OiAqIE1hbmFnZWQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKS4gRm9yIFBTRSBjb250cm9sbGVycyByZWdpc3RlcmVkIGJ5XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTgwLSAqIHRoaXMgZnVuY3Rpb24sIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKSBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBvblxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE4MTogKiBkcml2ZXIgZGV0YWNoLiBTZWUgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExODItICpcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTg0LSAqL1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE4NTppbnQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTg2LVx0XHRcdFx0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExOTUtXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTk2Olx0cmV0ID0gcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGNkZXYpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE5Ny1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMjA2LX1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEyMDc6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMjA4LVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM9OTQ9cHNlX3JlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMtMTI2LVx0cHJpdi1cdTAwM2VwY2Rldi50eXBlcyA9IEVUSFRPT0xfUFNFX1BPREw7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jOjEyNzpcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMtMTI4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYz00NzM9c3RhdGljIGludCBzaTM0NzRfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jLTU0Mi1cbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYzo1NDM6XHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwY2Rldik7XG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTQ0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jPTE0MzA9c3RhdGljIGludCB0cHMyMzg4MV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTE2LVx0cHJpdi1cdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfU1RBVElDO1xuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM6MTUxNzpcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTgtXHRpZiAocmV0KSB7XG4tLVxuaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmg9MzU0PWVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQge1xuLS1cbmluY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oLTM1OS0jaWYgSVNfRU5BQkxFRChDT05GSUdfUFNFX0NPTlRST0xMRVIpXG5pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaDozNjA6aW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbmluY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oLTM2MS12b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xuaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmg9MzYyPXN0cnVjdCBkZXZpY2U7XG5pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaDozNjM6aW50IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmgtMzY0LVx0XHRcdFx0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA0NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBTRSBDb250cm9sbGVyIFJlZ2lzdHJhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgIGFuZCBgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXJgIGZ1bmN0aW9ucyB3aXRoaW4gYHBzZV9jb3JlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB0aGUgY29yZSBub3RpZmljYXRpb24gbWVjaGFuaXNtLCBsaWtlbHkgZm9yIHNpZ25hbGluZyB3aGVuIGEgUFNFIGNvbnRyb2xsZXIsIG9yIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBjb250cm9sbGVyLCBiZWNvbWVzIGF2YWlsYWJsZSBvciBpcyByZW1vdmVkLiYjMzQ7CgpUaGUgbmV4dCBsaW5lIHBvaW50cyB0byBtb2RpZmljYXRpb25zIGluIGBwaHlfZGV2aWNlLmNgIHRvIHJlZ2lzdGVyIHRoaXMgbm90aWZpZXIuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBQSFkgZGV2aWNlcyBhcmUgb2Z0ZW4gdGhlIGltbWVkaWF0ZSBjb25zdW1lcnMgb3IgdXNlcnMgb2YgdGhpcyBQU0UgY29udHJvbGxlciBpbmZvcm1hdGlvbiwgZXNwZWNpYWxseSB0aG9zZSB0aGF0IG5lZWQgdG8gbmVnb3RpYXRlIHBvd2VyIGRlbGl2ZXJ5LiBUaGUgbm90aWZpZXIgaXMgdHJpZ2dlcmVkIHVwb24gcmVnaXN0cmF0aW9uIG9yIHVucmVnaXN0cmF0aW9uIG9mIHRoZSBQU0UgY29udHJvbGxlciwgd2hpY2ggaXMgdGhlIGtleSBldmVudCBmb3IgdGhlIFBIWS4KCk5vdywgbGV0JiMzOTtzIHNlZSBob3cgdGhlc2UgUFNFIGNvbnRyb2xsZXJzIGFjdHVhbGx5IGdldCByZWdpc3RlcmVkLiBUaGUgY29kZSBtZW50aW9ucyBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGJlaW5nIHRoZSByZXNwb25zaWJsZSBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSB2YXJpb3VzIGRyaXZlcnMsIGxpa2UgYHBkNjkyeDBgLCBgcHNlX3JlZ3VsYXRvcmAsIGBzaTM0NzRgLCBhbmQgYHRwczIzODgxYC4gR29vZC4gVGhlc2UgYXBwZWFyIHRvIGJlIHRoZSBhY3R1YWwgaGFyZHdhcmUgZHJpdmVycyBmb3IgdGhlIFBTRSBjb250cm9sbGVycyB0aGVtc2VsdmVzLgoKYHBzZV9yZWd1bGF0b3JgIHNwZWNpZmljYWxseSBzdGFuZHMgb3V0IGJlY2F1c2UgaXQmIzM5O3MgbWVudGlvbmVkIGFzIGEgcGxhdGZvcm0gZHJpdmVyLiBUaGF0IG1ha2VzIG1lIHBhdXNlIGFuZCBjb25zaWRlciBpdHMgaW1wbGljYXRpb25zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gUGxhdGZvcm0gZHJpdmVycyBvZnRlbiBoYXZlIHN1YnRsZSBkZXBlbmRlbmNpZXMgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgcGxhdGZvcm0uIFRoaXMgcHJvbXB0cyB0aGUgcXVlc3Rpb24sICYjMzQ7Q2FuIGBwc2VfcmVndWxhdG9yYCwgYW5kIHRoZXJlZm9yZSB0aGUgUFNFIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBiZSB0cmlnZ2VyZWQgYW5kIGZ1bmN0aW9uIGNvcnJlY3RseSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/JiMzNDsgSXTigJlzIHRpbWUgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBgcHNlX3JlZ3VsYXRvci5jYCBzb3VyY2UgY29kZSBhbmQgZmluZCBvdXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgYW55IGhhcmR3YXJlIGFjY2VzcyBpdCBtaWdodCBwZXJmb3JtIHRvIHNlZSBpZiBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2VfcmVnX3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM9OTM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYzo5NDpwc2VfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jLTk1LXtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jPTE0Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwc2VfcmVnX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM6MTQ0Olx0LnByb2JlXHRcdD0gcHNlX3JlZ19wcm9iZSxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMtMTQ1LVx0LmRyaXZlclx0XHQ9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc0MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYHNmcC5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIHBsYXRmb3JtIGRyaXZlciBgcHNlX3JlZ3VsYXRvcmAgY2F0Y2hlcyBteSBleWUuIEl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBzbyB0aGF0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBwcm9iZWQgYmFzZWQgb24gZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMgb3IsIG1vcmUgaW50ZXJlc3RpbmdseSwgYnkgc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyIGluamVjdGluZyBwbGF0Zm9ybSBkZXZpY2VzIOKAkyB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gVGhlIG1haW4gdGhpbmcgdGhhdCB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGlzIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYW5kIHNwZWNpZmljYWxseSwgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uLiBOb3csIHRoZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgYSBQSFkgZGV2aWNlIGNhbiBldmVuIGJlIHJlZ2lzdGVyZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLgoKVGhpbmtpbmcgYWJvdXQgaXQsIHllcywgaXQgY2FuLiBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiBjcmVhdGluZyB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcywgd2hpY2ggd291bGQgdGhlbiBsaWtlbHkgcmVnaXN0ZXIgdGhlc2UgUEhZcywgb3IgaW5qZWN0IGVudGlyZSBNRElPIGJ1c2VzIGFuZCBQSFlzIGRpcmVjdGx5LiBUaGlzIGxlYWRzIG1lIHRvIGZvY3VzIGluIG9uIHRoZSBgcGh5X2RldmljZV9yZWdpc3RlcmAgY2FsbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZXJlKiBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSBhbmQgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGUgY2hhbmdlLgoKQWhhISBgcGh5X2RldmljZV9yZWdpc3RlcmAgaXMgY2FsbGVkIGJ5IGBzZnBfc21fcHJvYmVfcGh5YCBpbiBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGF0IGZ1bmN0aW9uIHRvIGNhbGwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCBpbnN0ZWFkLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcywgaXQmIzM5O3Mgbm90IGEgY2hhbmdlIHRvIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBidXQgYW4gYXR0ZW1wdCB0byBtYWtlIGl0IG1vcmUgYXRvbWljLiBSaWdodCwgdGltZSB0byBkaXZlIGludG8gYHNmcC5jYCBhbmQgc2VlIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGxvY2sgYXJlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvY2tpbmcgY29udGV4dCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGlzIGNoYW5nZSBpcyB0cnlpbmcgdG8gYWRkcmVzcywgYXMgd2VsbCBhcyB0aGUgaW1wYWN0IG9uIG90aGVyIGFyZWFzIG9mIHRoZSBzeXN0ZW0gdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBQSFkgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcF9zbV9wcm9iZV9waHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIwNjI9c3RhdGljIHZvaWQgc2ZwX3NtX3BoeV9kZXRhY2goc3RydWN0IHNmcCAqc2ZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMDY5LVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIwNzA6c3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIwNzEte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yMjAwPXN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX2Zvcl9waHkoc3RydWN0IHNmcCAqc2ZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjA4LVx0Y2FzZSBNRElPX0kyQ19NQVJWRUxMX0MyMjpcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjA5Olx0XHRlcnIgPSBzZnBfc21fcHJvYmVfcGh5KHNmcCwgU0ZQX1BIWV9BRERSLCBmYWxzZSk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxMC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMTItXHRjYXNlIE1ESU9fSTJDX0M0NTpcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjEzOlx0XHRlcnIgPSBzZnBfc21fcHJvYmVfcGh5KHNmcCwgU0ZQX1BIWV9BRERSLCB0cnVlKTtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjE0LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxNi1cdGNhc2UgTURJT19JMkNfUk9MTEJBTEw6XG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MjIxNzpcdFx0ZXJyID0gc2ZwX3NtX3Byb2JlX3BoeShzZnAsIFNGUF9QSFlfQUREUl9ST0xMQkFMTCwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxOC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NjIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQ6IFBTRSBDb250cm9sbGVyIGFuZCBQSFkgUmVnaXN0cmF0aW9uIExvZ2ljKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHNsZXcgb2YgbmV3IGZ1bmN0aW9uczogYHBoeV90cnlfYXR0YWNoX3BzZWAsIGBwaHlfcHNlX2F0dGFjaF9vbmVgLCBgcGh5X3BzZV9kZXRhY2hfb25lYCwgYHBoeV9wc2Vfbm90aWZpZXJfZXZlbnRgLCBgX19waHlfZGV2aWNlX3JlZ2lzdGVyYCwgYW5kIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAuIFRoZXkgc2VlbSBzb2xpZDsgdGhleSYjMzk7cmUgY2xlYXJseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwsIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IG1lYW4gdGhleSYjMzk7cmUgYnVsbGV0cHJvb2YuIEdpdmVuIHRoYXQgdGhpcyBjb2RlJiMzOTtzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgUEhZIHJlZ2lzdHJhdGlvbiBhbmQgUFNFIGNvbnRyb2xsZXIgbm90aWZpZXIgbG9naWMg4oCTIHByaW1lIHJlYWwgZXN0YXRlIGZvciBwb3RlbnRpYWwgYnVncyDigJMgSSYjMzk7ZCBzYXkgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHdhcnJhbnRlZC4KCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb246IGBwaHlfdHJ5X2F0dGFjaF9wc2VgLCBgcGh5X3BzZV9hdHRhY2hfb25lYCwgYHBoeV9wc2VfZGV0YWNoX29uZWAsIGBwaHlfcHNlX25vdGlmaWVyX2V2ZW50YCwgYF9fcGh5X2RldmljZV9yZWdpc3RlcmAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgLCBgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXJgLCBhbmQgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGtleSBpbnRlcmFjdGlvbnMuCgpOb3cgZm9yIHRoZSBjb25maWd1cmF0aW9uLiBXZSBuZWVkIGBDT05GSUdfUEhZTElCYCDigJMgdGhhdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGEgZ2l2ZW4g4oCTIGFuZCBjcml0aWNhbGx5LCBgQ09ORklHX1BTRV9DT05UUk9MTEVSYC4gSSYjMzk7bSBzZWVpbmcgZXhwbGljaXQgY2hlY2tzIGZvciBpdCBzY2F0dGVyZWQgdGhyb3VnaG91dCwgc28gaXQmIzM5O3MgZXNzZW50aWFsIGZvciBjb21waWxhdGlvbi4gSnVzdCB0byBiZSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IGBkcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBwc2VfY29yZS5jYCBhbmQgYENPTkZJR19QU0VfQ09OVFJPTExFUmAuIFdlIGNhbiYjMzk7dCBhZmZvcmQgdG8gd2FzdGUgdGltZSB0YXJnZXRpbmcgc3ltYm9scyB0aGF0IHdvbiYjMzk7dCBiZSBjb21waWxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNlX2NvcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlLTMtXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICYjNDM7PSBwc2VfY29yZS5vXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUtNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MTEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTmV0d29yayBQSFkgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIHdlIG5lZWQgYENPTkZJR19QU0VfQ09OVFJPTExFUmAgZm9yIHRoaXMuIExldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgZWxzZSByZWxldmFudCBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhpbmtpbmcgYWJvdXQgaXQsIGBDT05GSUdfTURJT19ERVZJQ0VgIGlzIGZyZXF1ZW50bHkgbGlua2VkIHdpdGggUEhZTElCLCBzbyB0aGF04oCZcyBwcm9iYWJseSBhIGdvb2Qgb25lIHRvIHJldmlldyBhcyB3ZWxsLiBBbmQsIGdpdmVuIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYHNmcC5jYCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUgY2hlY2sgYW5kIGluY2x1ZGUgYENPTkZJR19TRlBgIGZvciBnb29kIG1lYXN1cmUuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIHBlZWsgYXQgYGRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZWAgdG8gY29uZmlybSB3aGVyZSBgc2ZwLmNgIGlzIGFjdHVhbGx5IGJlaW5nIGJ1aWx0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZnBcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL01ha2VmaWxlPTExPWhmaTEteSA6PSBcXFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL01ha2VmaWxlLTM4LVx0cXAubyBcXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvTWFrZWZpbGU6Mzk6XHRxc2ZwLm8gXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL01ha2VmaWxlLTQwLVx0cmMubyBcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jPTE3Nzg9ZmJuaWNfZ2V0X21vZHVsZV9lZXByb21fYnlfcGFnZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTE3OTktXHRmd19jbXBsLVx1MDAzZXUucXNmcC5sZW5ndGggPSBwYWdlX2RhdGEtXHUwMDNlbGVuZ3RoO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM6MTgwMDpcdGZ3X2NtcGwtXHUwMDNldS5xc2ZwLm9mZnNldCA9IHBhZ2VfZGF0YS1cdTAwM2VvZmZzZXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0xODAxLVx0ZndfY21wbC1cdTAwM2V1LnFzZnAucGFnZSA9IHBhZ2VfZGF0YS1cdTAwM2VwYWdlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYz0xMjk0PXN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfcXNmcF9yZWFkX3Jlc3Aodm9pZCAqb3BhcXVlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xMzI5LVx0aWYgKGxlbmd0aCAhPSBjbXBsX2RhdGEtXHUwMDNldS5xc2ZwLmxlbmd0aCB8fFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjEzMzA6XHQgICAgb2Zmc2V0ICE9IGNtcGxfZGF0YS1cdTAwM2V1LnFzZnAub2Zmc2V0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTMzMS1cdFx0ZGV2X3dhcm4oZmJkLVx1MDAzZWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTMzMy1cdFx0XHQgb2Zmc2V0LCBsZW5ndGgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM6MTMzNDpcdFx0XHQgY21wbF9kYXRhLVx1MDAzZXUucXNmcC5vZmZzZXQsIGNtcGxfZGF0YS1cdTAwM2V1LnFzZnAubGVuZ3RoKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xMzM1LVx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvTWFrZWZpbGU9OD1zcGFyeDUtc3dpdGNoLXkgIDo9IHNwYXJ4NV9tYWluLm8gc3Bhcng1X3BhY2tldC5vIFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9NYWtlZmlsZS0xMy0gc3Bhcng1X3RjX21hdGNoYWxsLm8gc3Bhcng1X3Bvb2wubyBzcGFyeDVfc2RsYi5vIHNwYXJ4NV9wb2xpY2UubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9NYWtlZmlsZToxNDogc3Bhcng1X3BzZnAubyBzcGFyeDVfbWlycm9yLm8gc3Bhcng1X3JlZ3Mub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9NYWtlZmlsZS0xNS1cbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElORykgJiM0Mzs9IG1paV90aW1lc3RhbXBlci5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjUtXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX1NGUClcdFx0JiM0Mzs9IHNmcC5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjctc2ZwLW9iai0kKENPTkZJR19TRlApXHRcdCYjNDM7PSBzZnAtYnVzLm9cbi0tXG5kcml2ZXJzL252bWVtL01ha2VmaWxlPTM0PW52bWVtLWxhbjk2NjItb3RwYy15XHRcdDo9IGxhbjk2NjItb3RwYy5vXG5kcml2ZXJzL252bWVtL01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19OVk1FTV9MQVlFUlNDQVBFX1NGUClcdCYjNDM7PSBudm1lbS1sYXllcnNjYXBlLXNmcC5vXG5kcml2ZXJzL252bWVtL01ha2VmaWxlOjM2Om52bWVtLWxheWVyc2NhcGUtc2ZwLXlcdFx0XHQ6PSBsYXllcnNjYXBlLXNmcC5vXG5kcml2ZXJzL252bWVtL01ha2VmaWxlLTM3LW9iai0kKENPTkZJR19OVk1FTV9MUEMxOFhYX0VFUFJPTSlcdCYjNDM7PSBudm1lbV9scGMxOHh4X2VlcHJvbS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzU3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhlIHJlcXVpcmVtZW50IGZvciBgQ09ORklHX1NGUGAgaW1wYWN0aW5nIGBzZnAuY2AuIEFscmlnaHQsIGxldCYjMzk7cyBrZWVwIHRoYXQgaW4gbWluZCwgYW5kIHRoZW4gbGV0JiMzOTtzIGdvIHdpZGVyIGFuZCBzZWUgd2hhdCBlbHNlIHRoaXMgcGF0Y2ggdG91Y2hlcy4gTG9va3MgbGlrZSBpdCYjMzk7cyBhbHNvIG1ha2luZyBhIG1vZGlmaWNhdGlvbiB0byBgZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jYC4gUmlnaHQsIHRoYXQmIzM5O3MgdXNlZnVsIGNvbnRleHQuIE5vdywgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcywgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBNYWtlZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBnbyBsb29rIGF0IGBkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGhvdyBgZndub2RlX21kaW8uY2AgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIE1ESU8gc3Vic3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHZpZXcgb2YgaG93IHRoaXMgcGF0Y2ggaXMgZ29pbmcgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZXhpc3RpbmcgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z3bm9kZV9tZGlvXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX0FDUElfTURJTylcdFx0JiM0Mzs9IGFjcGlfbWRpby5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0JiM0Mzs9IGZ3bm9kZV9tZGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtNi1vYmotJChDT05GSUdfT0ZfTURJTylcdFx0JiM0Mzs9IG9mX21kaW8ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEzNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBQSFkgRHJpdmVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGBDT05GSUdfRldOT0RFX01ESU9gIGZsYWcgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGRpcmVjdGx5IHRpZWQgdG8gYGZ3bm9kZV9tZGlvLmNgLiBCdXQgaGFuZyBvbi4uLiB1cG9uIGZ1cnRoZXIgcmVmbGVjdGlvbiwgYGZ3bm9kZV9tZGlvLmNgIGlzIG1vcmUgb2YgYSBjbGVhbnVwIG9yIHJlZmluZW1lbnQ7IHRoZSAqcmVhbCogaGVhdnkgbGlmdGluZywgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBQSFkgaW50ZXJhY3Rpb25zLCByZXNpZGVzIGluIGBwaHlfZGV2aWNlLmNgIGFuZCBgcHNlX2NvcmUuY2AuIEFoLCByaWdodCwgYHBoeV9kZXZpY2UuY2AgZ2V0cyBidWlsdCB3aGVuIGBDT05GSUdfUEhZTElCYCBpcyBhY3RpdmF0ZWQuIEdpdmVuIHRoYXQsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyB0aGVyZS4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZGV2aWNlXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMy1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XHRcdFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cdFx0XHRcdCAgIGxpbmttb2RlLm8gcGh5X2xpbmtfdG9wb2xvZ3kubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUxMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2YgbGlicGh5LXkqKgoKQWxyaWdodCwgc28gYGxpYnBoeS15YCBpcyBidWlsdCwgd2hpY2ggbGlrZWx5IG1lYW5zIGl0JiMzOTtzIGEgc3RhdGljIGxpYnJhcnksIGFuZCB0aGF0JiMzOTtzIHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIG5haWwgZG93biBwcmVjaXNlbHkgKndoaWNoKiBvbmUuIEl0JiMzOTtzIHVzdWFsbHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgdGhpcyBvbmUgaXMgYSBiaXQgZnV6enkuIFRoZSB0ZXh0IHNheXMgaXQgZGVwZW5kcyBvbiBgQ09ORklHX1BIWUxJQmAuIFRpbWUgdG8gY29uZmlybSB0aGF0IGFuZCB0aGVuIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBkZXBlbmRlbmNpZXMgb24gaXQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRvZXMgYW5kIGlmIGl0JiMzOTtzIGdvdCBhbnkgc25lYWt5IHNpZGUgZWZmZWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpYnBoeS15JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjQ6bGlicGh5LXlcdFx0XHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS01LVx0XHRcdFx0ICAgbGlua21vZGUubyBwaHlfbGlua190b3BvbG9neS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzkyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNYWtlZmlsZSBOYXZpZ2F0aW9uOiBBIFBIWSBEcml2ZXImIzM5O3MgTGlrZWx5IExvY2F0aW9uKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIG9iamVjdCBmaWxlIGZvciB0aGlzIFBIWSBsaWJyYXJ5LCBgbGlicGh5Lm9gLCBpcyBkZWZpbmVkLiBCYXNlZCBvbiBteSBleHBlcmllbmNlIHdpdGgga2VybmVsIGJ1aWxkIHN5c3RlbXMsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBpcyBwcm9iYWJseSB0aGUgTWFrZWZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7ZCBhbnRpY2lwYXRlIHNlZWluZyBhbiBhc3NpZ25tZW50IGxpa2UgYG9iai0kKENPTkZJR19QSFlMSUIpICYjNDM7PSBsaWJwaHkub2AuIFRoZSBgb2JqLWAgcHJlZml4IGlzIGEgY2xhc3NpYyBpbmRpY2F0b3IgdGhhdCB0aGUgb2JqZWN0IGZpbGUmIzM5O3MgaW5jbHVzaW9uIGlzIGNvbmRpdGlvbmFsLCBwb3NzaWJseSBjb250cm9sbGVkIGJ5IGEgS2NvbmZpZyBvcHRpb24sIGluIHRoaXMgY2FzZSwgYENPTkZJR19QSFlMSUJgLiBUaGlzIGlzIGEgcHJldHR5IGNvbW1vbiBwYXR0ZXJuIGZvciBtb2R1bGFyIGRyaXZlcnMuIExldCYjMzk7cyBzZWUgaWYgdGhhdCBhc3N1bXB0aW9uIGhvbGRzIHRydWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfUEhZTElCXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0xNj1saWJwaHktJChDT05GSUdfT1BFTl9BTExJQU5DRV9IRUxQRVJTKSAmIzQzOz0gb3Blbl9hbGxpYW5jZV9oZWxwZXJzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xNy1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxODpvYmotJChDT05GSUdfUEhZTElCKVx0XHQmIzQzOz0gbWRpb19idXMub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19QSFlMSU5LKVx0XHQmIzQzOz0gcGh5bGluay5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1BIWUxJQilcdFx0JiM0Mzs9IGxpYnBoeS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX1BIWUxJQilcdFx0JiM0Mzs9IG1kaW9fZGV2cmVzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yMi1vYmotJChDT05GSUdfUEhZX1BBQ0tBR0UpXHQmIzQzOz0gcGh5X3BhY2thZ2Uub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIwNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUFNFIENvbnRyb2xsZXIgRHJpdmVyIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBgQ09ORklHX1BIWUxJQmAgaXMgZGVmaW5pdGVseSBlbmFibGVkLCBnb29kLiBJJiMzOTt2ZSBnb3QgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBpbiBwbGF5OiBgUFNFX0NPTlRST0xMRVJgLCBgUEhZTElCYCwgYFNGUGAsIGFuZCBgRldOT0RFX01ESU9gLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBgUFNFX0NPTlRST0xMRVJgIGFsb25lIGlzIHN1ZmZpY2llbnQsIG9yIGlmIGEgc3BlY2lmaWMgUFNFIGNvbnRyb2xsZXIgZHJpdmVyIGlzIG5lZWRlZCB0byBhY3R1YWxseSBraWNrIG9mZiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuCgpMb29raW5nIGF0IHRoZSBwYXRjaCwgaXQgc2VlbXMgdGhlIGNoYW5nZXMgY2VudGVyIGFyb3VuZCBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGFuZCBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAuIFRob3NlIGZ1bmN0aW9ucyBhcmUgdHJpZ2dlcmVkIHdoZW4gYSBzcGVjaWZpYyBQU0UgY29udHJvbGxlciBkcml2ZXIgcHJvYmVzLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggUFNFIGNvbnRyb2xsZXIgZHJpdmVycyBhcmUgYXZhaWxhYmxlLgoKTGV0JiMzOTtzIHNlZeKApiBJJiMzOTt2ZSBnb3QgYGRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmNgIHdoaWNoLCBvZiBjb3Vyc2UsIGNvcnJlc3BvbmRzIHRvIGBDT05GSUdfUFNFX1BENjkyWDBgLCB0aGVuIGBkcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jYCB3aGljaCBnb2VzIHdpdGggYENPTkZJR19QU0VfUkVHVUxBVE9SYCwgYGRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuY2AgbGlua2VkIHRvIGBDT05GSUdfUFNFX1NJMzQ3NGAsIGFuZCBgZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmNgIHRpZWQgdG8gYENPTkZJR19QU0VfVFBTMjM4ODFgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZWAgZm9yIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfUFNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfS0VYRUNfQ09SRSlcdCYjNDM7PSBrZXhlYy5vXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX1BTRVJJRVNfRU5FUkdZKVx0JiM0Mzs9IHBzZXJpZXNfZW5lcmd5Lm9cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZS0xNi1cbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGU9MzI9b2JqLSQoQ09ORklHX0ZBX0RVTVApXHRcdCYjNDM7PSBydGFzLWZhZHVtcC5vXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX1BTRVJJRVNfUExQS1MpXHQmIzQzOz0gcGxwa3MubyBwbHBrcy1zeXNmcy5vXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUtMzQtb2JqLSQoQ09ORklHX1BQQ19TRUNVUkVfQk9PVClcdCYjNDM7PSBwbHBrcy1zZWN2YXIub1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19QU0VSSUVTX1BMUEtTX1NFRClcdCYjNDM7PSBwbHBrc19zZWRfb3BzLm9cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZS0zNi1vYmotJChDT05GSUdfU1VTUEVORClcdFx0JiM0Mzs9IHN1c3BlbmQub1xuLS1cbmRyaXZlcnMvY3B1aWRsZS9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfTUlQU19DUFNfQ1BVSURMRSlcdFx0JiM0Mzs9IGNwdWlkbGUtY3BzLm9cbi0tXG5kcml2ZXJzL2NwdWlkbGUvTWFrZWZpbGUtMzgtIyBQT1dFUlBDIGRyaXZlcnNcbmRyaXZlcnMvY3B1aWRsZS9NYWtlZmlsZTozOTpvYmotJChDT05GSUdfUFNFUklFU19DUFVJRExFKVx0XHQmIzQzOz0gY3B1aWRsZS1wc2VyaWVzLm9cbmRyaXZlcnMvY3B1aWRsZS9NYWtlZmlsZS00MC1vYmotJChDT05GSUdfUE9XRVJOVl9DUFVJRExFKVx0XHQmIzQzOz0gY3B1aWRsZS1wb3dlcm52Lm9cbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUtMy1cbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19QU0VfQ09OVFJPTExFUikgJiM0Mzs9IHBzZV9jb3JlLm9cbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1BTRV9SRUdVTEFUT1IpICYjNDM7PSBwc2VfcmVndWxhdG9yLm9cbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgJiM0Mzs9IHBkNjkyeDAub1xuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICYjNDM7PSBzaTM0NzQub1xuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX1BTRV9UUFMyMzg4MSkgJiM0Mzs9IHRwczIzODgxLm9cbi0tXG5kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlPTE5Mz1vYmotJChDT05GSUdfTUVOX0EyMV9XRFQpICYjNDM7PSBtZW5hMjFfd2R0Lm9cbi0tXG5kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlLTE5NS0jIFBQQzY0IEFyY2hpdGVjdHVyZVxuZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZToxOTY6b2JqLSQoQ09ORklHX1BTRVJJRVNfV0RUKSAmIzQzOz0gcHNlcmllcy13ZHQub1xuZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZS0xOTctb2JqLSQoQ09ORklHX1dBVENIRE9HX1JUQVMpICYjNDM7PSB3ZHJ0YXMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUwMwoJCQkJCQkJb3V0cHV0OiAyNTIKCQkJCQkJCXRob3VnaHRzOiA3NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIEZvY3VzIGZvciBQU0UgQ29udHJvbGxlciBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgZW5hYmxpbmcgYFBTRV9SRUdVTEFUT1JgIGlzIGEgc29saWQgbW92ZSwgYXMgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIG1ha2luZyBpdCBlYXNpZXIgdG8gcHJvYmUuIE5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLgoKSSBzdGFydGVkIGJ5IGxpc3Rpbmcga2V5IHN5bWJvbHMuIEkgaGFkOgoKKiAgIGBwaHlfdHJ5X2F0dGFjaF9wc2VgCiogICBgcGh5X3BzZV9hdHRhY2hfb25lYAoqICAgYHBoeV9wc2VfZGV0YWNoX29uZWAKKiAgIGBwaHlfcHNlX25vdGlmaWVyX2V2ZW50YAoqICAgYF9fcGh5X2RldmljZV9yZWdpc3RlcmAKKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAKKiAgIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgCiogICBgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXJgCiogICBgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldmAKClRoZW4gSSBub3RlZCB0aGF0IGBwaHlfZGV2aWNlX3JlbGVhc2VgIHdhcyBtb2RpZmllZCB0byBjYWxsIGBwc2VfY29udHJvbF9wdXRgLCBhbmQgYHBoeV9kZXZpY2VfcmVtb3ZlYCB0byByZW1vdmUgdGhlIHNhbWUgY2FsbCwgd2hpbGUgYHBoeV9pbml0YCBhbmQgYHBoeV9leGl0YCBub3cgaGFuZGxlIG5vdGlmaWVyIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24uIEkgYWxzbyBzYXcgYHNmcF9zbV9wcm9iZV9waHlgIHdhcyBjaGFuZ2VkLgoKU28gSSB1cGRhdGVkIHRoZSBsaXN0IHRvIGluY2x1ZGUgdGhlIGdlbmVyaWMgYHBoeV9kZXZpY2VfcmVsZWFzZWAgKGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGdlbmVyaWMsIGl0JiMzOTtzIHJlbGV2YW50IGhlcmUpIGFuZCBgc2ZwX3NtX3Byb2JlX3BoeWAuIEFsc28sIGFsdGhvdWdoIGBfX3BoeV9kZXZpY2VfcmVnaXN0ZXJgIGlzIHN0YXRpYywgc3l6a2FsbGVyIGNhbiBzdGlsbCBmb2N1cyBvbiBpdC4gQm90aCBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgIGFuZCBgcGh5X2RldmljZV9yZWdpc3RlcmAgYXJlIGV4cG9ydGVkIGFuZCBoYXZlIGJlZW4gbW9kaWZpZWQuCgpJbiB0ZXJtcyBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIEkmIzM5O3ZlIGdvdCB0byBrZWVwIGBQU0VfQ09OVFJPTExFUmAsIGBQU0VfUkVHVUxBVE9SYCwgYFBIWUxJQmAsIGBTRlBgLCBhbmQgYEZXTk9ERV9NRElPYCBpbiBtaW5kLgoKVGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgdGhlIFBIWSByZWdpc3RyYXRpb24gbG9naWMgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBub3RpZmllciBmb3IgUFNFIGNvbnRyb2xsZXJzLiBJdCYjMzk7cyBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIHN5c3RlbSwgaGFuZGxpbmcgYXN5bmNocm9ub3VzIHJlZ2lzdHJhdGlvbi4gVGhpcyBhZmZlY3RzIGNvcmUgbmV0d29ya2luZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duLCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKSSBkb3VibGUtY2hlY2tlZCBgcGh5X2RldmljZV9yZWdpc3RlcmAgYW5kIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGA7IHRoZXkgYXJlIHdyYXBwZXJzIGFyb3VuZCBgX19waHlfZGV2aWNlX3JlZ2lzdGVyYCBhbmQgYHBoeV90cnlfYXR0YWNoX3BzZWAsIHNvIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgaW1wb3J0YW50LgoKTGV0IG1lIHJlZmluZSB0aGF0IGxpc3QsIG9uZSBsYXN0IHRpbWUsIHRvIGVuc3VyZSBldmVyeXRoaW5nJiMzOTtzIGNsZWFyOgoKKiAgIGBwaHlfdHJ5X2F0dGFjaF9wc2VgCiogICBgcGh5X3BzZV9hdHRhY2hfb25lYAoqICAgYHBoeV9wc2VfZGV0YWNoX29uZWAKKiAgIGBwaHlfcHNlX25vdGlmaWVyX2V2ZW50YAoqICAgYF9fcGh5X2RldmljZV9yZWdpc3RlcmAKKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAKKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYAoqICAgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAKKiAgIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAKKiAgIGBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2YAoqICAgYHNmcF9zbV9wcm9iZV9waHlgCgpPa2F5LCB0aGF0JiMzOTtzIGV2ZXJ5dGhpbmc7IEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3Mgc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfQ09OVFJPTExFUiYjMzQ7LAogICAgJiMzNDtQU0VfUkVHVUxBVE9SJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OywKICAgICYjMzQ7RldOT0RFX01ESU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfdHJ5X2F0dGFjaF9wc2UmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9hdHRhY2hfb25lJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfZGV0YWNoX29uZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX25vdGlmaWVyX2V2ZW50JiMzNDssCiAgICAmIzM0O19fcGh5X2RldmljZV9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BzZV9yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2JiMzNDssCiAgICAmIzM0O3NmcF9zbV9wcm9iZV9waHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgUEhZIHJlZ2lzdHJhdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIG1lY2hhbmlzbSBmb3IgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzLiBJdCBjaGFuZ2VzIGhvdyBQU0UgY29udHJvbGxlcnMgYXJlIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLCBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIGFwcHJvYWNoIHRoYXQgaGFuZGxlcyBhc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIE1ESU8gYnVzZXMsIFBIWXMsIGFuZCBwbGF0Zm9ybSBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfQ09OVFJPTExFUiYjMzQ7LAogICAgJiMzNDtQU0VfUkVHVUxBVE9SJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OywKICAgICYjMzQ7RldOT0RFX01ESU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfdHJ5X2F0dGFjaF9wc2UmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9hdHRhY2hfb25lJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfZGV0YWNoX29uZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX25vdGlmaWVyX2V2ZW50JiMzNDssCiAgICAmIzM0O19fcGh5X2RldmljZV9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BzZV9yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2JiMzNDssCiAgICAmIzM0O3NmcF9zbV9wcm9iZV9waHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgUEhZIHJlZ2lzdHJhdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIG1lY2hhbmlzbSBmb3IgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzLiBJdCBjaGFuZ2VzIGhvdyBQU0UgY29udHJvbGxlcnMgYXJlIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLCBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIGFwcHJvYWNoIHRoYXQgaGFuZGxlcyBhc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIE1ESU8gYnVzZXMsIFBIWXMsIGFuZCBwbGF0Zm9ybSBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6Mjk6MzUuMzY3NzA5MzYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMjkxNjU1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBTRV9DT05UUk9MTEVSXCIsXG4gICAgXCJQU0VfUkVHVUxBVE9SXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlNGUFwiLFxuICAgIFwiRldOT0RFX01ESU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfdHJ5X2F0dGFjaF9wc2VcIixcbiAgICBcInBoeV9wc2VfYXR0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9kZXRhY2hfb25lXCIsXG4gICAgXCJwaHlfcHNlX25vdGlmaWVyX2V2ZW50XCIsXG4gICAgXCJfX3BoeV9kZXZpY2VfcmVnaXN0ZXJcIixcbiAgICBcInBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwc2VfcmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcInBzZV91bnJlZ2lzdGVyX25vdGlmaWVyXCIsXG4gICAgXCJwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2XCIsXG4gICAgXCJzZnBfc21fcHJvYmVfcGh5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgUEhZIHJlZ2lzdHJhdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIG1lY2hhbmlzbSBmb3IgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzLiBJdCBjaGFuZ2VzIGhvdyBQU0UgY29udHJvbGxlcnMgYXJlIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLCBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIGFwcHJvYWNoIHRoYXQgaGFuZGxlcyBhc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIE1ESU8gYnVzZXMsIFBIWXMsIGFuZCBwbGF0Zm9ybSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjoyOTozNS4zNjc3MTM4MTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTI0NzE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE0M2M1ZmI0Yjg0N2Y4MmE4ZmQ1MWQ1MDYwMjEyOGM3MzA1MGQxYTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMjYgMjI6Mjk6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jXFxuaW5kZXggYmE3MDkxNTE4MjY1NDAuLjdiZDk3OWI1OWY0OTY4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xcbkBAIC0xMSwzMyArMTEsMTEgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuIFxcbiBNT0RVTEVfQVVUSE9SKFxcXCJDYWx2aW4gSm9obnNvbiBcXHUwMDNjY2FsdmluLmpvaG5zb25Ab3NzLm54cC5jb21cXHUwMDNlXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXFxcIik7XFxuIFxcbi1zdGF0aWMgc3RydWN0IHBzZV9jb250cm9sICpcXG4tZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcXG4tXFx0XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4te1xcbi1cXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XFxuLVxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuLVxcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRucCA9IHRvX29mX25vZGUoZndub2RlKTtcXG4tXFx0aWYgKCFucClcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xcbi1cXHRpZiAoUFRSX0VSUihwc2VjKSA9PSAtRU5PRU5UKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdHJldHVybiBwc2VjO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IG1paV90aW1lc3RhbXBlciAqXFxuIGZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbiB7XFxuQEAgLTExOCw3ICs5Niw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkLCB1MzIgYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICptaWlfdHMgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5O1xcbiBcXHRib29sIGlzX2M0NTtcXG4gXFx0dTMyIHBoeV9pZDtcXG5AQCAtMTU5LDE0ICsxMzYsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuIFxcdFxcdFxcdGdvdG8gY2xlYW5fcGh5O1xcbiBcXHR9XFxuIFxcbi1cXHRwc2VjID0gZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woY2hpbGQsIHBoeSk7XFxuLVxcdGlmIChJU19FUlIocHNlYykpIHtcXG4tXFx0XFx0cmMgPSBQVFJfRVJSKHBzZWMpO1xcbi1cXHRcXHRnb3RvIHVucmVnaXN0ZXJfcGh5O1xcbi1cXHR9XFxuLVxcbi1cXHRwaHktXFx1MDAzZXBzZWMgPSBwc2VjO1xcbi1cXG4gXFx0LyogcGh5LVxcdTAwM2VtaWlfdHMgbWF5IGFscmVhZHkgYmUgZGVmaW5lZCBieSB0aGUgUEhZIGRyaXZlci4gQVxcbiBcXHQgKiBtaWlfdGltZXN0YW1wZXIgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2lsbCBzdGlsbCBoYXZlXFxuIFxcdCAqIHByZWNlZGVuY2UuXFxuQEAgLTE3Niw5ICsxNDUsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLXVucmVnaXN0ZXJfcGh5Olxcbi1cXHRpZiAoaXNfYWNwaV9ub2RlKGNoaWxkKSB8fCBpc19vZl9ub2RlKGNoaWxkKSlcXG4tXFx0XFx0cGh5X2RldmljZV9yZW1vdmUocGh5KTtcXG4gY2xlYW5fcGh5OlxcbiBcXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcXG4gY2xlYW5fbWlpX3RzOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDA2MTUyMjg0NTllZjQyLi5mNWZlYmZmNGIwMGI4ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbkBAIC0yMjMsOCArMjIzLDE5IEBAIHN0YXRpYyB2b2lkIHBoeV9tZGlvX2RldmljZV9mcmVlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4gXFxuIHN0YXRpYyB2b2lkIHBoeV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIHtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTtcXG4rXFxuK1xcdC8qIGJ1c19mb3JfZWFjaF9kZXYoKSBob2xkcyBnZXRfZGV2aWNlKCkgYWNyb3NzIGVhY2ggaXRlcmF0aW9uXFxuK1xcdCAqIHN0ZXAsIGRlZmVycmluZyB0aGlzIHJlbGVhc2UgY2FsbGJhY2sgdW50aWwgYW55IGluLWZsaWdodCBQU0VcXG4rXFx0ICogbm90aWZpZXIgd2FsayBoYXMgYWR2YW5jZWQgcGFzdCB0aGlzIHBoeS4gcHNlX2NvbnRyb2xfcHV0KClcXG4rXFx0ICogdGFrZXMgcHNlX2xpc3RfbXV0ZXgsIHNvIHRoaXMgcGF0aCBtdXN0IHJ1biBpbiBzbGVlcGFibGVcXG4rXFx0ICogY29udGV4dC5cXG4rXFx0ICovXFxuK1xcdG1pZ2h0X3NsZWVwKCk7XFxuK1xcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXFx1MDAzZXBzZWMpO1xcbitcXG4gXFx0Zndub2RlX2hhbmRsZV9wdXQoZGV2LVxcdTAwM2Vmd25vZGUpO1xcbi1cXHRrZnJlZSh0b19waHlfZGV2aWNlKGRldikpO1xcbitcXHRrZnJlZShwaHlkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5AQCAtMTEwMiwxMSArMTExMywxMDMgQEAgc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcXG4gXFxuLS8qKlxcbi0gKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuLSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbisvKiBCZXN0LWVmZm9ydCBhdHRhY2ggb2YgcGh5ZGV2LVxcdTAwM2Vwc2VjIGZyb20gYSBEVCBgcHNlcyA9IFxcdTAwM2NcXHUwMDI2Li4uXFx1MDAzZWAgcGhhbmRsZS5cXG4rICogQ2FsbGVyIG11c3QgaG9sZCBydG5sLiBBIG1pc3NpbmcgcGhhbmRsZSAoLUVOT0VOVCkgb3IgYSBub3QteWV0LXJlZ2lzdGVyZWRcXG4rICogY29udHJvbGxlciAoLUVQUk9CRV9ERUZFUikgaXMgc2lsZW50OyB0aGUgbm90aWZpZXIgcmV0cmllcyB0aGUgbGF0dGVyIGF0XFxuKyAqIFBTRV9SRUdJU1RFUkVEIHRpbWUuIEFueSBvdGhlciBlcnJvciBtZWFucyBhIGJyb2tlbiBiaW5kaW5nIGFuZCBpcyB3YXJuZWRcXG4rICogYWJvdXQsIGJ1dCBsZWZ0IG5vbi1mYXRhbCBzbyB0aGUgcGh5IHN0aWxsIHJlZ2lzdGVycy5cXG4gICovXFxuLWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3N0YXRpYyB2b2lkIHBoeV90cnlfYXR0YWNoX3BzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucDtcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRucCA9IHBoeWRldi1cXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcXG4rXFx0aWYgKCFucClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlcHNlYylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cHNlYyA9IG9mX3BzZV9jb250cm9sX2dldChucCwgcGh5ZGV2KTtcXG4rXFx0aWYgKElTX0VSUihwc2VjKSkge1xcbitcXHRcXHRpZiAoUFRSX0VSUihwc2VjKSAhPSAtRVBST0JFX0RFRkVSIFxcdTAwMjZcXHUwMDI2IFBUUl9FUlIocHNlYykgIT0gLUVOT0VOVClcXG4rXFx0XFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiZmFpbGVkIHRvIGdldCBQU0UgY29udHJvbDogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgcHNlYyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vwc2VjID0gcHNlYztcXG4rfVxcbitcXG4rc3RhdGljIGludCBwaHlfcHNlX2F0dGFjaF9vbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxcbit7XFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRpZiAoZGV2LVxcdTAwM2V0eXBlICE9IFxcdTAwMjZtZGlvX2J1c19waHlfdHlwZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwaHlfdHJ5X2F0dGFjaF9wc2UodG9fcGh5X2RldmljZShkZXYpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiA9IGRhdGE7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuK1xcdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRpZiAoZGV2LVxcdTAwM2V0eXBlICE9IFxcdTAwMjZtZGlvX2J1c19waHlfdHlwZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwaHlkZXYgPSB0b19waHlfZGV2aWNlKGRldik7XFxuK1xcdHBzZWMgPSBwaHlkZXYtXFx1MDAzZXBzZWM7XFxuK1xcdGlmICghcHNlYyB8fCAhcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2Rldihwc2VjLCBwY2RldikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vwc2VjID0gTlVMTDtcXG4rXFx0cHNlX2NvbnRyb2xfcHV0KHBzZWMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwaHlfcHNlX25vdGlmaWVyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzd2l0Y2ggKGV2ZW50KSB7XFxuK1xcdGNhc2UgUFNFX1JFR0lTVEVSRUQ6XFxuK1xcdFxcdHJ0bmxfbG9jaygpO1xcbitcXHRcXHRidXNfZm9yX2VhY2hfZGV2KFxcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxcbitcXHRcXHRcXHRcXHQgcGh5X3BzZV9hdHRhY2hfb25lKTtcXG4rXFx0XFx0cnRubF91bmxvY2soKTtcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9PSztcXG4rXFx0Y2FzZSBQU0VfVU5SRUdJU1RFUkVEOlxcbitcXHRcXHRydG5sX2xvY2soKTtcXG4rXFx0XFx0YnVzX2Zvcl9lYWNoX2RldihcXHUwMDI2bWRpb19idXNfdHlwZSwgTlVMTCwgZGF0YSxcXG4rXFx0XFx0XFx0XFx0IHBoeV9wc2VfZGV0YWNoX29uZSk7XFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiBOT1RJRllfT0s7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBoeV9wc2Vfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHtcXG4rXFx0Lm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LFxcbit9O1xcbitcXG4rLyogQ29yZSByZWdpc3RyYXRpb246IGFkZCB0aGUgcGh5IHRvIHRoZSBNRElPIGJ1cy4gRG9lcyBub3QgdG91Y2ggcnRubCBvclxcbisgKiBQU0UuIHBoeWRldi1cXHUwMDNlcHNlYyBpcyBhdHRhY2hlZCBieSB0aGUgY2FsbGVycyBiZWxvdywgYWZ0ZXIgZGV2aWNlX2FkZCgpXFxuKyAqIGhhcyBtYWRlIHRoZSBwaHkgdmlzaWJsZSBvbiBtZGlvX2J1c190eXBlLCBzbyB0aGF0IGEgY29uY3VycmVudCBQU0VcXG4rICogbm90aWZpZXIgd2FsayBhbmQgdGhlIGF0dGFjaCBjYW4gbmV2ZXIgbGVhdmUgdGhlIHBoeSB1bmF0dGFjaGVkLiBLZWVwaW5nXFxuKyAqIGRldmljZV9hZGQoKSBvdXQgb2YgcnRubCBhbHNvIGF2b2lkcyBkZWFkbG9ja2luZyB3aGVuIGJpbmRpbmcgYSBwaHkgdGhhdFxcbisgKiBpdHNlbGYgcHJvdmlkZXMgYW4gU0ZQIGNhZ2UgKHBoeV9wcm9iZSgpIC1cXHUwMDNlIHBoeV9zZnBfcHJvYmUoKSAtXFx1MDAzZVxcbisgKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIHRha2VzIHJ0bmwpLlxcbisgKi9cXG4rc3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtMTEzNSwxMCArMTIzOCw1NCBAQCBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiAgb3V0OlxcbiBcXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xcbiBcXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XFxuLVxcbiBcXHRtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8pO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuK1xcbisvKipcXG4rICogcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcXG4rICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXFxuKyAqXFxuKyAqIFNhbWUgYXMgcGh5X2RldmljZV9yZWdpc3RlcigpIGJ1dCBjYWxsZXIgbXVzdCBhbHJlYWR5IGhvbGQgcnRubF9sb2NrKCkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitpbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0QVNTRVJUX1JUTkwoKTtcXG4rXFxuK1xcdGVyciA9IF9fcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKTtcXG4rXFxuKy8qKlxcbisgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuKyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xcbiBcXG4gLyoqXFxuQEAgLTExNTIsOCArMTI5OSw2IEBAIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XFxuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbiBcXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXFx1MDAzZW1paV90cyk7XFxuLVxcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXFx1MDAzZXBzZWMpO1xcbi1cXG4gXFx0ZGV2aWNlX2RlbChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuIFxcbiBcXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xcbkBAIC0zOTgxLDggKzQxMjYsMTQgQEAgc3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZClcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRnb3RvIGVycl9jNDU7XFxuIFxcbitcXHRyYyA9IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2cGh5X3BzZV9ub3RpZmllcik7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0Z290byBlcnJfZ2VucGh5O1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbitlcnJfZ2VucGh5OlxcbitcXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNmdlbnBoeV9kcml2ZXIpO1xcbiBlcnJfYzQ1OlxcbiBcXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNmdlbnBoeV9jNDVfZHJpdmVyKTtcXG4gZXJyX2V0aHRvb2xfcGh5X29wczpcXG5AQCAtMzk5OSw2ICs0MTUwLDcgQEAgc3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZClcXG4gXFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBwaHlfZXhpdCh2b2lkKVxcbiB7XFxuK1xcdHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZwaHlfcHNlX25vdGlmaWVyKTtcXG4gXFx0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZnZW5waHlfYzQ1X2RyaXZlcik7XFxuIFxcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2Z2VucGh5X2RyaXZlcik7XFxuIFxcdHJ0bmxfbG9jaygpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcXG5pbmRleCAwM2JmZDg2NDBkYjk2My4uMTg4NjhiZGQ2NDg1MmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXFxuQEAgLTIwODMsNyArMjA4Myw3IEBAIHN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwICpzZnAsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4gXFx0LyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi9cXG4gXFx0cGh5LVxcdTAwM2Vpc19vbl9zZnBfbW9kdWxlID0gdHJ1ZTtcXG4gXFxuLVxcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG4rXFx0ZXJyID0gcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQocGh5KTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcXG4gXFx0XFx0ZGV2X2VycihzZnAtXFx1MDAzZWRldiwgXFxcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcXG5pbmRleCA2OWRiZGJkZTlkNzFhNy4uNjExNTQwZGY0M2JiMWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xcbkBAIC04LDYgKzgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuQEAgLTIzLDYgKzI0LDM5IEBAIHN0YXRpYyBMSVNUX0hFQUQocHNlX2NvbnRyb2xsZXJfbGlzdCk7XFxuIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHBzZV9wd19kX21hcCk7XFxuIHN0YXRpYyBERUZJTkVfTVVURVgocHNlX3B3X2RfbXV0ZXgpO1xcbiBcXG4rc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQocHNlX2NvbnRyb2xsZXJfbm90aWZpZXIpO1xcbitcXG4rLyoqXFxuKyAqIHBzZV9yZWdpc3Rlcl9ub3RpZmllciAtIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9yIFBTRSBjb250cm9sbGVyIGV2ZW50c1xcbisgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHRvIHJlZ2lzdGVyXFxuKyAqXFxuKyAqIFNlZSBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IGZvciBldmVudHMgZmlyZWQgYW5kIHRoZWlyIHN1YnNjcmliZXJcXG4rICogY29udHJhY3QuIENhbGxiYWNrcyBydW4gaW4gcHJvY2VzcyBjb250ZXh0OyB0aGV5IG1heSBzbGVlcCwgdGFrZVxcbisgKiBydG5sLCBhbmQgY2FsbCBvZl9wc2VfY29udHJvbF9nZXQoKS4gVGhlIGNoYWluIGZpcmVzIHN5bmNocm9ub3VzbHksXFxuKyAqIHNvIGEgUFNFIGNvbnRyb2xsZXIgZHJpdmVyJ3MgcHJvYmUvdW5iaW5kIHBhdGggbXVzdCBub3QgaG9sZCBhbnlcXG4rICogc3VjaCBsb2NrIHdoZW4gY2FsbGluZyBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIG9yXFxuKyAqIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbisgKi9cXG4raW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbit7XFxuK1xcdHJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwc2VfcmVnaXN0ZXJfbm90aWZpZXIpO1xcbitcXG4rLyoqXFxuKyAqIHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyIC0gdW5yZWdpc3RlciBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFja1xcbisgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHByZXZpb3VzbHkgcGFzc2VkIHRvIHBzZV9yZWdpc3Rlcl9ub3RpZmllcigpXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4rICovXFxuK2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbit7XFxuK1xcdHJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKFxcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKTtcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgcHNlX2NvbnRyb2wgLSBhIFBTRSBjb250cm9sXFxuICAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBQU0UgY29udHJvbGxlciBkZXZpY2VcXG5AQCAtMTEwNCw2ICsxMTM4LDkgQEAgaW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbiBcXHRsaXN0X2FkZChcXHUwMDI2cGNkZXYtXFx1MDAzZWxpc3QsIFxcdTAwMjZwc2VfY29udHJvbGxlcl9saXN0KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwc2VfbGlzdF9tdXRleCk7XFxuIFxcbitcXHRibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKFxcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllcixcXG4rXFx0XFx0XFx0XFx0ICAgICBQU0VfUkVHSVNURVJFRCwgcGNkZXYpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xcbkBAIC0xMTE0LDYgKzExNTEsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XFxuICAqL1xcbiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuIHtcXG4rXFx0YmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgUFNFX1VOUkVHSVNURVJFRCwgcGNkZXYpO1xcbitcXG4gXFx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcXG4gXFx0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcXG4gXFx0aWYgKHBjZGV2LVxcdTAwM2VpcnEpXFxuQEAgLTE5ODEsMyArMjAyMSwxNyBAQCBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYylcXG4gXFx0cmV0dXJuIHBzZWMtXFx1MDAzZXBjZGV2LVxcdTAwM2V0eXBlcyBcXHUwMDI2IEVUSFRPT0xfUFNFX0MzMztcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfaGFzX2MzMyk7XFxuK1xcbisvKipcXG4rICogcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldiAtIFRlc3Qgd2hldGhlciBhIHBzZV9jb250cm9sIHRhcmdldHMgYSBjb250cm9sbGVyXFxuKyAqIEBwc2VjOiBwc2VfY29udHJvbCBvYnRhaW5lZCBmcm9tIG9mX3BzZV9jb250cm9sX2dldCgpXFxuKyAqIEBwY2RldjogUFNFIGNvbnRyb2xsZXIgdG8gY29tcGFyZSBhZ2FpbnN0XFxuKyAqXFxuKyAqIFJldHVybjogJXRydWUgaWYgQHBzZWMgd2FzIG9idGFpbmVkIGZyb20gQHBjZGV2LCAlZmFsc2Ugb3RoZXJ3aXNlLlxcbisgKi9cXG4rYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbit7XFxuK1xcdHJldHVybiBwc2VjLVxcdTAwM2VwY2RldiA9PSBwY2RldjtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uODY1YjliYWRkYjg1ZmEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjE1OCw2ICsyMTU4LDggQEAgc3RydWN0IHBoeV9kZXZpY2UgKmZ3bm9kZV9waHlfZmluZF9kZXZpY2Uoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKnBoeV9md25vZGUpO1xcbiBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlX2dldF9waHlfbm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcXG4gc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7XFxuIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xcbisvKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmxfbG9jaygpOyBzZWUgcGh5X2RldmljZV9yZWdpc3RlcigpIGZvciB0aGUgcHVibGljIGZvcm0uICovXFxuK2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcXG4gdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBwaHlfZ2V0X2M0NV9pZHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcXG5pbmRleCA0ZTU2OTZjZmFkZTdjYy4uZDQzMTBjYTcxYTNlMDggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxcbkBAIC0yMSw2ICsyMSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlO1xcbiBzdHJ1Y3QgcGh5X2RldmljZTtcXG4gc3RydWN0IHBzZV9jb250cm9sbGVyX2RldjtcXG4gc3RydWN0IG5ldGxpbmtfZXh0X2FjaztcXG4rc3RydWN0IG5vdGlmaWVyX2Jsb2NrO1xcbiBcXG4gLyogQzMzIFBTRSBleHRlbmRlZCBzdGF0ZSBhbmQgc3Vic3RhdGUuICovXFxuIHN0cnVjdCBldGh0b29sX2MzM19wc2VfZXh0X3N0YXRlX2luZm8ge1xcbkBAIC0zMzcsNiArMzM4LDI0IEBAIGVudW0gcHNlX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMge1xcbiBcXHRQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQ1xcdD0gMSBcXHUwMDNjXFx1MDAzYyAyLFxcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIGVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgLSBQU0UgY29udHJvbGxlciBsaWZlY3ljbGUgZXZlbnRzXFxuKyAqXFxuKyAqIEV2ZW50IGRhdGEgaW4gY2FsbGJhY2tzIGlzIGFsd2F5cyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdFxcbisgKiBwc2VfY29udHJvbGxlcl9kZXYgZmlyaW5nIHRoZSBldmVudC5cXG4rICpcXG4rICogQFBTRV9SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFkZGVkIHRvIHBzZV9jb250cm9sbGVyX2xpc3QgYW5kXFxuKyAqXFx0cmVzb2x2YWJsZSBieSBvZl9wc2VfY29udHJvbF9nZXQoKS5cXG4rICogQFBTRV9VTlJFR0lTVEVSRUQ6IGNvbnRyb2xsZXIgYWJvdXQgdG8gYmUgcmVtb3ZlZCBmcm9tXFxuKyAqXFx0cHNlX2NvbnRyb2xsZXJfbGlzdC4gU3Vic2NyaWJlcnMgaG9sZGluZyBwc2VfY29udHJvbCByZWZlcmVuY2VzXFxuKyAqXFx0dGFyZ2V0aW5nIGl0IG11c3QgZHJvcCB0aGVtIGJlZm9yZSByZXR1cm5pbmcgYW5kIG11c3Qgbm90XFxuKyAqXFx0YWNxdWlyZSBuZXcgcmVmZXJlbmNlcyBmb3IgaXQuXFxuKyAqL1xcbitlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IHtcXG4rXFx0UFNFX1JFR0lTVEVSRUQsXFxuK1xcdFBTRV9VTlJFR0lTVEVSRUQsXFxuK307XFxuK1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUFNFX0NPTlRST0xMRVIpXFxuIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XFxuIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XFxuQEAgLTM2Niw2ICszODUsMTIgQEAgaW50IHBzZV9ldGh0b29sX3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcXG4gYm9vbCBwc2VfaGFzX3BvZGwoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKTtcXG4gYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpO1xcbiBcXG4rYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcXG4rXFxuK2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XFxuK2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcXG4rXFxuICNlbHNlXFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwc2VfY29udHJvbCAqb2ZfcHNlX2NvbnRyb2xfZ2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcXG5AQCAtNDE2LDYgKzQ0MSwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAjZW5kaWZcXG4gXFxuICNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjoyOTozNS45MDM3OTUxNTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1Mjc1NTU2MDY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFR1VMQVRPUlwiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIkZXTk9ERV9NRElPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5X3RyeV9hdHRhY2hfcHNlXCIsXG4gICAgXCJwaHlfcHNlX2F0dGFjaF9vbmVcIixcbiAgICBcInBoeV9wc2VfZGV0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9ub3RpZmllcl9ldmVudFwiLFxuICAgIFwiX19waHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZFwiLFxuICAgIFwicGh5X2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwicHNlX3JlZ2lzdGVyX25vdGlmaWVyXCIsXG4gICAgXCJwc2VfdW5yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwicHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldlwiLFxuICAgIFwic2ZwX3NtX3Byb2JlX3BoeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFBIWSByZWdpc3RyYXRpb24gbG9naWMgYW5kIGludHJvZHVjZXMgYSBub3RpZmllciBtZWNoYW5pc20gZm9yIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVycy4gSXQgY2hhbmdlcyBob3cgUFNFIGNvbnRyb2xsZXJzIGFyZSBhdHRhY2hlZCB0byBQSFkgZGV2aWNlcywgbW92aW5nIGZyb20gYSBzeW5jaHJvbm91cyBsb29rdXAgdG8gYSBub3RpZmllci1iYXNlZCBhcHByb2FjaCB0aGF0IGhhbmRsZXMgYXN5bmNocm9ub3VzIHJlZ2lzdHJhdGlvbi4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCBNRElPIGJ1c2VzLCBQSFlzLCBhbmQgcGxhdGZvcm0gZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNDNjNWZiNGI4NDdmODJhOGZkNTFkNTA2MDIxMjhjNzMwNTBkMWE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMjI6Mjk6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNcbmluZGV4IGJhNzA5MTUxODI2NTQwLi43YmQ5NzliNTlmNDk2OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jXG5AQCAtMTEsMzMgKzExLDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZndub2RlX21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuIFxuIE1PRFVMRV9BVVRIT1IoXCJDYWx2aW4gSm9obnNvbiBcdTAwM2NjYWx2aW4uam9obnNvbkBvc3MubnhwLmNvbVx1MDAzZVwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXCIpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgcHNlX2NvbnRyb2wgKlxuLWZ3bm9kZV9maW5kX3BzZV9jb250cm9sKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4tXHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XG4tXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuLVxuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QU0VfQ09OVFJPTExFUikpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0bnAgPSB0b19vZl9ub2RlKGZ3bm9kZSk7XG4tXHRpZiAoIW5wKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdHBzZWMgPSBvZl9wc2VfY29udHJvbF9nZXQobnAsIHBoeWRldik7XG4tXHRpZiAoUFRSX0VSUihwc2VjKSA9PSAtRU5PRU5UKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdHJldHVybiBwc2VjO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IG1paV90aW1lc3RhbXBlciAqXG4gZndub2RlX2ZpbmRfbWlpX3RpbWVzdGFtcGVyKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4ge1xuQEAgLTExOCw3ICs5Niw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbiBcdFx0XHRcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpjaGlsZCwgdTMyIGFkZHIpXG4ge1xuIFx0c3RydWN0IG1paV90aW1lc3RhbXBlciAqbWlpX3RzID0gTlVMTDtcbi1cdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyA9IE5VTEw7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5O1xuIFx0Ym9vbCBpc19jNDU7XG4gXHR1MzIgcGh5X2lkO1xuQEAgLTE1OSwxNCArMTM2LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuIFx0XHRcdGdvdG8gY2xlYW5fcGh5O1xuIFx0fVxuIFxuLVx0cHNlYyA9IGZ3bm9kZV9maW5kX3BzZV9jb250cm9sKGNoaWxkLCBwaHkpO1xuLVx0aWYgKElTX0VSUihwc2VjKSkge1xuLVx0XHRyYyA9IFBUUl9FUlIocHNlYyk7XG4tXHRcdGdvdG8gdW5yZWdpc3Rlcl9waHk7XG4tXHR9XG4tXG4tXHRwaHktXHUwMDNlcHNlYyA9IHBzZWM7XG4tXG4gXHQvKiBwaHktXHUwMDNlbWlpX3RzIG1heSBhbHJlYWR5IGJlIGRlZmluZWQgYnkgdGhlIFBIWSBkcml2ZXIuIEFcbiBcdCAqIG1paV90aW1lc3RhbXBlciBwcm9iZWQgdmlhIHRoZSBkZXZpY2UgdHJlZSB3aWxsIHN0aWxsIGhhdmVcbiBcdCAqIHByZWNlZGVuY2UuXG5AQCAtMTc2LDkgKzE0NSw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbiBcbiBcdHJldHVybiAwO1xuIFxuLXVucmVnaXN0ZXJfcGh5OlxuLVx0aWYgKGlzX2FjcGlfbm9kZShjaGlsZCkgfHwgaXNfb2Zfbm9kZShjaGlsZCkpXG4tXHRcdHBoeV9kZXZpY2VfcmVtb3ZlKHBoeSk7XG4gY2xlYW5fcGh5OlxuIFx0cGh5X2RldmljZV9mcmVlKHBoeSk7XG4gY2xlYW5fbWlpX3RzOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCAwNjE1MjI4NDU5ZWY0Mi4uZjVmZWJmZjRiMDBiOGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMjIzLDggKzIyMywxOSBAQCBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfZnJlZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXG4gc3RhdGljIHZvaWQgcGh5X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiB7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShkZXYpO1xuK1xuK1x0LyogYnVzX2Zvcl9lYWNoX2RldigpIGhvbGRzIGdldF9kZXZpY2UoKSBhY3Jvc3MgZWFjaCBpdGVyYXRpb25cbitcdCAqIHN0ZXAsIGRlZmVycmluZyB0aGlzIHJlbGVhc2UgY2FsbGJhY2sgdW50aWwgYW55IGluLWZsaWdodCBQU0VcbitcdCAqIG5vdGlmaWVyIHdhbGsgaGFzIGFkdmFuY2VkIHBhc3QgdGhpcyBwaHkuIHBzZV9jb250cm9sX3B1dCgpXG4rXHQgKiB0YWtlcyBwc2VfbGlzdF9tdXRleCwgc28gdGhpcyBwYXRoIG11c3QgcnVuIGluIHNsZWVwYWJsZVxuK1x0ICogY29udGV4dC5cbitcdCAqL1xuK1x0bWlnaHRfc2xlZXAoKTtcbitcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXHUwMDNlcHNlYyk7XG4rXG4gXHRmd25vZGVfaGFuZGxlX3B1dChkZXYtXHUwMDNlZndub2RlKTtcbi1cdGtmcmVlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XG4rXHRrZnJlZShwaHlkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbkBAIC0xMTAyLDExICsxMTEzLDEwMyBAQCBzdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcbiBcbi0vKipcbi0gKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG4tICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG4rLyogQmVzdC1lZmZvcnQgYXR0YWNoIG9mIHBoeWRldi1cdTAwM2Vwc2VjIGZyb20gYSBEVCBgcHNlcyA9IFx1MDAzY1x1MDAyNi4uLlx1MDAzZWAgcGhhbmRsZS5cbisgKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmwuIEEgbWlzc2luZyBwaGFuZGxlICgtRU5PRU5UKSBvciBhIG5vdC15ZXQtcmVnaXN0ZXJlZFxuKyAqIGNvbnRyb2xsZXIgKC1FUFJPQkVfREVGRVIpIGlzIHNpbGVudDsgdGhlIG5vdGlmaWVyIHJldHJpZXMgdGhlIGxhdHRlciBhdFxuKyAqIFBTRV9SRUdJU1RFUkVEIHRpbWUuIEFueSBvdGhlciBlcnJvciBtZWFucyBhIGJyb2tlbiBiaW5kaW5nIGFuZCBpcyB3YXJuZWRcbisgKiBhYm91dCwgYnV0IGxlZnQgbm9uLWZhdGFsIHNvIHRoZSBwaHkgc3RpbGwgcmVnaXN0ZXJzLlxuICAqL1xuLWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4rc3RhdGljIHZvaWQgcGh5X3RyeV9hdHRhY2hfcHNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHBzZV9jb250cm9sICpwc2VjO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbitcbitcdEFTU0VSVF9SVE5MKCk7XG4rXG4rXHRucCA9IHBoeWRldi1cdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xuK1x0aWYgKCFucClcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2Vwc2VjKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xuK1x0aWYgKElTX0VSUihwc2VjKSkge1xuK1x0XHRpZiAoUFRSX0VSUihwc2VjKSAhPSAtRVBST0JFX0RFRkVSIFx1MDAyNlx1MDAyNiBQVFJfRVJSKHBzZWMpICE9IC1FTk9FTlQpXG4rXHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcImZhaWxlZCB0byBnZXQgUFNFIGNvbnRyb2w6ICVwZVxcblwiLFxuK1x0XHRcdFx0ICAgIHBzZWMpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHNlYyA9IHBzZWM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3BzZV9hdHRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcbit7XG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0aWYgKGRldi1cdTAwM2V0eXBlICE9IFx1MDAyNm1kaW9fYnVzX3BoeV90eXBlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHBoeV90cnlfYXR0YWNoX3BzZSh0b19waHlfZGV2aWNlKGRldikpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiA9IGRhdGE7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IHBzZV9jb250cm9sICpwc2VjO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGlmIChkZXYtXHUwMDNldHlwZSAhPSBcdTAwMjZtZGlvX2J1c19waHlfdHlwZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwaHlkZXYgPSB0b19waHlfZGV2aWNlKGRldik7XG4rXHRwc2VjID0gcGh5ZGV2LVx1MDAzZXBzZWM7XG4rXHRpZiAoIXBzZWMgfHwgIXBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYocHNlYywgcGNkZXYpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHBoeWRldi1cdTAwM2Vwc2VjID0gTlVMTDtcbitcdHBzZV9jb250cm9sX3B1dChwc2VjKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbitcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSlcbit7XG4rXHRzd2l0Y2ggKGV2ZW50KSB7XG4rXHRjYXNlIFBTRV9SRUdJU1RFUkVEOlxuK1x0XHRydG5sX2xvY2soKTtcbitcdFx0YnVzX2Zvcl9lYWNoX2RldihcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxuK1x0XHRcdFx0IHBoeV9wc2VfYXR0YWNoX29uZSk7XG4rXHRcdHJ0bmxfdW5sb2NrKCk7XG4rXHRcdHJldHVybiBOT1RJRllfT0s7XG4rXHRjYXNlIFBTRV9VTlJFR0lTVEVSRUQ6XG4rXHRcdHJ0bmxfbG9jaygpO1xuK1x0XHRidXNfZm9yX2VhY2hfZGV2KFx1MDAyNm1kaW9fYnVzX3R5cGUsIE5VTEwsIGRhdGEsXG4rXHRcdFx0XHQgcGh5X3BzZV9kZXRhY2hfb25lKTtcbitcdFx0cnRubF91bmxvY2soKTtcbitcdFx0cmV0dXJuIE5PVElGWV9PSztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwaHlfcHNlX25vdGlmaWVyIF9fcmVhZF9tb3N0bHkgPSB7XG4rXHQubm90aWZpZXJfY2FsbCA9IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQsXG4rfTtcbitcbisvKiBDb3JlIHJlZ2lzdHJhdGlvbjogYWRkIHRoZSBwaHkgdG8gdGhlIE1ESU8gYnVzLiBEb2VzIG5vdCB0b3VjaCBydG5sIG9yXG4rICogUFNFLiBwaHlkZXYtXHUwMDNlcHNlYyBpcyBhdHRhY2hlZCBieSB0aGUgY2FsbGVycyBiZWxvdywgYWZ0ZXIgZGV2aWNlX2FkZCgpXG4rICogaGFzIG1hZGUgdGhlIHBoeSB2aXNpYmxlIG9uIG1kaW9fYnVzX3R5cGUsIHNvIHRoYXQgYSBjb25jdXJyZW50IFBTRVxuKyAqIG5vdGlmaWVyIHdhbGsgYW5kIHRoZSBhdHRhY2ggY2FuIG5ldmVyIGxlYXZlIHRoZSBwaHkgdW5hdHRhY2hlZC4gS2VlcGluZ1xuKyAqIGRldmljZV9hZGQoKSBvdXQgb2YgcnRubCBhbHNvIGF2b2lkcyBkZWFkbG9ja2luZyB3aGVuIGJpbmRpbmcgYSBwaHkgdGhhdFxuKyAqIGl0c2VsZiBwcm92aWRlcyBhbiBTRlAgY2FnZSAocGh5X3Byb2JlKCkgLVx1MDAzZSBwaHlfc2ZwX3Byb2JlKCkgLVx1MDAzZVxuKyAqIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgdGFrZXMgcnRubCkuXG4rICovXG4rc3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTExMzUsMTAgKzEyMzgsNTQgQEAgaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiAgb3V0OlxuIFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbiBcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcbi1cbiBcdG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8pO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rXG4rLyoqXG4rICogcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcbisgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbisgKlxuKyAqIFNhbWUgYXMgcGh5X2RldmljZV9yZWdpc3RlcigpIGJ1dCBjYWxsZXIgbXVzdCBhbHJlYWR5IGhvbGQgcnRubF9sb2NrKCkuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCk7XG4rXG4rLyoqXG4rICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuKyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdHBoeV90cnlfYXR0YWNoX3BzZShwaHlkZXYpO1xuK1x0cnRubF91bmxvY2soKTtcbitcbitcdHJldHVybiAwO1xuK31cbiBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuIFxuIC8qKlxuQEAgLTExNTIsOCArMTI5OSw2IEBAIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG4gdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHVucmVnaXN0ZXJfbWlpX3RpbWVzdGFtcGVyKHBoeWRldi1cdTAwM2VtaWlfdHMpO1xuLVx0cHNlX2NvbnRyb2xfcHV0KHBoeWRldi1cdTAwM2Vwc2VjKTtcbi1cbiBcdGRldmljZV9kZWwoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiBcbiBcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG5AQCAtMzk4MSw4ICs0MTI2LDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpXG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX2M0NTtcbiBcbitcdHJjID0gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNnBoeV9wc2Vfbm90aWZpZXIpO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGVycl9nZW5waHk7XG4rXG4gXHRyZXR1cm4gMDtcbiBcbitlcnJfZ2VucGh5OlxuK1x0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9kcml2ZXIpO1xuIGVycl9jNDU6XG4gXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2M0NV9kcml2ZXIpO1xuIGVycl9ldGh0b29sX3BoeV9vcHM6XG5AQCAtMzk5OSw2ICs0MTUwLDcgQEAgc3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgcGh5X2V4aXQodm9pZClcbiB7XG4rXHRwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZwaHlfcHNlX25vdGlmaWVyKTtcbiBcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZnZW5waHlfYzQ1X2RyaXZlcik7XG4gXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2RyaXZlcik7XG4gXHRydG5sX2xvY2soKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbmluZGV4IDAzYmZkODY0MGRiOTYzLi4xODg2OGJkZDY0ODUyYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG5AQCAtMjA4Myw3ICsyMDgzLDcgQEAgc3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuIFx0LyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi9cbiBcdHBoeS1cdTAwM2Vpc19vbl9zZnBfbW9kdWxlID0gdHJ1ZTtcbiBcbi1cdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcbitcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHBoeSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuIFx0XHRkZXZfZXJyKHNmcC1cdTAwM2VkZXYsIFwicGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWQ6ICVwZVxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbmluZGV4IDY5ZGJkYmRlOWQ3MWE3Li42MTE1NDBkZjQzYmIxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbkBAIC0yMyw2ICsyNCwzOSBAQCBzdGF0aWMgTElTVF9IRUFEKHBzZV9jb250cm9sbGVyX2xpc3QpO1xuIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHBzZV9wd19kX21hcCk7XG4gc3RhdGljIERFRklORV9NVVRFWChwc2VfcHdfZF9tdXRleCk7XG4gXG4rc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQocHNlX2NvbnRyb2xsZXJfbm90aWZpZXIpO1xuK1xuKy8qKlxuKyAqIHBzZV9yZWdpc3Rlcl9ub3RpZmllciAtIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9yIFBTRSBjb250cm9sbGVyIGV2ZW50c1xuKyAqIEBuYjogbm90aWZpZXIgYmxvY2sgdG8gcmVnaXN0ZXJcbisgKlxuKyAqIFNlZSBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IGZvciBldmVudHMgZmlyZWQgYW5kIHRoZWlyIHN1YnNjcmliZXJcbisgKiBjb250cmFjdC4gQ2FsbGJhY2tzIHJ1biBpbiBwcm9jZXNzIGNvbnRleHQ7IHRoZXkgbWF5IHNsZWVwLCB0YWtlXG4rICogcnRubCwgYW5kIGNhbGwgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuIFRoZSBjaGFpbiBmaXJlcyBzeW5jaHJvbm91c2x5LFxuKyAqIHNvIGEgUFNFIGNvbnRyb2xsZXIgZHJpdmVyJ3MgcHJvYmUvdW5iaW5kIHBhdGggbXVzdCBub3QgaG9sZCBhbnlcbisgKiBzdWNoIGxvY2sgd2hlbiBjYWxsaW5nIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKCkgb3JcbisgKiBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4rICovXG4raW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuK3tcbitcdHJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwc2VfcmVnaXN0ZXJfbm90aWZpZXIpO1xuK1xuKy8qKlxuKyAqIHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyIC0gdW5yZWdpc3RlciBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFja1xuKyAqIEBuYjogbm90aWZpZXIgYmxvY2sgcHJldmlvdXNseSBwYXNzZWQgdG8gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKClcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKi9cbitpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcik7XG4rXG4gLyoqXG4gICogc3RydWN0IHBzZV9jb250cm9sIC0gYSBQU0UgY29udHJvbFxuICAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBQU0UgY29udHJvbGxlciBkZXZpY2VcbkBAIC0xMTA0LDYgKzExMzgsOSBAQCBpbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4gXHRsaXN0X2FkZChcdTAwMjZwY2Rldi1cdTAwM2VsaXN0LCBcdTAwMjZwc2VfY29udHJvbGxlcl9saXN0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwc2VfbGlzdF9tdXRleCk7XG4gXG4rXHRibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLFxuK1x0XHRcdFx0ICAgICBQU0VfUkVHSVNURVJFRCwgcGNkZXYpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcbkBAIC0xMTE0LDYgKzExNTEsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG4gICovXG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuIHtcbitcdGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsXG4rXHRcdFx0XHQgICAgIFBTRV9VTlJFR0lTVEVSRUQsIHBjZGV2KTtcbitcbiBcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XG4gXHRwc2VfcmVsZWFzZV9waXMocGNkZXYpO1xuIFx0aWYgKHBjZGV2LVx1MDAzZWlycSlcbkBAIC0xOTgxLDMgKzIwMjEsMTcgQEAgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpXG4gXHRyZXR1cm4gcHNlYy1cdTAwM2VwY2Rldi1cdTAwM2V0eXBlcyBcdTAwMjYgRVRIVE9PTF9QU0VfQzMzO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfaGFzX2MzMyk7XG4rXG4rLyoqXG4rICogcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldiAtIFRlc3Qgd2hldGhlciBhIHBzZV9jb250cm9sIHRhcmdldHMgYSBjb250cm9sbGVyXG4rICogQHBzZWM6IHBzZV9jb250cm9sIG9idGFpbmVkIGZyb20gb2ZfcHNlX2NvbnRyb2xfZ2V0KClcbisgKiBAcGNkZXY6IFBTRSBjb250cm9sbGVyIHRvIGNvbXBhcmUgYWdhaW5zdFxuKyAqXG4rICogUmV0dXJuOiAldHJ1ZSBpZiBAcHNlYyB3YXMgb2J0YWluZWQgZnJvbSBAcGNkZXYsICVmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcbitcdFx0XHQgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4re1xuK1x0cmV0dXJuIHBzZWMtXHUwMDNlcGNkZXYgPT0gcGNkZXY7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uODY1YjliYWRkYjg1ZmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjE1OCw2ICsyMTU4LDggQEAgc3RydWN0IHBoeV9kZXZpY2UgKmZ3bm9kZV9waHlfZmluZF9kZXZpY2Uoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKnBoeV9md25vZGUpO1xuIHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGVfZ2V0X3BoeV9ub2RlKGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpO1xuIHN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpO1xuIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xuKy8qIENhbGxlciBtdXN0IGhvbGQgcnRubF9sb2NrKCk7IHNlZSBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkgZm9yIHRoZSBwdWJsaWMgZm9ybS4gKi9cbitpbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSk7XG4gdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgcGh5X2dldF9jNDVfaWRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcbmluZGV4IDRlNTY5NmNmYWRlN2NjLi5kNDMxMGNhNzFhM2UwOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuQEAgLTIxLDYgKzIxLDcgQEAgc3RydWN0IG5ldF9kZXZpY2U7XG4gc3RydWN0IHBoeV9kZXZpY2U7XG4gc3RydWN0IHBzZV9jb250cm9sbGVyX2RldjtcbiBzdHJ1Y3QgbmV0bGlua19leHRfYWNrO1xuK3N0cnVjdCBub3RpZmllcl9ibG9jaztcbiBcbiAvKiBDMzMgUFNFIGV4dGVuZGVkIHN0YXRlIGFuZCBzdWJzdGF0ZS4gKi9cbiBzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX2V4dF9zdGF0ZV9pbmZvIHtcbkBAIC0zMzcsNiArMzM4LDI0IEBAIGVudW0gcHNlX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMge1xuIFx0UFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUNcdD0gMSBcdTAwM2NcdTAwM2MgMixcbiB9O1xuIFxuKy8qKlxuKyAqIGVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgLSBQU0UgY29udHJvbGxlciBsaWZlY3ljbGUgZXZlbnRzXG4rICpcbisgKiBFdmVudCBkYXRhIGluIGNhbGxiYWNrcyBpcyBhbHdheXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3RcbisgKiBwc2VfY29udHJvbGxlcl9kZXYgZmlyaW5nIHRoZSBldmVudC5cbisgKlxuKyAqIEBQU0VfUkVHSVNURVJFRDogY29udHJvbGxlciBhZGRlZCB0byBwc2VfY29udHJvbGxlcl9saXN0IGFuZFxuKyAqXHRyZXNvbHZhYmxlIGJ5IG9mX3BzZV9jb250cm9sX2dldCgpLlxuKyAqIEBQU0VfVU5SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbVxuKyAqXHRwc2VfY29udHJvbGxlcl9saXN0LiBTdWJzY3JpYmVycyBob2xkaW5nIHBzZV9jb250cm9sIHJlZmVyZW5jZXNcbisgKlx0dGFyZ2V0aW5nIGl0IG11c3QgZHJvcCB0aGVtIGJlZm9yZSByZXR1cm5pbmcgYW5kIG11c3Qgbm90XG4rICpcdGFjcXVpcmUgbmV3IHJlZmVyZW5jZXMgZm9yIGl0LlxuKyAqL1xuK2VudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQge1xuK1x0UFNFX1JFR0lTVEVSRUQsXG4rXHRQU0VfVU5SRUdJU1RFUkVELFxuK307XG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKVxuIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbkBAIC0zNjYsNiArMzg1LDEyIEBAIGludCBwc2VfZXRodG9vbF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4gYm9vbCBwc2VfaGFzX3BvZGwoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKTtcbiBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7XG4gXG4rYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcbitcdFx0XHQgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xuK1xuK2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XG4raW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xuK1xuICNlbHNlXG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcHNlX2NvbnRyb2wgKm9mX3BzZV9jb250cm9sX2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG5AQCAtNDE2LDYgKzQ0MSwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gI2VuZGlmXG4gXG4gI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjoyOTozNS45MDM3OTY1MzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE2MjIxODg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBTRSBDb250cm9sbGVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgcmVmYWN0b3JpbmcgaG93IFBTRSBjb250cm9sbGVycyBpbnRlcmFjdCB3aXRoIFBIWSBkZXZpY2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIHRoZXkncmUgaW50cm9kdWNpbmcgYSBub3RpZmllciBzeXN0ZW0sIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgIGFuZCBgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXJgLCBpbiBgcHNlX2NvcmUuY2AuXCIgVGhhdCdzIGdvb2Q7IGRlY291cGxpbmcgdGhyb3VnaCBub3RpZmljYXRpb25zIGlzIGEgY2xlYW4gYXBwcm9hY2guIFRoZW4gSSBzZWUgdGhleSdyZSBtb2RpZnlpbmcgYHBoeV9kZXZpY2UuY2AgdG8gcmVnaXN0ZXIgYSBgcGh5X3BzZV9ub3RpZmllcmAgdGhhdCByZWFjdHMgdG8gYFBTRV9SRUdJU1RFUkVEYCBhbmQgYFBTRV9VTlJFR0lTVEVSRURgIGV2ZW50cy4gVGhpcyBpcyBsb2dpY2FsLCB0aGUgUEhZcyBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIFBTRS5cblxuVGhlIGNvcmUgb2YgaXQgaXMgdGhhdCB3aGVuIGEgUFNFIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLCBpdCdsbCBpdGVyYXRlIHRocm91Z2ggYWxsIFBIWXMgb24gdGhlIE1ESU8gYnVzIGFuZCB0cnkgdG8gaG9vayBpdHNlbGYgdXAuIEFuZCB3aGVuIGl0IHVucmVnaXN0ZXJzLCBpdCBkZXRhY2hlcy4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCB0aGV5IGFsc28gYWx0ZXJlZCBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5YCDigJMgdGhleSByZW1vdmVkIHRoYXQgc3luY2hyb25vdXMgYGZ3bm9kZV9maW5kX3BzZV9jb250cm9sYCBjYWxsLCBhbmQgbm93IHJlbHkgb24gYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIG9yIHRoZSBub3RpZmllci4gVGhpcyBpcyBhIGJpdCBtb3JlIHN1YnRsZSwgbWFraW5nIHN1cmUgdGhlIGF0dGFjaG1lbnQgaXMgYWx3YXlzIGhhbmRsZWQgdGhyb3VnaCB0aGUgdXBkYXRlZCBub3RpZmllciBtZWNoYW5pc20uIEdvb2QsIHRoYXQncyBpbXBvcnRhbnQgZm9yIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHBhdGNoLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIkNhbiBJIHJlYWNoIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD9cIiBUaGF0J3Mgd2hlcmUgZnV6emluZyBhbmQgdGVzdGluZyBjb21lcyBpbiwgb2YgY291cnNlLiBNRElPIGJ1c2VzIGFuZCBQSFkgZGV2aWNlcyAqY2FuKiBiZSBjcmVhdGVkIHZpcnR1YWxseSwgcmlnaHQ/IE5ldGRldnNpbSwgZHVtbXkgUEhZcywgdmV0aC9tYWNzZWPigKYgb2theSwgc28gUEhZcyBhcmUgdXN1YWxseSBoYXJkd2FyZSBidXQgd2UgY2FuIG1ha2UgdGhlbSB2aXJ0dWFsLCByaWdodD8gVGhlcmUgYXJlIHNvbWUgdmlydHVhbCBkcml2ZXJzLCBhbmQgd2UgY2FuIGZ1enogTURJTy9QSFkgcmVnaXN0cmF0aW9uIGlmIG5lZWRlZC4gSG9sZCBvbi4uLiBEb2VzIHN5emthbGxlciBkbyBpdD8gQ2FuIGl0IGNyZWF0ZSB2aXJ0dWFsIGRldmljZXMgdGhhdCByZWdpc3RlciBQSFlzLi4uIHdhaXQsIHdoYXQgYWJvdXQgYG1hYzgwMjExX2h3c2ltYD8gTm8sIHRoYXQncyBub3QgcmlnaHQsIFBIWXMgYXJlIHVzdWFsbHkgZm9yIEV0aGVybmV0LCBub3Qgd2lyZWxlc3MuLi4gT2theSwgYG5ldGRldnNpbWAgZG9lc24ndCByZWdpc3RlciBQSFlzIHNwZWNpZmljYWxseS4gQnV0IHdoYXQgYWJvdXQgYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeWA/IFRoYXQncyBhYm91dCBkZXZpY2UgdHJlZXMgYW5kIEFDUEksIHJpZ2h0P1xuXG5TbywgY2FuIHN5emthbGxlciB0cmlnZ2VyIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBkaXJlY3RseT8gTWF5YmUuIFZpcnR1YWwgZHJpdmVycywgZGVmaW5pdGVseS4gVVNCIGRyaXZlcnMsIHBvdGVudGlhbGx5LiBGb3IgZXhhbXBsZSwgYHVzYm5ldGAgZHJpdmVycywgdGhleSBtaWdodCByZWdpc3RlciBQSFlzLi4uXG5cblRoZSBuZXh0IGNydWNpYWwgcG9pbnQgaXMsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgaXMgY2FsbGVkIGJ5IHRoZSBQU0UgY29udHJvbGxlciBkcml2ZXJzIHRoZW1zZWx2ZXMuIEFyZSB0aGVyZSAqYW55KiB2aXJ0dWFsIFBTRSBjb250cm9sbGVyIGRyaXZlcnM/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBXZSBuZWVkIHRvIGNoZWNrIGlmIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgIGlzIGVuYWJsZWQgYW5kIHRoZW4gbG9vayBmb3IgUFNFIGRyaXZlcnMgdGhhdCBhcmUgcG90ZW50aWFsbHkgdHJpZ2dlcmFibGUuIFRpbWUgdG8gZ3JlcCBmb3IgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE5NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjMwOjI0LjA2NjAxNjY3NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI1NDc1MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzZV9jb250cm9sbGVyX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmM9MTc1Nj1zdGF0aWMgaW50IHBkNjkyeDBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4MzgtXFx0cHJpdi1cXHUwMDNlcGNkZXYucGlzX3ByaW9fbWF4ID0gMjtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jOjE4Mzk6XFx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwY2Rldik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODQwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0yNz1zdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChwc2VfY29udHJvbGxlcl9ub3RpZmllcik7XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0zNi0gKiBzbyBhIFBTRSBjb250cm9sbGVyIGRyaXZlcidzIHByb2JlL3VuYmluZCBwYXRoIG11c3Qgbm90IGhvbGQgYW55XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6Mzc6ICogc3VjaCBsb2NrIHdoZW4gY2FsbGluZyBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIG9yXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMzgtICogcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcigpLlxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTA0Nj1zdGF0aWMgdm9pZCBwc2Vfc2VuZF9udGZfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNjctLyoqXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTA2ODogKiBwc2VfY29udHJvbGxlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTA2OS0gKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgaW5pdGlhbGl6ZWQgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDcyLSAqL1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEwNzM6aW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNzQte1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE0NS19XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE0NjpFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTExNjk9c3RhdGljIHZvaWQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE3NC0vKipcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTc1OiAqIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIgLSByZXNvdXJjZSBtYW5hZ2VkIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKClcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTc2LSAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUFNFIGNvbnRyb2xsZXJcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNzgtICpcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTc5OiAqIE1hbmFnZWQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKS4gRm9yIFBTRSBjb250cm9sbGVycyByZWdpc3RlcmVkIGJ5XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE4MC0gKiB0aGlzIGZ1bmN0aW9uLCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgb25cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTgxOiAqIGRyaXZlciBkZXRhY2guIFNlZSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExODItICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExODQtICovXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE4NTppbnQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE4Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTk1LVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExOTY6XFx0cmV0ID0gcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExOTctXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTIwNi19XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTIwNzpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMjA4LVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYz05ND1wc2VfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jLTEyNi1cXHRwcml2LVxcdTAwM2VwY2Rldi50eXBlcyA9IEVUSFRPT0xfUFNFX1BPREw7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYzoxMjc6XFx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwY2Rldik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy0xMjgtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jPTQ3Mz1zdGF0aWMgaW50IHNpMzQ3NF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYy01NDItXFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jOjU0MzpcXHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXBjZGV2KTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTQ0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jPTE0MzA9c3RhdGljIGludCB0cHMyMzg4MV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTYtXFx0cHJpdi1cXHUwMDNlcGNkZXYuc3VwcF9idWRnZXRfZXZhbF9zdHJhdGVnaWVzID0gUFNFX0JVREdFVF9FVkFMX1NUUkFUX1NUQVRJQztcXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYzoxNTE3OlxcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlcGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTgtXFx0aWYgKHJldCkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmg9MzU0PWVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmgtMzU5LSNpZiBJU19FTkFCTEVEKENPTkZJR19QU0VfQ09OVFJPTExFUilcXG5pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaDozNjA6aW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaC0zNjEtdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaD0zNjI9c3RydWN0IGRldmljZTtcXG5pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaDozNjM6aW50IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oLTM2NC1cXHRcXHRcXHRcXHQgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMDoyNi4xOTE0OTgzMTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTg2MTUxNjAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBTRSBDb250cm9sbGVyIFJlZ2lzdHJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAgYW5kIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAgZnVuY3Rpb25zIHdpdGhpbiBgcHNlX2NvcmUuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3MgdGhlIGNvcmUgbm90aWZpY2F0aW9uIG1lY2hhbmlzbSwgbGlrZWx5IGZvciBzaWduYWxpbmcgd2hlbiBhIFBTRSBjb250cm9sbGVyLCBvciBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgY29udHJvbGxlciwgYmVjb21lcyBhdmFpbGFibGUgb3IgaXMgcmVtb3ZlZC5cIlxuXG5UaGUgbmV4dCBsaW5lIHBvaW50cyB0byBtb2RpZmljYXRpb25zIGluIGBwaHlfZGV2aWNlLmNgIHRvIHJlZ2lzdGVyIHRoaXMgbm90aWZpZXIuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBQSFkgZGV2aWNlcyBhcmUgb2Z0ZW4gdGhlIGltbWVkaWF0ZSBjb25zdW1lcnMgb3IgdXNlcnMgb2YgdGhpcyBQU0UgY29udHJvbGxlciBpbmZvcm1hdGlvbiwgZXNwZWNpYWxseSB0aG9zZSB0aGF0IG5lZWQgdG8gbmVnb3RpYXRlIHBvd2VyIGRlbGl2ZXJ5LiBUaGUgbm90aWZpZXIgaXMgdHJpZ2dlcmVkIHVwb24gcmVnaXN0cmF0aW9uIG9yIHVucmVnaXN0cmF0aW9uIG9mIHRoZSBQU0UgY29udHJvbGxlciwgd2hpY2ggaXMgdGhlIGtleSBldmVudCBmb3IgdGhlIFBIWS5cblxuTm93LCBsZXQncyBzZWUgaG93IHRoZXNlIFBTRSBjb250cm9sbGVycyBhY3R1YWxseSBnZXQgcmVnaXN0ZXJlZC4gVGhlIGNvZGUgbWVudGlvbnMgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBiZWluZyB0aGUgcmVzcG9uc2libGUgZnVuY3Rpb24sIGFuZCBpdCdzIGNhbGxlZCBieSB2YXJpb3VzIGRyaXZlcnMsIGxpa2UgYHBkNjkyeDBgLCBgcHNlX3JlZ3VsYXRvcmAsIGBzaTM0NzRgLCBhbmQgYHRwczIzODgxYC4gR29vZC4gVGhlc2UgYXBwZWFyIHRvIGJlIHRoZSBhY3R1YWwgaGFyZHdhcmUgZHJpdmVycyBmb3IgdGhlIFBTRSBjb250cm9sbGVycyB0aGVtc2VsdmVzLlxuXG5gcHNlX3JlZ3VsYXRvcmAgc3BlY2lmaWNhbGx5IHN0YW5kcyBvdXQgYmVjYXVzZSBpdCdzIG1lbnRpb25lZCBhcyBhIHBsYXRmb3JtIGRyaXZlci4gVGhhdCBtYWtlcyBtZSBwYXVzZSBhbmQgY29uc2lkZXIgaXRzIGltcGxpY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFBsYXRmb3JtIGRyaXZlcnMgb2Z0ZW4gaGF2ZSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHBsYXRmb3JtLiBUaGlzIHByb21wdHMgdGhlIHF1ZXN0aW9uLCBcIkNhbiBgcHNlX3JlZ3VsYXRvcmAsIGFuZCB0aGVyZWZvcmUgdGhlIFBTRSByZWdpc3RyYXRpb24gcHJvY2VzcywgYmUgdHJpZ2dlcmVkIGFuZCBmdW5jdGlvbiBjb3JyZWN0bHkgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nP1wiIEl04oCZcyB0aW1lIHRvIGRyaWxsIGRvd24gaW50byB0aGUgYHBzZV9yZWd1bGF0b3IuY2Agc291cmNlIGNvZGUgYW5kIGZpbmQgb3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYW5kIGFueSBoYXJkd2FyZSBhY2Nlc3MgaXQgbWlnaHQgcGVyZm9ybSB0byBzZWUgaWYgaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDQ3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjMxOjU4LjA1MzAxNTczMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU1NTQ3OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzZV9yZWdfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYz05Mz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYzo5NDpwc2VfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy05NS17XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jPTE0Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwc2VfcmVnX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jOjE0NDpcXHQucHJvYmVcXHRcXHQ9IHBzZV9yZWdfcHJvYmUsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy0xNDUtXFx0LmRyaXZlclxcdFxcdD0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMTo1OS45MDg1Njc5NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTUyMDMzMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBgc2ZwLmNgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIHBsYXRmb3JtIGRyaXZlciBgcHNlX3JlZ3VsYXRvcmAgY2F0Y2hlcyBteSBleWUuIEl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHNvIHRoYXQgbWVhbnMgaXQncyBsaWtlbHkgcHJvYmVkIGJhc2VkIG9uIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zIG9yLCBtb3JlIGludGVyZXN0aW5nbHksIGJ5IHNvbWV0aGluZyBsaWtlIFN5emthbGxlciBpbmplY3RpbmcgcGxhdGZvcm0gZGV2aWNlcyDigJMgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIFRoZSBtYWluIHRoaW5nIHRoYXQgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhYm91dCBpcyBgcGh5X2RldmljZV9yZWdpc3RlcmAsIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgaXQncyBjYWxsZWQgZHVyaW5nIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uLiBOb3csIHRoZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgYSBQSFkgZGV2aWNlIGNhbiBldmVuIGJlIHJlZ2lzdGVyZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLlxuXG5UaGlua2luZyBhYm91dCBpdCwgeWVzLCBpdCBjYW4uIFN5emthbGxlciBpcyBjYXBhYmxlIG9mIGNyZWF0aW5nIHZpcnR1YWwgbmV0d29yayBkZXZpY2VzLCB3aGljaCB3b3VsZCB0aGVuIGxpa2VseSByZWdpc3RlciB0aGVzZSBQSFlzLCBvciBpbmplY3QgZW50aXJlIE1ESU8gYnVzZXMgYW5kIFBIWXMgZGlyZWN0bHkuIFRoaXMgbGVhZHMgbWUgdG8gZm9jdXMgaW4gb24gdGhlIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBjYWxsLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYW5kIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIGNoYW5nZS5cblxuQWhhISBgcGh5X2RldmljZV9yZWdpc3RlcmAgaXMgY2FsbGVkIGJ5IGBzZnBfc21fcHJvYmVfcGh5YCBpbiBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGF0IGZ1bmN0aW9uIHRvIGNhbGwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCBpbnN0ZWFkLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcywgaXQncyBub3QgYSBjaGFuZ2UgdG8gdGhlIGNvcmUgcmVnaXN0cmF0aW9uIGJ1dCBhbiBhdHRlbXB0IHRvIG1ha2UgaXQgbW9yZSBhdG9taWMuIFJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgc2ZwLmNgIGFuZCBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgbG9jayBhcmUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2NraW5nIGNvbnRleHQgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhpcyBjaGFuZ2UgaXMgdHJ5aW5nIHRvIGFkZHJlc3MsIGFzIHdlbGwgYXMgdGhlIGltcGFjdCBvbiBvdGhlciBhcmVhcyBvZiB0aGUgc3lzdGVtIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgUEhZIGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NDMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzI6MDUuMDYwNjAzMTUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzE0NzY0ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwX3NtX3Byb2JlX3BoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmM9MjA2Mj1zdGF0aWMgdm9pZCBzZnBfc21fcGh5X2RldGFjaChzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjA2OS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MjA3MDpzdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9waHkoc3RydWN0IHNmcCAqc2ZwLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIwNzEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIyMDA9c3RhdGljIGludCBzZnBfc21fcHJvYmVfZm9yX3BoeShzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIwOC1cXHRjYXNlIE1ESU9fSTJDX01BUlZFTExfQzIyOlxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjA5OlxcdFxcdGVyciA9IHNmcF9zbV9wcm9iZV9waHkoc2ZwLCBTRlBfUEhZX0FERFIsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxMC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjEyLVxcdGNhc2UgTURJT19JMkNfQzQ1OlxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjEzOlxcdFxcdGVyciA9IHNmcF9zbV9wcm9iZV9waHkoc2ZwLCBTRlBfUEhZX0FERFIsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjE0LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMTYtXFx0Y2FzZSBNRElPX0kyQ19ST0xMQkFMTDpcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MjIxNzpcXHRcXHRlcnIgPSBzZnBfc21fcHJvYmVfcGh5KHNmcCwgU0ZQX1BIWV9BRERSX1JPTExCQUxMLCB0cnVlKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxOC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzI6MDYuNzkyMTEyMzU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4MDE2Njg2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQ6IFBTRSBDb250cm9sbGVyIGFuZCBQSFkgUmVnaXN0cmF0aW9uIExvZ2ljKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc2xldyBvZiBuZXcgZnVuY3Rpb25zOiBgcGh5X3RyeV9hdHRhY2hfcHNlYCwgYHBoeV9wc2VfYXR0YWNoX29uZWAsIGBwaHlfcHNlX2RldGFjaF9vbmVgLCBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGAsIGBfX3BoeV9kZXZpY2VfcmVnaXN0ZXJgLCBhbmQgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYC4gVGhleSBzZWVtIHNvbGlkOyB0aGV5J3JlIGNsZWFybHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLCBidXQgdGhhdCBkb2Vzbid0IG1lYW4gdGhleSdyZSBidWxsZXRwcm9vZi4gR2l2ZW4gdGhhdCB0aGlzIGNvZGUncyBkaWdnaW5nIGludG8gdGhlIGhlYXJ0IG9mIFBIWSByZWdpc3RyYXRpb24gYW5kIFBTRSBjb250cm9sbGVyIG5vdGlmaWVyIGxvZ2ljIOKAkyBwcmltZSByZWFsIGVzdGF0ZSBmb3IgcG90ZW50aWFsIGJ1Z3Mg4oCTIEknZCBzYXkgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHdhcnJhbnRlZC5cblxuTGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJJ20gZ29pbmcgdG8gZm9jdXMgb246IGBwaHlfdHJ5X2F0dGFjaF9wc2VgLCBgcGh5X3BzZV9hdHRhY2hfb25lYCwgYHBoeV9wc2VfZGV0YWNoX29uZWAsIGBwaHlfcHNlX25vdGlmaWVyX2V2ZW50YCwgYF9fcGh5X2RldmljZV9yZWdpc3RlcmAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgLCBgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXJgLCBhbmQgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGtleSBpbnRlcmFjdGlvbnMuXG5cbk5vdyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uIFdlIG5lZWQgYENPTkZJR19QSFlMSUJgIOKAkyB0aGF0J3MgYWxtb3N0IGFsd2F5cyBhIGdpdmVuIOKAkyBhbmQgY3JpdGljYWxseSwgYENPTkZJR19QU0VfQ09OVFJPTExFUmAuIEknbSBzZWVpbmcgZXhwbGljaXQgY2hlY2tzIGZvciBpdCBzY2F0dGVyZWQgdGhyb3VnaG91dCwgc28gaXQncyBlc3NlbnRpYWwgZm9yIGNvbXBpbGF0aW9uLiBKdXN0IHRvIGJlIHN1cmUsIEknbSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCBgZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgcHNlX2NvcmUuY2AgYW5kIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgLiBXZSBjYW4ndCBhZmZvcmQgdG8gd2FzdGUgdGltZSB0YXJnZXRpbmcgc3ltYm9scyB0aGF0IHdvbid0IGJlIGNvbXBpbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc2MiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMjoyMy41OTM3ODM1NTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTg3NTgyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNlX2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlLTMtXFxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSArPSBwc2VfY29yZS5vXFxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlLTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjMyOjI2LjQxMjU0Nzk5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDY3Mjk5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIE5ldHdvcmsgUEhZIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgd2UgbmVlZCBgQ09ORklHX1BTRV9DT05UUk9MTEVSYCBmb3IgdGhpcy4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZSByZWxldmFudCBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhpbmtpbmcgYWJvdXQgaXQsIGBDT05GSUdfTURJT19ERVZJQ0VgIGlzIGZyZXF1ZW50bHkgbGlua2VkIHdpdGggUEhZTElCLCBzbyB0aGF04oCZcyBwcm9iYWJseSBhIGdvb2Qgb25lIHRvIHJldmlldyBhcyB3ZWxsLiBBbmQsIGdpdmVuIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYHNmcC5jYCwgSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjayBhbmQgaW5jbHVkZSBgQ09ORklHX1NGUGAgZm9yIGdvb2QgbWVhc3VyZS4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHRha2UgYSBwZWVrIGF0IGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgIHRvIGNvbmZpcm0gd2hlcmUgYHNmcC5jYCBpcyBhY3R1YWxseSBiZWluZyBidWlsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMjoyOS4yNTkyODExNDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDI3MzM0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwXFxcXC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL01ha2VmaWxlPTExPWhmaTEteSA6PSBcXFxcXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9NYWtlZmlsZS0zOC1cXHRxcC5vIFxcXFxcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9NYWtlZmlsZTozOTpcXHRxc2ZwLm8gXFxcXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL01ha2VmaWxlLTQwLVxcdHJjLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MTc3OD1mYm5pY19nZXRfbW9kdWxlX2VlcHJvbV9ieV9wYWdlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0xNzk5LVxcdGZ3X2NtcGwtXFx1MDAzZXUucXNmcC5sZW5ndGggPSBwYWdlX2RhdGEtXFx1MDAzZWxlbmd0aDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoxODAwOlxcdGZ3X2NtcGwtXFx1MDAzZXUucXNmcC5vZmZzZXQgPSBwYWdlX2RhdGEtXFx1MDAzZW9mZnNldDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0xODAxLVxcdGZ3X2NtcGwtXFx1MDAzZXUucXNmcC5wYWdlID0gcGFnZV9kYXRhLVxcdTAwM2VwYWdlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jPTEyOTQ9c3RhdGljIGludCBmYm5pY19md19wYXJzZV9xc2ZwX3JlYWRfcmVzcCh2b2lkICpvcGFxdWUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTMyOS1cXHRpZiAobGVuZ3RoICE9IGNtcGxfZGF0YS1cXHUwMDNldS5xc2ZwLmxlbmd0aCB8fFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYzoxMzMwOlxcdCAgICBvZmZzZXQgIT0gY21wbF9kYXRhLVxcdTAwM2V1LnFzZnAub2Zmc2V0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTEzMzEtXFx0XFx0ZGV2X3dhcm4oZmJkLVxcdTAwM2VkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTMzMy1cXHRcXHRcXHQgb2Zmc2V0LCBsZW5ndGgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjEzMzQ6XFx0XFx0XFx0IGNtcGxfZGF0YS1cXHUwMDNldS5xc2ZwLm9mZnNldCwgY21wbF9kYXRhLVxcdTAwM2V1LnFzZnAubGVuZ3RoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTMzNS1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9NYWtlZmlsZT04PXNwYXJ4NS1zd2l0Y2gteSAgOj0gc3Bhcng1X21haW4ubyBzcGFyeDVfcGFja2V0Lm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9NYWtlZmlsZS0xMy0gc3Bhcng1X3RjX21hdGNoYWxsLm8gc3Bhcng1X3Bvb2wubyBzcGFyeDVfc2RsYi5vIHNwYXJ4NV9wb2xpY2UubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9NYWtlZmlsZToxNDogc3Bhcng1X3BzZnAubyBzcGFyeDVfbWlycm9yLm8gc3Bhcng1X3JlZ3Mub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvTWFrZWZpbGUtMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElORykgKz0gbWlpX3RpbWVzdGFtcGVyLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjUtXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19TRlApXFx0XFx0Kz0gc2ZwLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjctc2ZwLW9iai0kKENPTkZJR19TRlApXFx0XFx0Kz0gc2ZwLWJ1cy5vXFxuLS1cXG5kcml2ZXJzL252bWVtL01ha2VmaWxlPTM0PW52bWVtLWxhbjk2NjItb3RwYy15XFx0XFx0Oj0gbGFuOTY2Mi1vdHBjLm9cXG5kcml2ZXJzL252bWVtL01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19OVk1FTV9MQVlFUlNDQVBFX1NGUClcXHQrPSBudm1lbS1sYXllcnNjYXBlLXNmcC5vXFxuZHJpdmVycy9udm1lbS9NYWtlZmlsZTozNjpudm1lbS1sYXllcnNjYXBlLXNmcC15XFx0XFx0XFx0Oj0gbGF5ZXJzY2FwZS1zZnAub1xcbmRyaXZlcnMvbnZtZW0vTWFrZWZpbGUtMzctb2JqLSQoQ09ORklHX05WTUVNX0xQQzE4WFhfRUVQUk9NKVxcdCs9IG52bWVtX2xwYzE4eHhfZWVwcm9tLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzI6MzEuNzAyMDI0OTc1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDU4MTgzNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGEgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhlIHJlcXVpcmVtZW50IGZvciBgQ09ORklHX1NGUGAgaW1wYWN0aW5nIGBzZnAuY2AuIEFscmlnaHQsIGxldCdzIGtlZXAgdGhhdCBpbiBtaW5kLCBhbmQgdGhlbiBsZXQncyBnbyB3aWRlciBhbmQgc2VlIHdoYXQgZWxzZSB0aGlzIHBhdGNoIHRvdWNoZXMuIExvb2tzIGxpa2UgaXQncyBhbHNvIG1ha2luZyBhIG1vZGlmaWNhdGlvbiB0byBgZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jYC4gUmlnaHQsIHRoYXQncyB1c2VmdWwgY29udGV4dC4gTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IE1ha2VmaWxlLiBTcGVjaWZpY2FsbHksIEknbGwgZ28gbG9vayBhdCBgZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBob3cgYGZ3bm9kZV9tZGlvLmNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBNRElPIHN1YnN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciB2aWV3IG9mIGhvdyB0aGlzIHBhdGNoIGlzIGdvaW5nIHRvIGludGVyYWN0IHdpdGggdGhlIGV4aXN0aW5nIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc1NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjMyOjQxLjc2MDIxMTE2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0ODE4NjUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmd25vZGVfbWRpb1xcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX0FDUElfTURJTylcXHRcXHQrPSBhY3BpX21kaW8ub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfRldOT0RFX01ESU8pXFx0Kz0gZndub2RlX21kaW8ub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtNi1vYmotJChDT05GSUdfT0ZfTURJTylcXHRcXHQrPSBvZl9tZGlvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzI6NDQuMzA4NDAzOTc3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNzEwMzg5NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgUEhZIERyaXZlciBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBDT05GSUdfRldOT0RFX01ESU9gIGZsYWcgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZGlyZWN0bHkgdGllZCB0byBgZndub2RlX21kaW8uY2AuIEJ1dCBoYW5nIG9uLi4uIHVwb24gZnVydGhlciByZWZsZWN0aW9uLCBgZndub2RlX21kaW8uY2AgaXMgbW9yZSBvZiBhIGNsZWFudXAgb3IgcmVmaW5lbWVudDsgdGhlICpyZWFsKiBoZWF2eSBsaWZ0aW5nLCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIFBIWSBpbnRlcmFjdGlvbnMsIHJlc2lkZXMgaW4gYHBoeV9kZXZpY2UuY2AgYW5kIGBwc2VfY29yZS5jYC4gQWgsIHJpZ2h0LCBgcGh5X2RldmljZS5jYCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19QSFlMSUJgIGlzIGFjdGl2YXRlZC4gR2l2ZW4gdGhhdCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIHRoZXJlLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTM3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzM6MDcuMDE4Nzk1MzU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY2ODkyNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9kZXZpY2VcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMtXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjQ6bGlicGh5LXlcXHRcXHRcXHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS01LVxcdFxcdFxcdFxcdCAgIGxpbmttb2RlLm8gcGh5X2xpbmtfdG9wb2xvZ3kubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjMzOjA5LjU4NTY5Mjg0OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAwMjAwOTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IG9mIGxpYnBoeS15KipcblxuQWxyaWdodCwgc28gYGxpYnBoeS15YCBpcyBidWlsdCwgd2hpY2ggbGlrZWx5IG1lYW5zIGl0J3MgYSBzdGF0aWMgbGlicmFyeSwgYW5kIHRoYXQncyB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG5haWwgZG93biBwcmVjaXNlbHkgKndoaWNoKiBvbmUuIEl0J3MgdXN1YWxseSBzdHJhaWdodGZvcndhcmQsIGJ1dCB0aGlzIG9uZSBpcyBhIGJpdCBmdXp6eS4gVGhlIHRleHQgc2F5cyBpdCBkZXBlbmRzIG9uIGBDT05GSUdfUEhZTElCYC4gVGltZSB0byBjb25maXJtIHRoYXQgYW5kIHRoZW4gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGlyZWN0IGRlcGVuZGVuY2llcyBvbiBpdC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBkb2VzIGFuZCBpZiBpdCdzIGdvdCBhbnkgc25lYWt5IHNpZGUgZWZmZWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTEwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzM6MTMuNzg1OTAwMDUxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM0NjQzNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpYnBoeS15XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XFx0XFx0XFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMzoxNS42MjA1NTA0MThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc2OTkxNTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNYWtlZmlsZSBOYXZpZ2F0aW9uOiBBIFBIWSBEcml2ZXIncyBMaWtlbHkgTG9jYXRpb24qKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBJJ20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIG9iamVjdCBmaWxlIGZvciB0aGlzIFBIWSBsaWJyYXJ5LCBgbGlicGh5Lm9gLCBpcyBkZWZpbmVkLiBCYXNlZCBvbiBteSBleHBlcmllbmNlIHdpdGgga2VybmVsIGJ1aWxkIHN5c3RlbXMsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBpcyBwcm9iYWJseSB0aGUgTWFrZWZpbGUuIFNwZWNpZmljYWxseSwgSSdkIGFudGljaXBhdGUgc2VlaW5nIGFuIGFzc2lnbm1lbnQgbGlrZSBgb2JqLSQoQ09ORklHX1BIWUxJQikgKz0gbGlicGh5Lm9gLiBUaGUgYG9iai1gIHByZWZpeCBpcyBhIGNsYXNzaWMgaW5kaWNhdG9yIHRoYXQgdGhlIG9iamVjdCBmaWxlJ3MgaW5jbHVzaW9uIGlzIGNvbmRpdGlvbmFsLCBwb3NzaWJseSBjb250cm9sbGVkIGJ5IGEgS2NvbmZpZyBvcHRpb24sIGluIHRoaXMgY2FzZSwgYENPTkZJR19QSFlMSUJgLiBUaGlzIGlzIGEgcHJldHR5IGNvbW1vbiBwYXR0ZXJuIGZvciBtb2R1bGFyIGRyaXZlcnMuIExldCdzIHNlZSBpZiB0aGF0IGFzc3VtcHRpb24gaG9sZHMgdHJ1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3OTIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMzoyNC4zOTA0NjkyMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMDEzMzc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotXFxcXCRcXFxcKENPTkZJR19QSFlMSUJcXFxcKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTY9bGlicGh5LSQoQ09ORklHX09QRU5fQUxMSUFOQ0VfSEVMUEVSUykgKz0gb3Blbl9hbGxpYW5jZV9oZWxwZXJzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMTctXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19QSFlMSUIpXFx0XFx0Kz0gbWRpb19idXMub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xOS1vYmotJChDT05GSUdfUEhZTElOSylcXHRcXHQrPSBwaHlsaW5rLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1BIWUxJQilcXHRcXHQrPSBsaWJwaHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfUEhZTElCKVxcdFxcdCs9IG1kaW9fZGV2cmVzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1BIWV9QQUNLQUdFKVxcdCs9IHBoeV9wYWNrYWdlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzM6MjYuNzEwNjExMjU4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNDczODc4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBTRSBDb250cm9sbGVyIERyaXZlciBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHX1BIWUxJQmAgaXMgZGVmaW5pdGVseSBlbmFibGVkLCBnb29kLiBJJ3ZlIGdvdCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGluIHBsYXk6IGBQU0VfQ09OVFJPTExFUmAsIGBQSFlMSUJgLCBgU0ZQYCwgYW5kIGBGV05PREVfTURJT2AuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBQU0VfQ09OVFJPTExFUmAgYWxvbmUgaXMgc3VmZmljaWVudCwgb3IgaWYgYSBzcGVjaWZpYyBQU0UgY29udHJvbGxlciBkcml2ZXIgaXMgbmVlZGVkIHRvIGFjdHVhbGx5IGtpY2sgb2ZmIHRoZSByZWdpc3RyYXRpb24gcHJvY2Vzcy5cblxuTG9va2luZyBhdCB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBhbmQgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLiBUaG9zZSBmdW5jdGlvbnMgYXJlIHRyaWdnZXJlZCB3aGVuIGEgc3BlY2lmaWMgUFNFIGNvbnRyb2xsZXIgZHJpdmVyIHByb2Jlcy4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIFBTRSBjb250cm9sbGVyIGRyaXZlcnMgYXJlIGF2YWlsYWJsZS5cblxuTGV0J3Mgc2Vl4oCmIEkndmUgZ290IGBkcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jYCB3aGljaCwgb2YgY291cnNlLCBjb3JyZXNwb25kcyB0byBgQ09ORklHX1BTRV9QRDY5MlgwYCwgdGhlbiBgZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuY2Agd2hpY2ggZ29lcyB3aXRoIGBDT05GSUdfUFNFX1JFR1VMQVRPUmAsIGBkcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmNgIGxpbmtlZCB0byBgQ09ORklHX1BTRV9TSTM0NzRgLCBhbmQgYGRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jYCB0aWVkIHRvIGBDT05GSUdfUFNFX1RQUzIzODgxYC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVgIGZvciBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIwNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMzozNC44NTgwMDMwNzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzQ4MTAxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVxcXFwkXFxcXChDT05GSUdfUFNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfS0VYRUNfQ09SRSlcXHQrPSBrZXhlYy5vXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19QU0VSSUVTX0VORVJHWSlcXHQrPSBwc2VyaWVzX2VuZXJneS5vXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlLTE2LVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlPTMyPW9iai0kKENPTkZJR19GQV9EVU1QKVxcdFxcdCs9IHJ0YXMtZmFkdW1wLm9cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX1BTRVJJRVNfUExQS1MpXFx0Kz0gcGxwa3MubyBwbHBrcy1zeXNmcy5vXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlLTM0LW9iai0kKENPTkZJR19QUENfU0VDVVJFX0JPT1QpXFx0Kz0gcGxwa3Mtc2VjdmFyLm9cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGU6MzU6b2JqLSQoQ09ORklHX1BTRVJJRVNfUExQS1NfU0VEKVxcdCs9IHBscGtzX3NlZF9vcHMub1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZS0zNi1vYmotJChDT05GSUdfU1VTUEVORClcXHRcXHQrPSBzdXNwZW5kLm9cXG4tLVxcbmRyaXZlcnMvY3B1aWRsZS9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfTUlQU19DUFNfQ1BVSURMRSlcXHRcXHQrPSBjcHVpZGxlLWNwcy5vXFxuLS1cXG5kcml2ZXJzL2NwdWlkbGUvTWFrZWZpbGUtMzgtIyBQT1dFUlBDIGRyaXZlcnNcXG5kcml2ZXJzL2NwdWlkbGUvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX1BTRVJJRVNfQ1BVSURMRSlcXHRcXHQrPSBjcHVpZGxlLXBzZXJpZXMub1xcbmRyaXZlcnMvY3B1aWRsZS9NYWtlZmlsZS00MC1vYmotJChDT05GSUdfUE9XRVJOVl9DUFVJRExFKVxcdFxcdCs9IGNwdWlkbGUtcG93ZXJudi5vXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUtMy1cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICs9IHBzZV9jb3JlLm9cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgKz0gcHNlX3JlZ3VsYXRvci5vXFxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSArPSBwZDY5MngwLm9cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfUFNFX1NJMzQ3NCkgKz0gc2kzNDc0Lm9cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfUFNFX1RQUzIzODgxKSArPSB0cHMyMzg4MS5vXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlPTE5Mz1vYmotJChDT05GSUdfTUVOX0EyMV9XRFQpICs9IG1lbmEyMV93ZHQub1xcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZS0xOTUtIyBQUEM2NCBBcmNoaXRlY3R1cmVcXG5kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlOjE5NjpvYmotJChDT05GSUdfUFNFUklFU19XRFQpICs9IHBzZXJpZXMtd2R0Lm9cXG5kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlLTE5Ny1vYmotJChDT05GSUdfV0FUQ0hET0dfUlRBUykgKz0gd2RydGFzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzM6MzcuNTkyODE3NTgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTg4ODE2NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgUFNFIENvbnRyb2xsZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBlbmFibGluZyBgUFNFX1JFR1VMQVRPUmAgaXMgYSBzb2xpZCBtb3ZlLCBhcyBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyLCBtYWtpbmcgaXQgZWFzaWVyIHRvIHByb2JlLiBOb3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLlxuXG5JIHN0YXJ0ZWQgYnkgbGlzdGluZyBrZXkgc3ltYm9scy4gSSBoYWQ6XG5cbiogICBgcGh5X3RyeV9hdHRhY2hfcHNlYFxuKiAgIGBwaHlfcHNlX2F0dGFjaF9vbmVgXG4qICAgYHBoeV9wc2VfZGV0YWNoX29uZWBcbiogICBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGBcbiogICBgX19waHlfZGV2aWNlX3JlZ2lzdGVyYFxuKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGBcbiogICBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYFxuKiAgIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmBcbiogICBgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldmBcblxuVGhlbiBJIG5vdGVkIHRoYXQgYHBoeV9kZXZpY2VfcmVsZWFzZWAgd2FzIG1vZGlmaWVkIHRvIGNhbGwgYHBzZV9jb250cm9sX3B1dGAsIGFuZCBgcGh5X2RldmljZV9yZW1vdmVgIHRvIHJlbW92ZSB0aGUgc2FtZSBjYWxsLCB3aGlsZSBgcGh5X2luaXRgIGFuZCBgcGh5X2V4aXRgIG5vdyBoYW5kbGUgbm90aWZpZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbi4gSSBhbHNvIHNhdyBgc2ZwX3NtX3Byb2JlX3BoeWAgd2FzIGNoYW5nZWQuXG5cblNvIEkgdXBkYXRlZCB0aGUgbGlzdCB0byBpbmNsdWRlIHRoZSBnZW5lcmljIGBwaHlfZGV2aWNlX3JlbGVhc2VgIChldmVuIHRob3VnaCBpdCdzIGdlbmVyaWMsIGl0J3MgcmVsZXZhbnQgaGVyZSkgYW5kIGBzZnBfc21fcHJvYmVfcGh5YC4gQWxzbywgYWx0aG91Z2ggYF9fcGh5X2RldmljZV9yZWdpc3RlcmAgaXMgc3RhdGljLCBzeXprYWxsZXIgY2FuIHN0aWxsIGZvY3VzIG9uIGl0LiBCb3RoIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAgYW5kIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBhcmUgZXhwb3J0ZWQgYW5kIGhhdmUgYmVlbiBtb2RpZmllZC5cblxuSW4gdGVybXMgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zLCBJJ3ZlIGdvdCB0byBrZWVwIGBQU0VfQ09OVFJPTExFUmAsIGBQU0VfUkVHVUxBVE9SYCwgYFBIWUxJQmAsIGBTRlBgLCBhbmQgYEZXTk9ERV9NRElPYCBpbiBtaW5kLlxuXG5UaGUgcGF0Y2gncyBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIHRoZSBQSFkgcmVnaXN0cmF0aW9uIGxvZ2ljIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbm90aWZpZXIgZm9yIFBTRSBjb250cm9sbGVycy4gSXQncyBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIHN5c3RlbSwgaGFuZGxpbmcgYXN5bmNocm9ub3VzIHJlZ2lzdHJhdGlvbi4gVGhpcyBhZmZlY3RzIGNvcmUgbmV0d29ya2luZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duLCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5JIGRvdWJsZS1jaGVja2VkIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBhbmQgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYDsgdGhleSBhcmUgd3JhcHBlcnMgYXJvdW5kIGBfX3BoeV9kZXZpY2VfcmVnaXN0ZXJgIGFuZCBgcGh5X3RyeV9hdHRhY2hfcHNlYCwgc28gdGhleSdyZSBkZWZpbml0ZWx5IGltcG9ydGFudC5cblxuTGV0IG1lIHJlZmluZSB0aGF0IGxpc3QsIG9uZSBsYXN0IHRpbWUsIHRvIGVuc3VyZSBldmVyeXRoaW5nJ3MgY2xlYXI6XG5cbiogICBgcGh5X3RyeV9hdHRhY2hfcHNlYFxuKiAgIGBwaHlfcHNlX2F0dGFjaF9vbmVgXG4qICAgYHBoeV9wc2VfZGV0YWNoX29uZWBcbiogICBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGBcbiogICBgX19waHlfZGV2aWNlX3JlZ2lzdGVyYFxuKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGBcbiogICBgcGh5X2RldmljZV9yZWdpc3RlcmBcbiogICBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYFxuKiAgIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmBcbiogICBgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldmBcbiogICBgc2ZwX3NtX3Byb2JlX3BoeWBcblxuT2theSwgdGhhdCdzIGV2ZXJ5dGhpbmc7IEknbSBzYXRpc2ZpZWQuIExldCdzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUwMywiT3V0cHV0VG9rZW5zIjoyNTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzM6NDguNTgxNjM2ODE3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3MTM1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBTRV9DT05UUk9MTEVSXCIsXG4gICAgXCJQU0VfUkVHVUxBVE9SXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlNGUFwiLFxuICAgIFwiRldOT0RFX01ESU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfdHJ5X2F0dGFjaF9wc2VcIixcbiAgICBcInBoeV9wc2VfYXR0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9kZXRhY2hfb25lXCIsXG4gICAgXCJwaHlfcHNlX25vdGlmaWVyX2V2ZW50XCIsXG4gICAgXCJfX3BoeV9kZXZpY2VfcmVnaXN0ZXJcIixcbiAgICBcInBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwc2VfcmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcInBzZV91bnJlZ2lzdGVyX25vdGlmaWVyXCIsXG4gICAgXCJwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2XCIsXG4gICAgXCJzZnBfc21fcHJvYmVfcGh5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgUEhZIHJlZ2lzdHJhdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIG1lY2hhbmlzbSBmb3IgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzLiBJdCBjaGFuZ2VzIGhvdyBQU0UgY29udHJvbGxlcnMgYXJlIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLCBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIGFwcHJvYWNoIHRoYXQgaGFuZGxlcyBhc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIE1ESU8gYnVzZXMsIFBIWXMsIGFuZCBwbGF0Zm9ybSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBTRV9DT05UUk9MTEVSXCIsXG4gICAgXCJQU0VfUkVHVUxBVE9SXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlNGUFwiLFxuICAgIFwiRldOT0RFX01ESU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfdHJ5X2F0dGFjaF9wc2VcIixcbiAgICBcInBoeV9wc2VfYXR0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9kZXRhY2hfb25lXCIsXG4gICAgXCJwaHlfcHNlX25vdGlmaWVyX2V2ZW50XCIsXG4gICAgXCJfX3BoeV9kZXZpY2VfcmVnaXN0ZXJcIixcbiAgICBcInBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwc2VfcmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcInBzZV91bnJlZ2lzdGVyX25vdGlmaWVyXCIsXG4gICAgXCJwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2XCIsXG4gICAgXCJzZnBfc21fcHJvYmVfcGh5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgUEhZIHJlZ2lzdHJhdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIG1lY2hhbmlzbSBmb3IgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzLiBJdCBjaGFuZ2VzIGhvdyBQU0UgY29udHJvbGxlcnMgYXJlIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLCBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIGFwcHJvYWNoIHRoYXQgaGFuZGxlcyBhc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIE1ESU8gYnVzZXMsIFBIWXMsIGFuZCBwbGF0Zm9ybSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7zbs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 22:23:45 +0000 UTC FinishedAt: 2026-06-26 22:33:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REGULATOR", "PHYLIB", "SFP", "FWNODE_MDIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PSE_CONTROLLER", "PSE_REGULATOR", "PHYLIB", "SFP", "FWNODE_MDIO" ], "series_id": "f0856b49-cdc4-440d-91b0-22741fe2e183" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phy_try_attach_pse", "phy_pse_attach_one", "phy_pse_detach_one", "phy_pse_notifier_event", "__phy_device_register", "phy_device_register_locked", "phy_device_register", "pse_register_notifier", "pse_unregister_notifier", "pse_control_matches_pcdev", "sfp_sm_probe_phy" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BTRV9DT05UUk9MTEVSJiMzNDssCiAgICAmIzM0O1BTRV9SRUdVTEFUT1ImIzM0OywKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtGV05PREVfTURJTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BoeV90cnlfYXR0YWNoX3BzZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX2F0dGFjaF9vbmUmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9kZXRhY2hfb25lJiMzNDssCiAgICAmIzM0O3BoeV9wc2Vfbm90aWZpZXJfZXZlbnQmIzM0OywKICAgICYjMzQ7X19waHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cHNlX3JlZ2lzdGVyX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O3BzZV91bnJlZ2lzdGVyX25vdGlmaWVyJiMzNDssCiAgICAmIzM0O3BzZV9jb250cm9sX21hdGNoZXNfcGNkZXYmIzM0OywKICAgICYjMzQ7c2ZwX3NtX3Byb2JlX3BoeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBQSFkgcmVnaXN0cmF0aW9uIGxvZ2ljIGFuZCBpbnRyb2R1Y2VzIGEgbm90aWZpZXIgbWVjaGFuaXNtIGZvciBQU0UgKFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCkgY29udHJvbGxlcnMuIEl0IGNoYW5nZXMgaG93IFBTRSBjb250cm9sbGVycyBhcmUgYXR0YWNoZWQgdG8gUEhZIGRldmljZXMsIG1vdmluZyBmcm9tIGEgc3luY2hyb25vdXMgbG9va3VwIHRvIGEgbm90aWZpZXItYmFzZWQgYXBwcm9hY2ggdGhhdCBoYW5kbGVzIGFzeW5jaHJvbm91cyByZWdpc3RyYXRpb24uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0d29ya2luZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgc29mdHdhcmUtZW11bGF0ZWQgTURJTyBidXNlcywgUEhZcywgYW5kIHBsYXRmb3JtIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNDNjNWZiNGI4NDdmODJhOGZkNTFkNTA2MDIxMjhjNzMwNTBkMWE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMjI6Mjk6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jXG5pbmRleCBiYTcwOTE1MTgyNjU0MC4uN2JkOTc5YjU5ZjQ5NjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xuQEAgLTExLDMzICYjNDM7MTEsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9md25vZGVfbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvcHNlLXBkL3BzZS5oXHUwMDNlXG4gXG4gTU9EVUxFX0FVVEhPUihcJiMzNDtDYWx2aW4gSm9obnNvbiBcdTAwM2NjYWx2aW4uam9obnNvbkBvc3MubnhwLmNvbVx1MDAzZVwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RldOT0RFIE1ESU8gYnVzIChFdGhlcm5ldCBQSFkpIGFjY2Vzc29yc1wmIzM0Oyk7XG4gXG4tc3RhdGljIHN0cnVjdCBwc2VfY29udHJvbCAqXG4tZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcbi1cdFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLXtcbi1cdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcbi1cdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4tXG4tXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRucCA9IHRvX29mX25vZGUoZndub2RlKTtcbi1cdGlmICghbnApXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cHNlYyA9IG9mX3BzZV9jb250cm9sX2dldChucCwgcGh5ZGV2KTtcbi1cdGlmIChQVFJfRVJSKHBzZWMpID09IC1FTk9FTlQpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cmV0dXJuIHBzZWM7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICpcbiBmd25vZGVfZmluZF9taWlfdGltZXN0YW1wZXIoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbiB7XG5AQCAtMTE4LDcgJiM0Mzs5Niw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbiBcdFx0XHRcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpjaGlsZCwgdTMyIGFkZHIpXG4ge1xuIFx0c3RydWN0IG1paV90aW1lc3RhbXBlciAqbWlpX3RzID0gTlVMTDtcbi1cdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyA9IE5VTEw7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5O1xuIFx0Ym9vbCBpc19jNDU7XG4gXHR1MzIgcGh5X2lkO1xuQEAgLTE1OSwxNCAmIzQzOzEzNiw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbiBcdFx0XHRnb3RvIGNsZWFuX3BoeTtcbiBcdH1cbiBcbi1cdHBzZWMgPSBmd25vZGVfZmluZF9wc2VfY29udHJvbChjaGlsZCwgcGh5KTtcbi1cdGlmIChJU19FUlIocHNlYykpIHtcbi1cdFx0cmMgPSBQVFJfRVJSKHBzZWMpO1xuLVx0XHRnb3RvIHVucmVnaXN0ZXJfcGh5O1xuLVx0fVxuLVxuLVx0cGh5LVx1MDAzZXBzZWMgPSBwc2VjO1xuLVxuIFx0LyogcGh5LVx1MDAzZW1paV90cyBtYXkgYWxyZWFkeSBiZSBkZWZpbmVkIGJ5IHRoZSBQSFkgZHJpdmVyLiBBXG4gXHQgKiBtaWlfdGltZXN0YW1wZXIgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2lsbCBzdGlsbCBoYXZlXG4gXHQgKiBwcmVjZWRlbmNlLlxuQEAgLTE3Niw5ICYjNDM7MTQ1LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuIFxuIFx0cmV0dXJuIDA7XG4gXG4tdW5yZWdpc3Rlcl9waHk6XG4tXHRpZiAoaXNfYWNwaV9ub2RlKGNoaWxkKSB8fCBpc19vZl9ub2RlKGNoaWxkKSlcbi1cdFx0cGh5X2RldmljZV9yZW1vdmUocGh5KTtcbiBjbGVhbl9waHk6XG4gXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcbiBjbGVhbl9taWlfdHM6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbmluZGV4IDA2MTUyMjg0NTllZjQyLi5mNWZlYmZmNGIwMGI4ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcbkBAIC0yMjMsOCAmIzQzOzIyMywxOSBAQCBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfZnJlZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXG4gc3RhdGljIHZvaWQgcGh5X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiB7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTtcbiYjNDM7XG4mIzQzO1x0LyogYnVzX2Zvcl9lYWNoX2RldigpIGhvbGRzIGdldF9kZXZpY2UoKSBhY3Jvc3MgZWFjaCBpdGVyYXRpb25cbiYjNDM7XHQgKiBzdGVwLCBkZWZlcnJpbmcgdGhpcyByZWxlYXNlIGNhbGxiYWNrIHVudGlsIGFueSBpbi1mbGlnaHQgUFNFXG4mIzQzO1x0ICogbm90aWZpZXIgd2FsayBoYXMgYWR2YW5jZWQgcGFzdCB0aGlzIHBoeS4gcHNlX2NvbnRyb2xfcHV0KClcbiYjNDM7XHQgKiB0YWtlcyBwc2VfbGlzdF9tdXRleCwgc28gdGhpcyBwYXRoIG11c3QgcnVuIGluIHNsZWVwYWJsZVxuJiM0MztcdCAqIGNvbnRleHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWlnaHRfc2xlZXAoKTtcbiYjNDM7XHRwc2VfY29udHJvbF9wdXQocGh5ZGV2LVx1MDAzZXBzZWMpO1xuJiM0MztcbiBcdGZ3bm9kZV9oYW5kbGVfcHV0KGRldi1cdTAwM2Vmd25vZGUpO1xuLVx0a2ZyZWUodG9fcGh5X2RldmljZShkZXYpKTtcbiYjNDM7XHRrZnJlZShwaHlkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbkBAIC0xMTAyLDExICYjNDM7MTExMywxMDMgQEAgc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcbiB9XG4gRVhQT1JUX1NZTUJPTChnZXRfcGh5X2RldmljZSk7XG4gXG4tLyoqXG4tICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuLSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xuJiM0MzsvKiBCZXN0LWVmZm9ydCBhdHRhY2ggb2YgcGh5ZGV2LVx1MDAzZXBzZWMgZnJvbSBhIERUIGBwc2VzID0gXHUwMDNjXHUwMDI2Li4uXHUwMDNlYCBwaGFuZGxlLlxuJiM0MzsgKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmwuIEEgbWlzc2luZyBwaGFuZGxlICgtRU5PRU5UKSBvciBhIG5vdC15ZXQtcmVnaXN0ZXJlZFxuJiM0MzsgKiBjb250cm9sbGVyICgtRVBST0JFX0RFRkVSKSBpcyBzaWxlbnQ7IHRoZSBub3RpZmllciByZXRyaWVzIHRoZSBsYXR0ZXIgYXRcbiYjNDM7ICogUFNFX1JFR0lTVEVSRUQgdGltZS4gQW55IG90aGVyIGVycm9yIG1lYW5zIGEgYnJva2VuIGJpbmRpbmcgYW5kIGlzIHdhcm5lZFxuJiM0MzsgKiBhYm91dCwgYnV0IGxlZnQgbm9uLWZhdGFsIHNvIHRoZSBwaHkgc3RpbGwgcmVnaXN0ZXJzLlxuICAqL1xuLWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3N0YXRpYyB2b2lkIHBoeV90cnlfYXR0YWNoX3BzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBzZV9jb250cm9sICpwc2VjO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdG5wID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4mIzQzO1x0aWYgKCFucClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2Vwc2VjKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xuJiM0MztcdGlmIChJU19FUlIocHNlYykpIHtcbiYjNDM7XHRcdGlmIChQVFJfRVJSKHBzZWMpICE9IC1FUFJPQkVfREVGRVIgXHUwMDI2XHUwMDI2IFBUUl9FUlIocHNlYykgIT0gLUVOT0VOVClcbiYjNDM7XHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcJiMzNDtmYWlsZWQgdG8gZ2V0IFBTRSBjb250cm9sOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHBzZWMpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBzZWMgPSBwc2VjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpXG4mIzQzO3tcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiYjNDM7XHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gXHUwMDI2bWRpb19idXNfcGh5X3R5cGUpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cGh5X3RyeV9hdHRhY2hfcHNlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2ID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2V0eXBlICE9IFx1MDAyNm1kaW9fYnVzX3BoeV90eXBlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTtcbiYjNDM7XHRwc2VjID0gcGh5ZGV2LVx1MDAzZXBzZWM7XG4mIzQzO1x0aWYgKCFwc2VjIHx8ICFwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHBzZWMsIHBjZGV2KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlcHNlYyA9IE5VTEw7XG4mIzQzO1x0cHNlX2NvbnRyb2xfcHV0KHBzZWMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGV2ZW50KSB7XG4mIzQzO1x0Y2FzZSBQU0VfUkVHSVNURVJFRDpcbiYjNDM7XHRcdHJ0bmxfbG9jaygpO1xuJiM0MztcdFx0YnVzX2Zvcl9lYWNoX2RldihcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxuJiM0MztcdFx0XHRcdCBwaHlfcHNlX2F0dGFjaF9vbmUpO1xuJiM0MztcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfT0s7XG4mIzQzO1x0Y2FzZSBQU0VfVU5SRUdJU1RFUkVEOlxuJiM0MztcdFx0cnRubF9sb2NrKCk7XG4mIzQzO1x0XHRidXNfZm9yX2VhY2hfZGV2KFx1MDAyNm1kaW9fYnVzX3R5cGUsIE5VTEwsIGRhdGEsXG4mIzQzO1x0XHRcdFx0IHBoeV9wc2VfZGV0YWNoX29uZSk7XG4mIzQzO1x0XHRydG5sX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9PSztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwaHlfcHNlX25vdGlmaWVyIF9fcmVhZF9tb3N0bHkgPSB7XG4mIzQzO1x0Lm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogQ29yZSByZWdpc3RyYXRpb246IGFkZCB0aGUgcGh5IHRvIHRoZSBNRElPIGJ1cy4gRG9lcyBub3QgdG91Y2ggcnRubCBvclxuJiM0MzsgKiBQU0UuIHBoeWRldi1cdTAwM2Vwc2VjIGlzIGF0dGFjaGVkIGJ5IHRoZSBjYWxsZXJzIGJlbG93LCBhZnRlciBkZXZpY2VfYWRkKClcbiYjNDM7ICogaGFzIG1hZGUgdGhlIHBoeSB2aXNpYmxlIG9uIG1kaW9fYnVzX3R5cGUsIHNvIHRoYXQgYSBjb25jdXJyZW50IFBTRVxuJiM0MzsgKiBub3RpZmllciB3YWxrIGFuZCB0aGUgYXR0YWNoIGNhbiBuZXZlciBsZWF2ZSB0aGUgcGh5IHVuYXR0YWNoZWQuIEtlZXBpbmdcbiYjNDM7ICogZGV2aWNlX2FkZCgpIG91dCBvZiBydG5sIGFsc28gYXZvaWRzIGRlYWRsb2NraW5nIHdoZW4gYmluZGluZyBhIHBoeSB0aGF0XG4mIzQzOyAqIGl0c2VsZiBwcm92aWRlcyBhbiBTRlAgY2FnZSAocGh5X3Byb2JlKCkgLVx1MDAzZSBwaHlfc2ZwX3Byb2JlKCkgLVx1MDAzZVxuJiM0MzsgKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIHRha2VzIHJ0bmwpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTExMzUsMTAgJiM0MzsxMjM4LDU0IEBAIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gIG91dDpcbiBcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG4gXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XG4tXG4gXHRtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG4mIzQzOyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xuJiM0MzsgKlxuJiM0MzsgKiBTYW1lIGFzIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKSBidXQgY2FsbGVyIG11c3QgYWxyZWFkeSBob2xkIHJ0bmxfbG9jaygpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcbiYjNDM7ICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4mIzQzOyAqL1xuJiM0MztpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdHBoeV90cnlfYXR0YWNoX3BzZShwaHlkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcbiBcbiAvKipcbkBAIC0xMTUyLDggJiM0MzsxMjk5LDYgQEAgRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcbiB2b2lkIHBoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0dW5yZWdpc3Rlcl9taWlfdGltZXN0YW1wZXIocGh5ZGV2LVx1MDAzZW1paV90cyk7XG4tXHRwc2VfY29udHJvbF9wdXQocGh5ZGV2LVx1MDAzZXBzZWMpO1xuLVxuIFx0ZGV2aWNlX2RlbChcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYpO1xuIFxuIFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbkBAIC0zOTgxLDggJiM0Mzs0MTI2LDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpXG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX2M0NTtcbiBcbiYjNDM7XHRyYyA9IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZwaHlfcHNlX25vdGlmaWVyKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRnb3RvIGVycl9nZW5waHk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO2Vycl9nZW5waHk6XG4mIzQzO1x0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9kcml2ZXIpO1xuIGVycl9jNDU6XG4gXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2M0NV9kcml2ZXIpO1xuIGVycl9ldGh0b29sX3BoeV9vcHM6XG5AQCAtMzk5OSw2ICYjNDM7NDE1MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgX19leGl0IHBoeV9leGl0KHZvaWQpXG4ge1xuJiM0MztcdHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNnBoeV9wc2Vfbm90aWZpZXIpO1xuIFx0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9jNDVfZHJpdmVyKTtcbiBcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZnZW5waHlfZHJpdmVyKTtcbiBcdHJ0bmxfbG9jaygpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuaW5kZXggMDNiZmQ4NjQwZGI5NjMuLjE4ODY4YmRkNjQ4NTJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbkBAIC0yMDgzLDcgJiM0MzsyMDgzLDcgQEAgc3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuIFx0LyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi9cbiBcdHBoeS1cdTAwM2Vpc19vbl9zZnBfbW9kdWxlID0gdHJ1ZTtcbiBcbi1cdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcbiYjNDM7XHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChwaHkpO1xuIFx0aWYgKGVycikge1xuIFx0XHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcbiBcdFx0ZGV2X2VycihzZnAtXHUwMDNlZGV2LCBcJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZDogJXBlXFxuXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbmluZGV4IDY5ZGJkYmRlOWQ3MWE3Li42MTE1NDBkZjQzYmIxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xuQEAgLTgsNiAmIzQzOzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuQEAgLTIzLDYgJiM0MzsyNCwzOSBAQCBzdGF0aWMgTElTVF9IRUFEKHBzZV9jb250cm9sbGVyX2xpc3QpO1xuIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHBzZV9wd19kX21hcCk7XG4gc3RhdGljIERFRklORV9NVVRFWChwc2VfcHdfZF9tdXRleCk7XG4gXG4mIzQzO3N0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHBzZV9jb250cm9sbGVyX25vdGlmaWVyKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwc2VfcmVnaXN0ZXJfbm90aWZpZXIgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBQU0UgY29udHJvbGxlciBldmVudHNcbiYjNDM7ICogQG5iOiBub3RpZmllciBibG9jayB0byByZWdpc3RlclxuJiM0MzsgKlxuJiM0MzsgKiBTZWUgZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCBmb3IgZXZlbnRzIGZpcmVkIGFuZCB0aGVpciBzdWJzY3JpYmVyXG4mIzQzOyAqIGNvbnRyYWN0LiBDYWxsYmFja3MgcnVuIGluIHByb2Nlc3MgY29udGV4dDsgdGhleSBtYXkgc2xlZXAsIHRha2VcbiYjNDM7ICogcnRubCwgYW5kIGNhbGwgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuIFRoZSBjaGFpbiBmaXJlcyBzeW5jaHJvbm91c2x5LFxuJiM0MzsgKiBzbyBhIFBTRSBjb250cm9sbGVyIGRyaXZlciYjMzk7cyBwcm9iZS91bmJpbmQgcGF0aCBtdXN0IG5vdCBob2xkIGFueVxuJiM0MzsgKiBzdWNoIGxvY2sgd2hlbiBjYWxsaW5nIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKCkgb3JcbiYjNDM7ICogcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcigpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4mIzQzOyAqL1xuJiM0MztpbnQgcHNlX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwc2VfcmVnaXN0ZXJfbm90aWZpZXIpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyIC0gdW5yZWdpc3RlciBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFja1xuJiM0MzsgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHByZXZpb3VzbHkgcGFzc2VkIHRvIHBzZV9yZWdpc3Rlcl9ub3RpZmllcigpXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcik7XG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBwc2VfY29udHJvbCAtIGEgUFNFIGNvbnRyb2xcbiAgKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXG5AQCAtMTEwNCw2ICYjNDM7MTEzOCw5IEBAIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbiBcdGxpc3RfYWRkKFx1MDAyNnBjZGV2LVx1MDAzZWxpc3QsIFx1MDAyNnBzZV9jb250cm9sbGVyX2xpc3QpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBzZV9saXN0X211dGV4KTtcbiBcbiYjNDM7XHRibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLFxuJiM0MztcdFx0XHRcdCAgICAgUFNFX1JFR0lTVEVSRUQsIHBjZGV2KTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xuQEAgLTExMTQsNiAmIzQzOzExNTEsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG4gICovXG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuIHtcbiYjNDM7XHRibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLFxuJiM0MztcdFx0XHRcdCAgICAgUFNFX1VOUkVHSVNURVJFRCwgcGNkZXYpO1xuJiM0MztcbiBcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XG4gXHRwc2VfcmVsZWFzZV9waXMocGNkZXYpO1xuIFx0aWYgKHBjZGV2LVx1MDAzZWlycSlcbkBAIC0xOTgxLDMgJiM0MzsyMDIxLDE3IEBAIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKVxuIFx0cmV0dXJuIHBzZWMtXHUwMDNlcGNkZXYtXHUwMDNldHlwZXMgXHUwMDI2IEVUSFRPT0xfUFNFX0MzMztcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocHNlX2hhc19jMzMpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYgLSBUZXN0IHdoZXRoZXIgYSBwc2VfY29udHJvbCB0YXJnZXRzIGEgY29udHJvbGxlclxuJiM0MzsgKiBAcHNlYzogcHNlX2NvbnRyb2wgb2J0YWluZWQgZnJvbSBvZl9wc2VfY29udHJvbF9nZXQoKVxuJiM0MzsgKiBAcGNkZXY6IFBTRSBjb250cm9sbGVyIHRvIGNvbXBhcmUgYWdhaW5zdFxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46ICV0cnVlIGlmIEBwc2VjIHdhcyBvYnRhaW5lZCBmcm9tIEBwY2RldiwgJWZhbHNlIG90aGVyd2lzZS5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwc2VjLVx1MDAzZXBjZGV2ID09IHBjZGV2O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uODY1YjliYWRkYjg1ZmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjE1OCw2ICYjNDM7MjE1OCw4IEBAIHN0cnVjdCBwaHlfZGV2aWNlICpmd25vZGVfcGh5X2ZpbmRfZGV2aWNlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpwaHlfZndub2RlKTtcbiBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlX2dldF9waHlfbm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcbiBzdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KTtcbiBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcbiYjNDM7LyogQ2FsbGVyIG11c3QgaG9sZCBydG5sX2xvY2soKTsgc2VlIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKSBmb3IgdGhlIHB1YmxpYyBmb3JtLiAqL1xuJiM0MztpbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSk7XG4gdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgcGh5X2dldF9jNDVfaWRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcbmluZGV4IDRlNTY5NmNmYWRlN2NjLi5kNDMxMGNhNzFhM2UwOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuQEAgLTIxLDYgJiM0MzsyMSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlO1xuIHN0cnVjdCBwaHlfZGV2aWNlO1xuIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXY7XG4gc3RydWN0IG5ldGxpbmtfZXh0X2FjaztcbiYjNDM7c3RydWN0IG5vdGlmaWVyX2Jsb2NrO1xuIFxuIC8qIEMzMyBQU0UgZXh0ZW5kZWQgc3RhdGUgYW5kIHN1YnN0YXRlLiAqL1xuIHN0cnVjdCBldGh0b29sX2MzM19wc2VfZXh0X3N0YXRlX2luZm8ge1xuQEAgLTMzNyw2ICYjNDM7MzM4LDI0IEBAIGVudW0gcHNlX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMge1xuIFx0UFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUNcdD0gMSBcdTAwM2NcdTAwM2MgMixcbiB9O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCAtIFBTRSBjb250cm9sbGVyIGxpZmVjeWNsZSBldmVudHNcbiYjNDM7ICpcbiYjNDM7ICogRXZlbnQgZGF0YSBpbiBjYWxsYmFja3MgaXMgYWx3YXlzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0XG4mIzQzOyAqIHBzZV9jb250cm9sbGVyX2RldiBmaXJpbmcgdGhlIGV2ZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBAUFNFX1JFR0lTVEVSRUQ6IGNvbnRyb2xsZXIgYWRkZWQgdG8gcHNlX2NvbnRyb2xsZXJfbGlzdCBhbmRcbiYjNDM7ICpcdHJlc29sdmFibGUgYnkgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuXG4mIzQzOyAqIEBQU0VfVU5SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbVxuJiM0MzsgKlx0cHNlX2NvbnRyb2xsZXJfbGlzdC4gU3Vic2NyaWJlcnMgaG9sZGluZyBwc2VfY29udHJvbCByZWZlcmVuY2VzXG4mIzQzOyAqXHR0YXJnZXRpbmcgaXQgbXVzdCBkcm9wIHRoZW0gYmVmb3JlIHJldHVybmluZyBhbmQgbXVzdCBub3RcbiYjNDM7ICpcdGFjcXVpcmUgbmV3IHJlZmVyZW5jZXMgZm9yIGl0LlxuJiM0MzsgKi9cbiYjNDM7ZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCB7XG4mIzQzO1x0UFNFX1JFR0lTVEVSRUQsXG4mIzQzO1x0UFNFX1VOUkVHSVNURVJFRCxcbiYjNDM7fTtcbiYjNDM7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKVxuIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbkBAIC0zNjYsNiAmIzQzOzM4NSwxMiBAQCBpbnQgcHNlX2V0aHRvb2xfc2V0X3ByaW8oc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuIGJvb2wgcHNlX2hhc19wb2RsKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7XG4gYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpO1xuIFxuJiM0Mztib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xuJiM0MztcbiYjNDM7aW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcbiYjNDM7aW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xuJiM0MztcbiAjZWxzZVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBzZV9jb250cm9sICpvZl9wc2VfY29udHJvbF9nZXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuQEAgLTQxNiw2ICYjNDM7NDQxLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmXG4gXG4gI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFNFX0NPTlRST0xMRVImIzM0OywKICAgICYjMzQ7UFNFX1JFR1VMQVRPUiYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O0ZXTk9ERV9NRElPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X3RyeV9hdHRhY2hfcHNlJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfYXR0YWNoX29uZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX2RldGFjaF9vbmUmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9ub3RpZmllcl9ldmVudCYjMzQ7LAogICAgJiMzNDtfX3BoeV9kZXZpY2VfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQmIzM0OywKICAgICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwc2VfcmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7cHNlX3VucmVnaXN0ZXJfbm90aWZpZXImIzM0OywKICAgICYjMzQ7cHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldiYjMzQ7LAogICAgJiMzNDtzZnBfc21fcHJvYmVfcGh5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFBIWSByZWdpc3RyYXRpb24gbG9naWMgYW5kIGludHJvZHVjZXMgYSBub3RpZmllciBtZWNoYW5pc20gZm9yIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVycy4gSXQgY2hhbmdlcyBob3cgUFNFIGNvbnRyb2xsZXJzIGFyZSBhdHRhY2hlZCB0byBQSFkgZGV2aWNlcywgbW92aW5nIGZyb20gYSBzeW5jaHJvbm91cyBsb29rdXAgdG8gYSBub3RpZmllci1iYXNlZCBhcHByb2FjaCB0aGF0IGhhbmRsZXMgYXN5bmNocm9ub3VzIHJlZ2lzdHJhdGlvbi4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCBNRElPIGJ1c2VzLCBQSFlzLCBhbmQgcGxhdGZvcm0gZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTQzYzVmYjRiODQ3ZjgyYThmZDUxZDUwNjAyMTI4YzczMDUwZDFhNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDIyOjI5OjM0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jCmluZGV4IGJhNzA5MTUxODI2NTQwLi43YmQ5NzliNTlmNDk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYwpAQCAtMTEsMzMgJiM0MzsxMSwxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Z3bm9kZV9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9wc2UtcGQvcHNlLmgmZ3Q7CiAKIE1PRFVMRV9BVVRIT1IoJiMzNDtDYWx2aW4gSm9obnNvbiAmbHQ7Y2FsdmluLmpvaG5zb25Ab3NzLm54cC5jb20mZ3Q7JiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzJiMzNDspOwogCi1zdGF0aWMgc3RydWN0IHBzZV9jb250cm9sICoKLWZ3bm9kZV9maW5kX3BzZV9jb250cm9sKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCi0JCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQotewotCXN0cnVjdCBwc2VfY29udHJvbCAqcHNlYzsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19QU0VfQ09OVFJPTExFUikpCi0JCXJldHVybiBOVUxMOwotCi0JbnAgPSB0b19vZl9ub2RlKGZ3bm9kZSk7Ci0JaWYgKCFucCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpOwotCWlmIChQVFJfRVJSKHBzZWMpID09IC1FTk9FTlQpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHBzZWM7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICoKIGZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQogewpAQCAtMTE4LDcgJiM0Mzs5Niw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cywKIAkJCQlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqY2hpbGQsIHUzMiBhZGRyKQogewogCXN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cyA9IE5VTEw7Ci0Jc3RydWN0IHBzZV9jb250cm9sICpwc2VjID0gTlVMTDsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OwogCWJvb2wgaXNfYzQ1OwogCXUzMiBwaHlfaWQ7CkBAIC0xNTksMTQgJiM0MzsxMzYsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsCiAJCQlnb3RvIGNsZWFuX3BoeTsKIAl9CiAKLQlwc2VjID0gZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woY2hpbGQsIHBoeSk7Ci0JaWYgKElTX0VSUihwc2VjKSkgewotCQlyYyA9IFBUUl9FUlIocHNlYyk7Ci0JCWdvdG8gdW5yZWdpc3Rlcl9waHk7Ci0JfQotCi0JcGh5LSZndDtwc2VjID0gcHNlYzsKLQogCS8qIHBoeS0mZ3Q7bWlpX3RzIG1heSBhbHJlYWR5IGJlIGRlZmluZWQgYnkgdGhlIFBIWSBkcml2ZXIuIEEKIAkgKiBtaWlfdGltZXN0YW1wZXIgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2lsbCBzdGlsbCBoYXZlCiAJICogcHJlY2VkZW5jZS4KQEAgLTE3Niw5ICYjNDM7MTQ1LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLAogCiAJcmV0dXJuIDA7CiAKLXVucmVnaXN0ZXJfcGh5OgotCWlmIChpc19hY3BpX25vZGUoY2hpbGQpIHx8IGlzX29mX25vZGUoY2hpbGQpKQotCQlwaHlfZGV2aWNlX3JlbW92ZShwaHkpOwogY2xlYW5fcGh5OgogCXBoeV9kZXZpY2VfZnJlZShwaHkpOwogY2xlYW5fbWlpX3RzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKaW5kZXggMDYxNTIyODQ1OWVmNDIuLmY1ZmViZmY0YjAwYjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKQEAgLTIyMyw4ICYjNDM7MjIzLDE5IEBAIHN0YXRpYyB2b2lkIHBoeV9tZGlvX2RldmljZV9mcmVlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKIAogc3RhdGljIHZvaWQgcGh5X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTsKJiM0MzsKJiM0MzsJLyogYnVzX2Zvcl9lYWNoX2RldigpIGhvbGRzIGdldF9kZXZpY2UoKSBhY3Jvc3MgZWFjaCBpdGVyYXRpb24KJiM0MzsJICogc3RlcCwgZGVmZXJyaW5nIHRoaXMgcmVsZWFzZSBjYWxsYmFjayB1bnRpbCBhbnkgaW4tZmxpZ2h0IFBTRQomIzQzOwkgKiBub3RpZmllciB3YWxrIGhhcyBhZHZhbmNlZCBwYXN0IHRoaXMgcGh5LiBwc2VfY29udHJvbF9wdXQoKQomIzQzOwkgKiB0YWtlcyBwc2VfbGlzdF9tdXRleCwgc28gdGhpcyBwYXRoIG11c3QgcnVuIGluIHNsZWVwYWJsZQomIzQzOwkgKiBjb250ZXh0LgomIzQzOwkgKi8KJiM0MzsJbWlnaHRfc2xlZXAoKTsKJiM0MzsJcHNlX2NvbnRyb2xfcHV0KHBoeWRldi0mZ3Q7cHNlYyk7CiYjNDM7CiAJZndub2RlX2hhbmRsZV9wdXQoZGV2LSZndDtmd25vZGUpOwotCWtmcmVlKHRvX3BoeV9kZXZpY2UoZGV2KSk7CiYjNDM7CWtmcmVlKHBoeWRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHBoeV9tZGlvX2RldmljZV9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQpAQCAtMTEwMiwxMSAmIzQzOzExMTMsMTAzIEBAIHN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpCiB9CiBFWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTsKIAotLyoqCi0gKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzCi0gKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXMKJiM0MzsvKiBCZXN0LWVmZm9ydCBhdHRhY2ggb2YgcGh5ZGV2LSZndDtwc2VjIGZyb20gYSBEVCBgcHNlcyA9ICZsdDsmYW1wOy4uLiZndDtgIHBoYW5kbGUuCiYjNDM7ICogQ2FsbGVyIG11c3QgaG9sZCBydG5sLiBBIG1pc3NpbmcgcGhhbmRsZSAoLUVOT0VOVCkgb3IgYSBub3QteWV0LXJlZ2lzdGVyZWQKJiM0MzsgKiBjb250cm9sbGVyICgtRVBST0JFX0RFRkVSKSBpcyBzaWxlbnQ7IHRoZSBub3RpZmllciByZXRyaWVzIHRoZSBsYXR0ZXIgYXQKJiM0MzsgKiBQU0VfUkVHSVNURVJFRCB0aW1lLiBBbnkgb3RoZXIgZXJyb3IgbWVhbnMgYSBicm9rZW4gYmluZGluZyBhbmQgaXMgd2FybmVkCiYjNDM7ICogYWJvdXQsIGJ1dCBsZWZ0IG5vbi1mYXRhbCBzbyB0aGUgcGh5IHN0aWxsIHJlZ2lzdGVycy4KICAqLwotaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0MztzdGF0aWMgdm9pZCBwaHlfdHJ5X2F0dGFjaF9wc2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwc2VfY29udHJvbCAqcHNlYzsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpucDsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJbnAgPSBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGU7CiYjNDM7CWlmICghbnApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O3BzZWMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBzZWMgPSBvZl9wc2VfY29udHJvbF9nZXQobnAsIHBoeWRldik7CiYjNDM7CWlmIChJU19FUlIocHNlYykpIHsKJiM0MzsJCWlmIChQVFJfRVJSKHBzZWMpICE9IC1FUFJPQkVfREVGRVIgJmFtcDsmYW1wOyBQVFJfRVJSKHBzZWMpICE9IC1FTk9FTlQpCiYjNDM7CQkJcGh5ZGV2X3dhcm4ocGh5ZGV2LCAmIzM0O2ZhaWxlZCB0byBnZXQgUFNFIGNvbnRyb2w6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICBwc2VjKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3BzZWMgPSBwc2VjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV9wc2VfYXR0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEgX19tYXliZV91bnVzZWQpCiYjNDM7ewomIzQzOwlBU1NFUlRfUlROTCgpOwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDt0eXBlICE9ICZhbXA7bWRpb19idXNfcGh5X3R5cGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcGh5X3RyeV9hdHRhY2hfcHNlKHRvX3BoeV9kZXZpY2UoZGV2KSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV9wc2VfZGV0YWNoX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiA9IGRhdGE7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCBwc2VfY29udHJvbCAqcHNlYzsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7dHlwZSAhPSAmYW1wO21kaW9fYnVzX3BoeV90eXBlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTsKJiM0MzsJcHNlYyA9IHBoeWRldi0mZ3Q7cHNlYzsKJiM0MzsJaWYgKCFwc2VjIHx8ICFwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHBzZWMsIHBjZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwaHlkZXYtJmd0O3BzZWMgPSBOVUxMOwomIzQzOwlwc2VfY29udHJvbF9wdXQocHNlYyk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKJiM0MzsJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3dpdGNoIChldmVudCkgewomIzQzOwljYXNlIFBTRV9SRUdJU1RFUkVEOgomIzQzOwkJcnRubF9sb2NrKCk7CiYjNDM7CQlidXNfZm9yX2VhY2hfZGV2KCZhbXA7bWRpb19idXNfdHlwZSwgTlVMTCwgTlVMTCwKJiM0MzsJCQkJIHBoeV9wc2VfYXR0YWNoX29uZSk7CiYjNDM7CQlydG5sX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIE5PVElGWV9PSzsKJiM0MzsJY2FzZSBQU0VfVU5SRUdJU1RFUkVEOgomIzQzOwkJcnRubF9sb2NrKCk7CiYjNDM7CQlidXNfZm9yX2VhY2hfZGV2KCZhbXA7bWRpb19idXNfdHlwZSwgTlVMTCwgZGF0YSwKJiM0MzsJCQkJIHBoeV9wc2VfZGV0YWNoX29uZSk7CiYjNDM7CQlydG5sX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIE5PVElGWV9PSzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBoeV9wc2Vfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHsKJiM0MzsJLm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LAomIzQzO307CiYjNDM7CiYjNDM7LyogQ29yZSByZWdpc3RyYXRpb246IGFkZCB0aGUgcGh5IHRvIHRoZSBNRElPIGJ1cy4gRG9lcyBub3QgdG91Y2ggcnRubCBvcgomIzQzOyAqIFBTRS4gcGh5ZGV2LSZndDtwc2VjIGlzIGF0dGFjaGVkIGJ5IHRoZSBjYWxsZXJzIGJlbG93LCBhZnRlciBkZXZpY2VfYWRkKCkKJiM0MzsgKiBoYXMgbWFkZSB0aGUgcGh5IHZpc2libGUgb24gbWRpb19idXNfdHlwZSwgc28gdGhhdCBhIGNvbmN1cnJlbnQgUFNFCiYjNDM7ICogbm90aWZpZXIgd2FsayBhbmQgdGhlIGF0dGFjaCBjYW4gbmV2ZXIgbGVhdmUgdGhlIHBoeSB1bmF0dGFjaGVkLiBLZWVwaW5nCiYjNDM7ICogZGV2aWNlX2FkZCgpIG91dCBvZiBydG5sIGFsc28gYXZvaWRzIGRlYWRsb2NraW5nIHdoZW4gYmluZGluZyBhIHBoeSB0aGF0CiYjNDM7ICogaXRzZWxmIHByb3ZpZGVzIGFuIFNGUCBjYWdlIChwaHlfcHJvYmUoKSAtJmd0OyBwaHlfc2ZwX3Byb2JlKCkgLSZndDsKJiM0MzsgKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIHRha2VzIHJ0bmwpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgX19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJaW50IGVycjsKIApAQCAtMTEzNSwxMCAmIzQzOzEyMzgsNTQgQEAgaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKICBvdXQ6CiAJLyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi8KIAlwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7Ci0KIAltZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKCZhbXA7cGh5ZGV2LSZndDttZGlvKTsKIAlyZXR1cm4gZXJyOwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzCiYjNDM7ICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzCiYjNDM7ICoKJiM0MzsgKiBTYW1lIGFzIHBoeV9kZXZpY2VfcmVnaXN0ZXIoKSBidXQgY2FsbGVyIG11c3QgYWxyZWFkeSBob2xkIHJ0bmxfbG9jaygpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CWVyciA9IF9fcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJcGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzCiYjNDM7ICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwlwaHlfdHJ5X2F0dGFjaF9wc2UocGh5ZGV2KTsKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTsKIAogLyoqCkBAIC0xMTUyLDggJiM0MzsxMjk5LDYgQEAgRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTsKIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAl1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtJmd0O21paV90cyk7Ci0JcHNlX2NvbnRyb2xfcHV0KHBoeWRldi0mZ3Q7cHNlYyk7Ci0KIAlkZXZpY2VfZGVsKCZhbXA7cGh5ZGV2LSZndDttZGlvLmRldik7CiAKIAkvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqLwpAQCAtMzk4MSw4ICYjNDM7NDEyNiwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCBwaHlfaW5pdCh2b2lkKQogCWlmIChyYykKIAkJZ290byBlcnJfYzQ1OwogCiYjNDM7CXJjID0gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKCZhbXA7cGh5X3BzZV9ub3RpZmllcik7CiYjNDM7CWlmIChyYykKJiM0MzsJCWdvdG8gZXJyX2dlbnBoeTsKJiM0MzsKIAlyZXR1cm4gMDsKIAomIzQzO2Vycl9nZW5waHk6CiYjNDM7CXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2dlbnBoeV9kcml2ZXIpOwogZXJyX2M0NToKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDtnZW5waHlfYzQ1X2RyaXZlcik7CiBlcnJfZXRodG9vbF9waHlfb3BzOgpAQCAtMzk5OSw2ICYjNDM7NDE1MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwaHlfZXhpdCh2b2lkKQogewomIzQzOwlwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcigmYW1wO3BoeV9wc2Vfbm90aWZpZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYW1wO2dlbnBoeV9jNDVfZHJpdmVyKTsKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDtnZW5waHlfZHJpdmVyKTsKIAlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwppbmRleCAwM2JmZDg2NDBkYjk2My4uMTg4NjhiZGQ2NDg1MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKQEAgLTIwODMsNyAmIzQzOzIwODMsNyBAQCBzdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9waHkoc3RydWN0IHNmcCAqc2ZwLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpCiAJLyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi8KIAlwaHktJmd0O2lzX29uX3NmcF9tb2R1bGUgPSB0cnVlOwogCi0JZXJyID0gcGh5X2RldmljZV9yZWdpc3RlcihwaHkpOwomIzQzOwllcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChwaHkpOwogCWlmIChlcnIpIHsKIAkJcGh5X2RldmljZV9mcmVlKHBoeSk7CiAJCWRldl9lcnIoc2ZwLSZndDtkZXYsICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWQ6ICVwZVxuJiMzNDssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jCmluZGV4IDY5ZGJkYmRlOWQ3MWE3Li42MTE1NDBkZjQzYmIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMKQEAgLTgsNiAmIzQzOzgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aHRvb2wuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sX25ldGxpbmsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbm90aWZpZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BzZS1wZC9wc2UuaCZndDsKQEAgLTIzLDYgJiM0MzsyNCwzOSBAQCBzdGF0aWMgTElTVF9IRUFEKHBzZV9jb250cm9sbGVyX2xpc3QpOwogc3RhdGljIERFRklORV9YQVJSQVlfQUxMT0MocHNlX3B3X2RfbWFwKTsKIHN0YXRpYyBERUZJTkVfTVVURVgocHNlX3B3X2RfbXV0ZXgpOwogCiYjNDM7c3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQocHNlX2NvbnRyb2xsZXJfbm90aWZpZXIpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBzZV9yZWdpc3Rlcl9ub3RpZmllciAtIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9yIFBTRSBjb250cm9sbGVyIGV2ZW50cwomIzQzOyAqIEBuYjogbm90aWZpZXIgYmxvY2sgdG8gcmVnaXN0ZXIKJiM0MzsgKgomIzQzOyAqIFNlZSBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IGZvciBldmVudHMgZmlyZWQgYW5kIHRoZWlyIHN1YnNjcmliZXIKJiM0MzsgKiBjb250cmFjdC4gQ2FsbGJhY2tzIHJ1biBpbiBwcm9jZXNzIGNvbnRleHQ7IHRoZXkgbWF5IHNsZWVwLCB0YWtlCiYjNDM7ICogcnRubCwgYW5kIGNhbGwgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuIFRoZSBjaGFpbiBmaXJlcyBzeW5jaHJvbm91c2x5LAomIzQzOyAqIHNvIGEgUFNFIGNvbnRyb2xsZXIgZHJpdmVyJiMzOTtzIHByb2JlL3VuYmluZCBwYXRoIG11c3Qgbm90IGhvbGQgYW55CiYjNDM7ICogc3VjaCBsb2NrIHdoZW4gY2FsbGluZyBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIG9yCiYjNDM7ICogcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcigpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKJiM0Mzt7CiYjNDM7CXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmYW1wO3BzZV9jb250cm9sbGVyX25vdGlmaWVyLCBuYik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBzZV9yZWdpc3Rlcl9ub3RpZmllcik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIgLSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGNhbGxiYWNrCiYjNDM7ICogQG5iOiBub3RpZmllciBibG9jayBwcmV2aW91c2x5IHBhc3NlZCB0byBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoKQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgomIzQzOyAqLwomIzQzO2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmFtcDtwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcik7CiYjNDM7CiAvKioKICAqIHN0cnVjdCBwc2VfY29udHJvbCAtIGEgUFNFIGNvbnRyb2wKICAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBQU0UgY29udHJvbGxlciBkZXZpY2UKQEAgLTExMDQsNiAmIzQzOzExMzgsOSBAQCBpbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpCiAJbGlzdF9hZGQoJmFtcDtwY2Rldi0mZ3Q7bGlzdCwgJmFtcDtwc2VfY29udHJvbGxlcl9saXN0KTsKIAltdXRleF91bmxvY2soJmFtcDtwc2VfbGlzdF9tdXRleCk7CiAKJiM0MzsJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmYW1wO3BzZV9jb250cm9sbGVyX25vdGlmaWVyLAomIzQzOwkJCQkgICAgIFBTRV9SRUdJU1RFUkVELCBwY2Rldik7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7CkBAIC0xMTE0LDYgJiM0MzsxMTUxLDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpOwogICovCiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpCiB7CiYjNDM7CWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmFtcDtwc2VfY29udHJvbGxlcl9ub3RpZmllciwKJiM0MzsJCQkJICAgICBQU0VfVU5SRUdJU1RFUkVELCBwY2Rldik7CiYjNDM7CiAJcHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTsKIAlwc2VfcmVsZWFzZV9waXMocGNkZXYpOwogCWlmIChwY2Rldi0mZ3Q7aXJxKQpAQCAtMTk4MSwzICYjNDM7MjAyMSwxNyBAQCBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYykKIAlyZXR1cm4gcHNlYy0mZ3Q7cGNkZXYtJmd0O3R5cGVzICZhbXA7IEVUSFRPT0xfUFNFX0MzMzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9oYXNfYzMzKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2IC0gVGVzdCB3aGV0aGVyIGEgcHNlX2NvbnRyb2wgdGFyZ2V0cyBhIGNvbnRyb2xsZXIKJiM0MzsgKiBAcHNlYzogcHNlX2NvbnRyb2wgb2J0YWluZWQgZnJvbSBvZl9wc2VfY29udHJvbF9nZXQoKQomIzQzOyAqIEBwY2RldjogUFNFIGNvbnRyb2xsZXIgdG8gY29tcGFyZSBhZ2FpbnN0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46ICV0cnVlIGlmIEBwc2VjIHdhcyBvYnRhaW5lZCBmcm9tIEBwY2RldiwgJWZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKi8KJiM0Mztib29sIHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYoc3RydWN0IHBzZV9jb250cm9sICpwc2VjLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBwc2VjLSZndDtwY2RldiA9PSBwY2RldjsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xfbWF0Y2hlc19wY2Rldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAxOTlhN2FhYTM0MWJmZC4uODY1YjliYWRkYjg1ZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMjE1OCw2ICYjNDM7MjE1OCw4IEBAIHN0cnVjdCBwaHlfZGV2aWNlICpmd25vZGVfcGh5X2ZpbmRfZGV2aWNlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpwaHlfZndub2RlKTsKIHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGVfZ2V0X3BoeV9ub2RlKGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpOwogc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7CiBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTsKJiM0MzsvKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmxfbG9jaygpOyBzZWUgcGh5X2RldmljZV9yZWdpc3RlcigpIGZvciB0aGUgcHVibGljIGZvcm0uICovCiYjNDM7aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpOwogdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiB2b2lkIHBoeV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwogaW50IHBoeV9nZXRfYzQ1X2lkcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmgKaW5kZXggNGU1Njk2Y2ZhZGU3Y2MuLmQ0MzEwY2E3MWEzZTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaApAQCAtMjEsNiAmIzQzOzIxLDcgQEAgc3RydWN0IG5ldF9kZXZpY2U7CiBzdHJ1Y3QgcGh5X2RldmljZTsKIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXY7CiBzdHJ1Y3QgbmV0bGlua19leHRfYWNrOwomIzQzO3N0cnVjdCBub3RpZmllcl9ibG9jazsKIAogLyogQzMzIFBTRSBleHRlbmRlZCBzdGF0ZSBhbmQgc3Vic3RhdGUuICovCiBzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX2V4dF9zdGF0ZV9pbmZvIHsKQEAgLTMzNyw2ICYjNDM7MzM4LDI0IEBAIGVudW0gcHNlX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgewogCVBTRV9CVURHRVRfRVZBTF9TVFJBVF9EWU5BTUlDCT0gMSAmbHQ7Jmx0OyAyLAogfTsKIAomIzQzOy8qKgomIzQzOyAqIGVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgLSBQU0UgY29udHJvbGxlciBsaWZlY3ljbGUgZXZlbnRzCiYjNDM7ICoKJiM0MzsgKiBFdmVudCBkYXRhIGluIGNhbGxiYWNrcyBpcyBhbHdheXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QKJiM0MzsgKiBwc2VfY29udHJvbGxlcl9kZXYgZmlyaW5nIHRoZSBldmVudC4KJiM0MzsgKgomIzQzOyAqIEBQU0VfUkVHSVNURVJFRDogY29udHJvbGxlciBhZGRlZCB0byBwc2VfY29udHJvbGxlcl9saXN0IGFuZAomIzQzOyAqCXJlc29sdmFibGUgYnkgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuCiYjNDM7ICogQFBTRV9VTlJFR0lTVEVSRUQ6IGNvbnRyb2xsZXIgYWJvdXQgdG8gYmUgcmVtb3ZlZCBmcm9tCiYjNDM7ICoJcHNlX2NvbnRyb2xsZXJfbGlzdC4gU3Vic2NyaWJlcnMgaG9sZGluZyBwc2VfY29udHJvbCByZWZlcmVuY2VzCiYjNDM7ICoJdGFyZ2V0aW5nIGl0IG11c3QgZHJvcCB0aGVtIGJlZm9yZSByZXR1cm5pbmcgYW5kIG11c3Qgbm90CiYjNDM7ICoJYWNxdWlyZSBuZXcgcmVmZXJlbmNlcyBmb3IgaXQuCiYjNDM7ICovCiYjNDM7ZW51bSBwc2VfY29udHJvbGxlcl9ldmVudCB7CiYjNDM7CVBTRV9SRUdJU1RFUkVELAomIzQzOwlQU0VfVU5SRUdJU1RFUkVELAomIzQzO307CiYjNDM7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUFNFX0NPTlRST0xMRVIpCiBpbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpOwogdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTsKQEAgLTM2Niw2ICYjNDM7Mzg1LDEyIEBAIGludCBwc2VfZXRodG9vbF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsCiBib29sIHBzZV9oYXNfcG9kbChzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpOwogYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpOwogCiYjNDM7Ym9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYywKJiM0MzsJCQkgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpOwomIzQzOwomIzQzO2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiYjNDM7aW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwomIzQzOwogI2Vsc2UKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcHNlX2NvbnRyb2wgKm9mX3BzZV9jb250cm9sX2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCkBAIC00MTYsNiAmIzQzOzQ0MSwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYywKJiM0MzsJCQkJCSAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKIAogI2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxOTQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQU0UgQ29udHJvbGxlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHJlZmFjdG9yaW5nIGhvdyBQU0UgY29udHJvbGxlcnMgaW50ZXJhY3Qgd2l0aCBQSFkgZGV2aWNlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBhIG5vdGlmaWVyIHN5c3RlbSwgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAgYW5kIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAsIGluIGBwc2VfY29yZS5jYC4mIzM0OyBUaGF0JiMzOTtzIGdvb2Q7IGRlY291cGxpbmcgdGhyb3VnaCBub3RpZmljYXRpb25zIGlzIGEgY2xlYW4gYXBwcm9hY2guIFRoZW4gSSBzZWUgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIGBwaHlfZGV2aWNlLmNgIHRvIHJlZ2lzdGVyIGEgYHBoeV9wc2Vfbm90aWZpZXJgIHRoYXQgcmVhY3RzIHRvIGBQU0VfUkVHSVNURVJFRGAgYW5kIGBQU0VfVU5SRUdJU1RFUkVEYCBldmVudHMuIFRoaXMgaXMgbG9naWNhbCwgdGhlIFBIWXMgbmVlZCB0byBrbm93IGFib3V0IHRoZSBQU0UuCgpUaGUgY29yZSBvZiBpdCBpcyB0aGF0IHdoZW4gYSBQU0UgY29udHJvbGxlciByZWdpc3RlcnMsIGl0JiMzOTtsbCBpdGVyYXRlIHRocm91Z2ggYWxsIFBIWXMgb24gdGhlIE1ESU8gYnVzIGFuZCB0cnkgdG8gaG9vayBpdHNlbGYgdXAuIEFuZCB3aGVuIGl0IHVucmVnaXN0ZXJzLCBpdCBkZXRhY2hlcy4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KCk5vdywgdGhleSBhbHNvIGFsdGVyZWQgYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeWAg4oCTIHRoZXkgcmVtb3ZlZCB0aGF0IHN5bmNocm9ub3VzIGBmd25vZGVfZmluZF9wc2VfY29udHJvbGAgY2FsbCwgYW5kIG5vdyByZWx5IG9uIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBvciB0aGUgbm90aWZpZXIuIFRoaXMgaXMgYSBiaXQgbW9yZSBzdWJ0bGUsIG1ha2luZyBzdXJlIHRoZSBhdHRhY2htZW50IGlzIGFsd2F5cyBoYW5kbGVkIHRocm91Z2ggdGhlIHVwZGF0ZWQgbm90aWZpZXIgbWVjaGFuaXNtLiBHb29kLCB0aGF0JiMzOTtzIGltcG9ydGFudCBmb3IgdGhlIGludGVncml0eSBvZiB0aGUgcGF0Y2guCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCAmIzM0O0NhbiBJIHJlYWNoIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8mIzM0OyBUaGF0JiMzOTtzIHdoZXJlIGZ1enppbmcgYW5kIHRlc3RpbmcgY29tZXMgaW4sIG9mIGNvdXJzZS4gTURJTyBidXNlcyBhbmQgUEhZIGRldmljZXMgKmNhbiogYmUgY3JlYXRlZCB2aXJ0dWFsbHksIHJpZ2h0PyBOZXRkZXZzaW0sIGR1bW15IFBIWXMsIHZldGgvbWFjc2Vj4oCmIG9rYXksIHNvIFBIWXMgYXJlIHVzdWFsbHkgaGFyZHdhcmUgYnV0IHdlIGNhbiBtYWtlIHRoZW0gdmlydHVhbCwgcmlnaHQ/IFRoZXJlIGFyZSBzb21lIHZpcnR1YWwgZHJpdmVycywgYW5kIHdlIGNhbiBmdXp6IE1ESU8vUEhZIHJlZ2lzdHJhdGlvbiBpZiBuZWVkZWQuIEhvbGQgb24uLi4gRG9lcyBzeXprYWxsZXIgZG8gaXQ/IENhbiBpdCBjcmVhdGUgdmlydHVhbCBkZXZpY2VzIHRoYXQgcmVnaXN0ZXIgUEhZcy4uLiB3YWl0LCB3aGF0IGFib3V0IGBtYWM4MDIxMV9od3NpbWA/IE5vLCB0aGF0JiMzOTtzIG5vdCByaWdodCwgUEhZcyBhcmUgdXN1YWxseSBmb3IgRXRoZXJuZXQsIG5vdCB3aXJlbGVzcy4uLiBPa2F5LCBgbmV0ZGV2c2ltYCBkb2VzbiYjMzk7dCByZWdpc3RlciBQSFlzIHNwZWNpZmljYWxseS4gQnV0IHdoYXQgYWJvdXQgYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeWA/IFRoYXQmIzM5O3MgYWJvdXQgZGV2aWNlIHRyZWVzIGFuZCBBQ1BJLCByaWdodD8KClNvLCBjYW4gc3l6a2FsbGVyIHRyaWdnZXIgYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIGRpcmVjdGx5PyBNYXliZS4gVmlydHVhbCBkcml2ZXJzLCBkZWZpbml0ZWx5LiBVU0IgZHJpdmVycywgcG90ZW50aWFsbHkuIEZvciBleGFtcGxlLCBgdXNibmV0YCBkcml2ZXJzLCB0aGV5IG1pZ2h0IHJlZ2lzdGVyIFBIWXMuLi4KClRoZSBuZXh0IGNydWNpYWwgcG9pbnQgaXMsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgaXMgY2FsbGVkIGJ5IHRoZSBQU0UgY29udHJvbGxlciBkcml2ZXJzIHRoZW1zZWx2ZXMuIEFyZSB0aGVyZSAqYW55KiB2aXJ0dWFsIFBTRSBjb250cm9sbGVyIGRyaXZlcnM/IFRoYXQmIzM5O3MgdGhlIGtleSBxdWVzdGlvbi4gV2UgbmVlZCB0byBjaGVjayBpZiBgQ09ORklHX1BTRV9DT05UUk9MTEVSYCBpcyBlbmFibGVkIGFuZCB0aGVuIGxvb2sgZm9yIFBTRSBkcml2ZXJzIHRoYXQgYXJlIHBvdGVudGlhbGx5IHRyaWdnZXJhYmxlLiBUaW1lIHRvIGdyZXAgZm9yIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgYW5kIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYz0xNzU2PXN0YXRpYyBpbnQgcGQ2OTJ4MF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4MzgtXHRwcml2LVx1MDAzZXBjZGV2LnBpc19wcmlvX21heCA9IDI7XG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jOjE4Mzk6XHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwY2Rldik7XG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4NDAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTI3PXN0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHBzZV9jb250cm9sbGVyX25vdGlmaWVyKTtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0zNi0gKiBzbyBhIFBTRSBjb250cm9sbGVyIGRyaXZlciYjMzk7cyBwcm9iZS91bmJpbmQgcGF0aCBtdXN0IG5vdCBob2xkIGFueVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6Mzc6ICogc3VjaCBsb2NrIHdoZW4gY2FsbGluZyBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIG9yXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0zOC0gKiBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkuXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTA0Nj1zdGF0aWMgdm9pZCBwc2Vfc2VuZF9udGZfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDY3LS8qKlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTA2ODogKiBwc2VfY29udHJvbGxlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDY5LSAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBpbml0aWFsaXplZCBQU0UgY29udHJvbGxlciBkZXZpY2Vcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDcyLSAqL1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTA3MzppbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDc0LXtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTQ1LX1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExNDY6RVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE0Ny1cbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0xMTY5PXN0YXRpYyB2b2lkIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcylcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTc0LS8qKlxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE3NTogKiBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyIC0gcmVzb3VyY2UgbWFuYWdlZCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTc2LSAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUFNFIGNvbnRyb2xsZXJcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTc4LSAqXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTc5OiAqIE1hbmFnZWQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKS4gRm9yIFBTRSBjb250cm9sbGVycyByZWdpc3RlcmVkIGJ5XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTgwLSAqIHRoaXMgZnVuY3Rpb24sIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKSBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBvblxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE4MTogKiBkcml2ZXIgZGV0YWNoLiBTZWUgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExODItICpcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTg0LSAqL1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE4NTppbnQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTg2LVx0XHRcdFx0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExOTUtXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTk2Olx0cmV0ID0gcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGNkZXYpO1xuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE5Ny1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMjA2LX1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEyMDc6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMjA4LVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM9OTQ9cHNlX3JlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMtMTI2LVx0cHJpdi1cdTAwM2VwY2Rldi50eXBlcyA9IEVUSFRPT0xfUFNFX1BPREw7XG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jOjEyNzpcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMtMTI4LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYz00NzM9c3RhdGljIGludCBzaTM0NzRfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jLTU0Mi1cbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYzo1NDM6XHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXHUwMDI2cHJpdi1cdTAwM2VwY2Rldik7XG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTQ0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jPTE0MzA9c3RhdGljIGludCB0cHMyMzg4MV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYy0xNTE2LVx0cHJpdi1cdTAwM2VwY2Rldi5zdXBwX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMgPSBQU0VfQlVER0VUX0VWQUxfU1RSQVRfU1RBVElDO1xuZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmM6MTUxNzpcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcdTAwMjZwcml2LVx1MDAzZXBjZGV2KTtcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTgtXHRpZiAocmV0KSB7XG4tLVxuaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmg9MzU0PWVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQge1xuLS1cbmluY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oLTM1OS0jaWYgSVNfRU5BQkxFRChDT05GSUdfUFNFX0NPTlRST0xMRVIpXG5pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaDozNjA6aW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbmluY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oLTM2MS12b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xuaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmg9MzYyPXN0cnVjdCBkZXZpY2U7XG5pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaDozNjM6aW50IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmgtMzY0LVx0XHRcdFx0IHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA0NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBTRSBDb250cm9sbGVyIFJlZ2lzdHJhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgIGFuZCBgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXJgIGZ1bmN0aW9ucyB3aXRoaW4gYHBzZV9jb3JlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB0aGUgY29yZSBub3RpZmljYXRpb24gbWVjaGFuaXNtLCBsaWtlbHkgZm9yIHNpZ25hbGluZyB3aGVuIGEgUFNFIGNvbnRyb2xsZXIsIG9yIFBvd2VyIFNvdXJjaW5nIEVxdWlwbWVudCBjb250cm9sbGVyLCBiZWNvbWVzIGF2YWlsYWJsZSBvciBpcyByZW1vdmVkLiYjMzQ7CgpUaGUgbmV4dCBsaW5lIHBvaW50cyB0byBtb2RpZmljYXRpb25zIGluIGBwaHlfZGV2aWNlLmNgIHRvIHJlZ2lzdGVyIHRoaXMgbm90aWZpZXIuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBQSFkgZGV2aWNlcyBhcmUgb2Z0ZW4gdGhlIGltbWVkaWF0ZSBjb25zdW1lcnMgb3IgdXNlcnMgb2YgdGhpcyBQU0UgY29udHJvbGxlciBpbmZvcm1hdGlvbiwgZXNwZWNpYWxseSB0aG9zZSB0aGF0IG5lZWQgdG8gbmVnb3RpYXRlIHBvd2VyIGRlbGl2ZXJ5LiBUaGUgbm90aWZpZXIgaXMgdHJpZ2dlcmVkIHVwb24gcmVnaXN0cmF0aW9uIG9yIHVucmVnaXN0cmF0aW9uIG9mIHRoZSBQU0UgY29udHJvbGxlciwgd2hpY2ggaXMgdGhlIGtleSBldmVudCBmb3IgdGhlIFBIWS4KCk5vdywgbGV0JiMzOTtzIHNlZSBob3cgdGhlc2UgUFNFIGNvbnRyb2xsZXJzIGFjdHVhbGx5IGdldCByZWdpc3RlcmVkLiBUaGUgY29kZSBtZW50aW9ucyBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGJlaW5nIHRoZSByZXNwb25zaWJsZSBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSB2YXJpb3VzIGRyaXZlcnMsIGxpa2UgYHBkNjkyeDBgLCBgcHNlX3JlZ3VsYXRvcmAsIGBzaTM0NzRgLCBhbmQgYHRwczIzODgxYC4gR29vZC4gVGhlc2UgYXBwZWFyIHRvIGJlIHRoZSBhY3R1YWwgaGFyZHdhcmUgZHJpdmVycyBmb3IgdGhlIFBTRSBjb250cm9sbGVycyB0aGVtc2VsdmVzLgoKYHBzZV9yZWd1bGF0b3JgIHNwZWNpZmljYWxseSBzdGFuZHMgb3V0IGJlY2F1c2UgaXQmIzM5O3MgbWVudGlvbmVkIGFzIGEgcGxhdGZvcm0gZHJpdmVyLiBUaGF0IG1ha2VzIG1lIHBhdXNlIGFuZCBjb25zaWRlciBpdHMgaW1wbGljYXRpb25zIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gUGxhdGZvcm0gZHJpdmVycyBvZnRlbiBoYXZlIHN1YnRsZSBkZXBlbmRlbmNpZXMgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgcGxhdGZvcm0uIFRoaXMgcHJvbXB0cyB0aGUgcXVlc3Rpb24sICYjMzQ7Q2FuIGBwc2VfcmVndWxhdG9yYCwgYW5kIHRoZXJlZm9yZSB0aGUgUFNFIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBiZSB0cmlnZ2VyZWQgYW5kIGZ1bmN0aW9uIGNvcnJlY3RseSBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/JiMzNDsgSXTigJlzIHRpbWUgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBgcHNlX3JlZ3VsYXRvci5jYCBzb3VyY2UgY29kZSBhbmQgZmluZCBvdXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgYW55IGhhcmR3YXJlIGFjY2VzcyBpdCBtaWdodCBwZXJmb3JtIHRvIHNlZSBpZiBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc2VfcmVnX3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM9OTM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYzo5NDpwc2VfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jLTk1LXtcbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jPTE0Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwc2VfcmVnX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmM6MTQ0Olx0LnByb2JlXHRcdD0gcHNlX3JlZ19wcm9iZSxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfcmVndWxhdG9yLmMtMTQ1LVx0LmRyaXZlclx0XHQ9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc0MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYHNmcC5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIHBsYXRmb3JtIGRyaXZlciBgcHNlX3JlZ3VsYXRvcmAgY2F0Y2hlcyBteSBleWUuIEl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBzbyB0aGF0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBwcm9iZWQgYmFzZWQgb24gZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMgb3IsIG1vcmUgaW50ZXJlc3RpbmdseSwgYnkgc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyIGluamVjdGluZyBwbGF0Zm9ybSBkZXZpY2VzIOKAkyB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gVGhlIG1haW4gdGhpbmcgdGhhdCB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IGlzIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCwgYW5kIHNwZWNpZmljYWxseSwgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uLiBOb3csIHRoZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgYSBQSFkgZGV2aWNlIGNhbiBldmVuIGJlIHJlZ2lzdGVyZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLgoKVGhpbmtpbmcgYWJvdXQgaXQsIHllcywgaXQgY2FuLiBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZiBjcmVhdGluZyB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcywgd2hpY2ggd291bGQgdGhlbiBsaWtlbHkgcmVnaXN0ZXIgdGhlc2UgUEhZcywgb3IgaW5qZWN0IGVudGlyZSBNRElPIGJ1c2VzIGFuZCBQSFlzIGRpcmVjdGx5LiBUaGlzIGxlYWRzIG1lIHRvIGZvY3VzIGluIG9uIHRoZSBgcGh5X2RldmljZV9yZWdpc3RlcmAgY2FsbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoZXJlKiBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSBhbmQgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGUgY2hhbmdlLgoKQWhhISBgcGh5X2RldmljZV9yZWdpc3RlcmAgaXMgY2FsbGVkIGJ5IGBzZnBfc21fcHJvYmVfcGh5YCBpbiBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGF0IGZ1bmN0aW9uIHRvIGNhbGwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCBpbnN0ZWFkLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcywgaXQmIzM5O3Mgbm90IGEgY2hhbmdlIHRvIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBidXQgYW4gYXR0ZW1wdCB0byBtYWtlIGl0IG1vcmUgYXRvbWljLiBSaWdodCwgdGltZSB0byBkaXZlIGludG8gYHNmcC5jYCBhbmQgc2VlIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGxvY2sgYXJlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvY2tpbmcgY29udGV4dCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGlzIGNoYW5nZSBpcyB0cnlpbmcgdG8gYWRkcmVzcywgYXMgd2VsbCBhcyB0aGUgaW1wYWN0IG9uIG90aGVyIGFyZWFzIG9mIHRoZSBzeXN0ZW0gdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBQSFkgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcF9zbV9wcm9iZV9waHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIwNjI9c3RhdGljIHZvaWQgc2ZwX3NtX3BoeV9kZXRhY2goc3RydWN0IHNmcCAqc2ZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMDY5LVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIwNzA6c3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIwNzEte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yMjAwPXN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX2Zvcl9waHkoc3RydWN0IHNmcCAqc2ZwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjA4LVx0Y2FzZSBNRElPX0kyQ19NQVJWRUxMX0MyMjpcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjA5Olx0XHRlcnIgPSBzZnBfc21fcHJvYmVfcGh5KHNmcCwgU0ZQX1BIWV9BRERSLCBmYWxzZSk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxMC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMTItXHRjYXNlIE1ESU9fSTJDX0M0NTpcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjEzOlx0XHRlcnIgPSBzZnBfc21fcHJvYmVfcGh5KHNmcCwgU0ZQX1BIWV9BRERSLCB0cnVlKTtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjE0LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxNi1cdGNhc2UgTURJT19JMkNfUk9MTEJBTEw6XG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MjIxNzpcdFx0ZXJyID0gc2ZwX3NtX3Byb2JlX3BoeShzZnAsIFNGUF9QSFlfQUREUl9ST0xMQkFMTCwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxOC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NjIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQ6IFBTRSBDb250cm9sbGVyIGFuZCBQSFkgUmVnaXN0cmF0aW9uIExvZ2ljKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHNsZXcgb2YgbmV3IGZ1bmN0aW9uczogYHBoeV90cnlfYXR0YWNoX3BzZWAsIGBwaHlfcHNlX2F0dGFjaF9vbmVgLCBgcGh5X3BzZV9kZXRhY2hfb25lYCwgYHBoeV9wc2Vfbm90aWZpZXJfZXZlbnRgLCBgX19waHlfZGV2aWNlX3JlZ2lzdGVyYCwgYW5kIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAuIFRoZXkgc2VlbSBzb2xpZDsgdGhleSYjMzk7cmUgY2xlYXJseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwsIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IG1lYW4gdGhleSYjMzk7cmUgYnVsbGV0cHJvb2YuIEdpdmVuIHRoYXQgdGhpcyBjb2RlJiMzOTtzIGRpZ2dpbmcgaW50byB0aGUgaGVhcnQgb2YgUEhZIHJlZ2lzdHJhdGlvbiBhbmQgUFNFIGNvbnRyb2xsZXIgbm90aWZpZXIgbG9naWMg4oCTIHByaW1lIHJlYWwgZXN0YXRlIGZvciBwb3RlbnRpYWwgYnVncyDigJMgSSYjMzk7ZCBzYXkgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHdhcnJhbnRlZC4KCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb246IGBwaHlfdHJ5X2F0dGFjaF9wc2VgLCBgcGh5X3BzZV9hdHRhY2hfb25lYCwgYHBoeV9wc2VfZGV0YWNoX29uZWAsIGBwaHlfcHNlX25vdGlmaWVyX2V2ZW50YCwgYF9fcGh5X2RldmljZV9yZWdpc3RlcmAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgLCBgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXJgLCBhbmQgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGtleSBpbnRlcmFjdGlvbnMuCgpOb3cgZm9yIHRoZSBjb25maWd1cmF0aW9uLiBXZSBuZWVkIGBDT05GSUdfUEhZTElCYCDigJMgdGhhdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGEgZ2l2ZW4g4oCTIGFuZCBjcml0aWNhbGx5LCBgQ09ORklHX1BTRV9DT05UUk9MTEVSYC4gSSYjMzk7bSBzZWVpbmcgZXhwbGljaXQgY2hlY2tzIGZvciBpdCBzY2F0dGVyZWQgdGhyb3VnaG91dCwgc28gaXQmIzM5O3MgZXNzZW50aWFsIGZvciBjb21waWxhdGlvbi4gSnVzdCB0byBiZSBzdXJlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2xhbmNlIGF0IGBkcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBwc2VfY29yZS5jYCBhbmQgYENPTkZJR19QU0VfQ09OVFJPTExFUmAuIFdlIGNhbiYjMzk7dCBhZmZvcmQgdG8gd2FzdGUgdGltZSB0YXJnZXRpbmcgc3ltYm9scyB0aGF0IHdvbiYjMzk7dCBiZSBjb21waWxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHNlX2NvcmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlLTMtXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICYjNDM7PSBwc2VfY29yZS5vXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUtNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MTEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgTmV0d29yayBQSFkgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIHdlIG5lZWQgYENPTkZJR19QU0VfQ09OVFJPTExFUmAgZm9yIHRoaXMuIExldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgZWxzZSByZWxldmFudCBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhpbmtpbmcgYWJvdXQgaXQsIGBDT05GSUdfTURJT19ERVZJQ0VgIGlzIGZyZXF1ZW50bHkgbGlua2VkIHdpdGggUEhZTElCLCBzbyB0aGF04oCZcyBwcm9iYWJseSBhIGdvb2Qgb25lIHRvIHJldmlldyBhcyB3ZWxsLiBBbmQsIGdpdmVuIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYHNmcC5jYCwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUgY2hlY2sgYW5kIGluY2x1ZGUgYENPTkZJR19TRlBgIGZvciBnb29kIG1lYXN1cmUuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIHBlZWsgYXQgYGRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZWAgdG8gY29uZmlybSB3aGVyZSBgc2ZwLmNgIGlzIGFjdHVhbGx5IGJlaW5nIGJ1aWx0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZnBcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL01ha2VmaWxlPTExPWhmaTEteSA6PSBcXFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL01ha2VmaWxlLTM4LVx0cXAubyBcXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hmaTEvTWFrZWZpbGU6Mzk6XHRxc2ZwLm8gXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL01ha2VmaWxlLTQwLVx0cmMubyBcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jPTE3Nzg9ZmJuaWNfZ2V0X21vZHVsZV9lZXByb21fYnlfcGFnZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZXRodG9vbC5jLTE3OTktXHRmd19jbXBsLVx1MDAzZXUucXNmcC5sZW5ndGggPSBwYWdlX2RhdGEtXHUwMDNlbGVuZ3RoO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM6MTgwMDpcdGZ3X2NtcGwtXHUwMDNldS5xc2ZwLm9mZnNldCA9IHBhZ2VfZGF0YS1cdTAwM2VvZmZzZXQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0xODAxLVx0ZndfY21wbC1cdTAwM2V1LnFzZnAucGFnZSA9IHBhZ2VfZGF0YS1cdTAwM2VwYWdlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYz0xMjk0PXN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfcXNmcF9yZWFkX3Jlc3Aodm9pZCAqb3BhcXVlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xMzI5LVx0aWYgKGxlbmd0aCAhPSBjbXBsX2RhdGEtXHUwMDNldS5xc2ZwLmxlbmd0aCB8fFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjEzMzA6XHQgICAgb2Zmc2V0ICE9IGNtcGxfZGF0YS1cdTAwM2V1LnFzZnAub2Zmc2V0KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTMzMS1cdFx0ZGV2X3dhcm4oZmJkLVx1MDAzZWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTMzMy1cdFx0XHQgb2Zmc2V0LCBsZW5ndGgsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmM6MTMzNDpcdFx0XHQgY21wbF9kYXRhLVx1MDAzZXUucXNmcC5vZmZzZXQsIGNtcGxfZGF0YS1cdTAwM2V1LnFzZnAubGVuZ3RoKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYy0xMzM1LVx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvTWFrZWZpbGU9OD1zcGFyeDUtc3dpdGNoLXkgIDo9IHNwYXJ4NV9tYWluLm8gc3Bhcng1X3BhY2tldC5vIFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9NYWtlZmlsZS0xMy0gc3Bhcng1X3RjX21hdGNoYWxsLm8gc3Bhcng1X3Bvb2wubyBzcGFyeDVfc2RsYi5vIHNwYXJ4NV9wb2xpY2UubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9NYWtlZmlsZToxNDogc3Bhcng1X3BzZnAubyBzcGFyeDVfbWlycm9yLm8gc3Bhcng1X3JlZ3Mub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9NYWtlZmlsZS0xNS1cbi0tXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElORykgJiM0Mzs9IG1paV90aW1lc3RhbXBlci5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjUtXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX1NGUClcdFx0JiM0Mzs9IHNmcC5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjctc2ZwLW9iai0kKENPTkZJR19TRlApXHRcdCYjNDM7PSBzZnAtYnVzLm9cbi0tXG5kcml2ZXJzL252bWVtL01ha2VmaWxlPTM0PW52bWVtLWxhbjk2NjItb3RwYy15XHRcdDo9IGxhbjk2NjItb3RwYy5vXG5kcml2ZXJzL252bWVtL01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19OVk1FTV9MQVlFUlNDQVBFX1NGUClcdCYjNDM7PSBudm1lbS1sYXllcnNjYXBlLXNmcC5vXG5kcml2ZXJzL252bWVtL01ha2VmaWxlOjM2Om52bWVtLWxheWVyc2NhcGUtc2ZwLXlcdFx0XHQ6PSBsYXllcnNjYXBlLXNmcC5vXG5kcml2ZXJzL252bWVtL01ha2VmaWxlLTM3LW9iai0kKENPTkZJR19OVk1FTV9MUEMxOFhYX0VFUFJPTSlcdCYjNDM7PSBudm1lbV9scGMxOHh4X2VlcHJvbS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzU3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhlIHJlcXVpcmVtZW50IGZvciBgQ09ORklHX1NGUGAgaW1wYWN0aW5nIGBzZnAuY2AuIEFscmlnaHQsIGxldCYjMzk7cyBrZWVwIHRoYXQgaW4gbWluZCwgYW5kIHRoZW4gbGV0JiMzOTtzIGdvIHdpZGVyIGFuZCBzZWUgd2hhdCBlbHNlIHRoaXMgcGF0Y2ggdG91Y2hlcy4gTG9va3MgbGlrZSBpdCYjMzk7cyBhbHNvIG1ha2luZyBhIG1vZGlmaWNhdGlvbiB0byBgZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jYC4gUmlnaHQsIHRoYXQmIzM5O3MgdXNlZnVsIGNvbnRleHQuIE5vdywgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcywgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBNYWtlZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBnbyBsb29rIGF0IGBkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGhvdyBgZndub2RlX21kaW8uY2AgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgdGhlIE1ESU8gc3Vic3lzdGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHZpZXcgb2YgaG93IHRoaXMgcGF0Y2ggaXMgZ29pbmcgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZXhpc3RpbmcgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z3bm9kZV9tZGlvXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX0FDUElfTURJTylcdFx0JiM0Mzs9IGFjcGlfbWRpby5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0ZXTk9ERV9NRElPKVx0JiM0Mzs9IGZ3bm9kZV9tZGlvLm9cbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtNi1vYmotJChDT05GSUdfT0ZfTURJTylcdFx0JiM0Mzs9IG9mX21kaW8ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEzNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBQSFkgRHJpdmVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIGBDT05GSUdfRldOT0RFX01ESU9gIGZsYWcgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGRpcmVjdGx5IHRpZWQgdG8gYGZ3bm9kZV9tZGlvLmNgLiBCdXQgaGFuZyBvbi4uLiB1cG9uIGZ1cnRoZXIgcmVmbGVjdGlvbiwgYGZ3bm9kZV9tZGlvLmNgIGlzIG1vcmUgb2YgYSBjbGVhbnVwIG9yIHJlZmluZW1lbnQ7IHRoZSAqcmVhbCogaGVhdnkgbGlmdGluZywgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBQSFkgaW50ZXJhY3Rpb25zLCByZXNpZGVzIGluIGBwaHlfZGV2aWNlLmNgIGFuZCBgcHNlX2NvcmUuY2AuIEFoLCByaWdodCwgYHBoeV9kZXZpY2UuY2AgZ2V0cyBidWlsdCB3aGVuIGBDT05GSUdfUEhZTElCYCBpcyBhY3RpdmF0ZWQuIEdpdmVuIHRoYXQsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyB0aGVyZS4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZGV2aWNlXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMy1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XHRcdFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cdFx0XHRcdCAgIGxpbmttb2RlLm8gcGh5X2xpbmtfdG9wb2xvZ3kubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUxMAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgb2YgbGlicGh5LXkqKgoKQWxyaWdodCwgc28gYGxpYnBoeS15YCBpcyBidWlsdCwgd2hpY2ggbGlrZWx5IG1lYW5zIGl0JiMzOTtzIGEgc3RhdGljIGxpYnJhcnksIGFuZCB0aGF0JiMzOTtzIHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIG5haWwgZG93biBwcmVjaXNlbHkgKndoaWNoKiBvbmUuIEl0JiMzOTtzIHVzdWFsbHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgdGhpcyBvbmUgaXMgYSBiaXQgZnV6enkuIFRoZSB0ZXh0IHNheXMgaXQgZGVwZW5kcyBvbiBgQ09ORklHX1BIWUxJQmAuIFRpbWUgdG8gY29uZmlybSB0aGF0IGFuZCB0aGVuIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBkZXBlbmRlbmNpZXMgb24gaXQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRvZXMgYW5kIGlmIGl0JiMzOTtzIGdvdCBhbnkgc25lYWt5IHNpZGUgZWZmZWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpYnBoeS15JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjQ6bGlicGh5LXlcdFx0XHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS01LVx0XHRcdFx0ICAgbGlua21vZGUubyBwaHlfbGlua190b3BvbG9neS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzkyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNYWtlZmlsZSBOYXZpZ2F0aW9uOiBBIFBIWSBEcml2ZXImIzM5O3MgTGlrZWx5IExvY2F0aW9uKioKCk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIG9iamVjdCBmaWxlIGZvciB0aGlzIFBIWSBsaWJyYXJ5LCBgbGlicGh5Lm9gLCBpcyBkZWZpbmVkLiBCYXNlZCBvbiBteSBleHBlcmllbmNlIHdpdGgga2VybmVsIGJ1aWxkIHN5c3RlbXMsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBpcyBwcm9iYWJseSB0aGUgTWFrZWZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7ZCBhbnRpY2lwYXRlIHNlZWluZyBhbiBhc3NpZ25tZW50IGxpa2UgYG9iai0kKENPTkZJR19QSFlMSUIpICYjNDM7PSBsaWJwaHkub2AuIFRoZSBgb2JqLWAgcHJlZml4IGlzIGEgY2xhc3NpYyBpbmRpY2F0b3IgdGhhdCB0aGUgb2JqZWN0IGZpbGUmIzM5O3MgaW5jbHVzaW9uIGlzIGNvbmRpdGlvbmFsLCBwb3NzaWJseSBjb250cm9sbGVkIGJ5IGEgS2NvbmZpZyBvcHRpb24sIGluIHRoaXMgY2FzZSwgYENPTkZJR19QSFlMSUJgLiBUaGlzIGlzIGEgcHJldHR5IGNvbW1vbiBwYXR0ZXJuIGZvciBtb2R1bGFyIGRyaXZlcnMuIExldCYjMzk7cyBzZWUgaWYgdGhhdCBhc3N1bXB0aW9uIGhvbGRzIHRydWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfUEhZTElCXFwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0xNj1saWJwaHktJChDT05GSUdfT1BFTl9BTExJQU5DRV9IRUxQRVJTKSAmIzQzOz0gb3Blbl9hbGxpYW5jZV9oZWxwZXJzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xNy1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxODpvYmotJChDT05GSUdfUEhZTElCKVx0XHQmIzQzOz0gbWRpb19idXMub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTE5LW9iai0kKENPTkZJR19QSFlMSU5LKVx0XHQmIzQzOz0gcGh5bGluay5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1BIWUxJQilcdFx0JiM0Mzs9IGxpYnBoeS5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX1BIWUxJQilcdFx0JiM0Mzs9IG1kaW9fZGV2cmVzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yMi1vYmotJChDT05GSUdfUEhZX1BBQ0tBR0UpXHQmIzQzOz0gcGh5X3BhY2thZ2Uub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIwNAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUFNFIENvbnRyb2xsZXIgRHJpdmVyIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBgQ09ORklHX1BIWUxJQmAgaXMgZGVmaW5pdGVseSBlbmFibGVkLCBnb29kLiBJJiMzOTt2ZSBnb3QgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBpbiBwbGF5OiBgUFNFX0NPTlRST0xMRVJgLCBgUEhZTElCYCwgYFNGUGAsIGFuZCBgRldOT0RFX01ESU9gLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBgUFNFX0NPTlRST0xMRVJgIGFsb25lIGlzIHN1ZmZpY2llbnQsIG9yIGlmIGEgc3BlY2lmaWMgUFNFIGNvbnRyb2xsZXIgZHJpdmVyIGlzIG5lZWRlZCB0byBhY3R1YWxseSBraWNrIG9mZiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuCgpMb29raW5nIGF0IHRoZSBwYXRjaCwgaXQgc2VlbXMgdGhlIGNoYW5nZXMgY2VudGVyIGFyb3VuZCBgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXJgIGFuZCBgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcmAuIFRob3NlIGZ1bmN0aW9ucyBhcmUgdHJpZ2dlcmVkIHdoZW4gYSBzcGVjaWZpYyBQU0UgY29udHJvbGxlciBkcml2ZXIgcHJvYmVzLiBTbywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggUFNFIGNvbnRyb2xsZXIgZHJpdmVycyBhcmUgYXZhaWxhYmxlLgoKTGV0JiMzOTtzIHNlZeKApiBJJiMzOTt2ZSBnb3QgYGRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmNgIHdoaWNoLCBvZiBjb3Vyc2UsIGNvcnJlc3BvbmRzIHRvIGBDT05GSUdfUFNFX1BENjkyWDBgLCB0aGVuIGBkcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jYCB3aGljaCBnb2VzIHdpdGggYENPTkZJR19QU0VfUkVHVUxBVE9SYCwgYGRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuY2AgbGlua2VkIHRvIGBDT05GSUdfUFNFX1NJMzQ3NGAsIGFuZCBgZHJpdmVycy9uZXQvcHNlLXBkL3RwczIzODgxLmNgIHRpZWQgdG8gYENPTkZJR19QU0VfVFBTMjM4ODFgLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZWAgZm9yIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBsYW5kc2NhcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfUFNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfS0VYRUNfQ09SRSlcdCYjNDM7PSBrZXhlYy5vXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX1BTRVJJRVNfRU5FUkdZKVx0JiM0Mzs9IHBzZXJpZXNfZW5lcmd5Lm9cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZS0xNi1cbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGU9MzI9b2JqLSQoQ09ORklHX0ZBX0RVTVApXHRcdCYjNDM7PSBydGFzLWZhZHVtcC5vXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX1BTRVJJRVNfUExQS1MpXHQmIzQzOz0gcGxwa3MubyBwbHBrcy1zeXNmcy5vXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUtMzQtb2JqLSQoQ09ORklHX1BQQ19TRUNVUkVfQk9PVClcdCYjNDM7PSBwbHBrcy1zZWN2YXIub1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19QU0VSSUVTX1BMUEtTX1NFRClcdCYjNDM7PSBwbHBrc19zZWRfb3BzLm9cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZS0zNi1vYmotJChDT05GSUdfU1VTUEVORClcdFx0JiM0Mzs9IHN1c3BlbmQub1xuLS1cbmRyaXZlcnMvY3B1aWRsZS9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfTUlQU19DUFNfQ1BVSURMRSlcdFx0JiM0Mzs9IGNwdWlkbGUtY3BzLm9cbi0tXG5kcml2ZXJzL2NwdWlkbGUvTWFrZWZpbGUtMzgtIyBQT1dFUlBDIGRyaXZlcnNcbmRyaXZlcnMvY3B1aWRsZS9NYWtlZmlsZTozOTpvYmotJChDT05GSUdfUFNFUklFU19DUFVJRExFKVx0XHQmIzQzOz0gY3B1aWRsZS1wc2VyaWVzLm9cbmRyaXZlcnMvY3B1aWRsZS9NYWtlZmlsZS00MC1vYmotJChDT05GSUdfUE9XRVJOVl9DUFVJRExFKVx0XHQmIzQzOz0gY3B1aWRsZS1wb3dlcm52Lm9cbi0tXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUtMy1cbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19QU0VfQ09OVFJPTExFUikgJiM0Mzs9IHBzZV9jb3JlLm9cbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1BTRV9SRUdVTEFUT1IpICYjNDM7PSBwc2VfcmVndWxhdG9yLm9cbmRyaXZlcnMvbmV0L3BzZS1wZC9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19QU0VfUEQ2OTJYMCkgJiM0Mzs9IHBkNjkyeDAub1xuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1BTRV9TSTM0NzQpICYjNDM7PSBzaTM0NzQub1xuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX1BTRV9UUFMyMzg4MSkgJiM0Mzs9IHRwczIzODgxLm9cbi0tXG5kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlPTE5Mz1vYmotJChDT05GSUdfTUVOX0EyMV9XRFQpICYjNDM7PSBtZW5hMjFfd2R0Lm9cbi0tXG5kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlLTE5NS0jIFBQQzY0IEFyY2hpdGVjdHVyZVxuZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZToxOTY6b2JqLSQoQ09ORklHX1BTRVJJRVNfV0RUKSAmIzQzOz0gcHNlcmllcy13ZHQub1xuZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZS0xOTctb2JqLSQoQ09ORklHX1dBVENIRE9HX1JUQVMpICYjNDM7PSB3ZHJ0YXMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUwMwoJCQkJCQkJb3V0cHV0OiAyNTIKCQkJCQkJCXRob3VnaHRzOiA3NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIEZvY3VzIGZvciBQU0UgQ29udHJvbGxlciBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgZW5hYmxpbmcgYFBTRV9SRUdVTEFUT1JgIGlzIGEgc29saWQgbW92ZSwgYXMgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkcml2ZXIsIG1ha2luZyBpdCBlYXNpZXIgdG8gcHJvYmUuIE5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLgoKSSBzdGFydGVkIGJ5IGxpc3Rpbmcga2V5IHN5bWJvbHMuIEkgaGFkOgoKKiAgIGBwaHlfdHJ5X2F0dGFjaF9wc2VgCiogICBgcGh5X3BzZV9hdHRhY2hfb25lYAoqICAgYHBoeV9wc2VfZGV0YWNoX29uZWAKKiAgIGBwaHlfcHNlX25vdGlmaWVyX2V2ZW50YAoqICAgYF9fcGh5X2RldmljZV9yZWdpc3RlcmAKKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAKKiAgIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgCiogICBgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXJgCiogICBgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldmAKClRoZW4gSSBub3RlZCB0aGF0IGBwaHlfZGV2aWNlX3JlbGVhc2VgIHdhcyBtb2RpZmllZCB0byBjYWxsIGBwc2VfY29udHJvbF9wdXRgLCBhbmQgYHBoeV9kZXZpY2VfcmVtb3ZlYCB0byByZW1vdmUgdGhlIHNhbWUgY2FsbCwgd2hpbGUgYHBoeV9pbml0YCBhbmQgYHBoeV9leGl0YCBub3cgaGFuZGxlIG5vdGlmaWVyIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24uIEkgYWxzbyBzYXcgYHNmcF9zbV9wcm9iZV9waHlgIHdhcyBjaGFuZ2VkLgoKU28gSSB1cGRhdGVkIHRoZSBsaXN0IHRvIGluY2x1ZGUgdGhlIGdlbmVyaWMgYHBoeV9kZXZpY2VfcmVsZWFzZWAgKGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGdlbmVyaWMsIGl0JiMzOTtzIHJlbGV2YW50IGhlcmUpIGFuZCBgc2ZwX3NtX3Byb2JlX3BoeWAuIEFsc28sIGFsdGhvdWdoIGBfX3BoeV9kZXZpY2VfcmVnaXN0ZXJgIGlzIHN0YXRpYywgc3l6a2FsbGVyIGNhbiBzdGlsbCBmb2N1cyBvbiBpdC4gQm90aCBgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWRgIGFuZCBgcGh5X2RldmljZV9yZWdpc3RlcmAgYXJlIGV4cG9ydGVkIGFuZCBoYXZlIGJlZW4gbW9kaWZpZWQuCgpJbiB0ZXJtcyBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIEkmIzM5O3ZlIGdvdCB0byBrZWVwIGBQU0VfQ09OVFJPTExFUmAsIGBQU0VfUkVHVUxBVE9SYCwgYFBIWUxJQmAsIGBTRlBgLCBhbmQgYEZXTk9ERV9NRElPYCBpbiBtaW5kLgoKVGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgdGhlIFBIWSByZWdpc3RyYXRpb24gbG9naWMgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBub3RpZmllciBmb3IgUFNFIGNvbnRyb2xsZXJzLiBJdCYjMzk7cyBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIHN5c3RlbSwgaGFuZGxpbmcgYXN5bmNocm9ub3VzIHJlZ2lzdHJhdGlvbi4gVGhpcyBhZmZlY3RzIGNvcmUgbmV0d29ya2luZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duLCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKSSBkb3VibGUtY2hlY2tlZCBgcGh5X2RldmljZV9yZWdpc3RlcmAgYW5kIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGA7IHRoZXkgYXJlIHdyYXBwZXJzIGFyb3VuZCBgX19waHlfZGV2aWNlX3JlZ2lzdGVyYCBhbmQgYHBoeV90cnlfYXR0YWNoX3BzZWAsIHNvIHRoZXkmIzM5O3JlIGRlZmluaXRlbHkgaW1wb3J0YW50LgoKTGV0IG1lIHJlZmluZSB0aGF0IGxpc3QsIG9uZSBsYXN0IHRpbWUsIHRvIGVuc3VyZSBldmVyeXRoaW5nJiMzOTtzIGNsZWFyOgoKKiAgIGBwaHlfdHJ5X2F0dGFjaF9wc2VgCiogICBgcGh5X3BzZV9hdHRhY2hfb25lYAoqICAgYHBoeV9wc2VfZGV0YWNoX29uZWAKKiAgIGBwaHlfcHNlX25vdGlmaWVyX2V2ZW50YAoqICAgYF9fcGh5X2RldmljZV9yZWdpc3RlcmAKKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAKKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYAoqICAgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAKKiAgIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAKKiAgIGBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2YAoqICAgYHNmcF9zbV9wcm9iZV9waHlgCgpPa2F5LCB0aGF0JiMzOTtzIGV2ZXJ5dGhpbmc7IEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3Mgc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfQ09OVFJPTExFUiYjMzQ7LAogICAgJiMzNDtQU0VfUkVHVUxBVE9SJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OywKICAgICYjMzQ7RldOT0RFX01ESU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfdHJ5X2F0dGFjaF9wc2UmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9hdHRhY2hfb25lJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfZGV0YWNoX29uZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX25vdGlmaWVyX2V2ZW50JiMzNDssCiAgICAmIzM0O19fcGh5X2RldmljZV9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BzZV9yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2JiMzNDssCiAgICAmIzM0O3NmcF9zbV9wcm9iZV9waHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgUEhZIHJlZ2lzdHJhdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIG1lY2hhbmlzbSBmb3IgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzLiBJdCBjaGFuZ2VzIGhvdyBQU0UgY29udHJvbGxlcnMgYXJlIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLCBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIGFwcHJvYWNoIHRoYXQgaGFuZGxlcyBhc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIE1ESU8gYnVzZXMsIFBIWXMsIGFuZCBwbGF0Zm9ybSBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQU0VfQ09OVFJPTExFUiYjMzQ7LAogICAgJiMzNDtQU0VfUkVHVUxBVE9SJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OywKICAgICYjMzQ7RldOT0RFX01ESU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfdHJ5X2F0dGFjaF9wc2UmIzM0OywKICAgICYjMzQ7cGh5X3BzZV9hdHRhY2hfb25lJiMzNDssCiAgICAmIzM0O3BoeV9wc2VfZGV0YWNoX29uZSYjMzQ7LAogICAgJiMzNDtwaHlfcHNlX25vdGlmaWVyX2V2ZW50JiMzNDssCiAgICAmIzM0O19fcGh5X2RldmljZV9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3BzZV9yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfdW5yZWdpc3Rlcl9ub3RpZmllciYjMzQ7LAogICAgJiMzNDtwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2JiMzNDssCiAgICAmIzM0O3NmcF9zbV9wcm9iZV9waHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgUEhZIHJlZ2lzdHJhdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIG1lY2hhbmlzbSBmb3IgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzLiBJdCBjaGFuZ2VzIGhvdyBQU0UgY29udHJvbGxlcnMgYXJlIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLCBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIGFwcHJvYWNoIHRoYXQgaGFuZGxlcyBhc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIE1ESU8gYnVzZXMsIFBIWXMsIGFuZCBwbGF0Zm9ybSBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6Mjk6MzUuMzY3NzA5MzYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMjkxNjU1MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBTRV9DT05UUk9MTEVSXCIsXG4gICAgXCJQU0VfUkVHVUxBVE9SXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlNGUFwiLFxuICAgIFwiRldOT0RFX01ESU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfdHJ5X2F0dGFjaF9wc2VcIixcbiAgICBcInBoeV9wc2VfYXR0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9kZXRhY2hfb25lXCIsXG4gICAgXCJwaHlfcHNlX25vdGlmaWVyX2V2ZW50XCIsXG4gICAgXCJfX3BoeV9kZXZpY2VfcmVnaXN0ZXJcIixcbiAgICBcInBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwc2VfcmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcInBzZV91bnJlZ2lzdGVyX25vdGlmaWVyXCIsXG4gICAgXCJwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2XCIsXG4gICAgXCJzZnBfc21fcHJvYmVfcGh5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgUEhZIHJlZ2lzdHJhdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIG1lY2hhbmlzbSBmb3IgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzLiBJdCBjaGFuZ2VzIGhvdyBQU0UgY29udHJvbGxlcnMgYXJlIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLCBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIGFwcHJvYWNoIHRoYXQgaGFuZGxlcyBhc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIE1ESU8gYnVzZXMsIFBIWXMsIGFuZCBwbGF0Zm9ybSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjoyOTozNS4zNjc3MTM4MTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNTI0NzE1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE0M2M1ZmI0Yjg0N2Y4MmE4ZmQ1MWQ1MDYwMjEyOGM3MzA1MGQxYTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdW4gMjYgMjI6Mjk6MzQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jXFxuaW5kZXggYmE3MDkxNTE4MjY1NDAuLjdiZDk3OWI1OWY0OTY4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xcbisrKyBiL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xcbkBAIC0xMSwzMyArMTEsMTEgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Z3bm9kZV9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuIFxcbiBNT0RVTEVfQVVUSE9SKFxcXCJDYWx2aW4gSm9obnNvbiBcXHUwMDNjY2FsdmluLmpvaG5zb25Ab3NzLm54cC5jb21cXHUwMDNlXFxcIik7XFxuIE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4gTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXFxcIik7XFxuIFxcbi1zdGF0aWMgc3RydWN0IHBzZV9jb250cm9sICpcXG4tZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSxcXG4tXFx0XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4te1xcbi1cXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XFxuLVxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuLVxcbi1cXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRucCA9IHRvX29mX25vZGUoZndub2RlKTtcXG4tXFx0aWYgKCFucClcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xcbi1cXHRpZiAoUFRSX0VSUihwc2VjKSA9PSAtRU5PRU5UKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFxuLVxcdHJldHVybiBwc2VjO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IG1paV90aW1lc3RhbXBlciAqXFxuIGZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbiB7XFxuQEAgLTExOCw3ICs5Niw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkLCB1MzIgYWRkcilcXG4ge1xcbiBcXHRzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICptaWlfdHMgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5O1xcbiBcXHRib29sIGlzX2M0NTtcXG4gXFx0dTMyIHBoeV9pZDtcXG5AQCAtMTU5LDE0ICsxMzYsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuIFxcdFxcdFxcdGdvdG8gY2xlYW5fcGh5O1xcbiBcXHR9XFxuIFxcbi1cXHRwc2VjID0gZndub2RlX2ZpbmRfcHNlX2NvbnRyb2woY2hpbGQsIHBoeSk7XFxuLVxcdGlmIChJU19FUlIocHNlYykpIHtcXG4tXFx0XFx0cmMgPSBQVFJfRVJSKHBzZWMpO1xcbi1cXHRcXHRnb3RvIHVucmVnaXN0ZXJfcGh5O1xcbi1cXHR9XFxuLVxcbi1cXHRwaHktXFx1MDAzZXBzZWMgPSBwc2VjO1xcbi1cXG4gXFx0LyogcGh5LVxcdTAwM2VtaWlfdHMgbWF5IGFscmVhZHkgYmUgZGVmaW5lZCBieSB0aGUgUEhZIGRyaXZlci4gQVxcbiBcXHQgKiBtaWlfdGltZXN0YW1wZXIgcHJvYmVkIHZpYSB0aGUgZGV2aWNlIHRyZWUgd2lsbCBzdGlsbCBoYXZlXFxuIFxcdCAqIHByZWNlZGVuY2UuXFxuQEAgLTE3Niw5ICsxNDUsNiBAQCBpbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLXVucmVnaXN0ZXJfcGh5Olxcbi1cXHRpZiAoaXNfYWNwaV9ub2RlKGNoaWxkKSB8fCBpc19vZl9ub2RlKGNoaWxkKSlcXG4tXFx0XFx0cGh5X2RldmljZV9yZW1vdmUocGh5KTtcXG4gY2xlYW5fcGh5OlxcbiBcXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcXG4gY2xlYW5fbWlpX3RzOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDA2MTUyMjg0NTllZjQyLi5mNWZlYmZmNGIwMGI4ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbkBAIC0yMjMsOCArMjIzLDE5IEBAIHN0YXRpYyB2b2lkIHBoeV9tZGlvX2RldmljZV9mcmVlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4gXFxuIHN0YXRpYyB2b2lkIHBoeV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIHtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTtcXG4rXFxuK1xcdC8qIGJ1c19mb3JfZWFjaF9kZXYoKSBob2xkcyBnZXRfZGV2aWNlKCkgYWNyb3NzIGVhY2ggaXRlcmF0aW9uXFxuK1xcdCAqIHN0ZXAsIGRlZmVycmluZyB0aGlzIHJlbGVhc2UgY2FsbGJhY2sgdW50aWwgYW55IGluLWZsaWdodCBQU0VcXG4rXFx0ICogbm90aWZpZXIgd2FsayBoYXMgYWR2YW5jZWQgcGFzdCB0aGlzIHBoeS4gcHNlX2NvbnRyb2xfcHV0KClcXG4rXFx0ICogdGFrZXMgcHNlX2xpc3RfbXV0ZXgsIHNvIHRoaXMgcGF0aCBtdXN0IHJ1biBpbiBzbGVlcGFibGVcXG4rXFx0ICogY29udGV4dC5cXG4rXFx0ICovXFxuK1xcdG1pZ2h0X3NsZWVwKCk7XFxuK1xcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXFx1MDAzZXBzZWMpO1xcbitcXG4gXFx0Zndub2RlX2hhbmRsZV9wdXQoZGV2LVxcdTAwM2Vmd25vZGUpO1xcbi1cXHRrZnJlZSh0b19waHlfZGV2aWNlKGRldikpO1xcbitcXHRrZnJlZShwaHlkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5AQCAtMTEwMiwxMSArMTExMywxMDMgQEAgc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcXG4gXFxuLS8qKlxcbi0gKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuLSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbisvKiBCZXN0LWVmZm9ydCBhdHRhY2ggb2YgcGh5ZGV2LVxcdTAwM2Vwc2VjIGZyb20gYSBEVCBgcHNlcyA9IFxcdTAwM2NcXHUwMDI2Li4uXFx1MDAzZWAgcGhhbmRsZS5cXG4rICogQ2FsbGVyIG11c3QgaG9sZCBydG5sLiBBIG1pc3NpbmcgcGhhbmRsZSAoLUVOT0VOVCkgb3IgYSBub3QteWV0LXJlZ2lzdGVyZWRcXG4rICogY29udHJvbGxlciAoLUVQUk9CRV9ERUZFUikgaXMgc2lsZW50OyB0aGUgbm90aWZpZXIgcmV0cmllcyB0aGUgbGF0dGVyIGF0XFxuKyAqIFBTRV9SRUdJU1RFUkVEIHRpbWUuIEFueSBvdGhlciBlcnJvciBtZWFucyBhIGJyb2tlbiBiaW5kaW5nIGFuZCBpcyB3YXJuZWRcXG4rICogYWJvdXQsIGJ1dCBsZWZ0IG5vbi1mYXRhbCBzbyB0aGUgcGh5IHN0aWxsIHJlZ2lzdGVycy5cXG4gICovXFxuLWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3N0YXRpYyB2b2lkIHBoeV90cnlfYXR0YWNoX3BzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpucDtcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRucCA9IHBoeWRldi1cXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcXG4rXFx0aWYgKCFucClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlcHNlYylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cHNlYyA9IG9mX3BzZV9jb250cm9sX2dldChucCwgcGh5ZGV2KTtcXG4rXFx0aWYgKElTX0VSUihwc2VjKSkge1xcbitcXHRcXHRpZiAoUFRSX0VSUihwc2VjKSAhPSAtRVBST0JFX0RFRkVSIFxcdTAwMjZcXHUwMDI2IFBUUl9FUlIocHNlYykgIT0gLUVOT0VOVClcXG4rXFx0XFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiZmFpbGVkIHRvIGdldCBQU0UgY29udHJvbDogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgcHNlYyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vwc2VjID0gcHNlYztcXG4rfVxcbitcXG4rc3RhdGljIGludCBwaHlfcHNlX2F0dGFjaF9vbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhIF9fbWF5YmVfdW51c2VkKVxcbit7XFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRpZiAoZGV2LVxcdTAwM2V0eXBlICE9IFxcdTAwMjZtZGlvX2J1c19waHlfdHlwZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwaHlfdHJ5X2F0dGFjaF9wc2UodG9fcGh5X2RldmljZShkZXYpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiA9IGRhdGE7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuK1xcdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYztcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRpZiAoZGV2LVxcdTAwM2V0eXBlICE9IFxcdTAwMjZtZGlvX2J1c19waHlfdHlwZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwaHlkZXYgPSB0b19waHlfZGV2aWNlKGRldik7XFxuK1xcdHBzZWMgPSBwaHlkZXYtXFx1MDAzZXBzZWM7XFxuK1xcdGlmICghcHNlYyB8fCAhcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2Rldihwc2VjLCBwY2RldikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2Vwc2VjID0gTlVMTDtcXG4rXFx0cHNlX2NvbnRyb2xfcHV0KHBzZWMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwaHlfcHNlX25vdGlmaWVyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRzd2l0Y2ggKGV2ZW50KSB7XFxuK1xcdGNhc2UgUFNFX1JFR0lTVEVSRUQ6XFxuK1xcdFxcdHJ0bmxfbG9jaygpO1xcbitcXHRcXHRidXNfZm9yX2VhY2hfZGV2KFxcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxcbitcXHRcXHRcXHRcXHQgcGh5X3BzZV9hdHRhY2hfb25lKTtcXG4rXFx0XFx0cnRubF91bmxvY2soKTtcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9PSztcXG4rXFx0Y2FzZSBQU0VfVU5SRUdJU1RFUkVEOlxcbitcXHRcXHRydG5sX2xvY2soKTtcXG4rXFx0XFx0YnVzX2Zvcl9lYWNoX2RldihcXHUwMDI2bWRpb19idXNfdHlwZSwgTlVMTCwgZGF0YSxcXG4rXFx0XFx0XFx0XFx0IHBoeV9wc2VfZGV0YWNoX29uZSk7XFxuK1xcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiBOT1RJRllfT0s7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBoeV9wc2Vfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHtcXG4rXFx0Lm5vdGlmaWVyX2NhbGwgPSBwaHlfcHNlX25vdGlmaWVyX2V2ZW50LFxcbit9O1xcbitcXG4rLyogQ29yZSByZWdpc3RyYXRpb246IGFkZCB0aGUgcGh5IHRvIHRoZSBNRElPIGJ1cy4gRG9lcyBub3QgdG91Y2ggcnRubCBvclxcbisgKiBQU0UuIHBoeWRldi1cXHUwMDNlcHNlYyBpcyBhdHRhY2hlZCBieSB0aGUgY2FsbGVycyBiZWxvdywgYWZ0ZXIgZGV2aWNlX2FkZCgpXFxuKyAqIGhhcyBtYWRlIHRoZSBwaHkgdmlzaWJsZSBvbiBtZGlvX2J1c190eXBlLCBzbyB0aGF0IGEgY29uY3VycmVudCBQU0VcXG4rICogbm90aWZpZXIgd2FsayBhbmQgdGhlIGF0dGFjaCBjYW4gbmV2ZXIgbGVhdmUgdGhlIHBoeSB1bmF0dGFjaGVkLiBLZWVwaW5nXFxuKyAqIGRldmljZV9hZGQoKSBvdXQgb2YgcnRubCBhbHNvIGF2b2lkcyBkZWFkbG9ja2luZyB3aGVuIGJpbmRpbmcgYSBwaHkgdGhhdFxcbisgKiBpdHNlbGYgcHJvdmlkZXMgYW4gU0ZQIGNhZ2UgKHBoeV9wcm9iZSgpIC1cXHUwMDNlIHBoeV9zZnBfcHJvYmUoKSAtXFx1MDAzZVxcbisgKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIHRha2VzIHJ0bmwpLlxcbisgKi9cXG4rc3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtMTEzNSwxMCArMTIzOCw1NCBAQCBpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiAgb3V0OlxcbiBcXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xcbiBcXHRwaHlfZGV2aWNlX3Jlc2V0KHBoeWRldiwgMSk7XFxuLVxcbiBcXHRtZGlvYnVzX3VucmVnaXN0ZXJfZGV2aWNlKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8pO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuK1xcbisvKipcXG4rICogcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcXG4rICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXFxuKyAqXFxuKyAqIFNhbWUgYXMgcGh5X2RldmljZV9yZWdpc3RlcigpIGJ1dCBjYWxsZXIgbXVzdCBhbHJlYWR5IGhvbGQgcnRubF9sb2NrKCkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitpbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0QVNTRVJUX1JUTkwoKTtcXG4rXFxuK1xcdGVyciA9IF9fcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKTtcXG4rXFxuKy8qKlxcbisgKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuKyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xcbiBcXG4gLyoqXFxuQEAgLTExNTIsOCArMTI5OSw2IEBAIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XFxuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbiBcXHR1bnJlZ2lzdGVyX21paV90aW1lc3RhbXBlcihwaHlkZXYtXFx1MDAzZW1paV90cyk7XFxuLVxcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXFx1MDAzZXBzZWMpO1xcbi1cXG4gXFx0ZGV2aWNlX2RlbChcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldik7XFxuIFxcbiBcXHQvKiBBc3NlcnQgdGhlIHJlc2V0IHNpZ25hbCAqL1xcbkBAIC0zOTgxLDggKzQxMjYsMTQgQEAgc3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZClcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRnb3RvIGVycl9jNDU7XFxuIFxcbitcXHRyYyA9IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2cGh5X3BzZV9ub3RpZmllcik7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0Z290byBlcnJfZ2VucGh5O1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbitlcnJfZ2VucGh5OlxcbitcXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNmdlbnBoeV9kcml2ZXIpO1xcbiBlcnJfYzQ1OlxcbiBcXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNmdlbnBoeV9jNDVfZHJpdmVyKTtcXG4gZXJyX2V0aHRvb2xfcGh5X29wczpcXG5AQCAtMzk5OSw2ICs0MTUwLDcgQEAgc3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZClcXG4gXFxuIHN0YXRpYyB2b2lkIF9fZXhpdCBwaHlfZXhpdCh2b2lkKVxcbiB7XFxuK1xcdHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKFxcdTAwMjZwaHlfcHNlX25vdGlmaWVyKTtcXG4gXFx0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZnZW5waHlfYzQ1X2RyaXZlcik7XFxuIFxcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcXHUwMDI2Z2VucGh5X2RyaXZlcik7XFxuIFxcdHJ0bmxfbG9jaygpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcXG5pbmRleCAwM2JmZDg2NDBkYjk2My4uMTg4NjhiZGQ2NDg1MmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXFxuQEAgLTIwODMsNyArMjA4Myw3IEBAIHN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwICpzZnAsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4gXFx0LyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi9cXG4gXFx0cGh5LVxcdTAwM2Vpc19vbl9zZnBfbW9kdWxlID0gdHJ1ZTtcXG4gXFxuLVxcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG4rXFx0ZXJyID0gcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQocGh5KTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcXG4gXFx0XFx0ZGV2X2VycihzZnAtXFx1MDAzZWRldiwgXFxcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXFxcblxcXCIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcXG5pbmRleCA2OWRiZGJkZTlkNzFhNy4uNjExNTQwZGY0M2JiMWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xcbkBAIC04LDYgKzgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcXHUwMDNlXFxuQEAgLTIzLDYgKzI0LDM5IEBAIHN0YXRpYyBMSVNUX0hFQUQocHNlX2NvbnRyb2xsZXJfbGlzdCk7XFxuIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHBzZV9wd19kX21hcCk7XFxuIHN0YXRpYyBERUZJTkVfTVVURVgocHNlX3B3X2RfbXV0ZXgpO1xcbiBcXG4rc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQocHNlX2NvbnRyb2xsZXJfbm90aWZpZXIpO1xcbitcXG4rLyoqXFxuKyAqIHBzZV9yZWdpc3Rlcl9ub3RpZmllciAtIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9yIFBTRSBjb250cm9sbGVyIGV2ZW50c1xcbisgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHRvIHJlZ2lzdGVyXFxuKyAqXFxuKyAqIFNlZSBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IGZvciBldmVudHMgZmlyZWQgYW5kIHRoZWlyIHN1YnNjcmliZXJcXG4rICogY29udHJhY3QuIENhbGxiYWNrcyBydW4gaW4gcHJvY2VzcyBjb250ZXh0OyB0aGV5IG1heSBzbGVlcCwgdGFrZVxcbisgKiBydG5sLCBhbmQgY2FsbCBvZl9wc2VfY29udHJvbF9nZXQoKS4gVGhlIGNoYWluIGZpcmVzIHN5bmNocm9ub3VzbHksXFxuKyAqIHNvIGEgUFNFIGNvbnRyb2xsZXIgZHJpdmVyJ3MgcHJvYmUvdW5iaW5kIHBhdGggbXVzdCBub3QgaG9sZCBhbnlcXG4rICogc3VjaCBsb2NrIHdoZW4gY2FsbGluZyBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIG9yXFxuKyAqIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLlxcbisgKi9cXG4raW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbit7XFxuK1xcdHJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsIG5iKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwc2VfcmVnaXN0ZXJfbm90aWZpZXIpO1xcbitcXG4rLyoqXFxuKyAqIHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyIC0gdW5yZWdpc3RlciBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFja1xcbisgKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHByZXZpb3VzbHkgcGFzc2VkIHRvIHBzZV9yZWdpc3Rlcl9ub3RpZmllcigpXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cXG4rICovXFxuK2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbit7XFxuK1xcdHJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKFxcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKTtcXG4rXFxuIC8qKlxcbiAgKiBzdHJ1Y3QgcHNlX2NvbnRyb2wgLSBhIFBTRSBjb250cm9sXFxuICAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBQU0UgY29udHJvbGxlciBkZXZpY2VcXG5AQCAtMTEwNCw2ICsxMTM4LDkgQEAgaW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbiBcXHRsaXN0X2FkZChcXHUwMDI2cGNkZXYtXFx1MDAzZWxpc3QsIFxcdTAwMjZwc2VfY29udHJvbGxlcl9saXN0KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwc2VfbGlzdF9tdXRleCk7XFxuIFxcbitcXHRibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKFxcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllcixcXG4rXFx0XFx0XFx0XFx0ICAgICBQU0VfUkVHSVNURVJFRCwgcGNkZXYpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIpO1xcbkBAIC0xMTE0LDYgKzExNTEsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XFxuICAqL1xcbiB2b2lkIHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuIHtcXG4rXFx0YmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbihcXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgUFNFX1VOUkVHSVNURVJFRCwgcGNkZXYpO1xcbitcXG4gXFx0cHNlX2ZsdXNoX3B3X2RzKHBjZGV2KTtcXG4gXFx0cHNlX3JlbGVhc2VfcGlzKHBjZGV2KTtcXG4gXFx0aWYgKHBjZGV2LVxcdTAwM2VpcnEpXFxuQEAgLTE5ODEsMyArMjAyMSwxNyBAQCBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYylcXG4gXFx0cmV0dXJuIHBzZWMtXFx1MDAzZXBjZGV2LVxcdTAwM2V0eXBlcyBcXHUwMDI2IEVUSFRPT0xfUFNFX0MzMztcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfaGFzX2MzMyk7XFxuK1xcbisvKipcXG4rICogcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldiAtIFRlc3Qgd2hldGhlciBhIHBzZV9jb250cm9sIHRhcmdldHMgYSBjb250cm9sbGVyXFxuKyAqIEBwc2VjOiBwc2VfY29udHJvbCBvYnRhaW5lZCBmcm9tIG9mX3BzZV9jb250cm9sX2dldCgpXFxuKyAqIEBwY2RldjogUFNFIGNvbnRyb2xsZXIgdG8gY29tcGFyZSBhZ2FpbnN0XFxuKyAqXFxuKyAqIFJldHVybjogJXRydWUgaWYgQHBzZWMgd2FzIG9idGFpbmVkIGZyb20gQHBjZGV2LCAlZmFsc2Ugb3RoZXJ3aXNlLlxcbisgKi9cXG4rYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbit7XFxuK1xcdHJldHVybiBwc2VjLVxcdTAwM2VwY2RldiA9PSBwY2RldjtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uODY1YjliYWRkYjg1ZmEgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMjE1OCw2ICsyMTU4LDggQEAgc3RydWN0IHBoeV9kZXZpY2UgKmZ3bm9kZV9waHlfZmluZF9kZXZpY2Uoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKnBoeV9md25vZGUpO1xcbiBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlX2dldF9waHlfbm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKTtcXG4gc3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7XFxuIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xcbisvKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmxfbG9jaygpOyBzZWUgcGh5X2RldmljZV9yZWdpc3RlcigpIGZvciB0aGUgcHVibGljIGZvcm0uICovXFxuK2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcXG4gdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIHZvaWQgcGh5X2RldmljZV9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIGludCBwaHlfZ2V0X2M0NV9pZHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcXG5pbmRleCA0ZTU2OTZjZmFkZTdjYy4uZDQzMTBjYTcxYTNlMDggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxcbkBAIC0yMSw2ICsyMSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlO1xcbiBzdHJ1Y3QgcGh5X2RldmljZTtcXG4gc3RydWN0IHBzZV9jb250cm9sbGVyX2RldjtcXG4gc3RydWN0IG5ldGxpbmtfZXh0X2FjaztcXG4rc3RydWN0IG5vdGlmaWVyX2Jsb2NrO1xcbiBcXG4gLyogQzMzIFBTRSBleHRlbmRlZCBzdGF0ZSBhbmQgc3Vic3RhdGUuICovXFxuIHN0cnVjdCBldGh0b29sX2MzM19wc2VfZXh0X3N0YXRlX2luZm8ge1xcbkBAIC0zMzcsNiArMzM4LDI0IEBAIGVudW0gcHNlX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMge1xcbiBcXHRQU0VfQlVER0VUX0VWQUxfU1RSQVRfRFlOQU1JQ1xcdD0gMSBcXHUwMDNjXFx1MDAzYyAyLFxcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIGVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgLSBQU0UgY29udHJvbGxlciBsaWZlY3ljbGUgZXZlbnRzXFxuKyAqXFxuKyAqIEV2ZW50IGRhdGEgaW4gY2FsbGJhY2tzIGlzIGFsd2F5cyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdFxcbisgKiBwc2VfY29udHJvbGxlcl9kZXYgZmlyaW5nIHRoZSBldmVudC5cXG4rICpcXG4rICogQFBTRV9SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFkZGVkIHRvIHBzZV9jb250cm9sbGVyX2xpc3QgYW5kXFxuKyAqXFx0cmVzb2x2YWJsZSBieSBvZl9wc2VfY29udHJvbF9nZXQoKS5cXG4rICogQFBTRV9VTlJFR0lTVEVSRUQ6IGNvbnRyb2xsZXIgYWJvdXQgdG8gYmUgcmVtb3ZlZCBmcm9tXFxuKyAqXFx0cHNlX2NvbnRyb2xsZXJfbGlzdC4gU3Vic2NyaWJlcnMgaG9sZGluZyBwc2VfY29udHJvbCByZWZlcmVuY2VzXFxuKyAqXFx0dGFyZ2V0aW5nIGl0IG11c3QgZHJvcCB0aGVtIGJlZm9yZSByZXR1cm5pbmcgYW5kIG11c3Qgbm90XFxuKyAqXFx0YWNxdWlyZSBuZXcgcmVmZXJlbmNlcyBmb3IgaXQuXFxuKyAqL1xcbitlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IHtcXG4rXFx0UFNFX1JFR0lTVEVSRUQsXFxuK1xcdFBTRV9VTlJFR0lTVEVSRUQsXFxuK307XFxuK1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfUFNFX0NPTlRST0xMRVIpXFxuIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XFxuIHZvaWQgcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XFxuQEAgLTM2Niw2ICszODUsMTIgQEAgaW50IHBzZV9ldGh0b29sX3NldF9wcmlvKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcXG4gYm9vbCBwc2VfaGFzX3BvZGwoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKTtcXG4gYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpO1xcbiBcXG4rYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcXG4rXFxuK2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XFxuK2ludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcXG4rXFxuICNlbHNlXFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwc2VfY29udHJvbCAqb2ZfcHNlX2NvbnRyb2xfZ2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcXG5AQCAtNDE2LDYgKzQ0MSwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldilcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAjZW5kaWZcXG4gXFxuICNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjoyOTozNS45MDM3OTUxNTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1Mjc1NTU2MDY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQU0VfQ09OVFJPTExFUlwiLFxuICAgIFwiUFNFX1JFR1VMQVRPUlwiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJTRlBcIixcbiAgICBcIkZXTk9ERV9NRElPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5X3RyeV9hdHRhY2hfcHNlXCIsXG4gICAgXCJwaHlfcHNlX2F0dGFjaF9vbmVcIixcbiAgICBcInBoeV9wc2VfZGV0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9ub3RpZmllcl9ldmVudFwiLFxuICAgIFwiX19waHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZFwiLFxuICAgIFwicGh5X2RldmljZV9yZWdpc3RlclwiLFxuICAgIFwicHNlX3JlZ2lzdGVyX25vdGlmaWVyXCIsXG4gICAgXCJwc2VfdW5yZWdpc3Rlcl9ub3RpZmllclwiLFxuICAgIFwicHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldlwiLFxuICAgIFwic2ZwX3NtX3Byb2JlX3BoeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFBIWSByZWdpc3RyYXRpb24gbG9naWMgYW5kIGludHJvZHVjZXMgYSBub3RpZmllciBtZWNoYW5pc20gZm9yIFBTRSAoUG93ZXIgU291cmNpbmcgRXF1aXBtZW50KSBjb250cm9sbGVycy4gSXQgY2hhbmdlcyBob3cgUFNFIGNvbnRyb2xsZXJzIGFyZSBhdHRhY2hlZCB0byBQSFkgZGV2aWNlcywgbW92aW5nIGZyb20gYSBzeW5jaHJvbm91cyBsb29rdXAgdG8gYSBub3RpZmllci1iYXNlZCBhcHByb2FjaCB0aGF0IGhhbmRsZXMgYXN5bmNocm9ub3VzIHJlZ2lzdHJhdGlvbi4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBzb2Z0d2FyZS1lbXVsYXRlZCBNRElPIGJ1c2VzLCBQSFlzLCBhbmQgcGxhdGZvcm0gZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNDNjNWZiNGI4NDdmODJhOGZkNTFkNTA2MDIxMjhjNzMwNTBkMWE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMjI6Mjk6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMgYi9kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmNcbmluZGV4IGJhNzA5MTUxODI2NTQwLi43YmQ5NzliNTlmNDk2OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uY1xuKysrIGIvZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jXG5AQCAtMTEsMzMgKzExLDExIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZndub2RlX21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzZS1wZC9wc2UuaFx1MDAzZVxuIFxuIE1PRFVMRV9BVVRIT1IoXCJDYWx2aW4gSm9obnNvbiBcdTAwM2NjYWx2aW4uam9obnNvbkBvc3MubnhwLmNvbVx1MDAzZVwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJGV05PREUgTURJTyBidXMgKEV0aGVybmV0IFBIWSkgYWNjZXNzb3JzXCIpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgcHNlX2NvbnRyb2wgKlxuLWZ3bm9kZV9maW5kX3BzZV9jb250cm9sKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4tXHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWM7XG4tXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuLVxuLVx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QU0VfQ09OVFJPTExFUikpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0bnAgPSB0b19vZl9ub2RlKGZ3bm9kZSk7XG4tXHRpZiAoIW5wKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdHBzZWMgPSBvZl9wc2VfY29udHJvbF9nZXQobnAsIHBoeWRldik7XG4tXHRpZiAoUFRSX0VSUihwc2VjKSA9PSAtRU5PRU5UKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdHJldHVybiBwc2VjO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IG1paV90aW1lc3RhbXBlciAqXG4gZndub2RlX2ZpbmRfbWlpX3RpbWVzdGFtcGVyKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXG4ge1xuQEAgLTExOCw3ICs5Niw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbiBcdFx0XHRcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpjaGlsZCwgdTMyIGFkZHIpXG4ge1xuIFx0c3RydWN0IG1paV90aW1lc3RhbXBlciAqbWlpX3RzID0gTlVMTDtcbi1cdHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyA9IE5VTEw7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5O1xuIFx0Ym9vbCBpc19jNDU7XG4gXHR1MzIgcGh5X2lkO1xuQEAgLTE1OSwxNCArMTM2LDYgQEAgaW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuIFx0XHRcdGdvdG8gY2xlYW5fcGh5O1xuIFx0fVxuIFxuLVx0cHNlYyA9IGZ3bm9kZV9maW5kX3BzZV9jb250cm9sKGNoaWxkLCBwaHkpO1xuLVx0aWYgKElTX0VSUihwc2VjKSkge1xuLVx0XHRyYyA9IFBUUl9FUlIocHNlYyk7XG4tXHRcdGdvdG8gdW5yZWdpc3Rlcl9waHk7XG4tXHR9XG4tXG4tXHRwaHktXHUwMDNlcHNlYyA9IHBzZWM7XG4tXG4gXHQvKiBwaHktXHUwMDNlbWlpX3RzIG1heSBhbHJlYWR5IGJlIGRlZmluZWQgYnkgdGhlIFBIWSBkcml2ZXIuIEFcbiBcdCAqIG1paV90aW1lc3RhbXBlciBwcm9iZWQgdmlhIHRoZSBkZXZpY2UgdHJlZSB3aWxsIHN0aWxsIGhhdmVcbiBcdCAqIHByZWNlZGVuY2UuXG5AQCAtMTc2LDkgKzE0NSw2IEBAIGludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbiBcbiBcdHJldHVybiAwO1xuIFxuLXVucmVnaXN0ZXJfcGh5OlxuLVx0aWYgKGlzX2FjcGlfbm9kZShjaGlsZCkgfHwgaXNfb2Zfbm9kZShjaGlsZCkpXG4tXHRcdHBoeV9kZXZpY2VfcmVtb3ZlKHBoeSk7XG4gY2xlYW5fcGh5OlxuIFx0cGh5X2RldmljZV9mcmVlKHBoeSk7XG4gY2xlYW5fbWlpX3RzOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCAwNjE1MjI4NDU5ZWY0Mi4uZjVmZWJmZjRiMDBiOGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMjIzLDggKzIyMywxOSBAQCBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfZnJlZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4gXG4gc3RhdGljIHZvaWQgcGh5X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiB7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShkZXYpO1xuK1xuK1x0LyogYnVzX2Zvcl9lYWNoX2RldigpIGhvbGRzIGdldF9kZXZpY2UoKSBhY3Jvc3MgZWFjaCBpdGVyYXRpb25cbitcdCAqIHN0ZXAsIGRlZmVycmluZyB0aGlzIHJlbGVhc2UgY2FsbGJhY2sgdW50aWwgYW55IGluLWZsaWdodCBQU0VcbitcdCAqIG5vdGlmaWVyIHdhbGsgaGFzIGFkdmFuY2VkIHBhc3QgdGhpcyBwaHkuIHBzZV9jb250cm9sX3B1dCgpXG4rXHQgKiB0YWtlcyBwc2VfbGlzdF9tdXRleCwgc28gdGhpcyBwYXRoIG11c3QgcnVuIGluIHNsZWVwYWJsZVxuK1x0ICogY29udGV4dC5cbitcdCAqL1xuK1x0bWlnaHRfc2xlZXAoKTtcbitcdHBzZV9jb250cm9sX3B1dChwaHlkZXYtXHUwMDNlcHNlYyk7XG4rXG4gXHRmd25vZGVfaGFuZGxlX3B1dChkZXYtXHUwMDNlZndub2RlKTtcbi1cdGtmcmVlKHRvX3BoeV9kZXZpY2UoZGV2KSk7XG4rXHRrZnJlZShwaHlkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwaHlfbWRpb19kZXZpY2VfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbkBAIC0xMTAyLDExICsxMTEzLDEwMyBAQCBzdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuIH1cbiBFWFBPUlRfU1lNQk9MKGdldF9waHlfZGV2aWNlKTtcbiBcbi0vKipcbi0gKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG4tICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG4rLyogQmVzdC1lZmZvcnQgYXR0YWNoIG9mIHBoeWRldi1cdTAwM2Vwc2VjIGZyb20gYSBEVCBgcHNlcyA9IFx1MDAzY1x1MDAyNi4uLlx1MDAzZWAgcGhhbmRsZS5cbisgKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmwuIEEgbWlzc2luZyBwaGFuZGxlICgtRU5PRU5UKSBvciBhIG5vdC15ZXQtcmVnaXN0ZXJlZFxuKyAqIGNvbnRyb2xsZXIgKC1FUFJPQkVfREVGRVIpIGlzIHNpbGVudDsgdGhlIG5vdGlmaWVyIHJldHJpZXMgdGhlIGxhdHRlciBhdFxuKyAqIFBTRV9SRUdJU1RFUkVEIHRpbWUuIEFueSBvdGhlciBlcnJvciBtZWFucyBhIGJyb2tlbiBiaW5kaW5nIGFuZCBpcyB3YXJuZWRcbisgKiBhYm91dCwgYnV0IGxlZnQgbm9uLWZhdGFsIHNvIHRoZSBwaHkgc3RpbGwgcmVnaXN0ZXJzLlxuICAqL1xuLWludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4rc3RhdGljIHZvaWQgcGh5X3RyeV9hdHRhY2hfcHNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHBzZV9jb250cm9sICpwc2VjO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpucDtcbitcbitcdEFTU0VSVF9SVE5MKCk7XG4rXG4rXHRucCA9IHBoeWRldi1cdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xuK1x0aWYgKCFucClcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2Vwc2VjKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwc2VjID0gb2ZfcHNlX2NvbnRyb2xfZ2V0KG5wLCBwaHlkZXYpO1xuK1x0aWYgKElTX0VSUihwc2VjKSkge1xuK1x0XHRpZiAoUFRSX0VSUihwc2VjKSAhPSAtRVBST0JFX0RFRkVSIFx1MDAyNlx1MDAyNiBQVFJfRVJSKHBzZWMpICE9IC1FTk9FTlQpXG4rXHRcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcImZhaWxlZCB0byBnZXQgUFNFIGNvbnRyb2w6ICVwZVxcblwiLFxuK1x0XHRcdFx0ICAgIHBzZWMpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHNlYyA9IHBzZWM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3BzZV9hdHRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSBfX21heWJlX3VudXNlZClcbit7XG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0aWYgKGRldi1cdTAwM2V0eXBlICE9IFx1MDAyNm1kaW9fYnVzX3BoeV90eXBlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHBoeV90cnlfYXR0YWNoX3BzZSh0b19waHlfZGV2aWNlKGRldikpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3BzZV9kZXRhY2hfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2RldiA9IGRhdGE7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IHBzZV9jb250cm9sICpwc2VjO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGlmIChkZXYtXHUwMDNldHlwZSAhPSBcdTAwMjZtZGlvX2J1c19waHlfdHlwZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwaHlkZXYgPSB0b19waHlfZGV2aWNlKGRldik7XG4rXHRwc2VjID0gcGh5ZGV2LVx1MDAzZXBzZWM7XG4rXHRpZiAoIXBzZWMgfHwgIXBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYocHNlYywgcGNkZXYpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHBoeWRldi1cdTAwM2Vwc2VjID0gTlVMTDtcbitcdHBzZV9jb250cm9sX3B1dChwc2VjKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbitcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSlcbit7XG4rXHRzd2l0Y2ggKGV2ZW50KSB7XG4rXHRjYXNlIFBTRV9SRUdJU1RFUkVEOlxuK1x0XHRydG5sX2xvY2soKTtcbitcdFx0YnVzX2Zvcl9lYWNoX2RldihcdTAwMjZtZGlvX2J1c190eXBlLCBOVUxMLCBOVUxMLFxuK1x0XHRcdFx0IHBoeV9wc2VfYXR0YWNoX29uZSk7XG4rXHRcdHJ0bmxfdW5sb2NrKCk7XG4rXHRcdHJldHVybiBOT1RJRllfT0s7XG4rXHRjYXNlIFBTRV9VTlJFR0lTVEVSRUQ6XG4rXHRcdHJ0bmxfbG9jaygpO1xuK1x0XHRidXNfZm9yX2VhY2hfZGV2KFx1MDAyNm1kaW9fYnVzX3R5cGUsIE5VTEwsIGRhdGEsXG4rXHRcdFx0XHQgcGh5X3BzZV9kZXRhY2hfb25lKTtcbitcdFx0cnRubF91bmxvY2soKTtcbitcdFx0cmV0dXJuIE5PVElGWV9PSztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwaHlfcHNlX25vdGlmaWVyIF9fcmVhZF9tb3N0bHkgPSB7XG4rXHQubm90aWZpZXJfY2FsbCA9IHBoeV9wc2Vfbm90aWZpZXJfZXZlbnQsXG4rfTtcbitcbisvKiBDb3JlIHJlZ2lzdHJhdGlvbjogYWRkIHRoZSBwaHkgdG8gdGhlIE1ESU8gYnVzLiBEb2VzIG5vdCB0b3VjaCBydG5sIG9yXG4rICogUFNFLiBwaHlkZXYtXHUwMDNlcHNlYyBpcyBhdHRhY2hlZCBieSB0aGUgY2FsbGVycyBiZWxvdywgYWZ0ZXIgZGV2aWNlX2FkZCgpXG4rICogaGFzIG1hZGUgdGhlIHBoeSB2aXNpYmxlIG9uIG1kaW9fYnVzX3R5cGUsIHNvIHRoYXQgYSBjb25jdXJyZW50IFBTRVxuKyAqIG5vdGlmaWVyIHdhbGsgYW5kIHRoZSBhdHRhY2ggY2FuIG5ldmVyIGxlYXZlIHRoZSBwaHkgdW5hdHRhY2hlZC4gS2VlcGluZ1xuKyAqIGRldmljZV9hZGQoKSBvdXQgb2YgcnRubCBhbHNvIGF2b2lkcyBkZWFkbG9ja2luZyB3aGVuIGJpbmRpbmcgYSBwaHkgdGhhdFxuKyAqIGl0c2VsZiBwcm92aWRlcyBhbiBTRlAgY2FnZSAocGh5X3Byb2JlKCkgLVx1MDAzZSBwaHlfc2ZwX3Byb2JlKCkgLVx1MDAzZVxuKyAqIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgdGFrZXMgcnRubCkuXG4rICovXG4rc3RhdGljIGludCBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTExMzUsMTAgKzEyMzgsNTQgQEAgaW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiAgb3V0OlxuIFx0LyogQXNzZXJ0IHRoZSByZXNldCBzaWduYWwgKi9cbiBcdHBoeV9kZXZpY2VfcmVzZXQocGh5ZGV2LCAxKTtcbi1cbiBcdG1kaW9idXNfdW5yZWdpc3Rlcl9kZXZpY2UoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8pO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rXG4rLyoqXG4rICogcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQgLSBSZWdpc3RlciB0aGUgcGh5IGRldmljZSBvbiB0aGUgTURJTyBidXNcbisgKiBAcGh5ZGV2OiBwaHlfZGV2aWNlIHN0cnVjdHVyZSB0byBiZSBhZGRlZCB0byB0aGUgTURJTyBidXNcbisgKlxuKyAqIFNhbWUgYXMgcGh5X2RldmljZV9yZWdpc3RlcigpIGJ1dCBjYWxsZXIgbXVzdCBhbHJlYWR5IGhvbGQgcnRubF9sb2NrKCkuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuKyAqL1xuK2ludCBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0ZXJyID0gX19waHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0cGh5X3RyeV9hdHRhY2hfcHNlKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZCk7XG4rXG4rLyoqXG4rICogcGh5X2RldmljZV9yZWdpc3RlciAtIFJlZ2lzdGVyIHRoZSBwaHkgZGV2aWNlIG9uIHRoZSBNRElPIGJ1c1xuKyAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBfX3BoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdHBoeV90cnlfYXR0YWNoX3BzZShwaHlkZXYpO1xuK1x0cnRubF91bmxvY2soKTtcbitcbitcdHJldHVybiAwO1xuK31cbiBFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuIFxuIC8qKlxuQEAgLTExNTIsOCArMTI5OSw2IEBAIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7XG4gdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHVucmVnaXN0ZXJfbWlpX3RpbWVzdGFtcGVyKHBoeWRldi1cdTAwM2VtaWlfdHMpO1xuLVx0cHNlX2NvbnRyb2xfcHV0KHBoeWRldi1cdTAwM2Vwc2VjKTtcbi1cbiBcdGRldmljZV9kZWwoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2KTtcbiBcbiBcdC8qIEFzc2VydCB0aGUgcmVzZXQgc2lnbmFsICovXG5AQCAtMzk4MSw4ICs0MTI2LDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHBoeV9pbml0KHZvaWQpXG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gZXJyX2M0NTtcbiBcbitcdHJjID0gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNnBoeV9wc2Vfbm90aWZpZXIpO1xuK1x0aWYgKHJjKVxuK1x0XHRnb3RvIGVycl9nZW5waHk7XG4rXG4gXHRyZXR1cm4gMDtcbiBcbitlcnJfZ2VucGh5OlxuK1x0cGh5X2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmdlbnBoeV9kcml2ZXIpO1xuIGVycl9jNDU6XG4gXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2M0NV9kcml2ZXIpO1xuIGVycl9ldGh0b29sX3BoeV9vcHM6XG5AQCAtMzk5OSw2ICs0MTUwLDcgQEAgc3RhdGljIGludCBfX2luaXQgcGh5X2luaXQodm9pZClcbiBcbiBzdGF0aWMgdm9pZCBfX2V4aXQgcGh5X2V4aXQodm9pZClcbiB7XG4rXHRwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcihcdTAwMjZwaHlfcHNlX25vdGlmaWVyKTtcbiBcdHBoeV9kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZnZW5waHlfYzQ1X2RyaXZlcik7XG4gXHRwaHlfZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2Z2VucGh5X2RyaXZlcik7XG4gXHRydG5sX2xvY2soKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbmluZGV4IDAzYmZkODY0MGRiOTYzLi4xODg2OGJkZDY0ODUyYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jXG5AQCAtMjA4Myw3ICsyMDgzLDcgQEAgc3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuIFx0LyogTWFyayB0aGlzIFBIWSBhcyBiZWluZyBvbiBhIFNGUCBtb2R1bGUgKi9cbiBcdHBoeS1cdTAwM2Vpc19vbl9zZnBfbW9kdWxlID0gdHJ1ZTtcbiBcbi1cdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcbitcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkKHBoeSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHBoeV9kZXZpY2VfZnJlZShwaHkpO1xuIFx0XHRkZXZfZXJyKHNmcC1cdTAwM2VkZXYsIFwicGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWQ6ICVwZVxcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jIGIvZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmNcbmluZGV4IDY5ZGJkYmRlOWQ3MWE3Li42MTE1NDBkZjQzYmIxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuY1xuQEAgLTgsNiArOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2UtcGQvcHNlLmhcdTAwM2VcbkBAIC0yMyw2ICsyNCwzOSBAQCBzdGF0aWMgTElTVF9IRUFEKHBzZV9jb250cm9sbGVyX2xpc3QpO1xuIHN0YXRpYyBERUZJTkVfWEFSUkFZX0FMTE9DKHBzZV9wd19kX21hcCk7XG4gc3RhdGljIERFRklORV9NVVRFWChwc2VfcHdfZF9tdXRleCk7XG4gXG4rc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQocHNlX2NvbnRyb2xsZXJfbm90aWZpZXIpO1xuK1xuKy8qKlxuKyAqIHBzZV9yZWdpc3Rlcl9ub3RpZmllciAtIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZm9yIFBTRSBjb250cm9sbGVyIGV2ZW50c1xuKyAqIEBuYjogbm90aWZpZXIgYmxvY2sgdG8gcmVnaXN0ZXJcbisgKlxuKyAqIFNlZSBlbnVtIHBzZV9jb250cm9sbGVyX2V2ZW50IGZvciBldmVudHMgZmlyZWQgYW5kIHRoZWlyIHN1YnNjcmliZXJcbisgKiBjb250cmFjdC4gQ2FsbGJhY2tzIHJ1biBpbiBwcm9jZXNzIGNvbnRleHQ7IHRoZXkgbWF5IHNsZWVwLCB0YWtlXG4rICogcnRubCwgYW5kIGNhbGwgb2ZfcHNlX2NvbnRyb2xfZ2V0KCkuIFRoZSBjaGFpbiBmaXJlcyBzeW5jaHJvbm91c2x5LFxuKyAqIHNvIGEgUFNFIGNvbnRyb2xsZXIgZHJpdmVyJ3MgcHJvYmUvdW5iaW5kIHBhdGggbXVzdCBub3QgaG9sZCBhbnlcbisgKiBzdWNoIGxvY2sgd2hlbiBjYWxsaW5nIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKCkgb3JcbisgKiBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuXG4rICovXG4raW50IHBzZV9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuK3tcbitcdHJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwc2VfcmVnaXN0ZXJfbm90aWZpZXIpO1xuK1xuKy8qKlxuKyAqIHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyIC0gdW5yZWdpc3RlciBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFja1xuKyAqIEBuYjogbm90aWZpZXIgYmxvY2sgcHJldmlvdXNseSBwYXNzZWQgdG8gcHNlX3JlZ2lzdGVyX25vdGlmaWVyKClcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS5cbisgKi9cbitpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihcdTAwMjZwc2VfY29udHJvbGxlcl9ub3RpZmllciwgbmIpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcik7XG4rXG4gLyoqXG4gICogc3RydWN0IHBzZV9jb250cm9sIC0gYSBQU0UgY29udHJvbFxuICAqIEBwY2RldjogYSBwb2ludGVyIHRvIHRoZSBQU0UgY29udHJvbGxlciBkZXZpY2VcbkBAIC0xMTA0LDYgKzExMzgsOSBAQCBpbnQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4gXHRsaXN0X2FkZChcdTAwMjZwY2Rldi1cdTAwM2VsaXN0LCBcdTAwMjZwc2VfY29udHJvbGxlcl9saXN0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwc2VfbGlzdF9tdXRleCk7XG4gXG4rXHRibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKFx1MDAyNnBzZV9jb250cm9sbGVyX25vdGlmaWVyLFxuK1x0XHRcdFx0ICAgICBQU0VfUkVHSVNURVJFRCwgcGNkZXYpO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcbkBAIC0xMTE0LDYgKzExNTEsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XG4gICovXG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxuIHtcbitcdGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2cHNlX2NvbnRyb2xsZXJfbm90aWZpZXIsXG4rXHRcdFx0XHQgICAgIFBTRV9VTlJFR0lTVEVSRUQsIHBjZGV2KTtcbitcbiBcdHBzZV9mbHVzaF9wd19kcyhwY2Rldik7XG4gXHRwc2VfcmVsZWFzZV9waXMocGNkZXYpO1xuIFx0aWYgKHBjZGV2LVx1MDAzZWlycSlcbkBAIC0xOTgxLDMgKzIwMjEsMTcgQEAgYm9vbCBwc2VfaGFzX2MzMyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMpXG4gXHRyZXR1cm4gcHNlYy1cdTAwM2VwY2Rldi1cdTAwM2V0eXBlcyBcdTAwMjYgRVRIVE9PTF9QU0VfQzMzO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwc2VfaGFzX2MzMyk7XG4rXG4rLyoqXG4rICogcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldiAtIFRlc3Qgd2hldGhlciBhIHBzZV9jb250cm9sIHRhcmdldHMgYSBjb250cm9sbGVyXG4rICogQHBzZWM6IHBzZV9jb250cm9sIG9idGFpbmVkIGZyb20gb2ZfcHNlX2NvbnRyb2xfZ2V0KClcbisgKiBAcGNkZXY6IFBTRSBjb250cm9sbGVyIHRvIGNvbXBhcmUgYWdhaW5zdFxuKyAqXG4rICogUmV0dXJuOiAldHJ1ZSBpZiBAcHNlYyB3YXMgb2J0YWluZWQgZnJvbSBAcGNkZXYsICVmYWxzZSBvdGhlcndpc2UuXG4rICovXG4rYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcbitcdFx0XHQgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4re1xuK1x0cmV0dXJuIHBzZWMtXHUwMDNlcGNkZXYgPT0gcGNkZXY7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uODY1YjliYWRkYjg1ZmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjE1OCw2ICsyMTU4LDggQEAgc3RydWN0IHBoeV9kZXZpY2UgKmZ3bm9kZV9waHlfZmluZF9kZXZpY2Uoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKnBoeV9md25vZGUpO1xuIHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGVfZ2V0X3BoeV9ub2RlKGNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpO1xuIHN0cnVjdCBwaHlfZGV2aWNlICpnZXRfcGh5X2RldmljZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpO1xuIGludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xuKy8qIENhbGxlciBtdXN0IGhvbGQgcnRubF9sb2NrKCk7IHNlZSBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkgZm9yIHRoZSBwdWJsaWMgZm9ybS4gKi9cbitpbnQgcGh5X2RldmljZV9yZWdpc3Rlcl9sb2NrZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSk7XG4gdm9pZCBwaHlfZGV2aWNlX2ZyZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gdm9pZCBwaHlfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBpbnQgcGh5X2dldF9jNDVfaWRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oIGIvaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmhcbmluZGV4IDRlNTY5NmNmYWRlN2NjLi5kNDMxMGNhNzFhM2UwOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaFxuQEAgLTIxLDYgKzIxLDcgQEAgc3RydWN0IG5ldF9kZXZpY2U7XG4gc3RydWN0IHBoeV9kZXZpY2U7XG4gc3RydWN0IHBzZV9jb250cm9sbGVyX2RldjtcbiBzdHJ1Y3QgbmV0bGlua19leHRfYWNrO1xuK3N0cnVjdCBub3RpZmllcl9ibG9jaztcbiBcbiAvKiBDMzMgUFNFIGV4dGVuZGVkIHN0YXRlIGFuZCBzdWJzdGF0ZS4gKi9cbiBzdHJ1Y3QgZXRodG9vbF9jMzNfcHNlX2V4dF9zdGF0ZV9pbmZvIHtcbkBAIC0zMzcsNiArMzM4LDI0IEBAIGVudW0gcHNlX2J1ZGdldF9ldmFsX3N0cmF0ZWdpZXMge1xuIFx0UFNFX0JVREdFVF9FVkFMX1NUUkFUX0RZTkFNSUNcdD0gMSBcdTAwM2NcdTAwM2MgMixcbiB9O1xuIFxuKy8qKlxuKyAqIGVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQgLSBQU0UgY29udHJvbGxlciBsaWZlY3ljbGUgZXZlbnRzXG4rICpcbisgKiBFdmVudCBkYXRhIGluIGNhbGxiYWNrcyBpcyBhbHdheXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3RcbisgKiBwc2VfY29udHJvbGxlcl9kZXYgZmlyaW5nIHRoZSBldmVudC5cbisgKlxuKyAqIEBQU0VfUkVHSVNURVJFRDogY29udHJvbGxlciBhZGRlZCB0byBwc2VfY29udHJvbGxlcl9saXN0IGFuZFxuKyAqXHRyZXNvbHZhYmxlIGJ5IG9mX3BzZV9jb250cm9sX2dldCgpLlxuKyAqIEBQU0VfVU5SRUdJU1RFUkVEOiBjb250cm9sbGVyIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbVxuKyAqXHRwc2VfY29udHJvbGxlcl9saXN0LiBTdWJzY3JpYmVycyBob2xkaW5nIHBzZV9jb250cm9sIHJlZmVyZW5jZXNcbisgKlx0dGFyZ2V0aW5nIGl0IG11c3QgZHJvcCB0aGVtIGJlZm9yZSByZXR1cm5pbmcgYW5kIG11c3Qgbm90XG4rICpcdGFjcXVpcmUgbmV3IHJlZmVyZW5jZXMgZm9yIGl0LlxuKyAqL1xuK2VudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQge1xuK1x0UFNFX1JFR0lTVEVSRUQsXG4rXHRQU0VfVU5SRUdJU1RFUkVELFxuK307XG4rXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BTRV9DT05UUk9MTEVSKVxuIGludCBwc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgcHNlX2NvbnRyb2xsZXJfZGV2ICpwY2Rldik7XG4gdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcbkBAIC0zNjYsNiArMzg1LDEyIEBAIGludCBwc2VfZXRodG9vbF9zZXRfcHJpbyhzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4gYm9vbCBwc2VfaGFzX3BvZGwoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKTtcbiBib29sIHBzZV9oYXNfYzMzKHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyk7XG4gXG4rYm9vbCBwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2KHN0cnVjdCBwc2VfY29udHJvbCAqcHNlYyxcbitcdFx0XHQgICAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xuK1xuK2ludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XG4raW50IHBzZV91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpO1xuK1xuICNlbHNlXG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcHNlX2NvbnRyb2wgKm9mX3BzZV9jb250cm9sX2dldChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG5AQCAtNDE2LDYgKzQ0MSwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2hhc19jMzMoc3RydWN0IHBzZV9jb250cm9sICpwc2VjKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldihzdHJ1Y3QgcHNlX2NvbnRyb2wgKnBzZWMsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBwc2VfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gI2VuZGlmXG4gXG4gI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjoyOTozNS45MDM3OTY1MzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE2MjIxODg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBTRSBDb250cm9sbGVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgcmVmYWN0b3JpbmcgaG93IFBTRSBjb250cm9sbGVycyBpbnRlcmFjdCB3aXRoIFBIWSBkZXZpY2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIHRoZXkncmUgaW50cm9kdWNpbmcgYSBub3RpZmllciBzeXN0ZW0sIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgIGFuZCBgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXJgLCBpbiBgcHNlX2NvcmUuY2AuXCIgVGhhdCdzIGdvb2Q7IGRlY291cGxpbmcgdGhyb3VnaCBub3RpZmljYXRpb25zIGlzIGEgY2xlYW4gYXBwcm9hY2guIFRoZW4gSSBzZWUgdGhleSdyZSBtb2RpZnlpbmcgYHBoeV9kZXZpY2UuY2AgdG8gcmVnaXN0ZXIgYSBgcGh5X3BzZV9ub3RpZmllcmAgdGhhdCByZWFjdHMgdG8gYFBTRV9SRUdJU1RFUkVEYCBhbmQgYFBTRV9VTlJFR0lTVEVSRURgIGV2ZW50cy4gVGhpcyBpcyBsb2dpY2FsLCB0aGUgUEhZcyBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIFBTRS5cblxuVGhlIGNvcmUgb2YgaXQgaXMgdGhhdCB3aGVuIGEgUFNFIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLCBpdCdsbCBpdGVyYXRlIHRocm91Z2ggYWxsIFBIWXMgb24gdGhlIE1ESU8gYnVzIGFuZCB0cnkgdG8gaG9vayBpdHNlbGYgdXAuIEFuZCB3aGVuIGl0IHVucmVnaXN0ZXJzLCBpdCBkZXRhY2hlcy4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCB0aGV5IGFsc28gYWx0ZXJlZCBgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5YCDigJMgdGhleSByZW1vdmVkIHRoYXQgc3luY2hyb25vdXMgYGZ3bm9kZV9maW5kX3BzZV9jb250cm9sYCBjYWxsLCBhbmQgbm93IHJlbHkgb24gYHBoeV9kZXZpY2VfcmVnaXN0ZXJgIG9yIHRoZSBub3RpZmllci4gVGhpcyBpcyBhIGJpdCBtb3JlIHN1YnRsZSwgbWFraW5nIHN1cmUgdGhlIGF0dGFjaG1lbnQgaXMgYWx3YXlzIGhhbmRsZWQgdGhyb3VnaCB0aGUgdXBkYXRlZCBub3RpZmllciBtZWNoYW5pc20uIEdvb2QsIHRoYXQncyBpbXBvcnRhbnQgZm9yIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHBhdGNoLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIkNhbiBJIHJlYWNoIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD9cIiBUaGF0J3Mgd2hlcmUgZnV6emluZyBhbmQgdGVzdGluZyBjb21lcyBpbiwgb2YgY291cnNlLiBNRElPIGJ1c2VzIGFuZCBQSFkgZGV2aWNlcyAqY2FuKiBiZSBjcmVhdGVkIHZpcnR1YWxseSwgcmlnaHQ/IE5ldGRldnNpbSwgZHVtbXkgUEhZcywgdmV0aC9tYWNzZWPigKYgb2theSwgc28gUEhZcyBhcmUgdXN1YWxseSBoYXJkd2FyZSBidXQgd2UgY2FuIG1ha2UgdGhlbSB2aXJ0dWFsLCByaWdodD8gVGhlcmUgYXJlIHNvbWUgdmlydHVhbCBkcml2ZXJzLCBhbmQgd2UgY2FuIGZ1enogTURJTy9QSFkgcmVnaXN0cmF0aW9uIGlmIG5lZWRlZC4gSG9sZCBvbi4uLiBEb2VzIHN5emthbGxlciBkbyBpdD8gQ2FuIGl0IGNyZWF0ZSB2aXJ0dWFsIGRldmljZXMgdGhhdCByZWdpc3RlciBQSFlzLi4uIHdhaXQsIHdoYXQgYWJvdXQgYG1hYzgwMjExX2h3c2ltYD8gTm8sIHRoYXQncyBub3QgcmlnaHQsIFBIWXMgYXJlIHVzdWFsbHkgZm9yIEV0aGVybmV0LCBub3Qgd2lyZWxlc3MuLi4gT2theSwgYG5ldGRldnNpbWAgZG9lc24ndCByZWdpc3RlciBQSFlzIHNwZWNpZmljYWxseS4gQnV0IHdoYXQgYWJvdXQgYGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeWA/IFRoYXQncyBhYm91dCBkZXZpY2UgdHJlZXMgYW5kIEFDUEksIHJpZ2h0P1xuXG5TbywgY2FuIHN5emthbGxlciB0cmlnZ2VyIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBkaXJlY3RseT8gTWF5YmUuIFZpcnR1YWwgZHJpdmVycywgZGVmaW5pdGVseS4gVVNCIGRyaXZlcnMsIHBvdGVudGlhbGx5LiBGb3IgZXhhbXBsZSwgYHVzYm5ldGAgZHJpdmVycywgdGhleSBtaWdodCByZWdpc3RlciBQSFlzLi4uXG5cblRoZSBuZXh0IGNydWNpYWwgcG9pbnQgaXMsIGBwc2VfY29udHJvbGxlcl9yZWdpc3RlcmAgaXMgY2FsbGVkIGJ5IHRoZSBQU0UgY29udHJvbGxlciBkcml2ZXJzIHRoZW1zZWx2ZXMuIEFyZSB0aGVyZSAqYW55KiB2aXJ0dWFsIFBTRSBjb250cm9sbGVyIGRyaXZlcnM/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLiBXZSBuZWVkIHRvIGNoZWNrIGlmIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgIGlzIGVuYWJsZWQgYW5kIHRoZW4gbG9vayBmb3IgUFNFIGRyaXZlcnMgdGhhdCBhcmUgcG90ZW50aWFsbHkgdHJpZ2dlcmFibGUuIFRpbWUgdG8gZ3JlcCBmb3IgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE5NCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjMwOjI0LjA2NjAxNjY3NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTI1NDc1MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzZV9jb250cm9sbGVyX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BzZS1wZC9wZDY5MngwLmM9MTc1Nj1zdGF0aWMgaW50IHBkNjkyeDBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jLTE4MzgtXFx0cHJpdi1cXHUwMDNlcGNkZXYucGlzX3ByaW9fbWF4ID0gMjtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jOjE4Mzk6XFx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwY2Rldik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BkNjkyeDAuYy0xODQwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYz0yNz1zdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChwc2VfY29udHJvbGxlcl9ub3RpZmllcik7XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0zNi0gKiBzbyBhIFBTRSBjb250cm9sbGVyIGRyaXZlcidzIHByb2JlL3VuYmluZCBwYXRoIG11c3Qgbm90IGhvbGQgYW55XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6Mzc6ICogc3VjaCBsb2NrIHdoZW4gY2FsbGluZyBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIG9yXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMzgtICogcHNlX2NvbnRyb2xsZXJfdW5yZWdpc3RlcigpLlxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM9MTA0Nj1zdGF0aWMgdm9pZCBwc2Vfc2VuZF9udGZfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNjctLyoqXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTA2ODogKiBwc2VfY29udHJvbGxlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTA2OS0gKiBAcGNkZXY6IGEgcG9pbnRlciB0byB0aGUgaW5pdGlhbGl6ZWQgUFNFIGNvbnRyb2xsZXIgZGV2aWNlXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMDcyLSAqL1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjEwNzM6aW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTEwNzQte1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE0NS19XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE0NjpFWFBPUlRfU1lNQk9MX0dQTChwc2VfY29udHJvbGxlcl9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jPTExNjk9c3RhdGljIHZvaWQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE3NC0vKipcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTc1OiAqIGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIgLSByZXNvdXJjZSBtYW5hZ2VkIHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKClcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTc2LSAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUFNFIGNvbnRyb2xsZXJcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExNzgtICpcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTc5OiAqIE1hbmFnZWQgcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoKS4gRm9yIFBTRSBjb250cm9sbGVycyByZWdpc3RlcmVkIGJ5XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE4MC0gKiB0aGlzIGZ1bmN0aW9uLCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKCkgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgb25cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYzoxMTgxOiAqIGRyaXZlciBkZXRhY2guIFNlZSBwc2VfY29udHJvbGxlcl9yZWdpc3RlcigpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExODItICpcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExODQtICovXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTE4NTppbnQgZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTE4Ni1cXHRcXHRcXHRcXHQgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMTk1LVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jOjExOTY6XFx0cmV0ID0gcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIocGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC9wc2VfY29yZS5jLTExOTctXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmMtMTIwNi19XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9jb3JlLmM6MTIwNzpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX2NvcmUuYy0xMjA4LVxcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYz05ND1wc2VfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jLTEyNi1cXHRwcml2LVxcdTAwM2VwY2Rldi50eXBlcyA9IEVUSFRPT0xfUFNFX1BPREw7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYzoxMjc6XFx0cmV0ID0gZGV2bV9wc2VfY29udHJvbGxlcl9yZWdpc3RlcihkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2VwY2Rldik7XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy0xMjgtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jPTQ3Mz1zdGF0aWMgaW50IHNpMzQ3NF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC9zaTM0NzQuYy01NDItXFxuZHJpdmVycy9uZXQvcHNlLXBkL3NpMzQ3NC5jOjU0MzpcXHRyZXQgPSBkZXZtX3BzZV9jb250cm9sbGVyX3JlZ2lzdGVyKGRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXBjZGV2KTtcXG5kcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmMtNTQ0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jPTE0MzA9c3RhdGljIGludCB0cHMyMzg4MV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTYtXFx0cHJpdi1cXHUwMDNlcGNkZXYuc3VwcF9idWRnZXRfZXZhbF9zdHJhdGVnaWVzID0gUFNFX0JVREdFVF9FVkFMX1NUUkFUX1NUQVRJQztcXG5kcml2ZXJzL25ldC9wc2UtcGQvdHBzMjM4ODEuYzoxNTE3OlxcdHJldCA9IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlcGNkZXYpO1xcbmRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jLTE1MTgtXFx0aWYgKHJldCkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmg9MzU0PWVudW0gcHNlX2NvbnRyb2xsZXJfZXZlbnQge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wc2UtcGQvcHNlLmgtMzU5LSNpZiBJU19FTkFCTEVEKENPTkZJR19QU0VfQ09OVFJPTExFUilcXG5pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaDozNjA6aW50IHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaC0zNjEtdm9pZCBwc2VfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwc2VfY29udHJvbGxlcl9kZXYgKnBjZGV2KTtcXG5pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaD0zNjI9c3RydWN0IGRldmljZTtcXG5pbmNsdWRlL2xpbnV4L3BzZS1wZC9wc2UuaDozNjM6aW50IGRldm1fcHNlX2NvbnRyb2xsZXJfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LFxcbmluY2x1ZGUvbGludXgvcHNlLXBkL3BzZS5oLTM2NC1cXHRcXHRcXHRcXHQgc3RydWN0IHBzZV9jb250cm9sbGVyX2RldiAqcGNkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMDoyNi4xOTE0OTgzMTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTg2MTUxNjAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBTRSBDb250cm9sbGVyIFJlZ2lzdHJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYHBzZV9yZWdpc3Rlcl9ub3RpZmllcmAgYW5kIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmAgZnVuY3Rpb25zIHdpdGhpbiBgcHNlX2NvcmUuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJPa2F5LCB0aGF0J3MgdGhlIGNvcmUgbm90aWZpY2F0aW9uIG1lY2hhbmlzbSwgbGlrZWx5IGZvciBzaWduYWxpbmcgd2hlbiBhIFBTRSBjb250cm9sbGVyLCBvciBQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQgY29udHJvbGxlciwgYmVjb21lcyBhdmFpbGFibGUgb3IgaXMgcmVtb3ZlZC5cIlxuXG5UaGUgbmV4dCBsaW5lIHBvaW50cyB0byBtb2RpZmljYXRpb25zIGluIGBwaHlfZGV2aWNlLmNgIHRvIHJlZ2lzdGVyIHRoaXMgbm90aWZpZXIuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZSBQSFkgZGV2aWNlcyBhcmUgb2Z0ZW4gdGhlIGltbWVkaWF0ZSBjb25zdW1lcnMgb3IgdXNlcnMgb2YgdGhpcyBQU0UgY29udHJvbGxlciBpbmZvcm1hdGlvbiwgZXNwZWNpYWxseSB0aG9zZSB0aGF0IG5lZWQgdG8gbmVnb3RpYXRlIHBvd2VyIGRlbGl2ZXJ5LiBUaGUgbm90aWZpZXIgaXMgdHJpZ2dlcmVkIHVwb24gcmVnaXN0cmF0aW9uIG9yIHVucmVnaXN0cmF0aW9uIG9mIHRoZSBQU0UgY29udHJvbGxlciwgd2hpY2ggaXMgdGhlIGtleSBldmVudCBmb3IgdGhlIFBIWS5cblxuTm93LCBsZXQncyBzZWUgaG93IHRoZXNlIFBTRSBjb250cm9sbGVycyBhY3R1YWxseSBnZXQgcmVnaXN0ZXJlZC4gVGhlIGNvZGUgbWVudGlvbnMgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBiZWluZyB0aGUgcmVzcG9uc2libGUgZnVuY3Rpb24sIGFuZCBpdCdzIGNhbGxlZCBieSB2YXJpb3VzIGRyaXZlcnMsIGxpa2UgYHBkNjkyeDBgLCBgcHNlX3JlZ3VsYXRvcmAsIGBzaTM0NzRgLCBhbmQgYHRwczIzODgxYC4gR29vZC4gVGhlc2UgYXBwZWFyIHRvIGJlIHRoZSBhY3R1YWwgaGFyZHdhcmUgZHJpdmVycyBmb3IgdGhlIFBTRSBjb250cm9sbGVycyB0aGVtc2VsdmVzLlxuXG5gcHNlX3JlZ3VsYXRvcmAgc3BlY2lmaWNhbGx5IHN0YW5kcyBvdXQgYmVjYXVzZSBpdCdzIG1lbnRpb25lZCBhcyBhIHBsYXRmb3JtIGRyaXZlci4gVGhhdCBtYWtlcyBtZSBwYXVzZSBhbmQgY29uc2lkZXIgaXRzIGltcGxpY2F0aW9ucyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFBsYXRmb3JtIGRyaXZlcnMgb2Z0ZW4gaGF2ZSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHBsYXRmb3JtLiBUaGlzIHByb21wdHMgdGhlIHF1ZXN0aW9uLCBcIkNhbiBgcHNlX3JlZ3VsYXRvcmAsIGFuZCB0aGVyZWZvcmUgdGhlIFBTRSByZWdpc3RyYXRpb24gcHJvY2VzcywgYmUgdHJpZ2dlcmVkIGFuZCBmdW5jdGlvbiBjb3JyZWN0bHkgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nP1wiIEl04oCZcyB0aW1lIHRvIGRyaWxsIGRvd24gaW50byB0aGUgYHBzZV9yZWd1bGF0b3IuY2Agc291cmNlIGNvZGUgYW5kIGZpbmQgb3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYW5kIGFueSBoYXJkd2FyZSBhY2Nlc3MgaXQgbWlnaHQgcGVyZm9ybSB0byBzZWUgaWYgaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDQ3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjMxOjU4LjA1MzAxNTczMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU1NTQ3OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzZV9yZWdfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYz05Mz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYzo5NDpwc2VfcmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy05NS17XFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jPTE0Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwc2VfcmVnX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9wc2UtcGQvcHNlX3JlZ3VsYXRvci5jOjE0NDpcXHQucHJvYmVcXHRcXHQ9IHBzZV9yZWdfcHJvYmUsXFxuZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuYy0xNDUtXFx0LmRyaXZlclxcdFxcdD0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMTo1OS45MDg1Njc5NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTUyMDMzMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBgc2ZwLmNgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgdGhlIHBsYXRmb3JtIGRyaXZlciBgcHNlX3JlZ3VsYXRvcmAgY2F0Y2hlcyBteSBleWUuIEl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIsIHNvIHRoYXQgbWVhbnMgaXQncyBsaWtlbHkgcHJvYmVkIGJhc2VkIG9uIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb25zIG9yLCBtb3JlIGludGVyZXN0aW5nbHksIGJ5IHNvbWV0aGluZyBsaWtlIFN5emthbGxlciBpbmplY3RpbmcgcGxhdGZvcm0gZGV2aWNlcyDigJMgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIFRoZSBtYWluIHRoaW5nIHRoYXQgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhYm91dCBpcyBgcGh5X2RldmljZV9yZWdpc3RlcmAsIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgaXQncyBjYWxsZWQgZHVyaW5nIFBIWSBkZXZpY2UgcmVnaXN0cmF0aW9uLiBOb3csIHRoZSBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIHdoZXRoZXIgYSBQSFkgZGV2aWNlIGNhbiBldmVuIGJlIHJlZ2lzdGVyZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLlxuXG5UaGlua2luZyBhYm91dCBpdCwgeWVzLCBpdCBjYW4uIFN5emthbGxlciBpcyBjYXBhYmxlIG9mIGNyZWF0aW5nIHZpcnR1YWwgbmV0d29yayBkZXZpY2VzLCB3aGljaCB3b3VsZCB0aGVuIGxpa2VseSByZWdpc3RlciB0aGVzZSBQSFlzLCBvciBpbmplY3QgZW50aXJlIE1ESU8gYnVzZXMgYW5kIFBIWXMgZGlyZWN0bHkuIFRoaXMgbGVhZHMgbWUgdG8gZm9jdXMgaW4gb24gdGhlIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBjYWxsLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYW5kIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIGNoYW5nZS5cblxuQWhhISBgcGh5X2RldmljZV9yZWdpc3RlcmAgaXMgY2FsbGVkIGJ5IGBzZnBfc21fcHJvYmVfcGh5YCBpbiBgZHJpdmVycy9uZXQvcGh5L3NmcC5jYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyB0aGF0IGZ1bmN0aW9uIHRvIGNhbGwgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYCBpbnN0ZWFkLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcywgaXQncyBub3QgYSBjaGFuZ2UgdG8gdGhlIGNvcmUgcmVnaXN0cmF0aW9uIGJ1dCBhbiBhdHRlbXB0IHRvIG1ha2UgaXQgbW9yZSBhdG9taWMuIFJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgc2ZwLmNgIGFuZCBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgbG9jayBhcmUuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2NraW5nIGNvbnRleHQgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhpcyBjaGFuZ2UgaXMgdHJ5aW5nIHRvIGFkZHJlc3MsIGFzIHdlbGwgYXMgdGhlIGltcGFjdCBvbiBvdGhlciBhcmVhcyBvZiB0aGUgc3lzdGVtIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgUEhZIGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NDMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzI6MDUuMDYwNjAzMTUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzE0NzY0ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwX3NtX3Byb2JlX3BoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmM9MjA2Mj1zdGF0aWMgdm9pZCBzZnBfc21fcGh5X2RldGFjaChzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjA2OS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MjA3MDpzdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9waHkoc3RydWN0IHNmcCAqc2ZwLCBpbnQgYWRkciwgYm9vbCBpc19jNDUpXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIwNzEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIyMDA9c3RhdGljIGludCBzZnBfc21fcHJvYmVfZm9yX3BoeShzdHJ1Y3Qgc2ZwICpzZnApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIwOC1cXHRjYXNlIE1ESU9fSTJDX01BUlZFTExfQzIyOlxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjA5OlxcdFxcdGVyciA9IHNmcF9zbV9wcm9iZV9waHkoc2ZwLCBTRlBfUEhZX0FERFIsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxMC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjEyLVxcdGNhc2UgTURJT19JMkNfQzQ1OlxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMjEzOlxcdFxcdGVyciA9IHNmcF9zbV9wcm9iZV9waHkoc2ZwLCBTRlBfUEhZX0FERFIsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMjE0LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIyMTYtXFx0Y2FzZSBNRElPX0kyQ19ST0xMQkFMTDpcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MjIxNzpcXHRcXHRlcnIgPSBzZnBfc21fcHJvYmVfcGh5KHNmcCwgU0ZQX1BIWV9BRERSX1JPTExCQUxMLCB0cnVlKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjIxOC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzI6MDYuNzkyMTEyMzU1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4MDE2Njg2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQ6IFBTRSBDb250cm9sbGVyIGFuZCBQSFkgUmVnaXN0cmF0aW9uIExvZ2ljKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc2xldyBvZiBuZXcgZnVuY3Rpb25zOiBgcGh5X3RyeV9hdHRhY2hfcHNlYCwgYHBoeV9wc2VfYXR0YWNoX29uZWAsIGBwaHlfcHNlX2RldGFjaF9vbmVgLCBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGAsIGBfX3BoeV9kZXZpY2VfcmVnaXN0ZXJgLCBhbmQgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYC4gVGhleSBzZWVtIHNvbGlkOyB0aGV5J3JlIGNsZWFybHkgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLCBidXQgdGhhdCBkb2Vzbid0IG1lYW4gdGhleSdyZSBidWxsZXRwcm9vZi4gR2l2ZW4gdGhhdCB0aGlzIGNvZGUncyBkaWdnaW5nIGludG8gdGhlIGhlYXJ0IG9mIFBIWSByZWdpc3RyYXRpb24gYW5kIFBTRSBjb250cm9sbGVyIG5vdGlmaWVyIGxvZ2ljIOKAkyBwcmltZSByZWFsIGVzdGF0ZSBmb3IgcG90ZW50aWFsIGJ1Z3Mg4oCTIEknZCBzYXkgZnV6emluZyBpcyBhYnNvbHV0ZWx5IHdhcnJhbnRlZC5cblxuTGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBzeW1ib2xzLiBJJ20gZ29pbmcgdG8gZm9jdXMgb246IGBwaHlfdHJ5X2F0dGFjaF9wc2VgLCBgcGh5X3BzZV9hdHRhY2hfb25lYCwgYHBoeV9wc2VfZGV0YWNoX29uZWAsIGBwaHlfcHNlX25vdGlmaWVyX2V2ZW50YCwgYF9fcGh5X2RldmljZV9yZWdpc3RlcmAsIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAsIGBwc2VfcmVnaXN0ZXJfbm90aWZpZXJgLCBgcHNlX3VucmVnaXN0ZXJfbm90aWZpZXJgLCBhbmQgYHBzZV9jb250cm9sX21hdGNoZXNfcGNkZXZgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGtleSBpbnRlcmFjdGlvbnMuXG5cbk5vdyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uIFdlIG5lZWQgYENPTkZJR19QSFlMSUJgIOKAkyB0aGF0J3MgYWxtb3N0IGFsd2F5cyBhIGdpdmVuIOKAkyBhbmQgY3JpdGljYWxseSwgYENPTkZJR19QU0VfQ09OVFJPTExFUmAuIEknbSBzZWVpbmcgZXhwbGljaXQgY2hlY2tzIGZvciBpdCBzY2F0dGVyZWQgdGhyb3VnaG91dCwgc28gaXQncyBlc3NlbnRpYWwgZm9yIGNvbXBpbGF0aW9uLiBKdXN0IHRvIGJlIHN1cmUsIEknbSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCBgZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgcHNlX2NvcmUuY2AgYW5kIGBDT05GSUdfUFNFX0NPTlRST0xMRVJgLiBXZSBjYW4ndCBhZmZvcmQgdG8gd2FzdGUgdGltZSB0YXJnZXRpbmcgc3ltYm9scyB0aGF0IHdvbid0IGJlIGNvbXBpbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc2MiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMjoyMy41OTM3ODM1NTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTg3NTgyNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNlX2NvcmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlLTMtXFxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1BTRV9DT05UUk9MTEVSKSArPSBwc2VfY29yZS5vXFxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlLTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjMyOjI2LjQxMjU0Nzk5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NDY3Mjk5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIE5ldHdvcmsgUEhZIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgd2UgbmVlZCBgQ09ORklHX1BTRV9DT05UUk9MTEVSYCBmb3IgdGhpcy4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IGNlcnRhaW4gd2UgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZSByZWxldmFudCBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhpbmtpbmcgYWJvdXQgaXQsIGBDT05GSUdfTURJT19ERVZJQ0VgIGlzIGZyZXF1ZW50bHkgbGlua2VkIHdpdGggUEhZTElCLCBzbyB0aGF04oCZcyBwcm9iYWJseSBhIGdvb2Qgb25lIHRvIHJldmlldyBhcyB3ZWxsLiBBbmQsIGdpdmVuIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIHJlbGF0ZWQgdG8gYHNmcC5jYCwgSSdtIGdvaW5nIHRvIGRvdWJsZSBjaGVjayBhbmQgaW5jbHVkZSBgQ09ORklHX1NGUGAgZm9yIGdvb2QgbWVhc3VyZS4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHRha2UgYSBwZWVrIGF0IGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgIHRvIGNvbmZpcm0gd2hlcmUgYHNmcC5jYCBpcyBhY3R1YWxseSBiZWluZyBidWlsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMjoyOS4yNTkyODExNDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDI3MzM0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwXFxcXC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL01ha2VmaWxlPTExPWhmaTEteSA6PSBcXFxcXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9NYWtlZmlsZS0zOC1cXHRxcC5vIFxcXFxcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaGZpMS9NYWtlZmlsZTozOTpcXHRxc2ZwLm8gXFxcXFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9oZmkxL01ha2VmaWxlLTQwLVxcdHJjLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19ldGh0b29sLmM9MTc3OD1mYm5pY19nZXRfbW9kdWxlX2VlcHJvbV9ieV9wYWdlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0xNzk5LVxcdGZ3X2NtcGwtXFx1MDAzZXUucXNmcC5sZW5ndGggPSBwYWdlX2RhdGEtXFx1MDAzZWxlbmd0aDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYzoxODAwOlxcdGZ3X2NtcGwtXFx1MDAzZXUucXNmcC5vZmZzZXQgPSBwYWdlX2RhdGEtXFx1MDAzZW9mZnNldDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2V0aHRvb2wuYy0xODAxLVxcdGZ3X2NtcGwtXFx1MDAzZXUucXNmcC5wYWdlID0gcGFnZV9kYXRhLVxcdTAwM2VwYWdlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jPTEyOTQ9c3RhdGljIGludCBmYm5pY19md19wYXJzZV9xc2ZwX3JlYWRfcmVzcCh2b2lkICpvcGFxdWUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTMyOS1cXHRpZiAobGVuZ3RoICE9IGNtcGxfZGF0YS1cXHUwMDNldS5xc2ZwLmxlbmd0aCB8fFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYzoxMzMwOlxcdCAgICBvZmZzZXQgIT0gY21wbF9kYXRhLVxcdTAwM2V1LnFzZnAub2Zmc2V0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jLTEzMzEtXFx0XFx0ZGV2X3dhcm4oZmJkLVxcdTAwM2VkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTMzMy1cXHRcXHRcXHQgb2Zmc2V0LCBsZW5ndGgsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jOjEzMzQ6XFx0XFx0XFx0IGNtcGxfZGF0YS1cXHUwMDNldS5xc2ZwLm9mZnNldCwgY21wbF9kYXRhLVxcdTAwM2V1LnFzZnAubGVuZ3RoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMtMTMzNS1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9NYWtlZmlsZT04PXNwYXJ4NS1zd2l0Y2gteSAgOj0gc3Bhcng1X21haW4ubyBzcGFyeDVfcGFja2V0Lm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9NYWtlZmlsZS0xMy0gc3Bhcng1X3RjX21hdGNoYWxsLm8gc3Bhcng1X3Bvb2wubyBzcGFyeDVfc2RsYi5vIHNwYXJ4NV9wb2xpY2UubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9NYWtlZmlsZToxNDogc3Bhcng1X3BzZnAubyBzcGFyeDVfbWlycm9yLm8gc3Bhcng1X3JlZ3Mub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvTWFrZWZpbGUtMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElORykgKz0gbWlpX3RpbWVzdGFtcGVyLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjUtXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19TRlApXFx0XFx0Kz0gc2ZwLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjctc2ZwLW9iai0kKENPTkZJR19TRlApXFx0XFx0Kz0gc2ZwLWJ1cy5vXFxuLS1cXG5kcml2ZXJzL252bWVtL01ha2VmaWxlPTM0PW52bWVtLWxhbjk2NjItb3RwYy15XFx0XFx0Oj0gbGFuOTY2Mi1vdHBjLm9cXG5kcml2ZXJzL252bWVtL01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19OVk1FTV9MQVlFUlNDQVBFX1NGUClcXHQrPSBudm1lbS1sYXllcnNjYXBlLXNmcC5vXFxuZHJpdmVycy9udm1lbS9NYWtlZmlsZTozNjpudm1lbS1sYXllcnNjYXBlLXNmcC15XFx0XFx0XFx0Oj0gbGF5ZXJzY2FwZS1zZnAub1xcbmRyaXZlcnMvbnZtZW0vTWFrZWZpbGUtMzctb2JqLSQoQ09ORklHX05WTUVNX0xQQzE4WFhfRUVQUk9NKVxcdCs9IG52bWVtX2xwYzE4eHhfZWVwcm9tLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzI6MzEuNzAyMDI0OTc1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDU4MTgzNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGEgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBub3RpY2UgdGhlIHJlcXVpcmVtZW50IGZvciBgQ09ORklHX1NGUGAgaW1wYWN0aW5nIGBzZnAuY2AuIEFscmlnaHQsIGxldCdzIGtlZXAgdGhhdCBpbiBtaW5kLCBhbmQgdGhlbiBsZXQncyBnbyB3aWRlciBhbmQgc2VlIHdoYXQgZWxzZSB0aGlzIHBhdGNoIHRvdWNoZXMuIExvb2tzIGxpa2UgaXQncyBhbHNvIG1ha2luZyBhIG1vZGlmaWNhdGlvbiB0byBgZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jYC4gUmlnaHQsIHRoYXQncyB1c2VmdWwgY29udGV4dC4gTm93LCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IE1ha2VmaWxlLiBTcGVjaWZpY2FsbHksIEknbGwgZ28gbG9vayBhdCBgZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBob3cgYGZ3bm9kZV9tZGlvLmNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBNRElPIHN1YnN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciB2aWV3IG9mIGhvdyB0aGlzIHBhdGNoIGlzIGdvaW5nIHRvIGludGVyYWN0IHdpdGggdGhlIGV4aXN0aW5nIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc1NywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjMyOjQxLjc2MDIxMTE2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0ODE4NjUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmd25vZGVfbWRpb1xcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX0FDUElfTURJTylcXHRcXHQrPSBhY3BpX21kaW8ub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfRldOT0RFX01ESU8pXFx0Kz0gZndub2RlX21kaW8ub1xcbmRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGUtNi1vYmotJChDT05GSUdfT0ZfTURJTylcXHRcXHQrPSBvZl9tZGlvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzI6NDQuMzA4NDAzOTc3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNzEwMzg5NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgUEhZIERyaXZlciBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIGBDT05GSUdfRldOT0RFX01ESU9gIGZsYWcgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZGlyZWN0bHkgdGllZCB0byBgZndub2RlX21kaW8uY2AuIEJ1dCBoYW5nIG9uLi4uIHVwb24gZnVydGhlciByZWZsZWN0aW9uLCBgZndub2RlX21kaW8uY2AgaXMgbW9yZSBvZiBhIGNsZWFudXAgb3IgcmVmaW5lbWVudDsgdGhlICpyZWFsKiBoZWF2eSBsaWZ0aW5nLCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIFBIWSBpbnRlcmFjdGlvbnMsIHJlc2lkZXMgaW4gYHBoeV9kZXZpY2UuY2AgYW5kIGBwc2VfY29yZS5jYC4gQWgsIHJpZ2h0LCBgcGh5X2RldmljZS5jYCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19QSFlMSUJgIGlzIGFjdGl2YXRlZC4gR2l2ZW4gdGhhdCwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIHRoZXJlLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTM3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzM6MDcuMDE4Nzk1MzU2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY2ODkyNzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9kZXZpY2VcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMtXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjQ6bGlicGh5LXlcXHRcXHRcXHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS01LVxcdFxcdFxcdFxcdCAgIGxpbmttb2RlLm8gcGh5X2xpbmtfdG9wb2xvZ3kubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIyOjMzOjA5LjU4NTY5Mjg0OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAwMjAwOTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IG9mIGxpYnBoeS15KipcblxuQWxyaWdodCwgc28gYGxpYnBoeS15YCBpcyBidWlsdCwgd2hpY2ggbGlrZWx5IG1lYW5zIGl0J3MgYSBzdGF0aWMgbGlicmFyeSwgYW5kIHRoYXQncyB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIG5haWwgZG93biBwcmVjaXNlbHkgKndoaWNoKiBvbmUuIEl0J3MgdXN1YWxseSBzdHJhaWdodGZvcndhcmQsIGJ1dCB0aGlzIG9uZSBpcyBhIGJpdCBmdXp6eS4gVGhlIHRleHQgc2F5cyBpdCBkZXBlbmRzIG9uIGBDT05GSUdfUEhZTElCYC4gVGltZSB0byBjb25maXJtIHRoYXQgYW5kIHRoZW4gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGlyZWN0IGRlcGVuZGVuY2llcyBvbiBpdC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbiBkb2VzIGFuZCBpZiBpdCdzIGdvdCBhbnkgc25lYWt5IHNpZGUgZWZmZWN0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTEwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzM6MTMuNzg1OTAwMDUxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODM0NjQzNzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpYnBoeS15XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0zLVxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XFx0XFx0XFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cXHRcXHRcXHRcXHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMzoxNS42MjA1NTA0MThaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc2OTkxNTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNYWtlZmlsZSBOYXZpZ2F0aW9uOiBBIFBIWSBEcml2ZXIncyBMaWtlbHkgTG9jYXRpb24qKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBJJ20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIG9iamVjdCBmaWxlIGZvciB0aGlzIFBIWSBsaWJyYXJ5LCBgbGlicGh5Lm9gLCBpcyBkZWZpbmVkLiBCYXNlZCBvbiBteSBleHBlcmllbmNlIHdpdGgga2VybmVsIGJ1aWxkIHN5c3RlbXMsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBpcyBwcm9iYWJseSB0aGUgTWFrZWZpbGUuIFNwZWNpZmljYWxseSwgSSdkIGFudGljaXBhdGUgc2VlaW5nIGFuIGFzc2lnbm1lbnQgbGlrZSBgb2JqLSQoQ09ORklHX1BIWUxJQikgKz0gbGlicGh5Lm9gLiBUaGUgYG9iai1gIHByZWZpeCBpcyBhIGNsYXNzaWMgaW5kaWNhdG9yIHRoYXQgdGhlIG9iamVjdCBmaWxlJ3MgaW5jbHVzaW9uIGlzIGNvbmRpdGlvbmFsLCBwb3NzaWJseSBjb250cm9sbGVkIGJ5IGEgS2NvbmZpZyBvcHRpb24sIGluIHRoaXMgY2FzZSwgYENPTkZJR19QSFlMSUJgLiBUaGlzIGlzIGEgcHJldHR5IGNvbW1vbiBwYXR0ZXJuIGZvciBtb2R1bGFyIGRyaXZlcnMuIExldCdzIHNlZSBpZiB0aGF0IGFzc3VtcHRpb24gaG9sZHMgdHJ1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3OTIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMzoyNC4zOTA0NjkyMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMDEzMzc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotXFxcXCRcXFxcKENPTkZJR19QSFlMSUJcXFxcKVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTY9bGlicGh5LSQoQ09ORklHX09QRU5fQUxMSUFOQ0VfSEVMUEVSUykgKz0gb3Blbl9hbGxpYW5jZV9oZWxwZXJzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMTctXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19QSFlMSUIpXFx0XFx0Kz0gbWRpb19idXMub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0xOS1vYmotJChDT05GSUdfUEhZTElOSylcXHRcXHQrPSBwaHlsaW5rLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1BIWUxJQilcXHRcXHQrPSBsaWJwaHkub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfUEhZTElCKVxcdFxcdCs9IG1kaW9fZGV2cmVzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1BIWV9QQUNLQUdFKVxcdCs9IHBoeV9wYWNrYWdlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzM6MjYuNzEwNjExMjU4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNDczODc4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBTRSBDb250cm9sbGVyIERyaXZlciBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHX1BIWUxJQmAgaXMgZGVmaW5pdGVseSBlbmFibGVkLCBnb29kLiBJJ3ZlIGdvdCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGluIHBsYXk6IGBQU0VfQ09OVFJPTExFUmAsIGBQSFlMSUJgLCBgU0ZQYCwgYW5kIGBGV05PREVfTURJT2AuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBQU0VfQ09OVFJPTExFUmAgYWxvbmUgaXMgc3VmZmljaWVudCwgb3IgaWYgYSBzcGVjaWZpYyBQU0UgY29udHJvbGxlciBkcml2ZXIgaXMgbmVlZGVkIHRvIGFjdHVhbGx5IGtpY2sgb2ZmIHRoZSByZWdpc3RyYXRpb24gcHJvY2Vzcy5cblxuTG9va2luZyBhdCB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRoZSBjaGFuZ2VzIGNlbnRlciBhcm91bmQgYHBzZV9jb250cm9sbGVyX3JlZ2lzdGVyYCBhbmQgYHBzZV9jb250cm9sbGVyX3VucmVnaXN0ZXJgLiBUaG9zZSBmdW5jdGlvbnMgYXJlIHRyaWdnZXJlZCB3aGVuIGEgc3BlY2lmaWMgUFNFIGNvbnRyb2xsZXIgZHJpdmVyIHByb2Jlcy4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIFBTRSBjb250cm9sbGVyIGRyaXZlcnMgYXJlIGF2YWlsYWJsZS5cblxuTGV0J3Mgc2Vl4oCmIEkndmUgZ290IGBkcml2ZXJzL25ldC9wc2UtcGQvcGQ2OTJ4MC5jYCB3aGljaCwgb2YgY291cnNlLCBjb3JyZXNwb25kcyB0byBgQ09ORklHX1BTRV9QRDY5MlgwYCwgdGhlbiBgZHJpdmVycy9uZXQvcHNlLXBkL3BzZV9yZWd1bGF0b3IuY2Agd2hpY2ggZ29lcyB3aXRoIGBDT05GSUdfUFNFX1JFR1VMQVRPUmAsIGBkcml2ZXJzL25ldC9wc2UtcGQvc2kzNDc0LmNgIGxpbmtlZCB0byBgQ09ORklHX1BTRV9TSTM0NzRgLCBhbmQgYGRyaXZlcnMvbmV0L3BzZS1wZC90cHMyMzg4MS5jYCB0aWVkIHRvIGBDT05GSUdfUFNFX1RQUzIzODgxYC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGVgIGZvciBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIwNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMjozMzozNC44NTgwMDMwNzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzQ4MTAxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVxcXFwkXFxcXChDT05GSUdfUFNFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfS0VYRUNfQ09SRSlcXHQrPSBrZXhlYy5vXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19QU0VSSUVTX0VORVJHWSlcXHQrPSBwc2VyaWVzX2VuZXJneS5vXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlLTE2LVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlPTMyPW9iai0kKENPTkZJR19GQV9EVU1QKVxcdFxcdCs9IHJ0YXMtZmFkdW1wLm9cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGU6MzM6b2JqLSQoQ09ORklHX1BTRVJJRVNfUExQS1MpXFx0Kz0gcGxwa3MubyBwbHBrcy1zeXNmcy5vXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlLTM0LW9iai0kKENPTkZJR19QUENfU0VDVVJFX0JPT1QpXFx0Kz0gcGxwa3Mtc2VjdmFyLm9cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGU6MzU6b2JqLSQoQ09ORklHX1BTRVJJRVNfUExQS1NfU0VEKVxcdCs9IHBscGtzX3NlZF9vcHMub1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZS0zNi1vYmotJChDT05GSUdfU1VTUEVORClcXHRcXHQrPSBzdXNwZW5kLm9cXG4tLVxcbmRyaXZlcnMvY3B1aWRsZS9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfTUlQU19DUFNfQ1BVSURMRSlcXHRcXHQrPSBjcHVpZGxlLWNwcy5vXFxuLS1cXG5kcml2ZXJzL2NwdWlkbGUvTWFrZWZpbGUtMzgtIyBQT1dFUlBDIGRyaXZlcnNcXG5kcml2ZXJzL2NwdWlkbGUvTWFrZWZpbGU6Mzk6b2JqLSQoQ09ORklHX1BTRVJJRVNfQ1BVSURMRSlcXHRcXHQrPSBjcHVpZGxlLXBzZXJpZXMub1xcbmRyaXZlcnMvY3B1aWRsZS9NYWtlZmlsZS00MC1vYmotJChDT05GSUdfUE9XRVJOVl9DUFVJRExFKVxcdFxcdCs9IGNwdWlkbGUtcG93ZXJudi5vXFxuLS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUtMy1cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfUFNFX0NPTlRST0xMRVIpICs9IHBzZV9jb3JlLm9cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUFNFX1JFR1VMQVRPUikgKz0gcHNlX3JlZ3VsYXRvci5vXFxuZHJpdmVycy9uZXQvcHNlLXBkL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX1BTRV9QRDY5MlgwKSArPSBwZDY5MngwLm9cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfUFNFX1NJMzQ3NCkgKz0gc2kzNDc0Lm9cXG5kcml2ZXJzL25ldC9wc2UtcGQvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfUFNFX1RQUzIzODgxKSArPSB0cHMyMzg4MS5vXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlPTE5Mz1vYmotJChDT05GSUdfTUVOX0EyMV9XRFQpICs9IG1lbmEyMV93ZHQub1xcbi0tXFxuZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZS0xOTUtIyBQUEM2NCBBcmNoaXRlY3R1cmVcXG5kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlOjE5NjpvYmotJChDT05GSUdfUFNFUklFU19XRFQpICs9IHBzZXJpZXMtd2R0Lm9cXG5kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlLTE5Ny1vYmotJChDT05GSUdfV0FUQ0hET0dfUlRBUykgKz0gd2RydGFzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzM6MzcuNTkyODE3NTgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTg4ODE2NDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgUFNFIENvbnRyb2xsZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBlbmFibGluZyBgUFNFX1JFR1VMQVRPUmAgaXMgYSBzb2xpZCBtb3ZlLCBhcyBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyLCBtYWtpbmcgaXQgZWFzaWVyIHRvIHByb2JlLiBOb3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLlxuXG5JIHN0YXJ0ZWQgYnkgbGlzdGluZyBrZXkgc3ltYm9scy4gSSBoYWQ6XG5cbiogICBgcGh5X3RyeV9hdHRhY2hfcHNlYFxuKiAgIGBwaHlfcHNlX2F0dGFjaF9vbmVgXG4qICAgYHBoeV9wc2VfZGV0YWNoX29uZWBcbiogICBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGBcbiogICBgX19waHlfZGV2aWNlX3JlZ2lzdGVyYFxuKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGBcbiogICBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYFxuKiAgIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmBcbiogICBgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldmBcblxuVGhlbiBJIG5vdGVkIHRoYXQgYHBoeV9kZXZpY2VfcmVsZWFzZWAgd2FzIG1vZGlmaWVkIHRvIGNhbGwgYHBzZV9jb250cm9sX3B1dGAsIGFuZCBgcGh5X2RldmljZV9yZW1vdmVgIHRvIHJlbW92ZSB0aGUgc2FtZSBjYWxsLCB3aGlsZSBgcGh5X2luaXRgIGFuZCBgcGh5X2V4aXRgIG5vdyBoYW5kbGUgbm90aWZpZXIgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbi4gSSBhbHNvIHNhdyBgc2ZwX3NtX3Byb2JlX3BoeWAgd2FzIGNoYW5nZWQuXG5cblNvIEkgdXBkYXRlZCB0aGUgbGlzdCB0byBpbmNsdWRlIHRoZSBnZW5lcmljIGBwaHlfZGV2aWNlX3JlbGVhc2VgIChldmVuIHRob3VnaCBpdCdzIGdlbmVyaWMsIGl0J3MgcmVsZXZhbnQgaGVyZSkgYW5kIGBzZnBfc21fcHJvYmVfcGh5YC4gQWxzbywgYWx0aG91Z2ggYF9fcGh5X2RldmljZV9yZWdpc3RlcmAgaXMgc3RhdGljLCBzeXprYWxsZXIgY2FuIHN0aWxsIGZvY3VzIG9uIGl0LiBCb3RoIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGAgYW5kIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBhcmUgZXhwb3J0ZWQgYW5kIGhhdmUgYmVlbiBtb2RpZmllZC5cblxuSW4gdGVybXMgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zLCBJJ3ZlIGdvdCB0byBrZWVwIGBQU0VfQ09OVFJPTExFUmAsIGBQU0VfUkVHVUxBVE9SYCwgYFBIWUxJQmAsIGBTRlBgLCBhbmQgYEZXTk9ERV9NRElPYCBpbiBtaW5kLlxuXG5UaGUgcGF0Y2gncyBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIHRoZSBQSFkgcmVnaXN0cmF0aW9uIGxvZ2ljIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbm90aWZpZXIgZm9yIFBTRSBjb250cm9sbGVycy4gSXQncyBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIHN5c3RlbSwgaGFuZGxpbmcgYXN5bmNocm9ub3VzIHJlZ2lzdHJhdGlvbi4gVGhpcyBhZmZlY3RzIGNvcmUgbmV0d29ya2luZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duLCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5JIGRvdWJsZS1jaGVja2VkIGBwaHlfZGV2aWNlX3JlZ2lzdGVyYCBhbmQgYHBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkYDsgdGhleSBhcmUgd3JhcHBlcnMgYXJvdW5kIGBfX3BoeV9kZXZpY2VfcmVnaXN0ZXJgIGFuZCBgcGh5X3RyeV9hdHRhY2hfcHNlYCwgc28gdGhleSdyZSBkZWZpbml0ZWx5IGltcG9ydGFudC5cblxuTGV0IG1lIHJlZmluZSB0aGF0IGxpc3QsIG9uZSBsYXN0IHRpbWUsIHRvIGVuc3VyZSBldmVyeXRoaW5nJ3MgY2xlYXI6XG5cbiogICBgcGh5X3RyeV9hdHRhY2hfcHNlYFxuKiAgIGBwaHlfcHNlX2F0dGFjaF9vbmVgXG4qICAgYHBoeV9wc2VfZGV0YWNoX29uZWBcbiogICBgcGh5X3BzZV9ub3RpZmllcl9ldmVudGBcbiogICBgX19waHlfZGV2aWNlX3JlZ2lzdGVyYFxuKiAgIGBwaHlfZGV2aWNlX3JlZ2lzdGVyX2xvY2tlZGBcbiogICBgcGh5X2RldmljZV9yZWdpc3RlcmBcbiogICBgcHNlX3JlZ2lzdGVyX25vdGlmaWVyYFxuKiAgIGBwc2VfdW5yZWdpc3Rlcl9ub3RpZmllcmBcbiogICBgcHNlX2NvbnRyb2xfbWF0Y2hlc19wY2RldmBcbiogICBgc2ZwX3NtX3Byb2JlX3BoeWBcblxuT2theSwgdGhhdCdzIGV2ZXJ5dGhpbmc7IEknbSBzYXRpc2ZpZWQuIExldCdzIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUwMywiT3V0cHV0VG9rZW5zIjoyNTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjI6MzM6NDguNTgxNjM2ODE3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3MTM1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBTRV9DT05UUk9MTEVSXCIsXG4gICAgXCJQU0VfUkVHVUxBVE9SXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlNGUFwiLFxuICAgIFwiRldOT0RFX01ESU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfdHJ5X2F0dGFjaF9wc2VcIixcbiAgICBcInBoeV9wc2VfYXR0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9kZXRhY2hfb25lXCIsXG4gICAgXCJwaHlfcHNlX25vdGlmaWVyX2V2ZW50XCIsXG4gICAgXCJfX3BoeV9kZXZpY2VfcmVnaXN0ZXJcIixcbiAgICBcInBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwc2VfcmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcInBzZV91bnJlZ2lzdGVyX25vdGlmaWVyXCIsXG4gICAgXCJwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2XCIsXG4gICAgXCJzZnBfc21fcHJvYmVfcGh5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgUEhZIHJlZ2lzdHJhdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIG1lY2hhbmlzbSBmb3IgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzLiBJdCBjaGFuZ2VzIGhvdyBQU0UgY29udHJvbGxlcnMgYXJlIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLCBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIGFwcHJvYWNoIHRoYXQgaGFuZGxlcyBhc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIE1ESU8gYnVzZXMsIFBIWXMsIGFuZCBwbGF0Zm9ybSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBTRV9DT05UUk9MTEVSXCIsXG4gICAgXCJQU0VfUkVHVUxBVE9SXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlNGUFwiLFxuICAgIFwiRldOT0RFX01ESU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfdHJ5X2F0dGFjaF9wc2VcIixcbiAgICBcInBoeV9wc2VfYXR0YWNoX29uZVwiLFxuICAgIFwicGh5X3BzZV9kZXRhY2hfb25lXCIsXG4gICAgXCJwaHlfcHNlX25vdGlmaWVyX2V2ZW50XCIsXG4gICAgXCJfX3BoeV9kZXZpY2VfcmVnaXN0ZXJcIixcbiAgICBcInBoeV9kZXZpY2VfcmVnaXN0ZXJfbG9ja2VkXCIsXG4gICAgXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCIsXG4gICAgXCJwc2VfcmVnaXN0ZXJfbm90aWZpZXJcIixcbiAgICBcInBzZV91bnJlZ2lzdGVyX25vdGlmaWVyXCIsXG4gICAgXCJwc2VfY29udHJvbF9tYXRjaGVzX3BjZGV2XCIsXG4gICAgXCJzZnBfc21fcHJvYmVfcGh5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgUEhZIHJlZ2lzdHJhdGlvbiBsb2dpYyBhbmQgaW50cm9kdWNlcyBhIG5vdGlmaWVyIG1lY2hhbmlzbSBmb3IgUFNFIChQb3dlciBTb3VyY2luZyBFcXVpcG1lbnQpIGNvbnRyb2xsZXJzLiBJdCBjaGFuZ2VzIGhvdyBQU0UgY29udHJvbGxlcnMgYXJlIGF0dGFjaGVkIHRvIFBIWSBkZXZpY2VzLCBtb3ZpbmcgZnJvbSBhIHN5bmNocm9ub3VzIGxvb2t1cCB0byBhIG5vdGlmaWVyLWJhc2VkIGFwcHJvYWNoIHRoYXQgaGFuZGxlcyBhc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHNvZnR3YXJlLWVtdWxhdGVkIE1ESU8gYnVzZXMsIFBIWXMsIGFuZCBwbGF0Zm9ybSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7zbs[1] Phase: Succeeded StartedAt: 2026-06-26 22:33:55 +0000 UTC FinishedAt: 2026-06-26 22:33:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 22:33:55 +0000 UTC FinishedAt: 2026-06-26 22:33:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2] Phase: Succeeded StartedAt: 2026-06-26 22:33:55 +0000 UTC FinishedAt: 2026-06-27 00:36:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-26 22:33:55 +0000 UTC FinishedAt: 2026-06-27 00:36:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-26 22:33:55 +0000 UTC FinishedAt: 2026-06-26 22:34:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-26 22:33:55 +0000 UTC FinishedAt: 2026-06-26 22:34:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr7zbs/series-workflowr7zbs-convert-artifact-3547460379/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-26 22:34:27 +0000 UTC FinishedAt: 2026-06-26 22:59:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-26 22:34:27 +0000 UTC FinishedAt: 2026-06-26 22:59:05 +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:*459159b2-c551-4ca3-9adf-39fd873f1038,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-workflowr7zbs/series-workflowr7zbs-convert-artifact-3547460379/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": "0ca82edf-af9d-4287-a10c-b7b85b114e65", "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-workflowr7zbs/series-workflowr7zbs-build-action-3836182361/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-26 22:34:27 +0000 UTC FinishedAt: 2026-06-26 22:58:54 +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:*459159b2-c551-4ca3-9adf-39fd873f1038,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-workflowr7zbs/series-workflowr7zbs-convert-artifact-3547460379/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": "0ca82edf-af9d-4287-a10c-b7b85b114e65", "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-workflowr7zbs/series-workflowr7zbs-build-action-3836182361/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-26 22:59:05 +0000 UTC FinishedAt: 2026-06-26 22:59:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-26 22:59:05 +0000 UTC FinishedAt: 2026-06-26 22:59:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-26 22:59:05 +0000 UTC FinishedAt: 2026-06-26 22:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-26 22:59:05 +0000 UTC FinishedAt: 2026-06-26 22:59:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr7zbs/series-workflowr7zbs-convert-artifact-2856265586/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-26 22:59:35 +0000 UTC FinishedAt: 2026-06-26 23:01:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-26 22:59:35 +0000 UTC FinishedAt: 2026-06-26 23:01:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0ca82edf-af9d-4287-a10c-b7b85b114e65,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-workflowr7zbs/series-workflowr7zbs-build-action-3836182361/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-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-26 23:01:19 +0000 UTC FinishedAt: 2026-06-26 23:01:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-26 23:01:19 +0000 UTC FinishedAt: 2026-06-26 23:01:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-26 23:01:19 +0000 UTC FinishedAt: 2026-06-26 23:35:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-26 23:01:19 +0000 UTC FinishedAt: 2026-06-26 23:35:08 +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:*459159b2-c551-4ca3-9adf-39fd873f1038,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-workflowr7zbs/series-workflowr7zbs-convert-artifact-2856265586/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": "f1a158cf-9a9e-41e9-9da7-cb5133389f42", "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-workflowr7zbs/series-workflowr7zbs-build-action-3521980166/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-26 23:01:19 +0000 UTC FinishedAt: 2026-06-26 23:34:58 +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:*459159b2-c551-4ca3-9adf-39fd873f1038,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-workflowr7zbs/series-workflowr7zbs-convert-artifact-2856265586/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": "f1a158cf-9a9e-41e9-9da7-cb5133389f42", "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-workflowr7zbs/series-workflowr7zbs-build-action-3521980166/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-26 23:35:08 +0000 UTC FinishedAt: 2026-06-26 23:35:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-26 23:35:08 +0000 UTC FinishedAt: 2026-06-26 23:35:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-26 23:35:08 +0000 UTC FinishedAt: 2026-06-26 23:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-26 23:35:08 +0000 UTC FinishedAt: 2026-06-26 23:38:06 +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:*f1a158cf-9a9e-41e9-9da7-cb5133389f42,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-workflowr7zbs/series-workflowr7zbs-build-action-3521980166/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-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-26 23:38:16 +0000 UTC FinishedAt: 2026-06-27 00:36:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-26 23:38:16 +0000 UTC FinishedAt: 2026-06-27 00:36:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"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:*0ca82edf-af9d-4287-a10c-b7b85b114e65,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f1a158cf-9a9e-41e9-9da7-cb5133389f42,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-workflowr7zbs/series-workflowr7zbs-build-action-3836182361/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-workflowr7zbs/series-workflowr7zbs-build-action-3521980166/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-26 23:38:16 +0000 UTC FinishedAt: 2026-06-26 23:38:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-26 23:38:16 +0000 UTC FinishedAt: 2026-06-26 23:38:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"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-workflowr7zbs/series-workflowr7zbs-convert-artifact-2623447751/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-26 23:38:16 +0000 UTC FinishedAt: 2026-06-26 23:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-26 23:38:16 +0000 UTC FinishedAt: 2026-06-26 23:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-26 23:38:16 +0000 UTC FinishedAt: 2026-06-26 23:38:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-26 23:38:26 +0000 UTC FinishedAt: 2026-06-27 00:36:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7zbs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["phy_try_attach_pse","phy_pse_attach_one","phy_pse_detach_one","phy_pse_notifier_event","__phy_device_register","phy_device_register_locked","phy_device_register","pse_register_notifier","pse_unregister_notifier","pse_control_matches_pcdev","sfp_sm_probe_phy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["PSE_CONTROLLER","PSE_REGULATOR","PHYLIB","SFP","FWNODE_MDIO"],"series_id":"f0856b49-cdc4-440d-91b0-22741fe2e183","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-26 23:38:26 +0000 UTC FinishedAt: 2026-06-27 00:35:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0ca82edf-af9d-4287-a10c-b7b85b114e65,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f1a158cf-9a9e-41e9-9da7-cb5133389f42,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-workflowr7zbs/series-workflowr7zbs-build-action-3836182361/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-workflowr7zbs/series-workflowr7zbs-build-action-3521980166/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-workflowr7zbs/series-workflowr7zbs-convert-artifact-2623447751/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,}