Name: series-workflowhh98s Phase: Succeeded StartedAt: 2026-08-12 05:07:47 +0000 UTC FinishedAt: 2026-08-12 06:41:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[0] Phase: Succeeded StartedAt: 2026-08-12 05:07:47 +0000 UTC FinishedAt: 2026-08-12 05:26:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 05:07:47 +0000 UTC FinishedAt: 2026-08-12 05:26:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCI", "VFIO", "VFIO_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCI", "VFIO", "VFIO_PCI" ], "series_id": "f35822b8-9b69-428c-b485-0c19a12bc0e2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "pci_reset_bus_cond", "pci_reset_function", "pci_reset_function_locked", "pci_try_reset_function", "pci_reset_bus", "vfio_pci_core_ioctl", "vfio_pci_core_disable", "vfio_pci_core_enable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSSYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGNpX3Jlc2V0X2J1c19jb25kJiMzNDssCiAgICAmIzM0O3BjaV9yZXNldF9mdW5jdGlvbiYjMzQ7LAogICAgJiMzNDtwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkJiMzNDssCiAgICAmIzM0O3BjaV90cnlfcmVzZXRfZnVuY3Rpb24mIzM0OywKICAgICYjMzQ7cGNpX3Jlc2V0X2J1cyYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2lvY3RsJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2VuYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgZGV2aWNlIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCBQQ0kgc3Vic3lzdGVtIEFQSXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgbW9kaWZ5IGJ1ZmZlciBhbGxvY2F0aW9ucywgcGFkZGluZywgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgYHZmaW9fZGV2aWNlX2luZm9gIHN0cnVjdHVyZSBtb2RpZmllZCBpbiBgdmZpb19wY2lfaW9jdGxfZ2V0X2luZm9gIGlzIGFscmVhZHkgZnVsbHkgemVyby1pbml0aWFsaXplZCAoYHN0cnVjdCB2ZmlvX2RldmljZV9pbmZvIGluZm8gPSB7fTtgKS5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgbW9kaWZpZXMgUENJIHJlc2V0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IHJlc2V0dGluZyBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gSXQgYWxzbyB1cGRhdGVzIFZGSU8gUENJIGNvcmUgdG8gdXNlIHRoZXNlIG5ldyBjaGVja3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBQQ0kgYW5kIFZGSU8gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0YzhlMDBjYzRiYWU0ZmNiODM4ZDc3ODBhNDU5MWMyZmMxNDhmNjljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDU6MjQ6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuY1xuaW5kZXggNzdiMTdiMTNlZTYxNS4uMGI0ZjEzMzk3ZGEyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2kuY1xuQEAgLTk4LDYgJiM0Mzs5OCw3IEBAIGJvb2wgcGNpX3Jlc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIHtcbiBcdHJldHVybiBkZXYtXHUwMDNlcmVzZXRfbWV0aG9kc1swXSAhPSAwO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X3N1cHBvcnRlZCk7XG4gXG4gI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOU1xuIGludCBwY2lfZG9tYWluc19zdXBwb3J0ZWQgPSAxO1xuQEAgLTUyMjIsMTEgJiM0Mzs1MjIzLDIyIEBAIGludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdFx0cGNpX2Rldl9sb2NrKGJyaWRnZSk7XG4gXG4gXHRwY2lfZGV2X2xvY2soZGV2KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXNldCBvZiBhbiBTUi1JT1YgUEYgbmVjZXNzYXJpbHkgcmVzZXRzIGFueSBhY3RpdmUgVkZzLiAgU3VjaCByZXNldHMgYXJlXG4mIzQzO1x0ICogYmV5b25kIHRoZSBzY29wZSBhZHZlcnRpc2VkIGZvciBwY2lfcmVzZXRfZnVuY3Rpb24oKSBhbmQgdmFyaWFudHMsIHJlZnVzZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocGNpX251bV92ZihkZXYpIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRyYyA9IC1FTk9UVFk7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKGRldik7XG4gXG4gXHRyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpO1xuIFxuIFx0cGNpX2Rldl9yZXN0b3JlKGRldik7XG4mIzQzO3VubG9jazpcbiBcdHBjaV9kZXZfdW5sb2NrKGRldik7XG4gXG4gXHRpZiAoYnJpZGdlKVxuQEAgLTUyNjQsNiAmIzQzOzUyNzYsOSBAQCBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKGRldikpXG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFxuJiM0MztcdGlmIChwY2lfbnVtX3ZmKGRldikgXHUwMDNlIDApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1RUWTtcbiYjNDM7XG4gXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcbiBcbiBcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XG5AQCAtNTI5MCw2ICYjNDM7NTMwNSwxMSBAQCBpbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aWYgKCFwY2lfZGV2X3RyeWxvY2soZGV2KSlcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4gXG4mIzQzO1x0aWYgKHBjaV9udW1fdmYoZGV2KSBcdTAwM2UgMCkge1xuJiM0MztcdFx0cGNpX2Rldl91bmxvY2soZGV2KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PVFRZO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcbiBcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XG4gXHRwY2lfZGV2X3Jlc3RvcmUoZGV2KTtcbkBAIC01NTQ4LDkgJiM0Mzs1NTY4LDM2IEBAIGludCBwY2lfcHJvYmVfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wcm9iZV9yZXNldF9zbG90KTtcbiBcbiYjNDM7LyogQ2FsbCBAY2Igb24gZXZlcnkgZGV2aWNlIGEgc2xvdCBvciBidXMgcmVzZXQgYWZmZWN0cywgc3RvcHBpbmcgb24gZXJyb3IuICovXG4mIzQzO3N0YXRpYyBpbnQgcGNpX3dhbGtfcmVzZXRfY2hlY2soc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9zbG90ICpzbG90LFxuJiM0MztcdFx0XHRcdGludCAoKmNiKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSxcbiYjNDM7XHRcdFx0XHR2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKmRldjtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBcdTAwMjZidXMtXHUwMDNlZGV2aWNlcywgYnVzX2xpc3QpIHtcbiYjNDM7XHRcdGlmIChzbG90IFx1MDAyNlx1MDAyNiAoIWRldi1cdTAwM2VzbG90IHx8IGRldi1cdTAwM2VzbG90ICE9IHNsb3QpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJjID0gY2IoZGV2LCBkYXRhKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcdFx0aWYgKGRldi1cdTAwM2VzdWJvcmRpbmF0ZSkge1xuJiM0MztcdFx0XHRyYyA9IHBjaV93YWxrX3Jlc2V0X2NoZWNrKGRldi1cdTAwM2VzdWJvcmRpbmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBOVUxMLCBjYiwgZGF0YSk7XG4mIzQzO1x0XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBwY2lfdHJ5X3Jlc2V0X3Nsb3QgLSBUcnkgdG8gcmVzZXQgYSBQQ0kgc2xvdFxuICAqIEBzbG90OiBQQ0kgc2xvdCB0byByZXNldFxuJiM0MzsgKiBAY2hlY2s6IG9wdGlvbmFsIHBlci1kZXZpY2UgY2FsbGJhY2sgdGhhdCBjYW4gYWJvcnQgdGhlIHJlc2V0XG4mIzQzOyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgZm9yIEBjaGVja1xuICAqXG4gICogQSBQQ0kgYnVzIG1heSBob3N0IG11bHRpcGxlIHNsb3RzLCBlYWNoIHNsb3QgbWF5IHN1cHBvcnQgYSByZXNldCBtZWNoYW5pc21cbiAgKiBpbmRlcGVuZGVudCBvZiBvdGhlciBzbG90cy4gIEZvciBpbnN0YW5jZSwgc29tZSBzbG90cyBtYXkgc3VwcG9ydCBzbG90IHBvd2VyXG5AQCAtNTU2Myw3ICYjNDM7NTYxMCw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wcm9iZV9yZXNldF9zbG90KTtcbiAgKlxuICAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBzbG90IGNhbm5vdCBiZSBsb2NrZWRcbiAgKi9cbi1zdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpXG4mIzQzO3N0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCxcbiYjNDM7XHRcdFx0ICAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxuJiM0MztcdFx0XHQgICAgICB2b2lkICpkYXRhKVxuIHtcbiBcdGludCByYztcbiBcbkBAIC01NTcyLDEwICYjNDM7NTYyMSwxNCBAQCBzdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpXG4gXHRcdHJldHVybiByYztcbiBcbiBcdGlmIChwY2lfc2xvdF90cnlsb2NrKHNsb3QpKSB7XG4tXHRcdHBjaV9zbG90X3NhdmVfYW5kX2Rpc2FibGVfbG9ja2VkKHNsb3QpO1xuLVx0XHRtaWdodF9zbGVlcCgpO1xuLVx0XHRyYyA9IHBjaV9yZXNldF9ob3RwbHVnX3Nsb3Qoc2xvdC1cdTAwM2Vob3RwbHVnLCBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xuLVx0XHRwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTtcbiYjNDM7XHRcdHJjID0gY2hlY2sgPyBwY2lfd2Fsa19yZXNldF9jaGVjayhzbG90LVx1MDAzZWJ1cywgc2xvdCwgY2hlY2ssIGRhdGEpIDogMDtcbiYjNDM7XHRcdGlmICghcmMpIHtcbiYjNDM7XHRcdFx0cGNpX3Nsb3Rfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoc2xvdCk7XG4mIzQzO1x0XHRcdG1pZ2h0X3NsZWVwKCk7XG4mIzQzO1x0XHRcdHJjID0gcGNpX3Jlc2V0X2hvdHBsdWdfc2xvdChzbG90LVx1MDAzZWhvdHBsdWcsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xuJiM0MztcdFx0XHRwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTtcbiYjNDM7XHRcdH1cbiBcdFx0cGNpX3Nsb3RfdW5sb2NrKHNsb3QpO1xuIFx0fSBlbHNlXG4gXHRcdHJjID0gLUVBR0FJTjtcbkBAIC01NjA3LDEwICYjNDM7NTY2MCwxNCBAQCBzdGF0aWMgaW50IHBjaV9idXNfcmVzZXQoc3RydWN0IHBjaV9idXMgKmJ1cywgYm9vbCBwcm9iZSlcbiAvKipcbiAgKiBwY2lfdHJ5X3Jlc2V0X2J1cyAtIFRyeSB0byByZXNldCBhIFBDSSBidXNcbiAgKiBAYnVzOiB0b3AgbGV2ZWwgUENJIGJ1cyB0byByZXNldFxuJiM0MzsgKiBAY2hlY2s6IG9wdGlvbmFsIHBlci1kZXZpY2UgY2FsbGJhY2sgdGhhdCBjYW4gYWJvcnQgdGhlIHJlc2V0XG4mIzQzOyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgZm9yIEBjaGVja1xuICAqXG4gICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIGJ1cyBjYW5ub3QgYmUgbG9ja2VkXG4gICovXG4tc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKVxuJiM0MztzdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsXG4mIzQzO1x0XHRcdCAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxuJiM0MztcdFx0XHQgICAgIHZvaWQgKmRhdGEpXG4ge1xuIFx0aW50IHJjO1xuIFxuQEAgLTU2MTksMTAgJiM0Mzs1Njc2LDEzIEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuIFx0aWYgKHBjaV9idXNfdHJ5bG9jayhidXMpKSB7XG4tXHRcdHBjaV9idXNfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoYnVzKTtcbi1cdFx0bWlnaHRfc2xlZXAoKTtcbi1cdFx0cmMgPSBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoYnVzLVx1MDAzZXNlbGYpO1xuLVx0XHRwY2lfYnVzX3Jlc3RvcmVfbG9ja2VkKGJ1cyk7XG4mIzQzO1x0XHRyYyA9IGNoZWNrID8gcGNpX3dhbGtfcmVzZXRfY2hlY2soYnVzLCBOVUxMLCBjaGVjaywgZGF0YSkgOiAwO1xuJiM0MztcdFx0aWYgKCFyYykge1xuJiM0MztcdFx0XHRwY2lfYnVzX3NhdmVfYW5kX2Rpc2FibGVfbG9ja2VkKGJ1cyk7XG4mIzQzO1x0XHRcdG1pZ2h0X3NsZWVwKCk7XG4mIzQzO1x0XHRcdHJjID0gcGNpX2JyaWRnZV9zZWNvbmRhcnlfYnVzX3Jlc2V0KGJ1cy1cdTAwM2VzZWxmKTtcbiYjNDM7XHRcdFx0cGNpX2J1c19yZXN0b3JlX2xvY2tlZChidXMpO1xuJiM0MztcdFx0fVxuIFx0XHRwY2lfYnVzX3VubG9jayhidXMpO1xuIFx0fSBlbHNlXG4gXHRcdHJjID0gLUVBR0FJTjtcbkBAIC01NjYxLDcgJiM0Mzs1NzIxLDcgQEAgc3RhdGljIGludCBwY2lfcmVzZXRfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsIGJvb2wgcmVzdG9yZSlcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xvdCwgXHUwMDI2YnVzLVx1MDAzZXNsb3RzLCBsaXN0KSB7XG4gXHRcdGlmIChyZXN0b3JlKVxuLVx0XHRcdHJldCA9IHBjaV90cnlfcmVzZXRfc2xvdChzbG90KTtcbiYjNDM7XHRcdFx0cmV0ID0gcGNpX3RyeV9yZXNldF9zbG90KHNsb3QsIE5VTEwsIE5VTEwpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmV0ID0gcGNpX3Nsb3RfcmVzZXQoc2xvdCwgUENJX1JFU0VUX0RPX1JFU0VUKTtcbiBcbkBAIC01Njc1LDcgJiM0Mzs1NzM1LDcgQEAgc3RhdGljIGludCBwY2lfcmVzZXRfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsIGJvb2wgcmVzdG9yZSlcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwY2lfc2xvdF9tdXRleCk7XG4gXG4gXHRpZiAocmVzdG9yZSlcbi1cdFx0cmV0dXJuIHBjaV90cnlfcmVzZXRfYnVzKGJ1cyk7XG4mIzQzO1x0XHRyZXR1cm4gcGNpX3RyeV9yZXNldF9idXMoYnVzLCBOVUxMLCBOVUxMKTtcbiBcdHJldHVybiBwY2lfYnVzX3Jlc2V0KGJyaWRnZS1cdTAwM2VzdWJvcmRpbmF0ZSwgUENJX1JFU0VUX0RPX1JFU0VUKTtcbiB9XG4gXG5AQCAtNTcwNSwxNiAmIzQzOzU3NjUsNDMgQEAgaW50IHBjaV9wcm9iZV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cylcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X2J1cyk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBwY2lfcmVzZXRfYnVzX2NvbmQgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRoZSBzbG90IG9yIGJ1cyBjb250YWluaW5nIGEgZGV2aWNlXG4mIzQzOyAqIEBwZGV2OiB0b3AgbGV2ZWwgUENJIGRldmljZSB0byByZXNldCB2aWEgc2xvdC9idXNcbiYjNDM7ICogQGNoZWNrOiBvcHRpb25hbCBjYWxsYmFjayBpbnZva2VkIG9uIGVhY2ggYWZmZWN0ZWQgZGV2aWNlIGJlZm9yZSB0aGUgcmVzZXRcbiYjNDM7ICogQGRhdGE6IG9wYXF1ZSBhcmd1bWVudCBwYXNzZWQgdG8gQGNoZWNrXG4mIzQzOyAqXG4mIzQzOyAqIFJlc2V0IHRoZSBzbG90IG9yIGJ1cyBjb250YWluaW5nIEBwZGV2LiAgT25jZSB0aGUgZW50aXJlIHBoeXNpY2FsIGJ1cy9zbG90XG4mIzQzOyAqIGhpZXJhcmNoeSBpcyBsb2NrZWQsIEBjaGVjayAoaWYgbm90IE5VTEwpIGlzIGNhbGxlZCBvbiBlYWNoIG9mIHRob3NlIGxvY2tlZFxuJiM0MzsgKiBkZXZpY2VzLiAgQSBub256ZXJvIHJldHVybiBhYm9ydHMgdGhlIHJlc2V0IGFuZCBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLFxuJiM0MzsgKiBvdGhlcndpc2UgdGhlIHJlc2V0IHByb2NlZWRzLlxuJiM0MzsgKlxuJiM0MzsgKiBOQi4gQGNoZWNrIHJ1bnMgd2l0aCB0aGUgZnVsbCBzZXQgb2YgZGV2aWNlX2xvY2tzIG5vdGVkIGFib3ZlIGhlbGQ7IGNhbGxiYWNrc1xuJiM0MzsgKiBtdXN0IHRha2UgdGhlc2UgbG9ja2luZyBzZW1hbnRpY3MgaW50byBhY2NvdW50LiAgVXNlIE5VTEwgdG8gcGVyZm9ybSBhblxuJiM0MzsgKiB1bmNvbmRpdGlvbmFsIHJlc2V0LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVOT1RUWSBpZiBAcGRldiBpcyBub3QgcmVzZXR0YWJsZSwgLUVBR0FJTiBpZiB0aGVcbiYjNDM7ICogZGV2aWNlcyBjYW5ub3QgYmUgbG9ja2VkLCBvciB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgQGNoZWNrLlxuJiM0MzsgKi9cbiYjNDM7aW50IHBjaV9yZXNldF9idXNfY29uZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiYjNDM7XHRcdCAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4mIzQzO1x0XHQgICAgICAgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhcGNpX3Byb2JlX3Jlc2V0X3Nsb3QocGRldi1cdTAwM2VzbG90KSA/XG4mIzQzO1x0XHRwY2lfdHJ5X3Jlc2V0X3Nsb3QocGRldi1cdTAwM2VzbG90LCBjaGVjaywgZGF0YSkgOlxuJiM0MztcdFx0cGNpX3RyeV9yZXNldF9idXMocGRldi1cdTAwM2VidXMsIGNoZWNrLCBkYXRhKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfYnVzX2NvbmQpO1xuJiM0MztcbiAvKipcbiAgKiBwY2lfcmVzZXRfYnVzIC0gVHJ5IHRvIHJlc2V0IGEgUENJIGJ1c1xuICAqIEBwZGV2OiB0b3AgbGV2ZWwgUENJIGRldmljZSB0byByZXNldCB2aWEgc2xvdC9idXNcbiAgKlxuLSAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBidXMgY2Fubm90IGJlIGxvY2tlZFxuJiM0MzsgKiBTYW1lIGFzIGFib3ZlIHdpdGhvdXQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLlxuICAqL1xuIGludCBwY2lfcmVzZXRfYnVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbi1cdHJldHVybiAoIXBjaV9wcm9iZV9yZXNldF9zbG90KHBkZXYtXHUwMDNlc2xvdCkpID9cbi1cdCAgICBwY2lfdHJ5X3Jlc2V0X3Nsb3QocGRldi1cdTAwM2VzbG90KSA6IHBjaV90cnlfcmVzZXRfYnVzKHBkZXYtXHUwMDNlYnVzKTtcbiYjNDM7XHRyZXR1cm4gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIE5VTEwsIE5VTEwpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfYnVzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oXG5pbmRleCA0NDY5ZTFhNzdmM2MxLi40MTZmZDZiNzRhYmU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS5oXG5AQCAtMjMwLDcgJiM0MzsyMzAsNiBAQCBlbnVtIHBjaV9tbWFwX2FwaSB7XG4gaW50IHBjaV9tbWFwX2ZpdHMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCByZXNubywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFpLFxuIFx0XHQgIGVudW0gcGNpX21tYXBfYXBpIG1tYXBfYXBpKTtcbiBcbi1ib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gdm9pZCBwY2lfaW5pdF9yZXNldF9tZXRob2RzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaV9idXNfZXJyb3JfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuaW5kZXggM2YxMWE5NjI0YjljMC4uOGU0MjM0MmQ1NmQzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuQEAgLTYwOSw3ICYjNDM7NjA5LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdGlmIChyZXQgPT0gLUVBR0FJTilcbiBcdFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XG4gXG4tXHR2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzID0gIXJldDtcbiBcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFx0dmRldi1cdTAwM2VwY2lfc2F2ZWRfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7XG4gXHRpZiAoIXZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKVxuQEAgLTc2Niw3ICYjNDM7NzY1LDcgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0aWYgKHBjaV9sb2FkX2FuZF9mcmVlX3NhdmVkX3N0YXRlKHBkZXYsIFx1MDAyNnZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKSkge1xuIFx0XHRwY2lfaW5mbyhwZGV2LCBcJiMzNDslczogQ291bGRuJiMzOTt0IHJlbG9hZCBzYXZlZCBzdGF0ZVxcblwmIzM0OywgX19mdW5jX18pO1xuIFxuLVx0XHRpZiAoIXZkZXYtXHUwMDNlcmVzZXRfd29ya3MpXG4mIzQzO1x0XHRpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQocGRldikpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4gXHRcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuQEAgLTc4NSwxMiAmIzQzOzc4NCwxNCBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHQgKiBXZSBjYW4gbm90IHVzZSB0aGUgXCYjMzQ7dHJ5XCYjMzQ7IHJlc2V0IGludGVyZmFjZSBoZXJlLCB3aGljaCB3aWxsXG4gXHQgKiBvdmVyd3JpdGUgdGhlIHByZXZpb3VzbHkgcmVzdG9yZWQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi5cbiBcdCAqL1xuLVx0aWYgKHZkZXYtXHUwMDNlcmVzZXRfd29ya3MpIHtcbiYjNDM7XHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KSkge1xuIFx0XHRicmlkZ2UgPSBwY2lfdXBzdHJlYW1fYnJpZGdlKHBkZXYpO1xuIFx0XHRpZiAoYnJpZGdlIFx1MDAyNlx1MDAyNiAhcGNpX2Rldl90cnlsb2NrKGJyaWRnZSkpXG4gXHRcdFx0Z290byBvdXRfcmVzdG9yZV9zdGF0ZTtcbiBcdFx0aWYgKHBjaV9kZXZfdHJ5bG9jayhwZGV2KSkge1xuLVx0XHRcdGlmICghX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHBkZXYpKVxuJiM0MztcdFx0XHQvKiBFbmZvcmNlIGZ1bmN0aW9uIHNjb3BlIHVuZGVyIGxvY2sgZm9yIFNSLUlPViBQRnMgKi9cbiYjNDM7XHRcdFx0aWYgKCFwY2lfbnVtX3ZmKHBkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIV9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KSlcbiBcdFx0XHRcdHZkZXYtXHUwMDNlbmVlZHNfcmVzZXQgPSBmYWxzZTtcbiBcdFx0XHRwY2lfZGV2X3VubG9jayhwZGV2KTtcbiBcdFx0fVxuQEAgLTg5Miw2ICYjNDM7ODkzLDE3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfY291bnRfZGV2cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUENJIHdhbGsgY2FsbGJhY2sgdG8gY2hlY2sgZm9yIFNSLUlPViBQRnMgd2l0aCBhY3RpdmUgVkZzLiAgVkZzIGFyZSBub3RcbiYjNDM7ICogZW51bWVyYXRlZCB3aGVuIGRldGVybWluaW5nIGFmZmVjdGVkIGRldmljZXMgYW5kIG1heSBiZSBvd25lZCBieSBzZXBhcmF0ZVxuJiM0MzsgKiB1c2Vyc3BhY2UgcHJvY2Vzc2VzIGZyb20gdGhlIFBGLiAgSXQmIzM5O3MgdGhlcmVmb3JlIHRoZSB1c2VyJiMzOTtzIHJlc3BvbnNpYmlsaXR5XG4mIzQzOyAqIHRvIHRlYXJkb3duIFZGcyBmb3IgYW55IGFmZmVjdGVkIFBGIGJlZm9yZSBwZXJmb3JtaW5nIGEgaG90LXJlc2V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwY2lfbnVtX3ZmKHBkZXYpID8gLUVCVVNZIDogMDtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3QgdmZpb19wY2lfZmlsbF9pbmZvIHtcbiBcdHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldjtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kZXBlbmRlbnRfZGV2aWNlICpkZXZpY2VzO1xuQEAgLTEwODUsNyAmIzQzOzEwOTcsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcbiBcdGluZm8uZmxhZ3MgPSBWRklPX0RFVklDRV9GTEFHU19QQ0k7XG4gXG4tXHRpZiAodmRldi1cdTAwM2VyZXNldF93b3JrcylcbiYjNDM7XHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYpKVxuIFx0XHRpbmZvLmZsYWdzIHw9IFZGSU9fREVWSUNFX0ZMQUdTX1JFU0VUO1xuIFxuIFx0aW5mby5udW1fcmVnaW9ucyA9IFZGSU9fUENJX05VTV9SRUdJT05TICYjNDM7IHZkZXYtXHUwMDNlbnVtX3JlZ2lvbnM7XG5AQCAtMTMxNyw3ICYjNDM7MTMyOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoIXZkZXYtXHUwMDNlcmVzZXRfd29ya3MpXG4mIzQzO1x0aWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xuQEAgLTI1OTYsNyAmIzQzOzI2MDgsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZkZXYsIFx1MDAyNmRldl9zZXQtXHUwMDNlZGV2aWNlX2xpc3QsIHZkZXYuZGV2X3NldF9saXN0KVxuIFx0XHR2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTtcbiBcbi1cdHJldCA9IHBjaV9yZXNldF9idXMocGRldik7XG4mIzQzO1x0cmV0ID0gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIHZmaW9fcGNpX2Rldl9oYXNfdmZzLCBOVUxMKTtcbiBcbiBcdHZkZXYgPSBsaXN0X2xhc3RfZW50cnkoXHUwMDI2ZGV2X3NldC1cdTAwM2VkZXZpY2VfbGlzdCxcbiBcdFx0XHQgICAgICAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlLCB2ZGV2LmRldl9zZXRfbGlzdCk7XG5AQCAtMjY1OSw3ICYjNDM7MjY3MSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXG4gXHRpZiAodmZpb19wY2lfZGV2X3NldF9wbV9ydW50aW1lX2dldChkZXZfc2V0KSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFwY2lfcmVzZXRfYnVzKHBkZXYpKVxuJiM0MztcdGlmICghcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIHZmaW9fcGNpX2Rldl9oYXNfdmZzLCBOVUxMKSlcbiBcdFx0cmVzZXRfZG9uZSA9IHRydWU7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgXHUwMDI2ZGV2X3NldC1cdTAwM2VkZXZpY2VfbGlzdCwgdmRldi5kZXZfc2V0X2xpc3QpIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxuaW5kZXggNjRiMzA4YjZlNjFjMS4uNGRlMjFlNmFjNTM4ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC0xNDc0LDEyICYjNDM7MTQ3NCwxNiBAQCB2b2lkIHBjaWVfcHJpbnRfbGlua19zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaWVfcmVzZXRfZmxyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgcHJvYmUpO1xuIGludCBwY2llX2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuJiM0Mztib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3Byb2JlX3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KTtcbiBpbnQgcGNpX3Byb2JlX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTtcbiBpbnQgcGNpX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjNDM7aW50IHBjaV9yZXNldF9idXNfY29uZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiYjNDM7XHRcdCAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4mIzQzO1x0XHQgICAgICAgdm9pZCAqZGF0YSk7XG4gdm9pZCBwY2lfcmVzZXRfc2Vjb25kYXJ5X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB2b2lkIHBjaWJpb3NfcmVzZXRfc2Vjb25kYXJ5X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB2b2lkIHBjaV91cGRhdGVfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5pbmRleCA5YTE2NzRjMTUyYWEyLi42ZmI1OTllYzI5MTkxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5AQCAtMTIxLDcgJiM0MzsxMjEsNiBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xuIFx0LyogRmxhZ3Mgb25seSBtb2RpZmllZCBvbiBzZXR1cC9yZWxlYXNlIC0gYml0ZmllbGQgb2sgKi9cbiBcdGJvb2xcdFx0XHRoYXNfZHluX21zaXg6MTtcbiBcdGJvb2xcdFx0XHRwY2lfMl8zOjE7XG4tXHRib29sXHRcdFx0cmVzZXRfd29ya3M6MTtcbiBcdGJvb2xcdFx0XHRleHRlbmRlZF9jYXBzOjE7XG4gXHRib29sXHRcdFx0aGFzX3ZnYToxO1xuIFx0Ym9vbFx0XHRcdG5vaW50eDoxO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlLi44NjAzOTU5ZjE3MzUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuQEAgLTc3Miw2ICYjNDM7NzcyLDkgQEAgc3RydWN0IHZmaW9fcGNpX2hvdF9yZXNldF9pbmZvIHtcbiAgKiBNaXhlZCB1c2FnZSBvZiBsZWdhY3kgZ3JvdXBzIGFuZCBjZGV2cyBhY3Jvc3MgdGhlIHNldCBvZiBhZmZlY3RlZFxuICAqIGRldmljZXMgaXMgbm90IHN1cHBvcnRlZC5cbiAgKlxuJiM0MzsgKiBIb3QgcmVzZXQgb2YgU1ItSU9WIFBGcyB3aXRoIGFjdGl2ZSBWRnMgaXMgbm90IHN1cHBvcnRlZCwgU1ItSU9WXG4mIzQzOyAqIHNob3VsZCBmaXJzdCBiZSBkaXNhYmxlZCBvbiBhbnkgYWZmZWN0ZWQgUEYuXG4mIzQzOyAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxuICAqL1xuIHN0cnVjdCB2ZmlvX3BjaV9ob3RfcmVzZXQge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQ0kmIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BjaV9yZXNldF9idXNfY29uZCYjMzQ7LAogICAgJiMzNDtwY2lfcmVzZXRfZnVuY3Rpb24mIzM0OywKICAgICYjMzQ7cGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uJiMzNDssCiAgICAmIzM0O3BjaV9yZXNldF9idXMmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9pb2N0bCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9lbmFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgbW9kaWZpZXMgUENJIHJlc2V0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IHJlc2V0dGluZyBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gSXQgYWxzbyB1cGRhdGVzIFZGSU8gUENJIGNvcmUgdG8gdXNlIHRoZXNlIG5ldyBjaGVja3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBQQ0kgYW5kIFZGSU8gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YzhlMDBjYzRiYWU0ZmNiODM4ZDc3ODBhNDU5MWMyZmMxNDhmNjljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDU6MjQ6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IDc3YjE3YjEzZWU2MTUuLjBiNGYxMzM5N2RhMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC05OCw2ICYjNDM7OTgsNyBAQCBib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlyZXR1cm4gZGV2LSZndDtyZXNldF9tZXRob2RzWzBdICE9IDA7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X3N1cHBvcnRlZCk7CiAKICNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlMKIGludCBwY2lfZG9tYWluc19zdXBwb3J0ZWQgPSAxOwpAQCAtNTIyMiwxMSAmIzQzOzUyMjMsMjIgQEAgaW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogCQlwY2lfZGV2X2xvY2soYnJpZGdlKTsKIAogCXBjaV9kZXZfbG9jayhkZXYpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZXNldCBvZiBhbiBTUi1JT1YgUEYgbmVjZXNzYXJpbHkgcmVzZXRzIGFueSBhY3RpdmUgVkZzLiAgU3VjaCByZXNldHMgYXJlCiYjNDM7CSAqIGJleW9uZCB0aGUgc2NvcGUgYWR2ZXJ0aXNlZCBmb3IgcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgYW5kIHZhcmlhbnRzLCByZWZ1c2UuCiYjNDM7CSAqLwomIzQzOwlpZiAocGNpX251bV92ZihkZXYpICZndDsgMCkgewomIzQzOwkJcmMgPSAtRU5PVFRZOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKIAlwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTsKIAogCXJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7CiAKIAlwY2lfZGV2X3Jlc3RvcmUoZGV2KTsKJiM0Mzt1bmxvY2s6CiAJcGNpX2Rldl91bmxvY2soZGV2KTsKIAogCWlmIChicmlkZ2UpCkBAIC01MjY0LDYgJiM0Mzs1Mjc2LDkgQEAgaW50IHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoc3RydWN0IHBjaV9kZXYgKmRldikKIAlpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQoZGV2KSkKIAkJcmV0dXJuIC1FTk9UVFk7CiAKJiM0MzsJaWYgKHBjaV9udW1fdmYoZGV2KSAmZ3Q7IDApCiYjNDM7CQlyZXR1cm4gLUVOT1RUWTsKJiM0MzsKIAlwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTsKIAogCXJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7CkBAIC01MjkwLDYgJiM0Mzs1MzA1LDExIEBAIGludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJaWYgKCFwY2lfZGV2X3RyeWxvY2soZGV2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKJiM0MzsJaWYgKHBjaV9udW1fdmYoZGV2KSAmZ3Q7IDApIHsKJiM0MzsJCXBjaV9kZXZfdW5sb2NrKGRldik7CiYjNDM7CQlyZXR1cm4gLUVOT1RUWTsKJiM0MzsJfQomIzQzOwogCXBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZShkZXYpOwogCXJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7CiAJcGNpX2Rldl9yZXN0b3JlKGRldik7CkBAIC01NTQ4LDkgJiM0Mzs1NTY4LDM2IEBAIGludCBwY2lfcHJvYmVfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfc2xvdCk7CiAKJiM0MzsvKiBDYWxsIEBjYiBvbiBldmVyeSBkZXZpY2UgYSBzbG90IG9yIGJ1cyByZXNldCBhZmZlY3RzLCBzdG9wcGluZyBvbiBlcnJvci4gKi8KJiM0MztzdGF0aWMgaW50IHBjaV93YWxrX3Jlc2V0X2NoZWNrKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfc2xvdCAqc2xvdCwKJiM0MzsJCQkJaW50ICgqY2IpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLAomIzQzOwkJCQl2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXYgKmRldjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmFtcDtidXMtJmd0O2RldmljZXMsIGJ1c19saXN0KSB7CiYjNDM7CQlpZiAoc2xvdCAmYW1wOyZhbXA7ICghZGV2LSZndDtzbG90IHx8IGRldi0mZ3Q7c2xvdCAhPSBzbG90KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJjID0gY2IoZGV2LCBkYXRhKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CQlpZiAoZGV2LSZndDtzdWJvcmRpbmF0ZSkgewomIzQzOwkJCXJjID0gcGNpX3dhbGtfcmVzZXRfY2hlY2soZGV2LSZndDtzdWJvcmRpbmF0ZSwKJiM0MzsJCQkJCQkgIE5VTEwsIGNiLCBkYXRhKTsKJiM0MzsJCQlpZiAocmMpCiYjNDM7CQkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHBjaV90cnlfcmVzZXRfc2xvdCAtIFRyeSB0byByZXNldCBhIFBDSSBzbG90CiAgKiBAc2xvdDogUENJIHNsb3QgdG8gcmVzZXQKJiM0MzsgKiBAY2hlY2s6IG9wdGlvbmFsIHBlci1kZXZpY2UgY2FsbGJhY2sgdGhhdCBjYW4gYWJvcnQgdGhlIHJlc2V0CiYjNDM7ICogQGRhdGE6IG9wYXF1ZSBhcmd1bWVudCBmb3IgQGNoZWNrCiAgKgogICogQSBQQ0kgYnVzIG1heSBob3N0IG11bHRpcGxlIHNsb3RzLCBlYWNoIHNsb3QgbWF5IHN1cHBvcnQgYSByZXNldCBtZWNoYW5pc20KICAqIGluZGVwZW5kZW50IG9mIG90aGVyIHNsb3RzLiAgRm9yIGluc3RhbmNlLCBzb21lIHNsb3RzIG1heSBzdXBwb3J0IHNsb3QgcG93ZXIKQEAgLTU1NjMsNyAmIzQzOzU2MTAsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfc2xvdCk7CiAgKgogICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIHNsb3QgY2Fubm90IGJlIGxvY2tlZAogICovCi1zdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpCiYjNDM7c3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90LAomIzQzOwkJCSAgICAgIGludCAoKmNoZWNrKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSwKJiM0MzsJCQkgICAgICB2b2lkICpkYXRhKQogewogCWludCByYzsKIApAQCAtNTU3MiwxMCAmIzQzOzU2MjEsMTQgQEAgc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KQogCQlyZXR1cm4gcmM7CiAKIAlpZiAocGNpX3Nsb3RfdHJ5bG9jayhzbG90KSkgewotCQlwY2lfc2xvdF9zYXZlX2FuZF9kaXNhYmxlX2xvY2tlZChzbG90KTsKLQkJbWlnaHRfc2xlZXAoKTsKLQkJcmMgPSBwY2lfcmVzZXRfaG90cGx1Z19zbG90KHNsb3QtJmd0O2hvdHBsdWcsIFBDSV9SRVNFVF9ET19SRVNFVCk7Ci0JCXBjaV9zbG90X3Jlc3RvcmVfbG9ja2VkKHNsb3QpOwomIzQzOwkJcmMgPSBjaGVjayA/IHBjaV93YWxrX3Jlc2V0X2NoZWNrKHNsb3QtJmd0O2J1cywgc2xvdCwgY2hlY2ssIGRhdGEpIDogMDsKJiM0MzsJCWlmICghcmMpIHsKJiM0MzsJCQlwY2lfc2xvdF9zYXZlX2FuZF9kaXNhYmxlX2xvY2tlZChzbG90KTsKJiM0MzsJCQltaWdodF9zbGVlcCgpOwomIzQzOwkJCXJjID0gcGNpX3Jlc2V0X2hvdHBsdWdfc2xvdChzbG90LSZndDtob3RwbHVnLAomIzQzOwkJCQkJCSAgICBQQ0lfUkVTRVRfRE9fUkVTRVQpOwomIzQzOwkJCXBjaV9zbG90X3Jlc3RvcmVfbG9ja2VkKHNsb3QpOwomIzQzOwkJfQogCQlwY2lfc2xvdF91bmxvY2soc2xvdCk7CiAJfSBlbHNlCiAJCXJjID0gLUVBR0FJTjsKQEAgLTU2MDcsMTAgJiM0Mzs1NjYwLDE0IEBAIHN0YXRpYyBpbnQgcGNpX2J1c19yZXNldChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBib29sIHByb2JlKQogLyoqCiAgKiBwY2lfdHJ5X3Jlc2V0X2J1cyAtIFRyeSB0byByZXNldCBhIFBDSSBidXMKICAqIEBidXM6IHRvcCBsZXZlbCBQQ0kgYnVzIHRvIHJlc2V0CiYjNDM7ICogQGNoZWNrOiBvcHRpb25hbCBwZXItZGV2aWNlIGNhbGxiYWNrIHRoYXQgY2FuIGFib3J0IHRoZSByZXNldAomIzQzOyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgZm9yIEBjaGVjawogICoKICAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBidXMgY2Fubm90IGJlIGxvY2tlZAogICovCi1zdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCiYjNDM7c3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAomIzQzOwkJCSAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLAomIzQzOwkJCSAgICAgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmM7CiAKQEAgLTU2MTksMTAgJiM0Mzs1Njc2LDEzIEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKIAkJcmV0dXJuIHJjOwogCiAJaWYgKHBjaV9idXNfdHJ5bG9jayhidXMpKSB7Ci0JCXBjaV9idXNfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoYnVzKTsKLQkJbWlnaHRfc2xlZXAoKTsKLQkJcmMgPSBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoYnVzLSZndDtzZWxmKTsKLQkJcGNpX2J1c19yZXN0b3JlX2xvY2tlZChidXMpOwomIzQzOwkJcmMgPSBjaGVjayA/IHBjaV93YWxrX3Jlc2V0X2NoZWNrKGJ1cywgTlVMTCwgY2hlY2ssIGRhdGEpIDogMDsKJiM0MzsJCWlmICghcmMpIHsKJiM0MzsJCQlwY2lfYnVzX3NhdmVfYW5kX2Rpc2FibGVfbG9ja2VkKGJ1cyk7CiYjNDM7CQkJbWlnaHRfc2xlZXAoKTsKJiM0MzsJCQlyYyA9IHBjaV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19yZXNldChidXMtJmd0O3NlbGYpOwomIzQzOwkJCXBjaV9idXNfcmVzdG9yZV9sb2NrZWQoYnVzKTsKJiM0MzsJCX0KIAkJcGNpX2J1c191bmxvY2soYnVzKTsKIAl9IGVsc2UKIAkJcmMgPSAtRUFHQUlOOwpAQCAtNTY2MSw3ICYjNDM7NTcyMSw3IEBAIHN0YXRpYyBpbnQgcGNpX3Jlc2V0X2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlLCBib29sIHJlc3RvcmUpCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsICZhbXA7YnVzLSZndDtzbG90cywgbGlzdCkgewogCQlpZiAocmVzdG9yZSkKLQkJCXJldCA9IHBjaV90cnlfcmVzZXRfc2xvdChzbG90KTsKJiM0MzsJCQlyZXQgPSBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc2xvdCwgTlVMTCwgTlVMTCk7CiAJCWVsc2UKIAkJCXJldCA9IHBjaV9zbG90X3Jlc2V0KHNsb3QsIFBDSV9SRVNFVF9ET19SRVNFVCk7CiAKQEAgLTU2NzUsNyAmIzQzOzU3MzUsNyBAQCBzdGF0aWMgaW50IHBjaV9yZXNldF9icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgYm9vbCByZXN0b3JlKQogCW11dGV4X3VubG9jaygmYW1wO3BjaV9zbG90X211dGV4KTsKIAogCWlmIChyZXN0b3JlKQotCQlyZXR1cm4gcGNpX3RyeV9yZXNldF9idXMoYnVzKTsKJiM0MzsJCXJldHVybiBwY2lfdHJ5X3Jlc2V0X2J1cyhidXMsIE5VTEwsIE5VTEwpOwogCXJldHVybiBwY2lfYnVzX3Jlc2V0KGJyaWRnZS0mZ3Q7c3Vib3JkaW5hdGUsIFBDSV9SRVNFVF9ET19SRVNFVCk7CiB9CiAKQEAgLTU3MDUsMTYgJiM0Mzs1NzY1LDQzIEBAIGludCBwY2lfcHJvYmVfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfYnVzKTsKIAomIzQzOy8qKgomIzQzOyAqIHBjaV9yZXNldF9idXNfY29uZCAtIGNvbmRpdGlvbmFsbHkgcmVzZXQgdGhlIHNsb3Qgb3IgYnVzIGNvbnRhaW5pbmcgYSBkZXZpY2UKJiM0MzsgKiBAcGRldjogdG9wIGxldmVsIFBDSSBkZXZpY2UgdG8gcmVzZXQgdmlhIHNsb3QvYnVzCiYjNDM7ICogQGNoZWNrOiBvcHRpb25hbCBjYWxsYmFjayBpbnZva2VkIG9uIGVhY2ggYWZmZWN0ZWQgZGV2aWNlIGJlZm9yZSB0aGUgcmVzZXQKJiM0MzsgKiBAZGF0YTogb3BhcXVlIGFyZ3VtZW50IHBhc3NlZCB0byBAY2hlY2sKJiM0MzsgKgomIzQzOyAqIFJlc2V0IHRoZSBzbG90IG9yIGJ1cyBjb250YWluaW5nIEBwZGV2LiAgT25jZSB0aGUgZW50aXJlIHBoeXNpY2FsIGJ1cy9zbG90CiYjNDM7ICogaGllcmFyY2h5IGlzIGxvY2tlZCwgQGNoZWNrIChpZiBub3QgTlVMTCkgaXMgY2FsbGVkIG9uIGVhY2ggb2YgdGhvc2UgbG9ja2VkCiYjNDM7ICogZGV2aWNlcy4gIEEgbm9uemVybyByZXR1cm4gYWJvcnRzIHRoZSByZXNldCBhbmQgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciwKJiM0MzsgKiBvdGhlcndpc2UgdGhlIHJlc2V0IHByb2NlZWRzLgomIzQzOyAqCiYjNDM7ICogTkIuIEBjaGVjayBydW5zIHdpdGggdGhlIGZ1bGwgc2V0IG9mIGRldmljZV9sb2NrcyBub3RlZCBhYm92ZSBoZWxkOyBjYWxsYmFja3MKJiM0MzsgKiBtdXN0IHRha2UgdGhlc2UgbG9ja2luZyBzZW1hbnRpY3MgaW50byBhY2NvdW50LiAgVXNlIE5VTEwgdG8gcGVyZm9ybSBhbgomIzQzOyAqIHVuY29uZGl0aW9uYWwgcmVzZXQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVOT1RUWSBpZiBAcGRldiBpcyBub3QgcmVzZXR0YWJsZSwgLUVBR0FJTiBpZiB0aGUKJiM0MzsgKiBkZXZpY2VzIGNhbm5vdCBiZSBsb2NrZWQsIG9yIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBAY2hlY2suCiYjNDM7ICovCiYjNDM7aW50IHBjaV9yZXNldF9idXNfY29uZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCSAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksCiYjNDM7CQkgICAgICAgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXJldHVybiAhcGNpX3Byb2JlX3Jlc2V0X3Nsb3QocGRldi0mZ3Q7c2xvdCkgPwomIzQzOwkJcGNpX3RyeV9yZXNldF9zbG90KHBkZXYtJmd0O3Nsb3QsIGNoZWNrLCBkYXRhKSA6CiYjNDM7CQlwY2lfdHJ5X3Jlc2V0X2J1cyhwZGV2LSZndDtidXMsIGNoZWNrLCBkYXRhKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2J1c19jb25kKTsKJiM0MzsKIC8qKgogICogcGNpX3Jlc2V0X2J1cyAtIFRyeSB0byByZXNldCBhIFBDSSBidXMKICAqIEBwZGV2OiB0b3AgbGV2ZWwgUENJIGRldmljZSB0byByZXNldCB2aWEgc2xvdC9idXMKICAqCi0gKiBTYW1lIGFzIGFib3ZlIGV4Y2VwdCByZXR1cm4gLUVBR0FJTiBpZiB0aGUgYnVzIGNhbm5vdCBiZSBsb2NrZWQKJiM0MzsgKiBTYW1lIGFzIGFib3ZlIHdpdGhvdXQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLgogICovCiBpbnQgcGNpX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlyZXR1cm4gKCFwY2lfcHJvYmVfcmVzZXRfc2xvdChwZGV2LSZndDtzbG90KSkgPwotCSAgICBwY2lfdHJ5X3Jlc2V0X3Nsb3QocGRldi0mZ3Q7c2xvdCkgOiBwY2lfdHJ5X3Jlc2V0X2J1cyhwZGV2LSZndDtidXMpOwomIzQzOwlyZXR1cm4gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIE5VTEwsIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2J1cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggNDQ2OWUxYTc3ZjNjMS4uNDE2ZmQ2Yjc0YWJlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTIzMCw3ICYjNDM7MjMwLDYgQEAgZW51bSBwY2lfbW1hcF9hcGkgewogaW50IHBjaV9tbWFwX2ZpdHMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCByZXNubywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFpLAogCQkgIGVudW0gcGNpX21tYXBfYXBpIG1tYXBfYXBpKTsKIAotYm9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBwY2lfaW5pdF9yZXNldF9tZXRob2RzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfYnVzX2Vycm9yX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwppbmRleCAzZjExYTk2MjRiOWMwLi44ZTQyMzQyZDU2ZDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwpAQCAtNjA5LDcgJiM0Mzs2MDksNiBAQCBpbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCWlmIChyZXQgPT0gLUVBR0FJTikKIAkJZ290byBvdXRfZGlzYWJsZV9kZXZpY2U7CiAKLQl2ZGV2LSZndDtyZXNldF93b3JrcyA9ICFyZXQ7CiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJdmRldi0mZ3Q7cGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpOwogCWlmICghdmRldi0mZ3Q7cGNpX3NhdmVkX3N0YXRlKQpAQCAtNzY2LDcgJiM0Mzs3NjUsNyBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiAJaWYgKHBjaV9sb2FkX2FuZF9mcmVlX3NhdmVkX3N0YXRlKHBkZXYsICZhbXA7dmRldi0mZ3Q7cGNpX3NhdmVkX3N0YXRlKSkgewogCQlwY2lfaW5mbyhwZGV2LCAmIzM0OyVzOiBDb3VsZG4mIzM5O3QgcmVsb2FkIHNhdmVkIHN0YXRlXG4mIzM0OywgX19mdW5jX18pOwogCi0JCWlmICghdmRldi0mZ3Q7cmVzZXRfd29ya3MpCiYjNDM7CQlpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQocGRldikpCiAJCQlnb3RvIG91dDsKIAogCQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKQEAgLTc4NSwxMiAmIzQzOzc4NCwxNCBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiAJICogV2UgY2FuIG5vdCB1c2UgdGhlICYjMzQ7dHJ5JiMzNDsgcmVzZXQgaW50ZXJmYWNlIGhlcmUsIHdoaWNoIHdpbGwKIAkgKiBvdmVyd3JpdGUgdGhlIHByZXZpb3VzbHkgcmVzdG9yZWQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KIAkgKi8KLQlpZiAodmRldi0mZ3Q7cmVzZXRfd29ya3MpIHsKJiM0MzsJaWYgKHBjaV9yZXNldF9zdXBwb3J0ZWQocGRldikpIHsKIAkJYnJpZGdlID0gcGNpX3Vwc3RyZWFtX2JyaWRnZShwZGV2KTsKIAkJaWYgKGJyaWRnZSAmYW1wOyZhbXA7ICFwY2lfZGV2X3RyeWxvY2soYnJpZGdlKSkKIAkJCWdvdG8gb3V0X3Jlc3RvcmVfc3RhdGU7CiAJCWlmIChwY2lfZGV2X3RyeWxvY2socGRldikpIHsKLQkJCWlmICghX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHBkZXYpKQomIzQzOwkJCS8qIEVuZm9yY2UgZnVuY3Rpb24gc2NvcGUgdW5kZXIgbG9jayBmb3IgU1ItSU9WIFBGcyAqLwomIzQzOwkJCWlmICghcGNpX251bV92ZihwZGV2KSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICFfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQocGRldikpCiAJCQkJdmRldi0mZ3Q7bmVlZHNfcmVzZXQgPSBmYWxzZTsKIAkJCXBjaV9kZXZfdW5sb2NrKHBkZXYpOwogCQl9CkBAIC04OTIsNiAmIzQzOzg5MywxNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvdW50X2RldnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgKmRhdGEpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFBDSSB3YWxrIGNhbGxiYWNrIHRvIGNoZWNrIGZvciBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gIFZGcyBhcmUgbm90CiYjNDM7ICogZW51bWVyYXRlZCB3aGVuIGRldGVybWluaW5nIGFmZmVjdGVkIGRldmljZXMgYW5kIG1heSBiZSBvd25lZCBieSBzZXBhcmF0ZQomIzQzOyAqIHVzZXJzcGFjZSBwcm9jZXNzZXMgZnJvbSB0aGUgUEYuICBJdCYjMzk7cyB0aGVyZWZvcmUgdGhlIHVzZXImIzM5O3MgcmVzcG9uc2liaWxpdHkKJiM0MzsgKiB0byB0ZWFyZG93biBWRnMgZm9yIGFueSBhZmZlY3RlZCBQRiBiZWZvcmUgcGVyZm9ybWluZyBhIGhvdC1yZXNldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9oYXNfdmZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBjaV9udW1fdmYocGRldikgPyAtRUJVU1kgOiAwOwomIzQzO30KJiM0MzsKIHN0cnVjdCB2ZmlvX3BjaV9maWxsX2luZm8gewogCXN0cnVjdCB2ZmlvX2RldmljZSAqdmRldjsKIAlzdHJ1Y3QgdmZpb19wY2lfZGVwZW5kZW50X2RldmljZSAqZGV2aWNlczsKQEAgLTEwODUsNyAmIzQzOzEwOTcsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIAogCWluZm8uZmxhZ3MgPSBWRklPX0RFVklDRV9GTEFHU19QQ0k7CiAKLQlpZiAodmRldi0mZ3Q7cmVzZXRfd29ya3MpCiYjNDM7CWlmIChwY2lfcmVzZXRfc3VwcG9ydGVkKHZkZXYtJmd0O3BkZXYpKQogCQlpbmZvLmZsYWdzIHw9IFZGSU9fREVWSUNFX0ZMQUdTX1JFU0VUOwogCiAJaW5mby5udW1fcmVnaW9ucyA9IFZGSU9fUENJX05VTV9SRUdJT05TICYjNDM7IHZkZXYtJmd0O251bV9yZWdpb25zOwpAQCAtMTMxNyw3ICYjNDM7MTMyOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAogewogCWludCByZXQ7CiAKLQlpZiAoIXZkZXYtJmd0O3Jlc2V0X3dvcmtzKQomIzQzOwlpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQodmRldi0mZ3Q7cGRldikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpOwpAQCAtMjU5Niw3ICYjNDM7MjYwOCw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCwKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZkZXYsICZhbXA7ZGV2X3NldC0mZ3Q7ZGV2aWNlX2xpc3QsIHZkZXYuZGV2X3NldF9saXN0KQogCQl2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTsKIAotCXJldCA9IHBjaV9yZXNldF9idXMocGRldik7CiYjNDM7CXJldCA9IHBjaV9yZXNldF9idXNfY29uZChwZGV2LCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcywgTlVMTCk7CiAKIAl2ZGV2ID0gbGlzdF9sYXN0X2VudHJ5KCZhbXA7ZGV2X3NldC0mZ3Q7ZGV2aWNlX2xpc3QsCiAJCQkgICAgICAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlLCB2ZGV2LmRldl9zZXRfbGlzdCk7CkBAIC0yNjU5LDcgJiM0MzsyNjcxLDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZGV2X3NldF90cnlfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCkKIAlpZiAodmZpb19wY2lfZGV2X3NldF9wbV9ydW50aW1lX2dldChkZXZfc2V0KSkKIAkJcmV0dXJuOwogCi0JaWYgKCFwY2lfcmVzZXRfYnVzKHBkZXYpKQomIzQzOwlpZiAoIXBjaV9yZXNldF9idXNfY29uZChwZGV2LCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcywgTlVMTCkpCiAJCXJlc2V0X2RvbmUgPSB0cnVlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsICZhbXA7ZGV2X3NldC0mZ3Q7ZGV2aWNlX2xpc3QsIHZkZXYuZGV2X3NldF9saXN0KSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCA2NGIzMDhiNmU2MWMxLi40ZGUyMWU2YWM1MzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTE0NzQsMTIgJiM0MzsxNDc0LDE2IEBAIHZvaWQgcGNpZV9wcmludF9saW5rX3N0YXR1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2llX3Jlc2V0X2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIHByb2JlKTsKIGludCBwY2llX2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoc3RydWN0IHBjaV9kZXYgKmRldik7CiYjNDM7Ym9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV90cnlfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX3Byb2JlX3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KTsKIGludCBwY2lfcHJvYmVfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogaW50IHBjaV9yZXNldF9idXMoc3RydWN0IHBjaV9kZXYgKmRldik7CiYjNDM7aW50IHBjaV9yZXNldF9idXNfY29uZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCSAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksCiYjNDM7CQkgICAgICAgdm9pZCAqZGF0YSk7CiB2b2lkIHBjaV9yZXNldF9zZWNvbmRhcnlfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBwY2liaW9zX3Jlc2V0X3NlY29uZGFyeV9idXMoc3RydWN0IHBjaV9kZXYgKmRldik7CiB2b2lkIHBjaV91cGRhdGVfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgKaW5kZXggOWExNjc0YzE1MmFhMi4uNmZiNTk5ZWMyOTE5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgKQEAgLTEyMSw3ICYjNDM7MTIxLDYgQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHsKIAkvKiBGbGFncyBvbmx5IG1vZGlmaWVkIG9uIHNldHVwL3JlbGVhc2UgLSBiaXRmaWVsZCBvayAqLwogCWJvb2wJCQloYXNfZHluX21zaXg6MTsKIAlib29sCQkJcGNpXzJfMzoxOwotCWJvb2wJCQlyZXNldF93b3JrczoxOwogCWJvb2wJCQlleHRlbmRlZF9jYXBzOjE7CiAJYm9vbAkJCWhhc192Z2E6MTsKIAlib29sCQkJbm9pbnR4OjE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaAppbmRleCA1ZGU2MThhM2E1ZWVlLi44NjAzOTU5ZjE3MzUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKQEAgLTc3Miw2ICYjNDM7NzcyLDkgQEAgc3RydWN0IHZmaW9fcGNpX2hvdF9yZXNldF9pbmZvIHsKICAqIE1peGVkIHVzYWdlIG9mIGxlZ2FjeSBncm91cHMgYW5kIGNkZXZzIGFjcm9zcyB0aGUgc2V0IG9mIGFmZmVjdGVkCiAgKiBkZXZpY2VzIGlzIG5vdCBzdXBwb3J0ZWQuCiAgKgomIzQzOyAqIEhvdCByZXNldCBvZiBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcyBpcyBub3Qgc3VwcG9ydGVkLCBTUi1JT1YKJiM0MzsgKiBzaG91bGQgZmlyc3QgYmUgZGlzYWJsZWQgb24gYW55IGFmZmVjdGVkIFBGLgomIzQzOyAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCiAgKi8KIHN0cnVjdCB2ZmlvX3BjaV9ob3RfcmVzZXQgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTkwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBQQ0kgUmVzZXQgTG9naWMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCBJIG5lZWQgdG8gYXNzZXNzIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBkZWZpbml0ZWx5IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFBDSSBzdWJzeXN0ZW0gYW5kIHRoZSBWRklPIFBDSSBjb3JlLCBzbyBpdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHRvdWNoZXMgYGRyaXZlcnMvcGNpL3BjaS5jYCBhbmQgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYCwgd2hpY2ggYXJlIGNyaXRpY2FsIGFyZWFzLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIHRoZSBQQ0kgcmVzZXQgbG9naWMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYHBjaV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYCwgYW5kIGBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uYCwgYWRkaW5nIGNoZWNrcyByZWxhdGVkIHRvIHRoZSBudW1iZXIgb2YgdmlydHVhbCBmdW5jdGlvbnMgKGBwY2lfbnVtX3ZmKGRldikgJmd0OyAwYCkuIEl0IGludHJvZHVjZXMgYHBjaV9yZXNldF9idXNfY29uZGAgYW5kIGFsdGVycyBob3cgYHBjaV90cnlfcmVzZXRfc2xvdGAgYW5kIGBwY2lfdHJ5X3Jlc2V0X2J1c2Agd29yaywgaW5jb3Jwb3JhdGluZyBhIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGUgVkZJTyBzaWRlIGxldmVyYWdlcyB0aGlzIG5ldyBgcGNpX3Jlc2V0X2J1c19jb25kYCB3aXRoIGEgYHZmaW9fcGNpX2Rldl9oYXNfdmZzYCBjYWxsYmFjayB0byBwcmV2ZW50IGhvdCByZXNldHMgb2YgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyB3aXRoIGFjdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9ucy4gSSYjMzk7bSBhbHNvIHNlZWluZyBzb21lIGNsZWFudXAgd2hlcmUgYHZkZXYtJmd0O3Jlc2V0X3dvcmtzYCBpcyByZW1vdmVkIGluIGZhdm9yIG9mIGEgZGlyZWN0IGNoZWNrIHdpdGggYHBjaV9yZXNldF9zdXBwb3J0ZWQocGRldilgLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBDb25zaWRlcmluZyBWRklPIGFuZCBQQ0kgcmVzZXRzIGFyZSBRRU1VIGNvbnRyb2xsYWJsZSwgdGhlIGFuc3dlciBpcyBhIHllcy4gTm93LCBRRU1VIGhhcyBzb21lIHN1cHBvcnQgZm9yIFNSLUlPViAoaWdiLCBudm1lKS4gSG93ZXZlciwgZXZlbiB3aXRob3V0IFNSLUlPViwgdGhlIGNvcmUgUENJIHJlc2V0IGZ1bmN0aW9ucyBsaWtlIGBwY2lfcmVzZXRfZnVuY3Rpb25gIGFuZCB0aGUgbmV3IGBwY2lfcmVzZXRfYnVzX2NvbmRgIHdpbGwgYmUgcmVhY2hlZCwgc28gdGhpcyBuZWVkcyB0byBiZSBmdXp6ZWQgZXZlbiBpZiBTUi1JT1YgaXMgbm90IHByZXNlbnQuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgY29yZSBQQ0kgZnVuY3Rpb25zOiBgcGNpX3Jlc2V0X2Z1bmN0aW9uYCwgYHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWRgLCBgcGNpX3RyeV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfYnVzX2NvbmRgLCBgcGNpX3Jlc2V0X2J1c2AuCgpJJiMzOTtsbCBjaGVjayB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSBrbm93IHRoYXQgYHBjaV9yZXNldF9mdW5jdGlvbmAgaXMgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgdmFyaW91cyBkcml2ZXJzLCBwbHVzIHN5c2ZzLCBzbyB0aGVyZSBhcmUgbXVsdGlwbGUgZW50cnkgcG9pbnRzLiBgcGNpX3Jlc2V0X2J1c19jb25kYCBpcyBhbHNvIGV4cG9ydGVkIGFuZCwgY3J1Y2lhbGx5LCB1c2VkIGJ5IFZGSU8sIHdoaWNoIGdpdmVzIHVzIGEgZ3JlYXQgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgYENPTkZJR19QQ0lgLCBvYnZpb3VzbHkuIFRoZW4sIGZvciBzdXJlLCBJJiMzOTtsbCBuZWVkIGBDT05GSUdfVkZJT19QQ0lgIHRvIGFjdGl2YXRlIHRoZSBWRklPIGNoYW5nZXMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYHBjaV9yZXNldF9idXNfY29uZGAgaW4gYGRyaXZlcnMvcGNpL3BjaS5jYCBmb3IgYW55IGV4dHJhIGNvbmZpZyBvcHRpb24gaW5mby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVzZXRfYnVzX2NvbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9wY2kuYz01NzY2PUVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wcm9iZV9yZXNldF9idXMpO1xuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTU3NjgtLyoqXG5kcml2ZXJzL3BjaS9wY2kuYzo1NzY5OiAqIHBjaV9yZXNldF9idXNfY29uZCAtIGNvbmRpdGlvbmFsbHkgcmVzZXQgdGhlIHNsb3Qgb3IgYnVzIGNvbnRhaW5pbmcgYSBkZXZpY2VcbmRyaXZlcnMvcGNpL3BjaS5jLTU3NzAtICogQHBkZXY6IHRvcCBsZXZlbCBQQ0kgZGV2aWNlIHRvIHJlc2V0IHZpYSBzbG90L2J1c1xuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTU3ODUtICovXG5kcml2ZXJzL3BjaS9wY2kuYzo1Nzg2OmludCBwY2lfcmVzZXRfYnVzX2NvbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL3BjaS9wY2kuYy01Nzg3LVx0XHQgICAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTU3OTMtfVxuZHJpdmVycy9wY2kvcGNpLmM6NTc5NDpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfYnVzX2NvbmQpO1xuZHJpdmVycy9wY2kvcGNpLmMtNTc5NS1cbi0tXG5kcml2ZXJzL3BjaS9wY2kuYz01ODAyPWludCBwY2lfcmVzZXRfYnVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuZHJpdmVycy9wY2kvcGNpLmMtNTgwMy17XG5kcml2ZXJzL3BjaS9wY2kuYzo1ODA0Olx0cmV0dXJuIHBjaV9yZXNldF9idXNfY29uZChwZGV2LCBOVUxMLCBOVUxMKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTU4MDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBWRklPLVBDSSBEZXZpY2UgQ2FwYWJpbGl0aWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBhIFZGSU8tUENJIGRldmljZSBpcyBoYW5kbGluZyB2aXJ0dWFsIGZ1bmN0aW9ucyAoVkZzKS4gTGV0JiMzOTtzIGRpdmUgcmlnaHQgaW50byB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLCB3aGljaCBtZWFucyBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGB2ZmlvX3BjaV9jb3JlLmNgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy92ZmlvL3BjaWAgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGB2ZmlvX3BjaV9kZXZfaGFzX3Zmc2AgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVkZJTyBkcml2ZXIgZGV0ZXJtaW5lcyBpZiBhIGdpdmVuIFBDSSBkZXZpY2UgaXMgc2V0IHVwIHRvIGV4cG9zZSB2aXJ0dWFsIGZ1bmN0aW9ucywgYW5kIHRoZSBtZWNoYW5pc21zIGl0IHVzZXMgdG8gbWFuYWdlIHRoZW0uIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiYjMzk7cyBsb2dpYyB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIHRoZSBkcml2ZXImIzM5O3MgVkYgY2FwYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2Rldl9oYXNfdmZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9ODkwPXN0YXRpYyBpbnQgdmZpb19wY2lfY291bnRfZGV2cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy05MDEtICovXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzo5MDI6c3RhdGljIGludCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTkwMy17XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MjUxNj1zdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjYxMC1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjI2MTE6XHRyZXQgPSBwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgdmZpb19wY2lfZGV2X2hhc192ZnMsIE5VTEwpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjYxMi1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0yNjUzPXN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjY3My1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjI2NzQ6XHRpZiAoIXBjaV9yZXNldF9idXNfY29uZChwZGV2LCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcywgTlVMTCkpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yNjc1LVx0XHRyZXNldF9kb25lID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTEyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIHRoZSBWRklPIFJlc2V0IExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIG1hbmFnaW5nIFBDSSByZXNldHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFZGSU8gY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZXNlIGZ1bmN0aW9uczogYHBjaV9yZXNldF9idXNfY29uZGAsIGBwY2lfcmVzZXRfZnVuY3Rpb25gLCBgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZGAsIGBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uYCwgYHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0YCwgYHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0YCwgYW5kIGB2ZmlvX3BjaV9pb2N0bF9yZXNldGAuIEVhY2ggb25lIGxpa2VseSBwbGF5cyBhIHZpdGFsIHJvbGUgaW4gb3JjaGVzdHJhdGluZyB0aGUgcmVzZXQgcHJvY2VkdXJlcywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9ucyBhbmQgcmVzcG9uc2liaWxpdGllcy4gQmVmb3JlIEkgZGl2ZSBpbnRvIHRoZWlyIGltcGxlbWVudGF0aW9ucywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIHRvIGVuc3VyZSB0aGF0IFZGSU9fUENJIGlzIGVuYWJsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGZ1cnRoZXIgY29udGV4dCBmb3IgdGhlIGltcG9ydGFuY2UgYW5kIGltcGFjdCBvZiB0aGUgcmVzZXQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19QQ0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTI9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy05LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXHRkZWZfYm9vbCB5IGlmICFTMzkwXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjE0OmNvbmZpZyBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBQQ0kgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTIzPWlmIFZGSU9fUENJXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDYtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTAKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQ6CgoqKlZGSU8tUENJIFJlc2V0IEZ1bmN0aW9uYWxpdHkgRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBWRklPX1BDSWAgaGVyZSwgdGhhdCYjMzk7cyBvdXIgdGFyZ2V0LiBNeSBtYWluIGNvbmNlcm4gcmlnaHQgbm93IGlzIHVuZGVyc3RhbmRpbmcgdGhlIHJlc2V0IGNhcGFiaWxpdGllcyB3aXRoaW4gdGhpcyBzZXR1cC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIFBDSSBidXMgYW5kIGluZGl2aWR1YWwgZnVuY3Rpb25zIGFyZSByZXNldC4KCkZpcnN0IHRoaW5ncyBmaXJzdDogTGV0IG1lIGNvbmZpcm0gaWYgdGhlIGtlcm5lbCBleHBvcnRzIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB3ZSBuZWVkLiBJJiMzOTttIGNoZWNraW5nIGlmIGBwY2lfcmVzZXRfYnVzX2NvbmRgIGlzIGV4cG9zZWQgYXMgYSBzeW1ib2wgYW5kLCBzdXJlIGVub3VnaCwgaXQmIzM5O3MgdGhlcmUsIGZsYWdnZWQgYXMgYEVYUE9SVF9TWU1CT0xfR1BMYC4gUGVyZmVjdCEgVGhlbiwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgYHBjaV9yZXNldF9mdW5jdGlvbmAsIFllcCwgdGhhdCYjMzk7cyB0aGVyZSB0b28uIEZpbmFsbHksIHdoYXQgYWJvdXQgdGhlIGxvY2tlZCB2ZXJzaW9uIG9mIHRoYXQsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYD8gSSBuZWVkIHRvIGtub3cgaWYgdGhhdCYjMzk7cyBhbHNvIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcGNpLmM9NTI3MD1pbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTUyODktfVxuZHJpdmVycy9wY2kvcGNpLmM6NTI5MDpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTUyOTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODM5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBGdW5jdGlvbiBFeHBvcnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uYCBmdW5jdGlvbiBpcyBleHBvc2VkLCBpLmUuLCBleHBvcnRlZCwgZm9yIHVzZSBvdXRzaWRlIHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgKmxpa2VseSogZGVmaW5lcyBpdC4gVGhpcyBpcyBhIGNvbW1vbiBmaXJzdCBzdGVwLCBlc3BlY2lhbGx5IHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBQQ0kgZGV2aWNlcyBvciB0cnlpbmcgdG8gd3JpdGUgYSBkcml2ZXIgbW9kdWxlLiBJZiBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIGFsdGVybmF0aXZlcyDigJMgd2hldGhlciB0aGVyZSYjMzk7cyBhbiBlcXVpdmFsZW50IGZ1bmN0aW9uYWxpdHkgYWxyZWFkeSBleHBvc2VkLCBpZiBJJiMzOTtsbCBuZWVkIHRvIHJld3JpdGUgY29kZSBvciBidWlsZCB0aGUgbW9kdWxlIGFnYWluc3QgYSBjdXN0b20ga2VybmVsIG9yLCB3b3JzdCBjYXNlLCBpZiBJIGhhdmUgdG8gY29uc2lkZXIgYSBjb21wbGV0ZSBjaGFuZ2Ugb2YgYXBwcm9hY2guIFRoZSBhbnN3ZXIgaGVyZSBkaWN0YXRlcyBhICpsb3QqIG9mIHRoZSBuZXh0IHN0ZXBzLCBzbyBJIG5lZWQgdGhpcyBpbmZvcm1hdGlvbiBhdCBoYW5kIGJlZm9yZSBJIHN0YXJ0IGRvaW5nIGFueSBraW5kIG9mIGhlYXZ5LWxpZnRpbmcgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcGNpLmM9NTI5OD1pbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTUzMTktfVxuZHJpdmVycy9wY2kvcGNpLmM6NTMyMDpFWFBPUlRfU1lNQk9MX0dQTChwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTUzMjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTk1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqUENJIEJ1cyBSZXNldCBFeHBvcnQgQ2hlY2sqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZSBgcGNpX3Jlc2V0X2J1c2AgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBmaXJzdCBzdGVwLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGggYW55IGFzc3VtcHRpb25zIGFib3V0IGl0cyBhdmFpbGFiaWxpdHkgb3IgdXNhZ2UgaWYgaXQmIzM5O3Mgbm90IGFjdHVhbGx5IG1hZGUgcHVibGljLiBLbm93aW5nIHdoZXRoZXIgaXQmIzM5O3MgZXhwb3J0ZWQgZGljdGF0ZXMgdGhlIGVudGlyZSBhcHByb2FjaCBJJiMzOTtsbCB0YWtlLiBJZiBpdCBpc24mIzM5O3QsIEkmIzM5O2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgcmUtZXZhbHVhdGUgYW5kIGxvb2sgZm9yIGFsdGVybmF0aXZlIG1ldGhvZHMuIFNvLCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgZXhwb3J0IHN0YXR1cyBiZWZvcmUgbW92aW5nIGFueSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKHBjaV9yZXNldF9idXNcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9wY2kuYz01ODAyPWludCBwY2lfcmVzZXRfYnVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTU4MDUtfVxuZHJpdmVycy9wY2kvcGNpLmM6NTgwNjpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfYnVzKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTU4MDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTA1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIEtlcm5lbCBTeW1ib2wgRXhwb3J0IFN0YXR1cyoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0byB2ZXJpZnkgaWYgdGhlIGBwY2lfcmVzZXRfc3VwcG9ydGVkYCBzeW1ib2wgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYnkgdGhlIGtlcm5lbC4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcC4gSWYgdGhlIHN5bWJvbCBpc24mIzM5O3QgZXhwb3J0ZWQsIHRoZXJlJiMzOTtzIG5vIHBvaW50IGluIGV2ZW4gdHJ5aW5nIHRvIHVzZSBpdCDigJMgaXQgd29uJiMzOTt0IGJlIHZpc2libGUgdG8gbW9kdWxlcyBvciBleHRlcm5hbCBjb2RlLiBJdCYjMzk7cyBiYXNpYyBkdWUgZGlsaWdlbmNlLCBlbnN1cmluZyB3ZSYjMzk7cmUgbm90IGNoYXNpbmcgYSBnaG9zdCBhbmQgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSB3ZSYjMzk7cmUgYWltaW5nIHRvIGxldmVyYWdlIGlzLCBpbiBmYWN0LCBhdmFpbGFibGUgZm9yIHVzIHRvIHdvcmsgd2l0aC4gQmVmb3JlIGRpdmluZyBhbnkgZGVlcGVyLCB0aGlzIGNoZWNrIGlzIG1hbmRhdG9yeS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChwY2lfcmVzZXRfc3VwcG9ydGVkXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcGNpLmM9OTc9Ym9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtMTAwLX1cbmRyaXZlcnMvcGNpL3BjaS5jOjEwMTpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfc3VwcG9ydGVkKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTEwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjQKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQQ0kgUmVzZXQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgdGhlbiB0d2Vha2luZyBzZXZlcmFsIGV4aXN0aW5nIGZ1bmN0aW9uczogYHBjaV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYCwgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gLCBhbmQgYHBjaV9yZXNldF9idXNgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIFBDSSByZXNldCBpbmZyYXN0cnVjdHVyZSBiZWluZyB0b3VjaGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgdmZpb19wY2lfY29yZS5jYCBpcyBhbHNvIGdldHRpbmcgbW9kaWZpZWQgdG8gbWFrZSB1c2Ugb2YgdGhlIG5ldyBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gYW5kIGBwY2lfcmVzZXRfc3VwcG9ydGVkYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdGlnaHRlbmluZyB0aGUgaW50ZWdyYXRpb24gd2l0aCBWRklPLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgaW1wbGljYXRlZCBpbiB0aGlzIGNoYW5nZTogYHBjaV9yZXNldF9idXNfY29uZGAsIHRoZSBwcmltYXJ5IG5ldyBvbmUsIGlzIG5hdHVyYWxseSB0aGUgcHJpb3JpdHkuIFRoZW4sIHRoZSBzdGFuZGFyZCBgcGNpX3Jlc2V0X2Z1bmN0aW9uYCBmYW1pbHkgaXMgZ2V0dGluZyByZXZpc2VkLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlIFZGSU8gY29kZSBoYXMgc2VlbiBzaWduaWZpY2FudCBjaGFuZ2UsIHNpbmNlIGB2ZmlvX3BjaV9jb3JlLmNgIGlzIGJlaW5nIGFsdGVyZWQuIFNwZWNpZmljYWxseSwgYHZmaW9fcGNpX2lvY3RsX3Jlc2V0YCwgd2hpY2ggaGFuZGxlcyB0aGUgaW9jdGwgZm9yIHJlc2V0LCBpcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyAqY2FsbGVkKiBmcm9tIGB2ZmlvX3BjaV9jb3JlX2lvY3RsYCB3aGljaCBpcywgYXMgYW4gaW9jdGwgaGFuZGxlciwgZXhwb3J0ZWQuIFRoZW4sIHdlIGhhdmUgYHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0YCwgYW5kIGB2ZmlvX3BjaV9kZXZfc2V0X3RyeV9yZXNldGAsIHdoaWNoIGFyZSBhbHNvIHN0YXRpYywgd2l0aCB0aGUgbGF0dGVyIGJlaW5nIHVzZWQgZHVyaW5nIFZGSU8gZGV2aWNlIGRpc2FibGUuCgpIb2xkIG9uLi4uIGB2ZmlvX3BjaV9pb2N0bF9yZXNldGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IGlmIGl0JiMzOTtzIGJlaW5nIHVzZWQgYnkgYHZmaW9fcGNpX2NvcmVfaW9jdGxgLCB0aGVuIHRoYXQgbWVhbnMgaXQmIzM5O3Mgc3RpbGwgYmVpbmcgYWNjZXNzZWQgZXh0ZXJuYWxseS4gSSBzaG91bGQgY29uZmlybSB0aGF0IGB2ZmlvX3BjaV9jb3JlX2lvY3RsYCBpcyBpbmRlZWQgZXhwb3J0ZWQuIEl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgdG8gZW5zdXJlIHRoZSBWRklPIHJlc2V0IG1lY2hhbmlzbSBpcyBwcm9wZXJseSBleHBvc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKHZmaW9fcGNpX2NvcmVfaW9jdGxcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTY3PWxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTkyLX1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE1OTM6RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9pb2N0bCk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTk0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyMQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSWRlbnRpZnlpbmcgdGhlIEtleSBGb2N1cyBmb3IgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gY2hvb3NlIHRoZSBiZXN0IGZvY3VzIGZvciBkaWdnaW5nIGludG8gdGhpcy4gYHZmaW9fcGNpX2NvcmVfaW9jdGxgLi4uIHdoaWxlIGl0ICppcyogdGhlIGdlbmVyaWMgaW9jdGwgaGFuZGxlciwgdGhhdCYjMzk7cyBhbG1vc3QgdG9vIGJyb2FkLCBpc24mIzM5O3QgaXQ/IEl04oCZcyBwcm9iYWJseSBnb2luZyB0byBsZWFkIHRvIGEgbG90IG9mIG5vaXNlLiBNYXliZSBzdGFydGluZyB0aGVyZSBpcyBhIGdvb2QgaWRlYSB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLCBidXQgaXQgbWlnaHQgYmUgaW5lZmZpY2llbnQuIGB2ZmlvX3BjaV9jb3JlX2Rpc2FibGVg4oCmIG5vdyAqdGhhdCogc2VlbXMgbW9yZSBwcm9taXNpbmcuIFNwZWNpZmljYWxseSwgKmRpc2FibGluZyogYSBmdW5jdGlvbiwgY291bGQgcmV2ZWFsIG1vcmUgYWJvdXQgYW55IHNwZWNpZmljIGlzc3VlcyBwcmVzZW50LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGF0IGFuZCB0aGVuIGNpcmNsZSBiYWNrIHRvIHRoZSBJb0N0bCBoYW5kbGVyIGlmIHdlIG5lZWQgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwodmZpb19wY2lfY29yZV9kaXNhYmxlXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9Njc4PXZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04MTItfVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6ODEzOkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfZGlzYWJsZSk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04MTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTM2CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIFZGSU8tUENJJiMzOTtzIEV4cG9ydGVkIFN5bWJvbHMqKgoKQWxyaWdodCwgc28gYHZmaW9fcGNpX2NvcmVfZGlzYWJsZWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZC4gVGhhdCBjb25maXJtcyBhIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgdGhlIG5hdHVyYWwgZm9sbG93LXVwIHF1ZXN0aW9uIGlz4oCmIHdoYXQgYWJvdXQgaXRzIGNvdW50ZXJwYXJ0PyBJcyBgdmZpb19wY2lfY29yZV9lbmFibGVgIGFsc28gZXhwb3NlZD8gSSBuZWVkIHRvIGtub3cgaWYgSSBoYXZlIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIG9yIGlmIHRoZXJlIGlzIGFub3RoZXIgbWVjaGFuaXNtIGZvciB0aGUgZW5hYmxlIHByb2NlZHVyZS4gVGhpcyBjb3VsZCBpbXBhY3QgaG93IEkgYXBwcm9hY2ggWCBvbiBteSBjdXJyZW50IHByb2plY3QuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3ltYm9sIHRhYmxlIGRpcmVjdGx5IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwodmZpb19wY2lfY29yZV9lbmFibGVcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz01ODc9aW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy02NzUtfVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6Njc2OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfZW5hYmxlKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTY3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWRklPIFBDSSBSZXNldCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IGl0JiMzOTtzIGFsdGVyaW5nIHRoZSByZXNldCBtZWNoYW5pc21zIHdpdGhpbiB0aGUgVkZJTy1QQ0kgZnJhbWV3b3JrLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgdmZpb19wY2lfY29yZV9lbmFibGVgIGFuZCBgdmZpb19wY2lfY29yZV9kaXNhYmxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJvdXRpbmVzIGFyZSBiZWluZyBtb2RpZmllZCBhbmQgaG93IHRoYXQgYWZmZWN0cyB0aGUgZGV2aWNlIHJlc2V0IGxpZmVjeWNsZS4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBzb21lIGtleSBzeW1ib2xzLiBJJiMzOTttIG5vdGluZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgYXMgdGhleSBhcmUgbGlrZWx5IHdoZXJlIHRoZSBoZWF2eSBsaWZ0aW5nIGlzIGhhcHBlbmluZzogYHBjaV9yZXNldF9idXNfY29uZGAsIGBwY2lfcmVzZXRfZnVuY3Rpb25gLCBgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZGAsIGBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uYCwgYHZmaW9fcGNpX2NvcmVfaW9jdGxgLCBgdmZpb19wY2lfY29yZV9kaXNhYmxlYCwgYW5kIGB2ZmlvX3BjaV9jb3JlX2VuYWJsZWAuCgpXYWl0IGEgbWludXRlLCBJIHNlZSB0aGF0IGBwY2lfcmVzZXRfYnVzYCBpcyBhbHNvIGJlaW5nIHRvdWNoZWQsIHdoaWNoIGlzIG5vdyBjYWxsaW5nIGBwY2lfcmVzZXRfYnVzX2NvbmRgLiBUaGF0JiMzOTtzIGFuIGltcG9ydGFudCBjaGFuZ2U7IEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjb25kaXRpb25hbCByZXNldCBsb2dpYyBoZXJlLgoKQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYHBjaV9yZXNldF9zdXBwb3J0ZWRgIGlzIGJlaW5nIGV4cG9ydGVkLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIGJlY29taW5nIG1vcmUgd2lkZWx5IGFjY2Vzc2libGUsIHdoaWNoIGNvdWxkIGJlIGFuIGludGVyZXN0aW5nIGFyY2hpdGVjdHVyYWwgc2hpZnQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuCgpOb3csIHRvIGNvbXBpbGUgdGhpcywgSSYjMzk7bGwgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYFBDSWAgYW5kIGBWRklPX1BDSWAuIEJ1dCBJIHNob3VsZCBkb3VibGUtY2hlY2sgZGVwZW5kZW5jaWVzLiBMZXQgbWUgc2VlLi4uIHllcywgYFZGSU9fUENJYCBkZXBlbmRzIG9uIGBWRklPYCBhbmQgYFBDSWAuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3Igb3RoZXIgZGVwZW5kZW5jaWVzIHRvbywgYnV0IHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM6XHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTEwPWNvbmZpZyBWRklPX1BDSV9JTlRYXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXHRkZWZfYm9vbCB5IGlmICFTMzkwXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTI6XHRkZXBlbmRzIG9uIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjQ9Y29uZmlnIFZGSU9fUENJX1ZHQVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXCYjMzQ7XG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjY6XHRkZXBlbmRzIG9uIFg4NiBcdTAwMjZcdTAwMjYgVkdBX0FSQlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI3LVx0aGVscFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0zND1jb25maWcgVkZJT19QQ0lfSUdEXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM2Olx0ZGVwZW5kcyBvbiBYODZcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNy1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00Nz1jb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgczM5MHggS1ZNIHBhc3N0aHJvdWdoXCYjMzQ7XG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDk6XHRkZXBlbmRzIG9uIFMzOTAgXHUwMDI2XHUwMDI2IEtWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTUwLVx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjY0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGVwZW5kZW5jaWVzIGFuZCBWZXJpZmljYXRpb24gLSBWRklPJiMzOTtzIEZvdW5kYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYFZGSU9fUENJYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgUENJYCwgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbC4gQW5kIG5hdHVyYWxseSwgYFZGSU9gIGl0c2VsZiBpcyByZXF1aXJlZCBmb3IgYFZGSU9fUENJYCB0byBkbyBpdHMgdGhpbmcuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYFZGSU9gIHBpZWNlcyBhcmUgY29ycmVjdGx5IHNldCB1cC4gSSYjMzk7bGwgbmVlZCB0byBqdW1wIGludG8gYGRyaXZlcnMvdmZpby9LY29uZmlnYCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEkmIzM5O20gYWZ0ZXIgdGhlIGNvcmUgYFZGSU9gIGNvbmZpZ3VyYXRpb24uIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgYWxsIGxpbmVkIHVwIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOm1lbnVjb25maWcgVkZJT1xuZHJpdmVycy92ZmlvL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz0xNj1pZiBWRklPXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoxNzpjb25maWcgVkZJT19ERVZJQ0VfQ0RFVlxuZHJpdmVycy92ZmlvL0tjb25maWctMTgtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGNkZXYgL2Rldi92ZmlvL2RldmljZXMvdmZpb1hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0yOS1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjMwOmNvbmZpZyBWRklPX0dST1VQXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zMS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gZ3JvdXAgL2Rldi92ZmlvLyRncm91cF9pZFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTM5LVxuZHJpdmVycy92ZmlvL0tjb25maWc6NDA6Y29uZmlnIFZGSU9fQ09OVEFJTkVSXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9NTI9aWYgVkZJT19DT05UQUlORVJcbmRyaXZlcnMvdmZpby9LY29uZmlnOjUzOmNvbmZpZyBWRklPX0lPTU1VX1RZUEUxXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01NC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctNTYtXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Nzpjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU4LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz02MT1lbmRpZlxuZHJpdmVycy92ZmlvL0tjb25maWctNjItXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2Mzpjb25maWcgVkZJT19OT0lPTU1VXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02NC1cdGJvb2wgXCYjMzQ7VkZJTyBOby1JT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctNzctXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo3ODpjb25maWcgVkZJT19WSVJRRkRcbmRyaXZlcnMvdmZpby9LY29uZmlnLTc5LVx0Ym9vbFxuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTgyLVxuZHJpdmVycy92ZmlvL0tjb25maWc6ODM6Y29uZmlnIFZGSU9fREVCVUdGU1xuZHJpdmVycy92ZmlvL0tjb25maWctODQtXHRib29sIFwmIzM0O0V4cG9ydCBWRklPIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDQyCgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQQ0kgYW5kIFZGSU8gSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBpbnRlZ3JhdGluZyBzb21lIGNydWNpYWwgdXBkYXRlcy4gRmlyc3QsIEkmIzM5O20gYWRkaW5nIGBQQ0lgLCBgVkZJT2AsIGFuZCBgVkZJT19QQ0lgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGVzZSBmZWF0dXJlcyBhcmUgcHJvcGVybHkgZW5hYmxlZCBpbiB0aGUgc3lzdGVtLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IGEgY3JpdGljYWwgZGV0YWlsOiBpcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBleHBvcnRlZD8gWWVwLCBsb29rcyBnb29kLiBUaGlzIGlzIGEga2V5IGZ1bmN0aW9uLiBUaGVzZSBjaGFuZ2VzIHNlZW0gZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLgoKVGhlIGxvZ2ljIGJlaGluZCB0aGVzZSBjaGFuZ2VzIGlzIHNvdW5kLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgdGhlbiBpdCBtb2RpZmllcyB0aG9zZSBQQ0kgcmVzZXQgZnVuY3Rpb25zIHNvIHRoYXQgd2UgYXZvaWQgdGhlIHNjZW5hcmlvIG9mIHJlc2V0dGluZyBTUi1JT1YgUGh5c2ljYWwgRnVuY3Rpb25zIChQRnMpIHdoZW4gdGhlaXIgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykgYXJlIGFjdGl2ZWx5IGluIHVzZS4gSXQgYWxzbyBtYWtlcyBzdXJlIHRoZSBWRklPIFBDSSBjb3JlIGlzIHVwZGF0ZWQgdG8gbGV2ZXJhZ2UgdGhlc2UgbmV3IGNoZWNrcy4gVGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBwY2lfcmVzZXRfYnVzX2NvbmRgLCBhcmUgcmVhY2hhYmxlIGNvcmUgUENJIGFuZCBWRklPIGZ1bmN0aW9ucywgYW5kIHRoZXkgYXJlIGNyaXRpY2FsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KCkkmIzM5O3ZlIGdvdCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMgaW4gbWluZDoKCiogICBUaGUgY3JpdGljYWwgZnVuY3Rpb24sIGBwY2lfcmVzZXRfYnVzX2NvbmRgLgoqICAgUENJIHJlc2V0IGZ1bmN0aW9uczogYHBjaV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYCwgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gLCBhbmQgYHBjaV9yZXNldF9idXNgIHdoaWNoIHdpbGwgbmVlZCB0aGUgYHBjaV9yZXNldF9idXNfY29uZGAuCiogICBBbmQgZmluYWxseSB0aGUgVkZJTyBmdW5jdGlvbnMgd2hpY2ggbXVzdCBiZSBjb25zaWRlcmVkOiBgdmZpb19wY2lfY29yZV9pb2N0bGAsIGB2ZmlvX3BjaV9jb3JlX2Rpc2FibGVgLCBhbmQgYHZmaW9fcGNpX2NvcmVfZW5hYmxlYC4KCkkmIzM5O20gc2V0dGluZyB1cCB0aGVzZSBjb25maWd1cmF0aW9uczogYFBDSWAsIGBWRklPYCwgYW5kIGBWRklPX1BDSWAuCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuIEV2ZXJ5dGhpbmcgbG9va3MgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSSYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGNpX3Jlc2V0X2J1c19jb25kJiMzNDssCiAgICAmIzM0O3BjaV9yZXNldF9mdW5jdGlvbiYjMzQ7LAogICAgJiMzNDtwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkJiMzNDssCiAgICAmIzM0O3BjaV90cnlfcmVzZXRfZnVuY3Rpb24mIzM0OywKICAgICYjMzQ7cGNpX3Jlc2V0X2J1cyYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2lvY3RsJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2VuYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBwY2lfcmVzZXRfYnVzX2NvbmRgIGFuZCBtb2RpZmllcyBQQ0kgcmVzZXQgZnVuY3Rpb25zIHRvIHByZXZlbnQgcmVzZXR0aW5nIFNSLUlPViBQRnMgd2l0aCBhY3RpdmUgVkZzLiBJdCBhbHNvIHVwZGF0ZXMgVkZJTyBQQ0kgY29yZSB0byB1c2UgdGhlc2UgbmV3IGNoZWNrcy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIFBDSSBhbmQgVkZJTyBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UENJJiMzNDssCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwY2lfcmVzZXRfYnVzX2NvbmQmIzM0OywKICAgICYjMzQ7cGNpX3Jlc2V0X2Z1bmN0aW9uJiMzNDssCiAgICAmIzM0O3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQmIzM0OywKICAgICYjMzQ7cGNpX3RyeV9yZXNldF9mdW5jdGlvbiYjMzQ7LAogICAgJiMzNDtwY2lfcmVzZXRfYnVzJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfaW9jdGwmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9kaXNhYmxlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZW5hYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHBjaV9yZXNldF9idXNfY29uZGAgYW5kIG1vZGlmaWVzIFBDSSByZXNldCBmdW5jdGlvbnMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBGcyB3aXRoIGFjdGl2ZSBWRnMuIEl0IGFsc28gdXBkYXRlcyBWRklPIFBDSSBjb3JlIHRvIHVzZSB0aGVzZSBuZXcgY2hlY2tzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgUENJIGFuZCBWRklPIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgZGV2aWNlIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCBQQ0kgc3Vic3lzdGVtIEFQSXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgbW9kaWZ5IGJ1ZmZlciBhbGxvY2F0aW9ucywgcGFkZGluZywgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgYHZmaW9fZGV2aWNlX2luZm9gIHN0cnVjdHVyZSBtb2RpZmllZCBpbiBgdmZpb19wY2lfaW9jdGxfZ2V0X2luZm9gIGlzIGFscmVhZHkgZnVsbHkgemVyby1pbml0aWFsaXplZCAoYHN0cnVjdCB2ZmlvX2RldmljZV9pbmZvIGluZm8gPSB7fTtgKS5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGM4ZTAwY2M0YmFlNGZjYjgzOGQ3NzgwYTQ1OTFjMmZjMTQ4ZjY5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDA1OjI0OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCA3N2IxN2IxM2VlNjE1Li4wYjRmMTMzOTdkYTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtOTgsNiAmIzQzOzk4LDcgQEAgYm9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJcmV0dXJuIGRldi0mZ3Q7cmVzZXRfbWV0aG9kc1swXSAhPSAwOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9zdXBwb3J0ZWQpOwogCiAjaWZkZWYgQ09ORklHX1BDSV9ET01BSU5TCiBpbnQgcGNpX2RvbWFpbnNfc3VwcG9ydGVkID0gMTsKQEAgLTUyMjIsMTEgJiM0Mzs1MjIzLDIyIEBAIGludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldikKIAkJcGNpX2Rldl9sb2NrKGJyaWRnZSk7CiAKIAlwY2lfZGV2X2xvY2soZGV2KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmVzZXQgb2YgYW4gU1ItSU9WIFBGIG5lY2Vzc2FyaWx5IHJlc2V0cyBhbnkgYWN0aXZlIFZGcy4gIFN1Y2ggcmVzZXRzIGFyZQomIzQzOwkgKiBiZXlvbmQgdGhlIHNjb3BlIGFkdmVydGlzZWQgZm9yIHBjaV9yZXNldF9mdW5jdGlvbigpIGFuZCB2YXJpYW50cywgcmVmdXNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBjaV9udW1fdmYoZGV2KSAmZ3Q7IDApIHsKJiM0MzsJCXJjID0gLUVOT1RUWTsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiAJcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKGRldik7CiAKIAlyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpOwogCiAJcGNpX2Rldl9yZXN0b3JlKGRldik7CiYjNDM7dW5sb2NrOgogCXBjaV9kZXZfdW5sb2NrKGRldik7CiAKIAlpZiAoYnJpZGdlKQpAQCAtNTI2NCw2ICYjNDM7NTI3Niw5IEBAIGludCBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJaWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKGRldikpCiAJCXJldHVybiAtRU5PVFRZOwogCiYjNDM7CWlmIChwY2lfbnVtX3ZmKGRldikgJmd0OyAwKQomIzQzOwkJcmV0dXJuIC1FTk9UVFk7CiYjNDM7CiAJcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKGRldik7CiAKIAlyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpOwpAQCAtNTI5MCw2ICYjNDM7NTMwNSwxMSBAQCBpbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogCWlmICghcGNpX2Rldl90cnlsb2NrKGRldikpCiAJCXJldHVybiAtRUFHQUlOOwogCiYjNDM7CWlmIChwY2lfbnVtX3ZmKGRldikgJmd0OyAwKSB7CiYjNDM7CQlwY2lfZGV2X3VubG9jayhkZXYpOwomIzQzOwkJcmV0dXJuIC1FTk9UVFk7CiYjNDM7CX0KJiM0MzsKIAlwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTsKIAlyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpOwogCXBjaV9kZXZfcmVzdG9yZShkZXYpOwpAQCAtNTU0OCw5ICYjNDM7NTU2OCwzNiBAQCBpbnQgcGNpX3Byb2JlX3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KQogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X3Nsb3QpOwogCiYjNDM7LyogQ2FsbCBAY2Igb24gZXZlcnkgZGV2aWNlIGEgc2xvdCBvciBidXMgcmVzZXQgYWZmZWN0cywgc3RvcHBpbmcgb24gZXJyb3IuICovCiYjNDM7c3RhdGljIGludCBwY2lfd2Fsa19yZXNldF9jaGVjayhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsCiYjNDM7CQkJCWludCAoKmNiKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSwKJiM0MzsJCQkJdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpkZXY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZhbXA7YnVzLSZndDtkZXZpY2VzLCBidXNfbGlzdCkgewomIzQzOwkJaWYgKHNsb3QgJmFtcDsmYW1wOyAoIWRldi0mZ3Q7c2xvdCB8fCBkZXYtJmd0O3Nsb3QgIT0gc2xvdCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlyYyA9IGNiKGRldiwgZGF0YSk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJaWYgKGRldi0mZ3Q7c3Vib3JkaW5hdGUpIHsKJiM0MzsJCQlyYyA9IHBjaV93YWxrX3Jlc2V0X2NoZWNrKGRldi0mZ3Q7c3Vib3JkaW5hdGUsCiYjNDM7CQkJCQkJICBOVUxMLCBjYiwgZGF0YSk7CiYjNDM7CQkJaWYgKHJjKQomIzQzOwkJCQlyZXR1cm4gcmM7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBwY2lfdHJ5X3Jlc2V0X3Nsb3QgLSBUcnkgdG8gcmVzZXQgYSBQQ0kgc2xvdAogICogQHNsb3Q6IFBDSSBzbG90IHRvIHJlc2V0CiYjNDM7ICogQGNoZWNrOiBvcHRpb25hbCBwZXItZGV2aWNlIGNhbGxiYWNrIHRoYXQgY2FuIGFib3J0IHRoZSByZXNldAomIzQzOyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgZm9yIEBjaGVjawogICoKICAqIEEgUENJIGJ1cyBtYXkgaG9zdCBtdWx0aXBsZSBzbG90cywgZWFjaCBzbG90IG1heSBzdXBwb3J0IGEgcmVzZXQgbWVjaGFuaXNtCiAgKiBpbmRlcGVuZGVudCBvZiBvdGhlciBzbG90cy4gIEZvciBpbnN0YW5jZSwgc29tZSBzbG90cyBtYXkgc3VwcG9ydCBzbG90IHBvd2VyCkBAIC01NTYzLDcgJiM0Mzs1NjEwLDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X3Nsb3QpOwogICoKICAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBzbG90IGNhbm5vdCBiZSBsb2NrZWQKICAqLwotc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KQomIzQzO3N0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCwKJiM0MzsJCQkgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksCiYjNDM7CQkJICAgICAgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmM7CiAKQEAgLTU1NzIsMTAgJiM0Mzs1NjIxLDE0IEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCkKIAkJcmV0dXJuIHJjOwogCiAJaWYgKHBjaV9zbG90X3RyeWxvY2soc2xvdCkpIHsKLQkJcGNpX3Nsb3Rfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoc2xvdCk7Ci0JCW1pZ2h0X3NsZWVwKCk7Ci0JCXJjID0gcGNpX3Jlc2V0X2hvdHBsdWdfc2xvdChzbG90LSZndDtob3RwbHVnLCBQQ0lfUkVTRVRfRE9fUkVTRVQpOwotCQlwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTsKJiM0MzsJCXJjID0gY2hlY2sgPyBwY2lfd2Fsa19yZXNldF9jaGVjayhzbG90LSZndDtidXMsIHNsb3QsIGNoZWNrLCBkYXRhKSA6IDA7CiYjNDM7CQlpZiAoIXJjKSB7CiYjNDM7CQkJcGNpX3Nsb3Rfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoc2xvdCk7CiYjNDM7CQkJbWlnaHRfc2xlZXAoKTsKJiM0MzsJCQlyYyA9IHBjaV9yZXNldF9ob3RwbHVnX3Nsb3Qoc2xvdC0mZ3Q7aG90cGx1ZywKJiM0MzsJCQkJCQkgICAgUENJX1JFU0VUX0RPX1JFU0VUKTsKJiM0MzsJCQlwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTsKJiM0MzsJCX0KIAkJcGNpX3Nsb3RfdW5sb2NrKHNsb3QpOwogCX0gZWxzZQogCQlyYyA9IC1FQUdBSU47CkBAIC01NjA3LDEwICYjNDM7NTY2MCwxNCBAQCBzdGF0aWMgaW50IHBjaV9idXNfcmVzZXQoc3RydWN0IHBjaV9idXMgKmJ1cywgYm9vbCBwcm9iZSkKIC8qKgogICogcGNpX3RyeV9yZXNldF9idXMgLSBUcnkgdG8gcmVzZXQgYSBQQ0kgYnVzCiAgKiBAYnVzOiB0b3AgbGV2ZWwgUENJIGJ1cyB0byByZXNldAomIzQzOyAqIEBjaGVjazogb3B0aW9uYWwgcGVyLWRldmljZSBjYWxsYmFjayB0aGF0IGNhbiBhYm9ydCB0aGUgcmVzZXQKJiM0MzsgKiBAZGF0YTogb3BhcXVlIGFyZ3VtZW50IGZvciBAY2hlY2sKICAqCiAgKiBTYW1lIGFzIGFib3ZlIGV4Y2VwdCByZXR1cm4gLUVBR0FJTiBpZiB0aGUgYnVzIGNhbm5vdCBiZSBsb2NrZWQKICAqLwotc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQomIzQzO3N0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cywKJiM0MzsJCQkgICAgIGludCAoKmNoZWNrKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSwKJiM0MzsJCQkgICAgIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJjOwogCkBAIC01NjE5LDEwICYjNDM7NTY3NiwxMyBAQCBzdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCiAJCXJldHVybiByYzsKIAogCWlmIChwY2lfYnVzX3RyeWxvY2soYnVzKSkgewotCQlwY2lfYnVzX3NhdmVfYW5kX2Rpc2FibGVfbG9ja2VkKGJ1cyk7Ci0JCW1pZ2h0X3NsZWVwKCk7Ci0JCXJjID0gcGNpX2JyaWRnZV9zZWNvbmRhcnlfYnVzX3Jlc2V0KGJ1cy0mZ3Q7c2VsZik7Ci0JCXBjaV9idXNfcmVzdG9yZV9sb2NrZWQoYnVzKTsKJiM0MzsJCXJjID0gY2hlY2sgPyBwY2lfd2Fsa19yZXNldF9jaGVjayhidXMsIE5VTEwsIGNoZWNrLCBkYXRhKSA6IDA7CiYjNDM7CQlpZiAoIXJjKSB7CiYjNDM7CQkJcGNpX2J1c19zYXZlX2FuZF9kaXNhYmxlX2xvY2tlZChidXMpOwomIzQzOwkJCW1pZ2h0X3NsZWVwKCk7CiYjNDM7CQkJcmMgPSBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoYnVzLSZndDtzZWxmKTsKJiM0MzsJCQlwY2lfYnVzX3Jlc3RvcmVfbG9ja2VkKGJ1cyk7CiYjNDM7CQl9CiAJCXBjaV9idXNfdW5sb2NrKGJ1cyk7CiAJfSBlbHNlCiAJCXJjID0gLUVBR0FJTjsKQEAgLTU2NjEsNyAmIzQzOzU3MjEsNyBAQCBzdGF0aWMgaW50IHBjaV9yZXNldF9icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgYm9vbCByZXN0b3JlKQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzbG90LCAmYW1wO2J1cy0mZ3Q7c2xvdHMsIGxpc3QpIHsKIAkJaWYgKHJlc3RvcmUpCi0JCQlyZXQgPSBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc2xvdCk7CiYjNDM7CQkJcmV0ID0gcGNpX3RyeV9yZXNldF9zbG90KHNsb3QsIE5VTEwsIE5VTEwpOwogCQllbHNlCiAJCQlyZXQgPSBwY2lfc2xvdF9yZXNldChzbG90LCBQQ0lfUkVTRVRfRE9fUkVTRVQpOwogCkBAIC01Njc1LDcgJiM0Mzs1NzM1LDcgQEAgc3RhdGljIGludCBwY2lfcmVzZXRfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsIGJvb2wgcmVzdG9yZSkKIAltdXRleF91bmxvY2soJmFtcDtwY2lfc2xvdF9tdXRleCk7CiAKIAlpZiAocmVzdG9yZSkKLQkJcmV0dXJuIHBjaV90cnlfcmVzZXRfYnVzKGJ1cyk7CiYjNDM7CQlyZXR1cm4gcGNpX3RyeV9yZXNldF9idXMoYnVzLCBOVUxMLCBOVUxMKTsKIAlyZXR1cm4gcGNpX2J1c19yZXNldChicmlkZ2UtJmd0O3N1Ym9yZGluYXRlLCBQQ0lfUkVTRVRfRE9fUkVTRVQpOwogfQogCkBAIC01NzA1LDE2ICYjNDM7NTc2NSw0MyBAQCBpbnQgcGNpX3Byb2JlX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X2J1cyk7CiAKJiM0MzsvKioKJiM0MzsgKiBwY2lfcmVzZXRfYnVzX2NvbmQgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRoZSBzbG90IG9yIGJ1cyBjb250YWluaW5nIGEgZGV2aWNlCiYjNDM7ICogQHBkZXY6IHRvcCBsZXZlbCBQQ0kgZGV2aWNlIHRvIHJlc2V0IHZpYSBzbG90L2J1cwomIzQzOyAqIEBjaGVjazogb3B0aW9uYWwgY2FsbGJhY2sgaW52b2tlZCBvbiBlYWNoIGFmZmVjdGVkIGRldmljZSBiZWZvcmUgdGhlIHJlc2V0CiYjNDM7ICogQGRhdGE6IG9wYXF1ZSBhcmd1bWVudCBwYXNzZWQgdG8gQGNoZWNrCiYjNDM7ICoKJiM0MzsgKiBSZXNldCB0aGUgc2xvdCBvciBidXMgY29udGFpbmluZyBAcGRldi4gIE9uY2UgdGhlIGVudGlyZSBwaHlzaWNhbCBidXMvc2xvdAomIzQzOyAqIGhpZXJhcmNoeSBpcyBsb2NrZWQsIEBjaGVjayAoaWYgbm90IE5VTEwpIGlzIGNhbGxlZCBvbiBlYWNoIG9mIHRob3NlIGxvY2tlZAomIzQzOyAqIGRldmljZXMuICBBIG5vbnplcm8gcmV0dXJuIGFib3J0cyB0aGUgcmVzZXQgYW5kIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIsCiYjNDM7ICogb3RoZXJ3aXNlIHRoZSByZXNldCBwcm9jZWVkcy4KJiM0MzsgKgomIzQzOyAqIE5CLiBAY2hlY2sgcnVucyB3aXRoIHRoZSBmdWxsIHNldCBvZiBkZXZpY2VfbG9ja3Mgbm90ZWQgYWJvdmUgaGVsZDsgY2FsbGJhY2tzCiYjNDM7ICogbXVzdCB0YWtlIHRoZXNlIGxvY2tpbmcgc2VtYW50aWNzIGludG8gYWNjb3VudC4gIFVzZSBOVUxMIHRvIHBlcmZvcm0gYW4KJiM0MzsgKiB1bmNvbmRpdGlvbmFsIHJlc2V0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9UVFkgaWYgQHBkZXYgaXMgbm90IHJlc2V0dGFibGUsIC1FQUdBSU4gaWYgdGhlCiYjNDM7ICogZGV2aWNlcyBjYW5ub3QgYmUgbG9ja2VkLCBvciB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgQGNoZWNrLgomIzQzOyAqLwomIzQzO2ludCBwY2lfcmVzZXRfYnVzX2NvbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiYjNDM7CQkgICAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLAomIzQzOwkJICAgICAgIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlyZXR1cm4gIXBjaV9wcm9iZV9yZXNldF9zbG90KHBkZXYtJmd0O3Nsb3QpID8KJiM0MzsJCXBjaV90cnlfcmVzZXRfc2xvdChwZGV2LSZndDtzbG90LCBjaGVjaywgZGF0YSkgOgomIzQzOwkJcGNpX3RyeV9yZXNldF9idXMocGRldi0mZ3Q7YnVzLCBjaGVjaywgZGF0YSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9idXNfY29uZCk7CiYjNDM7CiAvKioKICAqIHBjaV9yZXNldF9idXMgLSBUcnkgdG8gcmVzZXQgYSBQQ0kgYnVzCiAgKiBAcGRldjogdG9wIGxldmVsIFBDSSBkZXZpY2UgdG8gcmVzZXQgdmlhIHNsb3QvYnVzCiAgKgotICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIGJ1cyBjYW5ub3QgYmUgbG9ja2VkCiYjNDM7ICogU2FtZSBhcyBhYm92ZSB3aXRob3V0IHRoZSBjb25kaXRpb25hbCBjaGVjay4KICAqLwogaW50IHBjaV9yZXNldF9idXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JcmV0dXJuICghcGNpX3Byb2JlX3Jlc2V0X3Nsb3QocGRldi0mZ3Q7c2xvdCkpID8KLQkgICAgcGNpX3RyeV9yZXNldF9zbG90KHBkZXYtJmd0O3Nsb3QpIDogcGNpX3RyeV9yZXNldF9idXMocGRldi0mZ3Q7YnVzKTsKJiM0MzsJcmV0dXJuIHBjaV9yZXNldF9idXNfY29uZChwZGV2LCBOVUxMLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9idXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oCmluZGV4IDQ0NjllMWE3N2YzYzEuLjQxNmZkNmI3NGFiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS5oCkBAIC0yMzAsNyAmIzQzOzIzMCw2IEBAIGVudW0gcGNpX21tYXBfYXBpIHsKIGludCBwY2lfbW1hcF9maXRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgcmVzbm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1haSwKIAkJICBlbnVtIHBjaV9tbWFwX2FwaSBtbWFwX2FwaSk7CiAKLWJvb2wgcGNpX3Jlc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgcGNpX2luaXRfcmVzZXRfbWV0aG9kcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX2J1c19lcnJvcl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKaW5kZXggM2YxMWE5NjI0YjljMC4uOGU0MjM0MmQ1NmQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKQEAgLTYwOSw3ICYjNDM7NjA5LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAlpZiAocmV0ID09IC1FQUdBSU4pCiAJCWdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlOwogCi0JdmRldi0mZ3Q7cmVzZXRfd29ya3MgPSAhcmV0OwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXZkZXYtJmd0O3BjaV9zYXZlZF9zdGF0ZSA9IHBjaV9zdG9yZV9zYXZlZF9zdGF0ZShwZGV2KTsKIAlpZiAoIXZkZXYtJmd0O3BjaV9zYXZlZF9zdGF0ZSkKQEAgLTc2Niw3ICYjNDM7NzY1LDcgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCWlmIChwY2lfbG9hZF9hbmRfZnJlZV9zYXZlZF9zdGF0ZShwZGV2LCAmYW1wO3ZkZXYtJmd0O3BjaV9zYXZlZF9zdGF0ZSkpIHsKIAkJcGNpX2luZm8ocGRldiwgJiMzNDslczogQ291bGRuJiMzOTt0IHJlbG9hZCBzYXZlZCBzdGF0ZVxuJiMzNDssIF9fZnVuY19fKTsKIAotCQlpZiAoIXZkZXYtJmd0O3Jlc2V0X3dvcmtzKQomIzQzOwkJaWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKHBkZXYpKQogCQkJZ290byBvdXQ7CiAKIAkJcGNpX3NhdmVfc3RhdGUocGRldik7CkBAIC03ODUsMTIgJiM0Mzs3ODQsMTQgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCSAqIFdlIGNhbiBub3QgdXNlIHRoZSAmIzM0O3RyeSYjMzQ7IHJlc2V0IGludGVyZmFjZSBoZXJlLCB3aGljaCB3aWxsCiAJICogb3ZlcndyaXRlIHRoZSBwcmV2aW91c2x5IHJlc3RvcmVkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCiAJICovCi0JaWYgKHZkZXYtJmd0O3Jlc2V0X3dvcmtzKSB7CiYjNDM7CWlmIChwY2lfcmVzZXRfc3VwcG9ydGVkKHBkZXYpKSB7CiAJCWJyaWRnZSA9IHBjaV91cHN0cmVhbV9icmlkZ2UocGRldik7CiAJCWlmIChicmlkZ2UgJmFtcDsmYW1wOyAhcGNpX2Rldl90cnlsb2NrKGJyaWRnZSkpCiAJCQlnb3RvIG91dF9yZXN0b3JlX3N0YXRlOwogCQlpZiAocGNpX2Rldl90cnlsb2NrKHBkZXYpKSB7Ci0JCQlpZiAoIV9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KSkKJiM0MzsJCQkvKiBFbmZvcmNlIGZ1bmN0aW9uIHNjb3BlIHVuZGVyIGxvY2sgZm9yIFNSLUlPViBQRnMgKi8KJiM0MzsJCQlpZiAoIXBjaV9udW1fdmYocGRldikgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHBkZXYpKQogCQkJCXZkZXYtJmd0O25lZWRzX3Jlc2V0ID0gZmFsc2U7CiAJCQlwY2lfZGV2X3VubG9jayhwZGV2KTsKIAkJfQpAQCAtODkyLDYgJiM0Mzs4OTMsMTcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3VudF9kZXZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKQogCXJldHVybiAwOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQQ0kgd2FsayBjYWxsYmFjayB0byBjaGVjayBmb3IgU1ItSU9WIFBGcyB3aXRoIGFjdGl2ZSBWRnMuICBWRnMgYXJlIG5vdAomIzQzOyAqIGVudW1lcmF0ZWQgd2hlbiBkZXRlcm1pbmluZyBhZmZlY3RlZCBkZXZpY2VzIGFuZCBtYXkgYmUgb3duZWQgYnkgc2VwYXJhdGUKJiM0MzsgKiB1c2Vyc3BhY2UgcHJvY2Vzc2VzIGZyb20gdGhlIFBGLiAgSXQmIzM5O3MgdGhlcmVmb3JlIHRoZSB1c2VyJiMzOTtzIHJlc3BvbnNpYmlsaXR5CiYjNDM7ICogdG8gdGVhcmRvd24gVkZzIGZvciBhbnkgYWZmZWN0ZWQgUEYgYmVmb3JlIHBlcmZvcm1pbmcgYSBob3QtcmVzZXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXJldHVybiBwY2lfbnVtX3ZmKHBkZXYpID8gLUVCVVNZIDogMDsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgdmZpb19wY2lfZmlsbF9pbmZvIHsKIAlzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXY7CiAJc3RydWN0IHZmaW9fcGNpX2RlcGVuZGVudF9kZXZpY2UgKmRldmljZXM7CkBAIC0xMDg1LDcgJiM0MzsxMDk3LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mbyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiAKIAlpbmZvLmZsYWdzID0gVkZJT19ERVZJQ0VfRkxBR1NfUENJOwogCi0JaWYgKHZkZXYtJmd0O3Jlc2V0X3dvcmtzKQomIzQzOwlpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2KSkKIAkJaW5mby5mbGFncyB8PSBWRklPX0RFVklDRV9GTEFHU19SRVNFVDsKIAogCWluZm8ubnVtX3JlZ2lvbnMgPSBWRklPX1BDSV9OVU1fUkVHSU9OUyAmIzQzOyB2ZGV2LSZndDtudW1fcmVnaW9uczsKQEAgLTEzMTcsNyAmIzQzOzEzMjksNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCF2ZGV2LSZndDtyZXNldF93b3JrcykKJiM0MzsJaWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKHZkZXYtJmd0O3BkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTsKQEAgLTI1OTYsNyAmIzQzOzI2MDgsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2ZGV2LCAmYW1wO2Rldl9zZXQtJmd0O2RldmljZV9saXN0LCB2ZGV2LmRldl9zZXRfbGlzdCkKIAkJdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7CiAKLQlyZXQgPSBwY2lfcmVzZXRfYnVzKHBkZXYpOwomIzQzOwlyZXQgPSBwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgdmZpb19wY2lfZGV2X2hhc192ZnMsIE5VTEwpOwogCiAJdmRldiA9IGxpc3RfbGFzdF9lbnRyeSgmYW1wO2Rldl9zZXQtJmd0O2RldmljZV9saXN0LAogCQkJICAgICAgIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSwgdmRldi5kZXZfc2V0X2xpc3QpOwpAQCAtMjY1OSw3ICYjNDM7MjY3MSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpCiAJaWYgKHZmaW9fcGNpX2Rldl9zZXRfcG1fcnVudGltZV9nZXQoZGV2X3NldCkpCiAJCXJldHVybjsKIAotCWlmICghcGNpX3Jlc2V0X2J1cyhwZGV2KSkKJiM0MzsJaWYgKCFwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgdmZpb19wY2lfZGV2X2hhc192ZnMsIE5VTEwpKQogCQlyZXNldF9kb25lID0gdHJ1ZTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCAmYW1wO2Rldl9zZXQtJmd0O2RldmljZV9saXN0LCB2ZGV2LmRldl9zZXRfbGlzdCkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggNjRiMzA4YjZlNjFjMS4uNGRlMjFlNmFjNTM4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0xNDc0LDEyICYjNDM7MTQ3NCwxNiBAQCB2b2lkIHBjaWVfcHJpbnRfbGlua19zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpZV9yZXNldF9mbHIoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBwcm9iZSk7CiBpbnQgcGNpZV9mbHIoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwomIzQzO2Jvb2wgcGNpX3Jlc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV9wcm9iZV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCk7CiBpbnQgcGNpX3Byb2JlX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIGludCBwY2lfcmVzZXRfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwomIzQzO2ludCBwY2lfcmVzZXRfYnVzX2NvbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiYjNDM7CQkgICAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLAomIzQzOwkJICAgICAgIHZvaWQgKmRhdGEpOwogdm9pZCBwY2lfcmVzZXRfc2Vjb25kYXJ5X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgcGNpYmlvc19yZXNldF9zZWNvbmRhcnlfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBwY2lfdXBkYXRlX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCmluZGV4IDlhMTY3NGMxNTJhYTIuLjZmYjU5OWVjMjkxOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCkBAIC0xMjEsNyAmIzQzOzEyMSw2IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7CiAJLyogRmxhZ3Mgb25seSBtb2RpZmllZCBvbiBzZXR1cC9yZWxlYXNlIC0gYml0ZmllbGQgb2sgKi8KIAlib29sCQkJaGFzX2R5bl9tc2l4OjE7CiAJYm9vbAkJCXBjaV8yXzM6MTsKLQlib29sCQkJcmVzZXRfd29ya3M6MTsKIAlib29sCQkJZXh0ZW5kZWRfY2FwczoxOwogCWJvb2wJCQloYXNfdmdhOjE7CiAJYm9vbAkJCW5vaW50eDoxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKaW5kZXggNWRlNjE4YTNhNWVlZS4uODYwMzk1OWYxNzM1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCkBAIC03NzIsNiAmIzQzOzc3Miw5IEBAIHN0cnVjdCB2ZmlvX3BjaV9ob3RfcmVzZXRfaW5mbyB7CiAgKiBNaXhlZCB1c2FnZSBvZiBsZWdhY3kgZ3JvdXBzIGFuZCBjZGV2cyBhY3Jvc3MgdGhlIHNldCBvZiBhZmZlY3RlZAogICogZGV2aWNlcyBpcyBub3Qgc3VwcG9ydGVkLgogICoKJiM0MzsgKiBIb3QgcmVzZXQgb2YgU1ItSU9WIFBGcyB3aXRoIGFjdGl2ZSBWRnMgaXMgbm90IHN1cHBvcnRlZCwgU1ItSU9WCiYjNDM7ICogc2hvdWxkIGZpcnN0IGJlIGRpc2FibGVkIG9uIGFueSBhZmZlY3RlZCBQRi4KJiM0MzsgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgogICovCiBzdHJ1Y3QgdmZpb19wY2lfaG90X3Jlc2V0IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxODcKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQQ0kgUmVzZXQgUGF0Y2ggZm9yIFNSLUlPViBQRnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIGFib3V0IHRpZ2h0ZW5pbmcgdXAgdGhlIFBDSSByZXNldCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSBoYXZlIFNpbmdsZSBSb290IEkvTyBWaXJ0dWFsaXphdGlvbiAoU1ItSU9WKSBQaHlzaWNhbCBGdW5jdGlvbnMgKFBGcykgd2l0aCBhY3RpdmUgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykuIFRoZSBwcmltYXJ5IGdvYWwgc2VlbXMgdG8gYmUgcHJldmVudGluZyBhY2NpZGVudGFsIHJlc2V0cyBvZiB0aGUgUEYgaWYgVkZzIGFyZSBpbiB1c2Ug4oCTIGEgY3JpdGljYWwgc2FmZWd1YXJkLgoKVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgcGNpX251bV92ZihkZXYpICZndDsgMGAgY2hlY2tzLiBUaGlzIHNpbXBsZSBjaGVjayBpcyBhZGRlZCB0byBibG9jayBQRiByZXNldHMgd2hlbiBWRnMgYXJlIHByZXNlbnQuIFNtYXJ0LiBJdCYjMzk7cyBhbHNvIG1ha2luZyB1c2Ugb2YgYHBjaV9yZXNldF9idXNfY29uZGAsIHdoaWNoIGxldHMgdXMgaW5qZWN0IGEgY2FsbGJhY2sgZm9yIGRldmljZSBzdGF0dXMgY2hlY2tzICpiZWZvcmUqIGEgYnVzIG9yIHNsb3QgcmVzZXQgaXMgaW5pdGlhdGVkLiBUaGF0JiMzOTtzIGEgcG93ZXJmdWwgdG9vbCwgcHJvdmlkaW5nIG1vcmUgZ3JhbnVsYXIgY29udHJvbC4KCkkgc2VlIHRoYXQgYHZmaW9fcGNpX2NvcmUuY2AgaGFzIGJlZW4gcmVmYWN0b3JlZC4gVGhlIGB2ZGV2LSZndDtyZXNldF93b3Jrc2AgZmxhZyBpcyBnb25lLCByZXBsYWNlZCB3aXRoIGBwY2lfcmVzZXRfc3VwcG9ydGVkKHBkZXYpYC4gRnVuY3Rpb24gY2FsbHMgYXJlIGdlbmVyYWxseSBwcmVmZXJyZWQgb3ZlciBmbGFncyBmb3IgdGhpcyBraW5kIG9mIGxvZ2ljLiBJbiB0aGUgY29udGV4dCBvZiBgdmZpb19wY2lfY29yZS5jYCwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhlIHJlbW92YWwgb2YgdGhhdCBmbGFnIGFmZmVjdHMgZXhpc3RpbmcgbG9naWM7IHRoaXMgd291bGQgYmUgbW9zdCBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aGUgYFZGSU9fREVWSUNFX0dFVF9JTkZPYCBpb2N0bC4KClRoZSBhZGRpdGlvbiBvZiB0aGUgYHZmaW9fcGNpX2Rldl9oYXNfdmZzYCBjYWxsYmFjaywgcmV0dXJuaW5nIGAtRUJVU1lgIHdoZW4gVkZzIGFyZSBhY3RpdmUsIGlzIGNsZXZlci4gSXQmIzM5O3MgZWxlZ2FudGx5IGludGVncmF0ZWQgaW50byBgcGNpX3Jlc2V0X2J1c19jb25kYCB3aXRoaW4gYHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0YCBhbmQgYHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0YC4gVGhpcyBlbnN1cmVzIHRoYXQgZXZlbiBhdHRlbXB0cyB0byByZXNldCB0aHJvdWdoIGhvdCByZXNldCBvciB0cnkgcmVzZXQgd2lsbCByZXNwZWN0IHRoZSBWRiBwcmVzZW5jZS4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjaGFuZ2VzIGRvbiYjMzk7dCBvcGVuIHVwIGFueSB2dWxuZXJhYmlsaXRpZXMuIFdoaWxlIHRoZSBwYXRjaCBtb3N0bHkgbW9kaWZpZXMgY29udHJvbCBmbG93LCByZXR1cm5pbmcgYC1FTk9UVFlgIG9yIGAtRUJVU1lgLCBhbmQgc3dhcHMgYSBmbGFnIGZvciBhIGZ1bmN0aW9uIGNhbGwsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlIGZyb20gYHJlc2V0X3dvcmtzYCB0byBgcGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KWAg4oCTIHRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQgdG8gZXZhbHVhdGUsIHBhcnRpY3VsYXJseSB0aGUgY29udGV4dCBhcm91bmQgYFZGSU9fREVWSUNFX0dFVF9JTkZPYCBhbmQgdGhlIHNldHRpbmcgb2YgYGluZm8uZmxhZ3NgLgoKT2theSwgc28gbG9va2luZyBhdCB0aGUgY29kZSBhcm91bmQgYHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvYCwgaXQgbG9va3MgbGlrZSBgaW5mb2AgaXMgYSBsb2NhbCB2YXJpYWJsZS4gVGhlIHBhdGNoIGlzIHNpbXBseSBjaGFuZ2luZyB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYFZGSU9fREVWSUNFX0ZMQUdTX1JFU0VUYCB0aHJvdWdoIHRoZSB1c2Ugb2YgYHBjaV9yZXNldF9zdXBwb3J0ZWQodmRldi0mZ3Q7cGRldilgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgYGluZm9gIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgdGhhdCBleGlzdGluZyBjb2RlIHBhdGggaXMgY292ZXJlZCBieSBleGlzdGluZyBjaGVja3MuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AgYXJvdW5kIGxpbmUgMTA4NSB0byBtYWtlIHN1cmUuIExldCBtZSB1c2UgYGRlZmF1bHRfYXBpOnJlYWQtZmlsZWAgdG8gZG8gYSBxdWljayBjaGVjay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0fVxuMTA4MTpcdFxuMTA4MjpcdHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfZ2V0X2luZm8oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuMTA4MzpcdFx0XHRcdFx0ICAgc3RydWN0IHZmaW9fZGV2aWNlX2luZm8gX191c2VyICphcmcpXG4xMDg0Olx0e1xuMTA4NTpcdFx0dW5zaWduZWQgbG9uZyBtaW5zeiA9IG9mZnNldG9mZW5kKHN0cnVjdCB2ZmlvX2RldmljZV9pbmZvLCBudW1faXJxcyk7XG4xMDg2Olx0XHRzdHJ1Y3QgdmZpb19kZXZpY2VfaW5mbyBpbmZvID0ge307XG4xMDg3Olx0XHRzdHJ1Y3QgdmZpb19pbmZvX2NhcCBjYXBzID0geyAuYnVmID0gTlVMTCwgLnNpemUgPSAwIH07XG4xMDg4Olx0XHRpbnQgcmV0O1xuMTA4OTpcdFxuMTA5MDpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmluZm8sIGFyZywgbWluc3opKVxuMTA5MTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjEwOTI6XHRcbjEwOTM6XHRcdGlmIChpbmZvLmFyZ3N6IFx1MDAzYyBtaW5zeilcbjEwOTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDk1Olx0XG4xMDk2Olx0XHRtaW5zeiA9IG1pbl90KHNpemVfdCwgaW5mby5hcmdzeiwgc2l6ZW9mKGluZm8pKTtcbjEwOTc6XHRcbjEwOTg6XHRcdGluZm8uZmxhZ3MgPSBWRklPX0RFVklDRV9GTEFHU19QQ0k7XG4xMDk5Olx0XG4xMTAwOlx0XHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYpKVxuMTEwMTpcdFx0XHRpbmZvLmZsYWdzIHw9IFZGSU9fREVWSUNFX0ZMQUdTX1JFU0VUO1xuMTEwMjpcdFxuMTEwMzpcdFx0aW5mby5udW1fcmVnaW9ucyA9IFZGSU9fUENJX05VTV9SRUdJT05TICYjNDM7IHZkZXYtXHUwMDNlbnVtX3JlZ2lvbnM7XG4xMTA0Olx0XHRpbmZvLm51bV9pcnFzID0gVkZJT19QQ0lfTlVNX0lSUVM7XG4xMTA1Olx0XG4xMTA2Olx0XHRyZXQgPSB2ZmlvX3BjaV9pbmZvX3pkZXZfYWRkX2NhcHModmRldiwgXHUwMDI2Y2Fwcyk7XG4xMTA3Olx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVikge1xuMTEwODpcdFx0XHRwY2lfd2Fybih2ZGV2LVx1MDAzZXBkZXYsXG4xMTA5Olx0XHRcdFx0IFwmIzM0O0ZhaWxlZCB0byBzZXR1cCB6UENJIGluZm8gY2FwYWJpbGl0aWVzXFxuXCYjMzQ7KTtcbjExMTA6XHRcdFx0cmV0dXJuIHJldDtcbjExMTE6XHRcdH1cbjExMTI6XHRcbjExMTM6XHRcdHJldCA9IHZmaW9fcGNpX2luZm9fYXRvbWljX2NhcCh2ZGV2LCBcdTAwMjZjYXBzKTtcbjExMTQ6XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU5PREVWKSB7XG4xMTE1Olx0XHRcdHBjaV93YXJuKHZkZXYtXHUwMDNlcGRldixcbjExMTY6XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIEF0b21pY09wcyBpbmZvIGNhcGFiaWxpdHlcXG5cJiMzNDspO1xuMTExNzpcdFx0XHRyZXR1cm4gcmV0O1xuMTExODpcdFx0fVxuMTExOTpcdFxuMTEyMDpcdFx0aWYgKGNhcHMuc2l6ZSkge1xuMTEyMTpcdFx0XHRpbmZvLmZsYWdzIHw9IFZGSU9fREVWSUNFX0ZMQUdTX0NBUFM7XG4xMTIyOlx0XHRcdGlmIChpbmZvLmFyZ3N6IFx1MDAzYyBzaXplb2YoaW5mbykgJiM0MzsgY2Fwcy5zaXplKSB7XG4xMTIzOlx0XHRcdFx0aW5mby5hcmdzeiA9IHNpemVvZihpbmZvKSAmIzQzOyBjYXBzLnNpemU7XG4xMTI0Olx0XHRcdH0gZWxzZSB7XG4xMTI1Olx0XHRcdFx0dmZpb19pbmZvX2NhcF9zaGlmdChcdTAwMjZjYXBzLCBzaXplb2YoaW5mbykpO1xuMTEyNjpcdFx0XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJnICYjNDM7IDEsIGNhcHMuYnVmLCBjYXBzLnNpemUpKSB7XG4xMTI3Olx0XHRcdFx0XHRrZnJlZShjYXBzLmJ1Zik7XG4xMTI4Olx0XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjExMjk6XHRcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTgKCQkJCQkJCW91dHB1dDogMjkyCgkJCQkJCQl0aG91Z2h0czogNTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBDSSBSZXNldCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZnJvbSBhIHNhZmV0eSBwZXJzcGVjdGl2ZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgaW5mb2Agc3RydWN0IGJlaW5nIGluaXRpYWxpemVkIHRvIGB7fWAgcmlnaHQgb2ZmIHRoZSBiYXQgZW5zdXJlcyBpdCBzdGFydHMgemVyb2VkLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBtb2RpZnlpbmcgdGhlIGxvZ2ljIGFyb3VuZCBQQ0kgZGV2aWNlIHJlc2V0cywgcGFydGljdWxhcmx5IGF2b2lkaW5nIHRoZSByZXNldCBvZiBTUi1JT1YgUGh5c2ljYWwgRnVuY3Rpb25zIChQRnMpIHRoYXQgaGF2ZSBhY3RpdmUgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykuCgpUaGUgaW50cm9kdWN0aW9uIG9mIGBwY2lfcmVzZXRfYnVzX2NvbmRgIGlzIGEga2V5IGFkZGl0aW9uOyBpdCB0YWtlcyBhIGNhbGxiYWNrLCBhbGxvd2luZyBmb3IgbW9yZSBncmFudWxhciBkZXZpY2UgY2hlY2tzICpiZWZvcmUqIGEgcmVzZXQgaXMgdHJpZ2dlcmVkLiBUaGlzIGNhbGxiYWNrLCBgdmZpb19wY2lfZGV2X2hhc192ZnNgIHNwZWNpZmljYWxseSwgaXMgdXNlZCB0byBwcmV2ZW50IHRoZSByZXNldCBvZiB0aG9zZSBQRnMgd2l0aCBhY3RpdmUgVkZzLiBXZSBhcmUgYWxzbyBpbnRyb2R1Y2luZyBmdW5jdGlvbnMgdG8gYWlkIHRoZSBwcm9jZXNzIGluIGBwY2lfd2Fsa19yZXNldF9jaGVja2AsIGBwY2lfdHJ5X3Jlc2V0X3Nsb3RgLCBhbmQgYHBjaV90cnlfcmVzZXRfYnVzYCwgYXMgd2VsbCBhcyBleHBvcnRpbmcgYHBjaV9yZXNldF9zdXBwb3J0ZWRgLgoKU28sIG5vdGhpbmcganVtcHMgb3V0IGFzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2ssIGluZm8gbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbi4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHRoZSByaWdodCB0b29scyBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgbGFyZ2VseSBhYm91dCBjb250cm9sbGluZyB0aGUgZmxvdyBvZiB0aGUgcmVzZXQgcHJvY2VzcyBhbmQgbWFraW5nIHN1cmUgdGhlIHJpZ2h0IFBDSSBkZXZpY2VzIGFyZSB0YXJnZXRlZCBvciBza2lwcGVkLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhpcyBieSBleGFtaW5pbmcgYWxsIG9mIHRoZSBvdGhlciBjaGFuZ2VzOiBgdmZpb19wY2lfY29yZV9lbmFibGVgLCBgdmZpb19wY2lfY29yZV9kaXNhYmxlYCwgYHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvYCwgYHZmaW9fcGNpX2lvY3RsX3Jlc2V0YCwgYHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0YCwgYW5kIGB2ZmlvX3BjaV9kZXZfc2V0X3RyeV9yZXNldGAgYWxsIHNlZW0gdG8gYmUgbGV2ZXJhZ2luZyB0aGlzIG5ldyBjb25kaXRpb25hbCBsb2dpYy4KCkdpdmVuIHRoaXMsIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIFRoZSBwcmltYXJ5IHJpc2sgaXMgdGhlIGxvZ2ljIG9mIHdoZW4gYSByZXNldCBoYXBwZW5zLCBub3QgKmhvdyogbWVtb3J5IGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgZGV2aWNlIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCBQQ0kgc3Vic3lzdGVtIEFQSXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgbW9kaWZ5IGJ1ZmZlciBhbGxvY2F0aW9ucywgcGFkZGluZywgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgYHZmaW9fZGV2aWNlX2luZm9gIHN0cnVjdHVyZSBtb2RpZmllZCBpbiBgdmZpb19wY2lfaW9jdGxfZ2V0X2luZm9gIGlzIGFscmVhZHkgZnVsbHkgemVyby1pbml0aWFsaXplZCAoYHN0cnVjdCB2ZmlvX2RldmljZV9pbmZvIGluZm8gPSB7fTtgKS5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgZGV2aWNlIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCBQQ0kgc3Vic3lzdGVtIEFQSXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgbW9kaWZ5IGJ1ZmZlciBhbGxvY2F0aW9ucywgcGFkZGluZywgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgYHZmaW9fZGV2aWNlX2luZm9gIHN0cnVjdHVyZSBtb2RpZmllZCBpbiBgdmZpb19wY2lfaW9jdGxfZ2V0X2luZm9gIGlzIGFscmVhZHkgZnVsbHkgemVyby1pbml0aWFsaXplZCAoYHN0cnVjdCB2ZmlvX2RldmljZV9pbmZvIGluZm8gPSB7fTtgKS5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjQ6NTMuNTk5ODQ2NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzM4NTIzNjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQ0lcIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGNpX3Jlc2V0X2J1c19jb25kXCIsXG4gICAgXCJwY2lfcmVzZXRfZnVuY3Rpb25cIixcbiAgICBcInBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWRcIixcbiAgICBcInBjaV90cnlfcmVzZXRfZnVuY3Rpb25cIixcbiAgICBcInBjaV9yZXNldF9idXNcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfaW9jdGxcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZGlzYWJsZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9lbmFibGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBkZXZpY2Ugc3RhdGUgbWFuYWdlbWVudCwgYW5kIFBDSSBzdWJzeXN0ZW0gQVBJcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBtb2RpZnkgYnVmZmVyIGFsbG9jYXRpb25zLCBwYWRkaW5nLCBvciBpbml0aWFsaXphdGlvbiBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBgdmZpb19kZXZpY2VfaW5mb2Agc3RydWN0dXJlIG1vZGlmaWVkIGluIGB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mb2AgaXMgYWxyZWFkeSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChgc3RydWN0IHZmaW9fZGV2aWNlX2luZm8gaW5mbyA9IHt9O2ApLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIGxvY2tpbmcgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgbW9kaWZpZXMgUENJIHJlc2V0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IHJlc2V0dGluZyBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gSXQgYWxzbyB1cGRhdGVzIFZGSU8gUENJIGNvcmUgdG8gdXNlIHRoZXNlIG5ldyBjaGVja3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBQQ0kgYW5kIFZGSU8gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI0OjUzLjU5OTg1MjU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ1NTM0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YzhlMDBjYzRiYWU0ZmNiODM4ZDc3ODBhNDU5MWMyZmMxNDhmNjljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDA1OjI0OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmNcXG5pbmRleCA3N2IxN2IxM2VlNjE1Li4wYjRmMTMzOTdkYTI0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jXFxuKysrIGIvZHJpdmVycy9wY2kvcGNpLmNcXG5AQCAtOTgsNiArOTgsNyBAQCBib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldilcXG4ge1xcbiBcXHRyZXR1cm4gZGV2LVxcdTAwM2VyZXNldF9tZXRob2RzWzBdICE9IDA7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X3N1cHBvcnRlZCk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1BDSV9ET01BSU5TXFxuIGludCBwY2lfZG9tYWluc19zdXBwb3J0ZWQgPSAxO1xcbkBAIC01MjIyLDExICs1MjIzLDIyIEBAIGludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldilcXG4gXFx0XFx0cGNpX2Rldl9sb2NrKGJyaWRnZSk7XFxuIFxcbiBcXHRwY2lfZGV2X2xvY2soZGV2KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJlc2V0IG9mIGFuIFNSLUlPViBQRiBuZWNlc3NhcmlseSByZXNldHMgYW55IGFjdGl2ZSBWRnMuICBTdWNoIHJlc2V0cyBhcmVcXG4rXFx0ICogYmV5b25kIHRoZSBzY29wZSBhZHZlcnRpc2VkIGZvciBwY2lfcmVzZXRfZnVuY3Rpb24oKSBhbmQgdmFyaWFudHMsIHJlZnVzZS5cXG4rXFx0ICovXFxuK1xcdGlmIChwY2lfbnVtX3ZmKGRldikgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHJjID0gLUVOT1RUWTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuIFxcdHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZShkZXYpO1xcbiBcXG4gXFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcXG4gXFxuIFxcdHBjaV9kZXZfcmVzdG9yZShkZXYpO1xcbit1bmxvY2s6XFxuIFxcdHBjaV9kZXZfdW5sb2NrKGRldik7XFxuIFxcbiBcXHRpZiAoYnJpZGdlKVxcbkBAIC01MjY0LDYgKzUyNzYsOSBAQCBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXHRpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQoZGV2KSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIFxcbitcXHRpZiAocGNpX251bV92ZihkZXYpIFxcdTAwM2UgMClcXG4rXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuK1xcbiBcXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcXG4gXFxuIFxcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XFxuQEAgLTUyOTAsNiArNTMwNSwxMSBAQCBpbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXHRpZiAoIXBjaV9kZXZfdHJ5bG9jayhkZXYpKVxcbiBcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFxuK1xcdGlmIChwY2lfbnVtX3ZmKGRldikgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHBjaV9kZXZfdW5sb2NrKGRldik7XFxuK1xcdFxcdHJldHVybiAtRU5PVFRZO1xcbitcXHR9XFxuK1xcbiBcXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcXG4gXFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcXG4gXFx0cGNpX2Rldl9yZXN0b3JlKGRldik7XFxuQEAgLTU1NDgsOSArNTU2OCwzNiBAQCBpbnQgcGNpX3Byb2JlX3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wcm9iZV9yZXNldF9zbG90KTtcXG4gXFxuKy8qIENhbGwgQGNiIG9uIGV2ZXJ5IGRldmljZSBhIHNsb3Qgb3IgYnVzIHJlc2V0IGFmZmVjdHMsIHN0b3BwaW5nIG9uIGVycm9yLiAqL1xcbitzdGF0aWMgaW50IHBjaV93YWxrX3Jlc2V0X2NoZWNrKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfc2xvdCAqc2xvdCxcXG4rXFx0XFx0XFx0XFx0aW50ICgqY2IpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxcbitcXHRcXHRcXHRcXHR2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpkZXY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBcXHUwMDI2YnVzLVxcdTAwM2VkZXZpY2VzLCBidXNfbGlzdCkge1xcbitcXHRcXHRpZiAoc2xvdCBcXHUwMDI2XFx1MDAyNiAoIWRldi1cXHUwMDNlc2xvdCB8fCBkZXYtXFx1MDAzZXNsb3QgIT0gc2xvdCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyYyA9IGNiKGRldiwgZGF0YSk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHRpZiAoZGV2LVxcdTAwM2VzdWJvcmRpbmF0ZSkge1xcbitcXHRcXHRcXHRyYyA9IHBjaV93YWxrX3Jlc2V0X2NoZWNrKGRldi1cXHUwMDNlc3Vib3JkaW5hdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgTlVMTCwgY2IsIGRhdGEpO1xcbitcXHRcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHBjaV90cnlfcmVzZXRfc2xvdCAtIFRyeSB0byByZXNldCBhIFBDSSBzbG90XFxuICAqIEBzbG90OiBQQ0kgc2xvdCB0byByZXNldFxcbisgKiBAY2hlY2s6IG9wdGlvbmFsIHBlci1kZXZpY2UgY2FsbGJhY2sgdGhhdCBjYW4gYWJvcnQgdGhlIHJlc2V0XFxuKyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgZm9yIEBjaGVja1xcbiAgKlxcbiAgKiBBIFBDSSBidXMgbWF5IGhvc3QgbXVsdGlwbGUgc2xvdHMsIGVhY2ggc2xvdCBtYXkgc3VwcG9ydCBhIHJlc2V0IG1lY2hhbmlzbVxcbiAgKiBpbmRlcGVuZGVudCBvZiBvdGhlciBzbG90cy4gIEZvciBpbnN0YW5jZSwgc29tZSBzbG90cyBtYXkgc3VwcG9ydCBzbG90IHBvd2VyXFxuQEAgLTU1NjMsNyArNTYxMCw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wcm9iZV9yZXNldF9zbG90KTtcXG4gICpcXG4gICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIHNsb3QgY2Fubm90IGJlIGxvY2tlZFxcbiAgKi9cXG4tc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KVxcbitzdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsXFxuK1xcdFxcdFxcdCAgICAgIGludCAoKmNoZWNrKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSxcXG4rXFx0XFx0XFx0ICAgICAgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRpbnQgcmM7XFxuIFxcbkBAIC01NTcyLDEwICs1NjIxLDE0IEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdClcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXG4gXFx0aWYgKHBjaV9zbG90X3RyeWxvY2soc2xvdCkpIHtcXG4tXFx0XFx0cGNpX3Nsb3Rfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoc2xvdCk7XFxuLVxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuLVxcdFxcdHJjID0gcGNpX3Jlc2V0X2hvdHBsdWdfc2xvdChzbG90LVxcdTAwM2Vob3RwbHVnLCBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xcbi1cXHRcXHRwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTtcXG4rXFx0XFx0cmMgPSBjaGVjayA/IHBjaV93YWxrX3Jlc2V0X2NoZWNrKHNsb3QtXFx1MDAzZWJ1cywgc2xvdCwgY2hlY2ssIGRhdGEpIDogMDtcXG4rXFx0XFx0aWYgKCFyYykge1xcbitcXHRcXHRcXHRwY2lfc2xvdF9zYXZlX2FuZF9kaXNhYmxlX2xvY2tlZChzbG90KTtcXG4rXFx0XFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4rXFx0XFx0XFx0cmMgPSBwY2lfcmVzZXRfaG90cGx1Z19zbG90KHNsb3QtXFx1MDAzZWhvdHBsdWcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xcbitcXHRcXHRcXHRwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRwY2lfc2xvdF91bmxvY2soc2xvdCk7XFxuIFxcdH0gZWxzZVxcbiBcXHRcXHRyYyA9IC1FQUdBSU47XFxuQEAgLTU2MDcsMTAgKzU2NjAsMTQgQEAgc3RhdGljIGludCBwY2lfYnVzX3Jlc2V0KHN0cnVjdCBwY2lfYnVzICpidXMsIGJvb2wgcHJvYmUpXFxuIC8qKlxcbiAgKiBwY2lfdHJ5X3Jlc2V0X2J1cyAtIFRyeSB0byByZXNldCBhIFBDSSBidXNcXG4gICogQGJ1czogdG9wIGxldmVsIFBDSSBidXMgdG8gcmVzZXRcXG4rICogQGNoZWNrOiBvcHRpb25hbCBwZXItZGV2aWNlIGNhbGxiYWNrIHRoYXQgY2FuIGFib3J0IHRoZSByZXNldFxcbisgKiBAZGF0YTogb3BhcXVlIGFyZ3VtZW50IGZvciBAY2hlY2tcXG4gICpcXG4gICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIGJ1cyBjYW5ub3QgYmUgbG9ja2VkXFxuICAqL1xcbi1zdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpXFxuK3N0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cyxcXG4rXFx0XFx0XFx0ICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXFxuK1xcdFxcdFxcdCAgICAgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRpbnQgcmM7XFxuIFxcbkBAIC01NjE5LDEwICs1Njc2LDEzIEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXG4gXFx0aWYgKHBjaV9idXNfdHJ5bG9jayhidXMpKSB7XFxuLVxcdFxcdHBjaV9idXNfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoYnVzKTtcXG4tXFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4tXFx0XFx0cmMgPSBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoYnVzLVxcdTAwM2VzZWxmKTtcXG4tXFx0XFx0cGNpX2J1c19yZXN0b3JlX2xvY2tlZChidXMpO1xcbitcXHRcXHRyYyA9IGNoZWNrID8gcGNpX3dhbGtfcmVzZXRfY2hlY2soYnVzLCBOVUxMLCBjaGVjaywgZGF0YSkgOiAwO1xcbitcXHRcXHRpZiAoIXJjKSB7XFxuK1xcdFxcdFxcdHBjaV9idXNfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoYnVzKTtcXG4rXFx0XFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4rXFx0XFx0XFx0cmMgPSBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoYnVzLVxcdTAwM2VzZWxmKTtcXG4rXFx0XFx0XFx0cGNpX2J1c19yZXN0b3JlX2xvY2tlZChidXMpO1xcbitcXHRcXHR9XFxuIFxcdFxcdHBjaV9idXNfdW5sb2NrKGJ1cyk7XFxuIFxcdH0gZWxzZVxcbiBcXHRcXHRyYyA9IC1FQUdBSU47XFxuQEAgLTU2NjEsNyArNTcyMSw3IEBAIHN0YXRpYyBpbnQgcGNpX3Jlc2V0X2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlLCBib29sIHJlc3RvcmUpXFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsIFxcdTAwMjZidXMtXFx1MDAzZXNsb3RzLCBsaXN0KSB7XFxuIFxcdFxcdGlmIChyZXN0b3JlKVxcbi1cXHRcXHRcXHRyZXQgPSBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc2xvdCk7XFxuK1xcdFxcdFxcdHJldCA9IHBjaV90cnlfcmVzZXRfc2xvdChzbG90LCBOVUxMLCBOVUxMKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRyZXQgPSBwY2lfc2xvdF9yZXNldChzbG90LCBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xcbiBcXG5AQCAtNTY3NSw3ICs1NzM1LDcgQEAgc3RhdGljIGludCBwY2lfcmVzZXRfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsIGJvb2wgcmVzdG9yZSlcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwY2lfc2xvdF9tdXRleCk7XFxuIFxcbiBcXHRpZiAocmVzdG9yZSlcXG4tXFx0XFx0cmV0dXJuIHBjaV90cnlfcmVzZXRfYnVzKGJ1cyk7XFxuK1xcdFxcdHJldHVybiBwY2lfdHJ5X3Jlc2V0X2J1cyhidXMsIE5VTEwsIE5VTEwpO1xcbiBcXHRyZXR1cm4gcGNpX2J1c19yZXNldChicmlkZ2UtXFx1MDAzZXN1Ym9yZGluYXRlLCBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xcbiB9XFxuIFxcbkBAIC01NzA1LDE2ICs1NzY1LDQzIEBAIGludCBwY2lfcHJvYmVfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X2J1cyk7XFxuIFxcbisvKipcXG4rICogcGNpX3Jlc2V0X2J1c19jb25kIC0gY29uZGl0aW9uYWxseSByZXNldCB0aGUgc2xvdCBvciBidXMgY29udGFpbmluZyBhIGRldmljZVxcbisgKiBAcGRldjogdG9wIGxldmVsIFBDSSBkZXZpY2UgdG8gcmVzZXQgdmlhIHNsb3QvYnVzXFxuKyAqIEBjaGVjazogb3B0aW9uYWwgY2FsbGJhY2sgaW52b2tlZCBvbiBlYWNoIGFmZmVjdGVkIGRldmljZSBiZWZvcmUgdGhlIHJlc2V0XFxuKyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgcGFzc2VkIHRvIEBjaGVja1xcbisgKlxcbisgKiBSZXNldCB0aGUgc2xvdCBvciBidXMgY29udGFpbmluZyBAcGRldi4gIE9uY2UgdGhlIGVudGlyZSBwaHlzaWNhbCBidXMvc2xvdFxcbisgKiBoaWVyYXJjaHkgaXMgbG9ja2VkLCBAY2hlY2sgKGlmIG5vdCBOVUxMKSBpcyBjYWxsZWQgb24gZWFjaCBvZiB0aG9zZSBsb2NrZWRcXG4rICogZGV2aWNlcy4gIEEgbm9uemVybyByZXR1cm4gYWJvcnRzIHRoZSByZXNldCBhbmQgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlcixcXG4rICogb3RoZXJ3aXNlIHRoZSByZXNldCBwcm9jZWVkcy5cXG4rICpcXG4rICogTkIuIEBjaGVjayBydW5zIHdpdGggdGhlIGZ1bGwgc2V0IG9mIGRldmljZV9sb2NrcyBub3RlZCBhYm92ZSBoZWxkOyBjYWxsYmFja3NcXG4rICogbXVzdCB0YWtlIHRoZXNlIGxvY2tpbmcgc2VtYW50aWNzIGludG8gYWNjb3VudC4gIFVzZSBOVUxMIHRvIHBlcmZvcm0gYW5cXG4rICogdW5jb25kaXRpb25hbCByZXNldC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9UVFkgaWYgQHBkZXYgaXMgbm90IHJlc2V0dGFibGUsIC1FQUdBSU4gaWYgdGhlXFxuKyAqIGRldmljZXMgY2Fubm90IGJlIGxvY2tlZCwgb3IgdGhlIHZhbHVlIHJldHVybmVkIGJ5IEBjaGVjay5cXG4rICovXFxuK2ludCBwY2lfcmVzZXRfYnVzX2NvbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdCAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXFxuK1xcdFxcdCAgICAgICB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHJldHVybiAhcGNpX3Byb2JlX3Jlc2V0X3Nsb3QocGRldi1cXHUwMDNlc2xvdCkgP1xcbitcXHRcXHRwY2lfdHJ5X3Jlc2V0X3Nsb3QocGRldi1cXHUwMDNlc2xvdCwgY2hlY2ssIGRhdGEpIDpcXG4rXFx0XFx0cGNpX3RyeV9yZXNldF9idXMocGRldi1cXHUwMDNlYnVzLCBjaGVjaywgZGF0YSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2J1c19jb25kKTtcXG4rXFxuIC8qKlxcbiAgKiBwY2lfcmVzZXRfYnVzIC0gVHJ5IHRvIHJlc2V0IGEgUENJIGJ1c1xcbiAgKiBAcGRldjogdG9wIGxldmVsIFBDSSBkZXZpY2UgdG8gcmVzZXQgdmlhIHNsb3QvYnVzXFxuICAqXFxuLSAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBidXMgY2Fubm90IGJlIGxvY2tlZFxcbisgKiBTYW1lIGFzIGFib3ZlIHdpdGhvdXQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLlxcbiAgKi9cXG4gaW50IHBjaV9yZXNldF9idXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4tXFx0cmV0dXJuICghcGNpX3Byb2JlX3Jlc2V0X3Nsb3QocGRldi1cXHUwMDNlc2xvdCkpID9cXG4tXFx0ICAgIHBjaV90cnlfcmVzZXRfc2xvdChwZGV2LVxcdTAwM2VzbG90KSA6IHBjaV90cnlfcmVzZXRfYnVzKHBkZXYtXFx1MDAzZWJ1cyk7XFxuK1xcdHJldHVybiBwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgTlVMTCwgTlVMTCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2J1cyk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oXFxuaW5kZXggNDQ2OWUxYTc3ZjNjMS4uNDE2ZmQ2Yjc0YWJlNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS9wY2kuaFxcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oXFxuQEAgLTIzMCw3ICsyMzAsNiBAQCBlbnVtIHBjaV9tbWFwX2FwaSB7XFxuIGludCBwY2lfbW1hcF9maXRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgcmVzbm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1haSxcXG4gXFx0XFx0ICBlbnVtIHBjaV9tbWFwX2FwaSBtbWFwX2FwaSk7XFxuIFxcbi1ib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIHZvaWQgcGNpX2luaXRfcmVzZXRfbWV0aG9kcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gaW50IHBjaV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gaW50IHBjaV9idXNfZXJyb3JfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcXG5pbmRleCAzZjExYTk2MjRiOWMwLi44ZTQyMzQyZDU2ZDNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcXG5AQCAtNjA5LDcgKzYwOSw2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuIFxcdGlmIChyZXQgPT0gLUVBR0FJTilcXG4gXFx0XFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XFxuIFxcbi1cXHR2ZGV2LVxcdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XFxuIFxcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXHR2ZGV2LVxcdTAwM2VwY2lfc2F2ZWRfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7XFxuIFxcdGlmICghdmRldi1cXHUwMDNlcGNpX3NhdmVkX3N0YXRlKVxcbkBAIC03NjYsNyArNzY1LDcgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBcXHRpZiAocGNpX2xvYWRfYW5kX2ZyZWVfc2F2ZWRfc3RhdGUocGRldiwgXFx1MDAyNnZkZXYtXFx1MDAzZXBjaV9zYXZlZF9zdGF0ZSkpIHtcXG4gXFx0XFx0cGNpX2luZm8ocGRldiwgXFxcIiVzOiBDb3VsZG4ndCByZWxvYWQgc2F2ZWQgc3RhdGVcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFxuLVxcdFxcdGlmICghdmRldi1cXHUwMDNlcmVzZXRfd29ya3MpXFxuK1xcdFxcdGlmICghcGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRcXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcXG5AQCAtNzg1LDEyICs3ODQsMTQgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBcXHQgKiBXZSBjYW4gbm90IHVzZSB0aGUgXFxcInRyeVxcXCIgcmVzZXQgaW50ZXJmYWNlIGhlcmUsIHdoaWNoIHdpbGxcXG4gXFx0ICogb3ZlcndyaXRlIHRoZSBwcmV2aW91c2x5IHJlc3RvcmVkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXFxuIFxcdCAqL1xcbi1cXHRpZiAodmRldi1cXHUwMDNlcmVzZXRfd29ya3MpIHtcXG4rXFx0aWYgKHBjaV9yZXNldF9zdXBwb3J0ZWQocGRldikpIHtcXG4gXFx0XFx0YnJpZGdlID0gcGNpX3Vwc3RyZWFtX2JyaWRnZShwZGV2KTtcXG4gXFx0XFx0aWYgKGJyaWRnZSBcXHUwMDI2XFx1MDAyNiAhcGNpX2Rldl90cnlsb2NrKGJyaWRnZSkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfc3RhdGU7XFxuIFxcdFxcdGlmIChwY2lfZGV2X3RyeWxvY2socGRldikpIHtcXG4tXFx0XFx0XFx0aWYgKCFfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQocGRldikpXFxuK1xcdFxcdFxcdC8qIEVuZm9yY2UgZnVuY3Rpb24gc2NvcGUgdW5kZXIgbG9jayBmb3IgU1ItSU9WIFBGcyAqL1xcbitcXHRcXHRcXHRpZiAoIXBjaV9udW1fdmYocGRldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICFfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQocGRldikpXFxuIFxcdFxcdFxcdFxcdHZkZXYtXFx1MDAzZW5lZWRzX3Jlc2V0ID0gZmFsc2U7XFxuIFxcdFxcdFxcdHBjaV9kZXZfdW5sb2NrKHBkZXYpO1xcbiBcXHRcXHR9XFxuQEAgLTg5Miw2ICs4OTMsMTcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3VudF9kZXZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogUENJIHdhbGsgY2FsbGJhY2sgdG8gY2hlY2sgZm9yIFNSLUlPViBQRnMgd2l0aCBhY3RpdmUgVkZzLiAgVkZzIGFyZSBub3RcXG4rICogZW51bWVyYXRlZCB3aGVuIGRldGVybWluaW5nIGFmZmVjdGVkIGRldmljZXMgYW5kIG1heSBiZSBvd25lZCBieSBzZXBhcmF0ZVxcbisgKiB1c2Vyc3BhY2UgcHJvY2Vzc2VzIGZyb20gdGhlIFBGLiAgSXQncyB0aGVyZWZvcmUgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eVxcbisgKiB0byB0ZWFyZG93biBWRnMgZm9yIGFueSBhZmZlY3RlZCBQRiBiZWZvcmUgcGVyZm9ybWluZyBhIGhvdC1yZXNldC5cXG4rICovXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZGV2X2hhc192ZnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0cmV0dXJuIHBjaV9udW1fdmYocGRldikgPyAtRUJVU1kgOiAwO1xcbit9XFxuK1xcbiBzdHJ1Y3QgdmZpb19wY2lfZmlsbF9pbmZvIHtcXG4gXFx0c3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2O1xcbiBcXHRzdHJ1Y3QgdmZpb19wY2lfZGVwZW5kZW50X2RldmljZSAqZGV2aWNlcztcXG5AQCAtMTA4NSw3ICsxMDk3LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mbyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuIFxcbiBcXHRpbmZvLmZsYWdzID0gVkZJT19ERVZJQ0VfRkxBR1NfUENJO1xcbiBcXG4tXFx0aWYgKHZkZXYtXFx1MDAzZXJlc2V0X3dvcmtzKVxcbitcXHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZCh2ZGV2LVxcdTAwM2VwZGV2KSlcXG4gXFx0XFx0aW5mby5mbGFncyB8PSBWRklPX0RFVklDRV9GTEFHU19SRVNFVDtcXG4gXFxuIFxcdGluZm8ubnVtX3JlZ2lvbnMgPSBWRklPX1BDSV9OVU1fUkVHSU9OUyArIHZkZXYtXFx1MDAzZW51bV9yZWdpb25zO1xcbkBAIC0xMzE3LDcgKzEzMjksNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKCF2ZGV2LVxcdTAwM2VyZXNldF93b3JrcylcXG4rXFx0aWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKHZkZXYtXFx1MDAzZXBkZXYpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcXG5AQCAtMjU5Niw3ICsyNjA4LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZkZXYsIFxcdTAwMjZkZXZfc2V0LVxcdTAwM2VkZXZpY2VfbGlzdCwgdmRldi5kZXZfc2V0X2xpc3QpXFxuIFxcdFxcdHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xcbiBcXG4tXFx0cmV0ID0gcGNpX3Jlc2V0X2J1cyhwZGV2KTtcXG4rXFx0cmV0ID0gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIHZmaW9fcGNpX2Rldl9oYXNfdmZzLCBOVUxMKTtcXG4gXFxuIFxcdHZkZXYgPSBsaXN0X2xhc3RfZW50cnkoXFx1MDAyNmRldl9zZXQtXFx1MDAzZWRldmljZV9saXN0LFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlLCB2ZGV2LmRldl9zZXRfbGlzdCk7XFxuQEAgLTI2NTksNyArMjY3MSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXFxuIFxcdGlmICh2ZmlvX3BjaV9kZXZfc2V0X3BtX3J1bnRpbWVfZ2V0KGRldl9zZXQpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAoIXBjaV9yZXNldF9idXMocGRldikpXFxuK1xcdGlmICghcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIHZmaW9fcGNpX2Rldl9oYXNfdmZzLCBOVUxMKSlcXG4gXFx0XFx0cmVzZXRfZG9uZSA9IHRydWU7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgXFx1MDAyNmRldl9zZXQtXFx1MDAzZWRldmljZV9saXN0LCB2ZGV2LmRldl9zZXRfbGlzdCkge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbmluZGV4IDY0YjMwOGI2ZTYxYzEuLjRkZTIxZTZhYzUzOGYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmhcXG5AQCAtMTQ3NCwxMiArMTQ3NCwxNiBAQCB2b2lkIHBjaWVfcHJpbnRfbGlua19zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIGludCBwY2llX3Jlc2V0X2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIHByb2JlKTtcXG4gaW50IHBjaWVfZmxyKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbiBpbnQgX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbitib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIGludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIGludCBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbiBpbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gaW50IHBjaV9wcm9iZV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCk7XFxuIGludCBwY2lfcHJvYmVfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpO1xcbiBpbnQgcGNpX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4raW50IHBjaV9yZXNldF9idXNfY29uZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4rXFx0XFx0ICAgICAgIGludCAoKmNoZWNrKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSxcXG4rXFx0XFx0ICAgICAgIHZvaWQgKmRhdGEpO1xcbiB2b2lkIHBjaV9yZXNldF9zZWNvbmRhcnlfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbiB2b2lkIHBjaWJpb3NfcmVzZXRfc2Vjb25kYXJ5X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gdm9pZCBwY2lfdXBkYXRlX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubyk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG5pbmRleCA5YTE2NzRjMTUyYWEyLi42ZmI1OTllYzI5MTkxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG5AQCAtMTIxLDcgKzEyMSw2IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7XFxuIFxcdC8qIEZsYWdzIG9ubHkgbW9kaWZpZWQgb24gc2V0dXAvcmVsZWFzZSAtIGJpdGZpZWxkIG9rICovXFxuIFxcdGJvb2xcXHRcXHRcXHRoYXNfZHluX21zaXg6MTtcXG4gXFx0Ym9vbFxcdFxcdFxcdHBjaV8yXzM6MTtcXG4tXFx0Ym9vbFxcdFxcdFxcdHJlc2V0X3dvcmtzOjE7XFxuIFxcdGJvb2xcXHRcXHRcXHRleHRlbmRlZF9jYXBzOjE7XFxuIFxcdGJvb2xcXHRcXHRcXHRoYXNfdmdhOjE7XFxuIFxcdGJvb2xcXHRcXHRcXHRub2ludHg6MTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcXG5pbmRleCA1ZGU2MThhM2E1ZWVlLi44NjAzOTU5ZjE3MzUwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXFxuQEAgLTc3Miw2ICs3NzIsOSBAQCBzdHJ1Y3QgdmZpb19wY2lfaG90X3Jlc2V0X2luZm8ge1xcbiAgKiBNaXhlZCB1c2FnZSBvZiBsZWdhY3kgZ3JvdXBzIGFuZCBjZGV2cyBhY3Jvc3MgdGhlIHNldCBvZiBhZmZlY3RlZFxcbiAgKiBkZXZpY2VzIGlzIG5vdCBzdXBwb3J0ZWQuXFxuICAqXFxuKyAqIEhvdCByZXNldCBvZiBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcyBpcyBub3Qgc3VwcG9ydGVkLCBTUi1JT1ZcXG4rICogc2hvdWxkIGZpcnN0IGJlIGRpc2FibGVkIG9uIGFueSBhZmZlY3RlZCBQRi5cXG4rICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxcbiAgKi9cXG4gc3RydWN0IHZmaW9fcGNpX2hvdF9yZXNldCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI0OjU0LjAzNTExOTE2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYzNjUxODE3NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSVwiLFxuICAgIFwiVkZJT1wiLFxuICAgIFwiVkZJT19QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwY2lfcmVzZXRfYnVzX2NvbmRcIixcbiAgICBcInBjaV9yZXNldF9mdW5jdGlvblwiLFxuICAgIFwicGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZFwiLFxuICAgIFwicGNpX3RyeV9yZXNldF9mdW5jdGlvblwiLFxuICAgIFwicGNpX3Jlc2V0X2J1c1wiLFxuICAgIFwidmZpb19wY2lfY29yZV9pb2N0bFwiLFxuICAgIFwidmZpb19wY2lfY29yZV9kaXNhYmxlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2VuYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHBjaV9yZXNldF9idXNfY29uZGAgYW5kIG1vZGlmaWVzIFBDSSByZXNldCBmdW5jdGlvbnMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBGcyB3aXRoIGFjdGl2ZSBWRnMuIEl0IGFsc28gdXBkYXRlcyBWRklPIFBDSSBjb3JlIHRvIHVzZSB0aGVzZSBuZXcgY2hlY2tzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgUENJIGFuZCBWRklPIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YzhlMDBjYzRiYWU0ZmNiODM4ZDc3ODBhNDU5MWMyZmMxNDhmNjljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDU6MjQ6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jXG5pbmRleCA3N2IxN2IxM2VlNjE1Li4wYjRmMTMzOTdkYTI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLmNcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jXG5AQCAtOTgsNiArOTgsNyBAQCBib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldilcbiB7XG4gXHRyZXR1cm4gZGV2LVx1MDAzZXJlc2V0X21ldGhvZHNbMF0gIT0gMDtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X3N1cHBvcnRlZCk7XG4gXG4gI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOU1xuIGludCBwY2lfZG9tYWluc19zdXBwb3J0ZWQgPSAxO1xuQEAgLTUyMjIsMTEgKzUyMjMsMjIgQEAgaW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0XHRwY2lfZGV2X2xvY2soYnJpZGdlKTtcbiBcbiBcdHBjaV9kZXZfbG9jayhkZXYpO1xuK1xuK1x0LypcbitcdCAqIFJlc2V0IG9mIGFuIFNSLUlPViBQRiBuZWNlc3NhcmlseSByZXNldHMgYW55IGFjdGl2ZSBWRnMuICBTdWNoIHJlc2V0cyBhcmVcbitcdCAqIGJleW9uZCB0aGUgc2NvcGUgYWR2ZXJ0aXNlZCBmb3IgcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgYW5kIHZhcmlhbnRzLCByZWZ1c2UuXG4rXHQgKi9cbitcdGlmIChwY2lfbnVtX3ZmKGRldikgXHUwMDNlIDApIHtcbitcdFx0cmMgPSAtRU5PVFRZO1xuK1x0XHRnb3RvIHVubG9jaztcbitcdH1cbitcbiBcdHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZShkZXYpO1xuIFxuIFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcbiBcbiBcdHBjaV9kZXZfcmVzdG9yZShkZXYpO1xuK3VubG9jazpcbiBcdHBjaV9kZXZfdW5sb2NrKGRldik7XG4gXG4gXHRpZiAoYnJpZGdlKVxuQEAgLTUyNjQsNiArNTI3Niw5IEBAIGludCBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gXHRpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQoZGV2KSlcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXG4rXHRpZiAocGNpX251bV92ZihkZXYpIFx1MDAzZSAwKVxuK1x0XHRyZXR1cm4gLUVOT1RUWTtcbitcbiBcdHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZShkZXYpO1xuIFxuIFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcbkBAIC01MjkwLDYgKzUzMDUsMTEgQEAgaW50IHBjaV90cnlfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdGlmICghcGNpX2Rldl90cnlsb2NrKGRldikpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuIFxuK1x0aWYgKHBjaV9udW1fdmYoZGV2KSBcdTAwM2UgMCkge1xuK1x0XHRwY2lfZGV2X3VubG9jayhkZXYpO1xuK1x0XHRyZXR1cm4gLUVOT1RUWTtcbitcdH1cbitcbiBcdHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZShkZXYpO1xuIFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcbiBcdHBjaV9kZXZfcmVzdG9yZShkZXYpO1xuQEAgLTU1NDgsOSArNTU2OCwzNiBAQCBpbnQgcGNpX3Byb2JlX3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfc2xvdCk7XG4gXG4rLyogQ2FsbCBAY2Igb24gZXZlcnkgZGV2aWNlIGEgc2xvdCBvciBidXMgcmVzZXQgYWZmZWN0cywgc3RvcHBpbmcgb24gZXJyb3IuICovXG4rc3RhdGljIGludCBwY2lfd2Fsa19yZXNldF9jaGVjayhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsXG4rXHRcdFx0XHRpbnQgKCpjYikoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4rXHRcdFx0XHR2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBwY2lfZGV2ICpkZXY7XG4rXHRpbnQgcmM7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgXHUwMDI2YnVzLVx1MDAzZWRldmljZXMsIGJ1c19saXN0KSB7XG4rXHRcdGlmIChzbG90IFx1MDAyNlx1MDAyNiAoIWRldi1cdTAwM2VzbG90IHx8IGRldi1cdTAwM2VzbG90ICE9IHNsb3QpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyYyA9IGNiKGRldiwgZGF0YSk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdGlmIChkZXYtXHUwMDNlc3Vib3JkaW5hdGUpIHtcbitcdFx0XHRyYyA9IHBjaV93YWxrX3Jlc2V0X2NoZWNrKGRldi1cdTAwM2VzdWJvcmRpbmF0ZSxcbitcdFx0XHRcdFx0XHQgIE5VTEwsIGNiLCBkYXRhKTtcbitcdFx0XHRpZiAocmMpXG4rXHRcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKipcbiAgKiBwY2lfdHJ5X3Jlc2V0X3Nsb3QgLSBUcnkgdG8gcmVzZXQgYSBQQ0kgc2xvdFxuICAqIEBzbG90OiBQQ0kgc2xvdCB0byByZXNldFxuKyAqIEBjaGVjazogb3B0aW9uYWwgcGVyLWRldmljZSBjYWxsYmFjayB0aGF0IGNhbiBhYm9ydCB0aGUgcmVzZXRcbisgKiBAZGF0YTogb3BhcXVlIGFyZ3VtZW50IGZvciBAY2hlY2tcbiAgKlxuICAqIEEgUENJIGJ1cyBtYXkgaG9zdCBtdWx0aXBsZSBzbG90cywgZWFjaCBzbG90IG1heSBzdXBwb3J0IGEgcmVzZXQgbWVjaGFuaXNtXG4gICogaW5kZXBlbmRlbnQgb2Ygb3RoZXIgc2xvdHMuICBGb3IgaW5zdGFuY2UsIHNvbWUgc2xvdHMgbWF5IHN1cHBvcnQgc2xvdCBwb3dlclxuQEAgLTU1NjMsNyArNTYxMCw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wcm9iZV9yZXNldF9zbG90KTtcbiAgKlxuICAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBzbG90IGNhbm5vdCBiZSBsb2NrZWRcbiAgKi9cbi1zdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpXG4rc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90LFxuK1x0XHRcdCAgICAgIGludCAoKmNoZWNrKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSxcbitcdFx0XHQgICAgICB2b2lkICpkYXRhKVxuIHtcbiBcdGludCByYztcbiBcbkBAIC01NTcyLDEwICs1NjIxLDE0IEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdClcbiBcdFx0cmV0dXJuIHJjO1xuIFxuIFx0aWYgKHBjaV9zbG90X3RyeWxvY2soc2xvdCkpIHtcbi1cdFx0cGNpX3Nsb3Rfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoc2xvdCk7XG4tXHRcdG1pZ2h0X3NsZWVwKCk7XG4tXHRcdHJjID0gcGNpX3Jlc2V0X2hvdHBsdWdfc2xvdChzbG90LVx1MDAzZWhvdHBsdWcsIFBDSV9SRVNFVF9ET19SRVNFVCk7XG4tXHRcdHBjaV9zbG90X3Jlc3RvcmVfbG9ja2VkKHNsb3QpO1xuK1x0XHRyYyA9IGNoZWNrID8gcGNpX3dhbGtfcmVzZXRfY2hlY2soc2xvdC1cdTAwM2VidXMsIHNsb3QsIGNoZWNrLCBkYXRhKSA6IDA7XG4rXHRcdGlmICghcmMpIHtcbitcdFx0XHRwY2lfc2xvdF9zYXZlX2FuZF9kaXNhYmxlX2xvY2tlZChzbG90KTtcbitcdFx0XHRtaWdodF9zbGVlcCgpO1xuK1x0XHRcdHJjID0gcGNpX3Jlc2V0X2hvdHBsdWdfc2xvdChzbG90LVx1MDAzZWhvdHBsdWcsXG4rXHRcdFx0XHRcdFx0ICAgIFBDSV9SRVNFVF9ET19SRVNFVCk7XG4rXHRcdFx0cGNpX3Nsb3RfcmVzdG9yZV9sb2NrZWQoc2xvdCk7XG4rXHRcdH1cbiBcdFx0cGNpX3Nsb3RfdW5sb2NrKHNsb3QpO1xuIFx0fSBlbHNlXG4gXHRcdHJjID0gLUVBR0FJTjtcbkBAIC01NjA3LDEwICs1NjYwLDE0IEBAIHN0YXRpYyBpbnQgcGNpX2J1c19yZXNldChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBib29sIHByb2JlKVxuIC8qKlxuICAqIHBjaV90cnlfcmVzZXRfYnVzIC0gVHJ5IHRvIHJlc2V0IGEgUENJIGJ1c1xuICAqIEBidXM6IHRvcCBsZXZlbCBQQ0kgYnVzIHRvIHJlc2V0XG4rICogQGNoZWNrOiBvcHRpb25hbCBwZXItZGV2aWNlIGNhbGxiYWNrIHRoYXQgY2FuIGFib3J0IHRoZSByZXNldFxuKyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgZm9yIEBjaGVja1xuICAqXG4gICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIGJ1cyBjYW5ub3QgYmUgbG9ja2VkXG4gICovXG4tc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKVxuK3N0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cyxcbitcdFx0XHQgICAgIGludCAoKmNoZWNrKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSxcbitcdFx0XHQgICAgIHZvaWQgKmRhdGEpXG4ge1xuIFx0aW50IHJjO1xuIFxuQEAgLTU2MTksMTAgKzU2NzYsMTMgQEAgc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG4gXHRpZiAocGNpX2J1c190cnlsb2NrKGJ1cykpIHtcbi1cdFx0cGNpX2J1c19zYXZlX2FuZF9kaXNhYmxlX2xvY2tlZChidXMpO1xuLVx0XHRtaWdodF9zbGVlcCgpO1xuLVx0XHRyYyA9IHBjaV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19yZXNldChidXMtXHUwMDNlc2VsZik7XG4tXHRcdHBjaV9idXNfcmVzdG9yZV9sb2NrZWQoYnVzKTtcbitcdFx0cmMgPSBjaGVjayA/IHBjaV93YWxrX3Jlc2V0X2NoZWNrKGJ1cywgTlVMTCwgY2hlY2ssIGRhdGEpIDogMDtcbitcdFx0aWYgKCFyYykge1xuK1x0XHRcdHBjaV9idXNfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoYnVzKTtcbitcdFx0XHRtaWdodF9zbGVlcCgpO1xuK1x0XHRcdHJjID0gcGNpX2JyaWRnZV9zZWNvbmRhcnlfYnVzX3Jlc2V0KGJ1cy1cdTAwM2VzZWxmKTtcbitcdFx0XHRwY2lfYnVzX3Jlc3RvcmVfbG9ja2VkKGJ1cyk7XG4rXHRcdH1cbiBcdFx0cGNpX2J1c191bmxvY2soYnVzKTtcbiBcdH0gZWxzZVxuIFx0XHRyYyA9IC1FQUdBSU47XG5AQCAtNTY2MSw3ICs1NzIxLDcgQEAgc3RhdGljIGludCBwY2lfcmVzZXRfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsIGJvb2wgcmVzdG9yZSlcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xvdCwgXHUwMDI2YnVzLVx1MDAzZXNsb3RzLCBsaXN0KSB7XG4gXHRcdGlmIChyZXN0b3JlKVxuLVx0XHRcdHJldCA9IHBjaV90cnlfcmVzZXRfc2xvdChzbG90KTtcbitcdFx0XHRyZXQgPSBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc2xvdCwgTlVMTCwgTlVMTCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXQgPSBwY2lfc2xvdF9yZXNldChzbG90LCBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xuIFxuQEAgLTU2NzUsNyArNTczNSw3IEBAIHN0YXRpYyBpbnQgcGNpX3Jlc2V0X2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlLCBib29sIHJlc3RvcmUpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGNpX3Nsb3RfbXV0ZXgpO1xuIFxuIFx0aWYgKHJlc3RvcmUpXG4tXHRcdHJldHVybiBwY2lfdHJ5X3Jlc2V0X2J1cyhidXMpO1xuK1x0XHRyZXR1cm4gcGNpX3RyeV9yZXNldF9idXMoYnVzLCBOVUxMLCBOVUxMKTtcbiBcdHJldHVybiBwY2lfYnVzX3Jlc2V0KGJyaWRnZS1cdTAwM2VzdWJvcmRpbmF0ZSwgUENJX1JFU0VUX0RPX1JFU0VUKTtcbiB9XG4gXG5AQCAtNTcwNSwxNiArNTc2NSw0MyBAQCBpbnQgcGNpX3Byb2JlX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfYnVzKTtcbiBcbisvKipcbisgKiBwY2lfcmVzZXRfYnVzX2NvbmQgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRoZSBzbG90IG9yIGJ1cyBjb250YWluaW5nIGEgZGV2aWNlXG4rICogQHBkZXY6IHRvcCBsZXZlbCBQQ0kgZGV2aWNlIHRvIHJlc2V0IHZpYSBzbG90L2J1c1xuKyAqIEBjaGVjazogb3B0aW9uYWwgY2FsbGJhY2sgaW52b2tlZCBvbiBlYWNoIGFmZmVjdGVkIGRldmljZSBiZWZvcmUgdGhlIHJlc2V0XG4rICogQGRhdGE6IG9wYXF1ZSBhcmd1bWVudCBwYXNzZWQgdG8gQGNoZWNrXG4rICpcbisgKiBSZXNldCB0aGUgc2xvdCBvciBidXMgY29udGFpbmluZyBAcGRldi4gIE9uY2UgdGhlIGVudGlyZSBwaHlzaWNhbCBidXMvc2xvdFxuKyAqIGhpZXJhcmNoeSBpcyBsb2NrZWQsIEBjaGVjayAoaWYgbm90IE5VTEwpIGlzIGNhbGxlZCBvbiBlYWNoIG9mIHRob3NlIGxvY2tlZFxuKyAqIGRldmljZXMuICBBIG5vbnplcm8gcmV0dXJuIGFib3J0cyB0aGUgcmVzZXQgYW5kIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIsXG4rICogb3RoZXJ3aXNlIHRoZSByZXNldCBwcm9jZWVkcy5cbisgKlxuKyAqIE5CLiBAY2hlY2sgcnVucyB3aXRoIHRoZSBmdWxsIHNldCBvZiBkZXZpY2VfbG9ja3Mgbm90ZWQgYWJvdmUgaGVsZDsgY2FsbGJhY2tzXG4rICogbXVzdCB0YWtlIHRoZXNlIGxvY2tpbmcgc2VtYW50aWNzIGludG8gYWNjb3VudC4gIFVzZSBOVUxMIHRvIHBlcmZvcm0gYW5cbisgKiB1bmNvbmRpdGlvbmFsIHJlc2V0LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9UVFkgaWYgQHBkZXYgaXMgbm90IHJlc2V0dGFibGUsIC1FQUdBSU4gaWYgdGhlXG4rICogZGV2aWNlcyBjYW5ub3QgYmUgbG9ja2VkLCBvciB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgQGNoZWNrLlxuKyAqL1xuK2ludCBwY2lfcmVzZXRfYnVzX2NvbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4rXHRcdCAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4rXHRcdCAgICAgICB2b2lkICpkYXRhKVxuK3tcbitcdHJldHVybiAhcGNpX3Byb2JlX3Jlc2V0X3Nsb3QocGRldi1cdTAwM2VzbG90KSA/XG4rXHRcdHBjaV90cnlfcmVzZXRfc2xvdChwZGV2LVx1MDAzZXNsb3QsIGNoZWNrLCBkYXRhKSA6XG4rXHRcdHBjaV90cnlfcmVzZXRfYnVzKHBkZXYtXHUwMDNlYnVzLCBjaGVjaywgZGF0YSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9idXNfY29uZCk7XG4rXG4gLyoqXG4gICogcGNpX3Jlc2V0X2J1cyAtIFRyeSB0byByZXNldCBhIFBDSSBidXNcbiAgKiBAcGRldjogdG9wIGxldmVsIFBDSSBkZXZpY2UgdG8gcmVzZXQgdmlhIHNsb3QvYnVzXG4gICpcbi0gKiBTYW1lIGFzIGFib3ZlIGV4Y2VwdCByZXR1cm4gLUVBR0FJTiBpZiB0aGUgYnVzIGNhbm5vdCBiZSBsb2NrZWRcbisgKiBTYW1lIGFzIGFib3ZlIHdpdGhvdXQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLlxuICAqL1xuIGludCBwY2lfcmVzZXRfYnVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbi1cdHJldHVybiAoIXBjaV9wcm9iZV9yZXNldF9zbG90KHBkZXYtXHUwMDNlc2xvdCkpID9cbi1cdCAgICBwY2lfdHJ5X3Jlc2V0X3Nsb3QocGRldi1cdTAwM2VzbG90KSA6IHBjaV90cnlfcmVzZXRfYnVzKHBkZXYtXHUwMDNlYnVzKTtcbitcdHJldHVybiBwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgTlVMTCwgTlVMTCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9idXMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcbmluZGV4IDQ0NjllMWE3N2YzYzEuLjQxNmZkNmI3NGFiZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wY2kuaFxuKysrIGIvZHJpdmVycy9wY2kvcGNpLmhcbkBAIC0yMzAsNyArMjMwLDYgQEAgZW51bSBwY2lfbW1hcF9hcGkge1xuIGludCBwY2lfbW1hcF9maXRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgcmVzbm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1haSxcbiBcdFx0ICBlbnVtIHBjaV9tbWFwX2FwaSBtbWFwX2FwaSk7XG4gXG4tYm9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIHZvaWQgcGNpX2luaXRfcmVzZXRfbWV0aG9kcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX2JyaWRnZV9zZWNvbmRhcnlfYnVzX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfYnVzX2Vycm9yX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbmluZGV4IDNmMTFhOTYyNGI5YzAuLjhlNDIzNDJkNTZkM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC02MDksNyArNjA5LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdGlmIChyZXQgPT0gLUVBR0FJTilcbiBcdFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XG4gXG4tXHR2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzID0gIXJldDtcbiBcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFx0dmRldi1cdTAwM2VwY2lfc2F2ZWRfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7XG4gXHRpZiAoIXZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKVxuQEAgLTc2Niw3ICs3NjUsNyBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRpZiAocGNpX2xvYWRfYW5kX2ZyZWVfc2F2ZWRfc3RhdGUocGRldiwgXHUwMDI2dmRldi1cdTAwM2VwY2lfc2F2ZWRfc3RhdGUpKSB7XG4gXHRcdHBjaV9pbmZvKHBkZXYsIFwiJXM6IENvdWxkbid0IHJlbG9hZCBzYXZlZCBzdGF0ZVxcblwiLCBfX2Z1bmNfXyk7XG4gXG4tXHRcdGlmICghdmRldi1cdTAwM2VyZXNldF93b3JrcylcbitcdFx0aWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKHBkZXYpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuIFx0XHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbkBAIC03ODUsMTIgKzc4NCwxNCBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHQgKiBXZSBjYW4gbm90IHVzZSB0aGUgXCJ0cnlcIiByZXNldCBpbnRlcmZhY2UgaGVyZSwgd2hpY2ggd2lsbFxuIFx0ICogb3ZlcndyaXRlIHRoZSBwcmV2aW91c2x5IHJlc3RvcmVkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXG4gXHQgKi9cbi1cdGlmICh2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzKSB7XG4rXHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KSkge1xuIFx0XHRicmlkZ2UgPSBwY2lfdXBzdHJlYW1fYnJpZGdlKHBkZXYpO1xuIFx0XHRpZiAoYnJpZGdlIFx1MDAyNlx1MDAyNiAhcGNpX2Rldl90cnlsb2NrKGJyaWRnZSkpXG4gXHRcdFx0Z290byBvdXRfcmVzdG9yZV9zdGF0ZTtcbiBcdFx0aWYgKHBjaV9kZXZfdHJ5bG9jayhwZGV2KSkge1xuLVx0XHRcdGlmICghX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHBkZXYpKVxuK1x0XHRcdC8qIEVuZm9yY2UgZnVuY3Rpb24gc2NvcGUgdW5kZXIgbG9jayBmb3IgU1ItSU9WIFBGcyAqL1xuK1x0XHRcdGlmICghcGNpX251bV92ZihwZGV2KSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIV9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KSlcbiBcdFx0XHRcdHZkZXYtXHUwMDNlbmVlZHNfcmVzZXQgPSBmYWxzZTtcbiBcdFx0XHRwY2lfZGV2X3VubG9jayhwZGV2KTtcbiBcdFx0fVxuQEAgLTg5Miw2ICs4OTMsMTcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3VudF9kZXZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogUENJIHdhbGsgY2FsbGJhY2sgdG8gY2hlY2sgZm9yIFNSLUlPViBQRnMgd2l0aCBhY3RpdmUgVkZzLiAgVkZzIGFyZSBub3RcbisgKiBlbnVtZXJhdGVkIHdoZW4gZGV0ZXJtaW5pbmcgYWZmZWN0ZWQgZGV2aWNlcyBhbmQgbWF5IGJlIG93bmVkIGJ5IHNlcGFyYXRlXG4rICogdXNlcnNwYWNlIHByb2Nlc3NlcyBmcm9tIHRoZSBQRi4gIEl0J3MgdGhlcmVmb3JlIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHlcbisgKiB0byB0ZWFyZG93biBWRnMgZm9yIGFueSBhZmZlY3RlZCBQRiBiZWZvcmUgcGVyZm9ybWluZyBhIGhvdC1yZXNldC5cbisgKi9cbitzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9oYXNfdmZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKVxuK3tcbitcdHJldHVybiBwY2lfbnVtX3ZmKHBkZXYpID8gLUVCVVNZIDogMDtcbit9XG4rXG4gc3RydWN0IHZmaW9fcGNpX2ZpbGxfaW5mbyB7XG4gXHRzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXY7XG4gXHRzdHJ1Y3QgdmZpb19wY2lfZGVwZW5kZW50X2RldmljZSAqZGV2aWNlcztcbkBAIC0xMDg1LDcgKzEwOTcsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcbiBcdGluZm8uZmxhZ3MgPSBWRklPX0RFVklDRV9GTEFHU19QQ0k7XG4gXG4tXHRpZiAodmRldi1cdTAwM2VyZXNldF93b3JrcylcbitcdGlmIChwY2lfcmVzZXRfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4gXHRcdGluZm8uZmxhZ3MgfD0gVkZJT19ERVZJQ0VfRkxBR1NfUkVTRVQ7XG4gXG4gXHRpbmZvLm51bV9yZWdpb25zID0gVkZJT19QQ0lfTlVNX1JFR0lPTlMgKyB2ZGV2LVx1MDAzZW51bV9yZWdpb25zO1xuQEAgLTEzMTcsNyArMTMyOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoIXZkZXYtXHUwMDNlcmVzZXRfd29ya3MpXG4rXHRpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2sodmRldik7XG5AQCAtMjU5Niw3ICsyNjA4LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2ZGV2LCBcdTAwMjZkZXZfc2V0LVx1MDAzZWRldmljZV9saXN0LCB2ZGV2LmRldl9zZXRfbGlzdClcbiBcdFx0dmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XG4gXG4tXHRyZXQgPSBwY2lfcmVzZXRfYnVzKHBkZXYpO1xuK1x0cmV0ID0gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIHZmaW9fcGNpX2Rldl9oYXNfdmZzLCBOVUxMKTtcbiBcbiBcdHZkZXYgPSBsaXN0X2xhc3RfZW50cnkoXHUwMDI2ZGV2X3NldC1cdTAwM2VkZXZpY2VfbGlzdCxcbiBcdFx0XHQgICAgICAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlLCB2ZGV2LmRldl9zZXRfbGlzdCk7XG5AQCAtMjY1OSw3ICsyNjcxLDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZGV2X3NldF90cnlfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldClcbiBcdGlmICh2ZmlvX3BjaV9kZXZfc2V0X3BtX3J1bnRpbWVfZ2V0KGRldl9zZXQpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIXBjaV9yZXNldF9idXMocGRldikpXG4rXHRpZiAoIXBjaV9yZXNldF9idXNfY29uZChwZGV2LCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcywgTlVMTCkpXG4gXHRcdHJlc2V0X2RvbmUgPSB0cnVlO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsIFx1MDAyNmRldl9zZXQtXHUwMDNlZGV2aWNlX2xpc3QsIHZkZXYuZGV2X3NldF9saXN0KSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDY0YjMwOGI2ZTYxYzEuLjRkZTIxZTZhYzUzOGYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5AQCAtMTQ3NCwxMiArMTQ3NCwxNiBAQCB2b2lkIHBjaWVfcHJpbnRfbGlua19zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaWVfcmVzZXRfZmxyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgcHJvYmUpO1xuIGludCBwY2llX2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuK2Jvb2wgcGNpX3Jlc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfcHJvYmVfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpO1xuIGludCBwY2lfcHJvYmVfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpO1xuIGludCBwY2lfcmVzZXRfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuK2ludCBwY2lfcmVzZXRfYnVzX2NvbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4rXHRcdCAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4rXHRcdCAgICAgICB2b2lkICpkYXRhKTtcbiB2b2lkIHBjaV9yZXNldF9zZWNvbmRhcnlfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIHZvaWQgcGNpYmlvc19yZXNldF9zZWNvbmRhcnlfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIHZvaWQgcGNpX3VwZGF0ZV9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8pO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbmluZGV4IDlhMTY3NGMxNTJhYTIuLjZmYjU5OWVjMjkxOTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbkBAIC0xMjEsNyArMTIxLDYgQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHtcbiBcdC8qIEZsYWdzIG9ubHkgbW9kaWZpZWQgb24gc2V0dXAvcmVsZWFzZSAtIGJpdGZpZWxkIG9rICovXG4gXHRib29sXHRcdFx0aGFzX2R5bl9tc2l4OjE7XG4gXHRib29sXHRcdFx0cGNpXzJfMzoxO1xuLVx0Ym9vbFx0XHRcdHJlc2V0X3dvcmtzOjE7XG4gXHRib29sXHRcdFx0ZXh0ZW5kZWRfY2FwczoxO1xuIFx0Ym9vbFx0XHRcdGhhc192Z2E6MTtcbiBcdGJvb2xcdFx0XHRub2ludHg6MTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuaW5kZXggNWRlNjE4YTNhNWVlZS4uODYwMzk1OWYxNzM1MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbkBAIC03NzIsNiArNzcyLDkgQEAgc3RydWN0IHZmaW9fcGNpX2hvdF9yZXNldF9pbmZvIHtcbiAgKiBNaXhlZCB1c2FnZSBvZiBsZWdhY3kgZ3JvdXBzIGFuZCBjZGV2cyBhY3Jvc3MgdGhlIHNldCBvZiBhZmZlY3RlZFxuICAqIGRldmljZXMgaXMgbm90IHN1cHBvcnRlZC5cbiAgKlxuKyAqIEhvdCByZXNldCBvZiBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcyBpcyBub3Qgc3VwcG9ydGVkLCBTUi1JT1ZcbisgKiBzaG91bGQgZmlyc3QgYmUgZGlzYWJsZWQgb24gYW55IGFmZmVjdGVkIFBGLlxuKyAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxuICAqL1xuIHN0cnVjdCB2ZmlvX3BjaV9ob3RfcmVzZXQge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjQ6NTQuMDM1MTIxNTg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5MzYxNjAxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFBDSSBSZXNldCBMb2dpYyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCBJIG5lZWQgdG8gYXNzZXNzIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBkZWZpbml0ZWx5IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFBDSSBzdWJzeXN0ZW0gYW5kIHRoZSBWRklPIFBDSSBjb3JlLCBzbyBpdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHRvdWNoZXMgYGRyaXZlcnMvcGNpL3BjaS5jYCBhbmQgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYCwgd2hpY2ggYXJlIGNyaXRpY2FsIGFyZWFzLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlIFBDSSByZXNldCBsb2dpYy4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgcGNpX3Jlc2V0X2Z1bmN0aW9uYCwgYHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWRgLCBhbmQgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gLCBhZGRpbmcgY2hlY2tzIHJlbGF0ZWQgdG8gdGhlIG51bWJlciBvZiB2aXJ0dWFsIGZ1bmN0aW9ucyAoYHBjaV9udW1fdmYoZGV2KSBcdTAwM2UgMGApLiBJdCBpbnRyb2R1Y2VzIGBwY2lfcmVzZXRfYnVzX2NvbmRgIGFuZCBhbHRlcnMgaG93IGBwY2lfdHJ5X3Jlc2V0X3Nsb3RgIGFuZCBgcGNpX3RyeV9yZXNldF9idXNgIHdvcmssIGluY29ycG9yYXRpbmcgYSBjYWxsYmFjayBmdW5jdGlvbi4gVGhlIFZGSU8gc2lkZSBsZXZlcmFnZXMgdGhpcyBuZXcgYHBjaV9yZXNldF9idXNfY29uZGAgd2l0aCBhIGB2ZmlvX3BjaV9kZXZfaGFzX3Zmc2AgY2FsbGJhY2sgdG8gcHJldmVudCBob3QgcmVzZXRzIG9mIFNSLUlPViBQaHlzaWNhbCBGdW5jdGlvbnMgd2l0aCBhY3RpdmUgVmlydHVhbCBGdW5jdGlvbnMuIEknbSBhbHNvIHNlZWluZyBzb21lIGNsZWFudXAgd2hlcmUgYHZkZXYtXHUwMDNlcmVzZXRfd29ya3NgIGlzIHJlbW92ZWQgaW4gZmF2b3Igb2YgYSBkaXJlY3QgY2hlY2sgd2l0aCBgcGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KWAuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQ29uc2lkZXJpbmcgVkZJTyBhbmQgUENJIHJlc2V0cyBhcmUgUUVNVSBjb250cm9sbGFibGUsIHRoZSBhbnN3ZXIgaXMgYSB5ZXMuIE5vdywgUUVNVSBoYXMgc29tZSBzdXBwb3J0IGZvciBTUi1JT1YgKGlnYiwgbnZtZSkuIEhvd2V2ZXIsIGV2ZW4gd2l0aG91dCBTUi1JT1YsIHRoZSBjb3JlIFBDSSByZXNldCBmdW5jdGlvbnMgbGlrZSBgcGNpX3Jlc2V0X2Z1bmN0aW9uYCBhbmQgdGhlIG5ldyBgcGNpX3Jlc2V0X2J1c19jb25kYCB3aWxsIGJlIHJlYWNoZWQsIHNvIHRoaXMgbmVlZHMgdG8gYmUgZnV6emVkIGV2ZW4gaWYgU1ItSU9WIGlzIG5vdCBwcmVzZW50LiBUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIGNvcmUgUENJIGZ1bmN0aW9uczogYHBjaV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYCwgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gLCBgcGNpX3Jlc2V0X2J1c19jb25kYCwgYHBjaV9yZXNldF9idXNgLlxuXG5JJ2xsIGNoZWNrIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zLiBJIGtub3cgdGhhdCBgcGNpX3Jlc2V0X2Z1bmN0aW9uYCBpcyBleHBvcnRlZCBhbmQgdXNlZCBieSB2YXJpb3VzIGRyaXZlcnMsIHBsdXMgc3lzZnMsIHNvIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRyeSBwb2ludHMuIGBwY2lfcmVzZXRfYnVzX2NvbmRgIGlzIGFsc28gZXhwb3J0ZWQgYW5kLCBjcnVjaWFsbHksIHVzZWQgYnkgVkZJTywgd2hpY2ggZ2l2ZXMgdXMgYSBncmVhdCB0YXJnZXQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgbmVlZCBgQ09ORklHX1BDSWAsIG9idmlvdXNseS4gVGhlbiwgZm9yIHN1cmUsIEknbGwgbmVlZCBgQ09ORklHX1ZGSU9fUENJYCB0byBhY3RpdmF0ZSB0aGUgVkZJTyBjaGFuZ2VzLiBJJ2xsIHNlYXJjaCBmb3IgYHBjaV9yZXNldF9idXNfY29uZGAgaW4gYGRyaXZlcnMvcGNpL3BjaS5jYCBmb3IgYW55IGV4dHJhIGNvbmZpZyBvcHRpb24gaW5mby5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjA2Ljk3MTI4NTQ3NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDMxMjA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcmVzZXRfYnVzX2NvbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wY2kvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvcGNpLmM9NTc2Nj1FWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfYnVzKTtcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS5jLTU3NjgtLyoqXFxuZHJpdmVycy9wY2kvcGNpLmM6NTc2OTogKiBwY2lfcmVzZXRfYnVzX2NvbmQgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRoZSBzbG90IG9yIGJ1cyBjb250YWluaW5nIGEgZGV2aWNlXFxuZHJpdmVycy9wY2kvcGNpLmMtNTc3MC0gKiBAcGRldjogdG9wIGxldmVsIFBDSSBkZXZpY2UgdG8gcmVzZXQgdmlhIHNsb3QvYnVzXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01Nzg1LSAqL1xcbmRyaXZlcnMvcGNpL3BjaS5jOjU3ODY6aW50IHBjaV9yZXNldF9idXNfY29uZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL3BjaS9wY2kuYy01Nzg3LVxcdFxcdCAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01NzkzLX1cXG5kcml2ZXJzL3BjaS9wY2kuYzo1Nzk0OkVYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9idXNfY29uZCk7XFxuZHJpdmVycy9wY2kvcGNpLmMtNTc5NS1cXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS5jPTU4MDI9aW50IHBjaV9yZXNldF9idXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9wY2kvcGNpLmMtNTgwMy17XFxuZHJpdmVycy9wY2kvcGNpLmM6NTgwNDpcXHRyZXR1cm4gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIE5VTEwsIE5VTEwpO1xcbmRyaXZlcnMvcGNpL3BjaS5jLTU4MDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNTowNy4wMjU2MDU4MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ3ODIxODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBWRklPLVBDSSBEZXZpY2UgQ2FwYWJpbGl0aWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGEgVkZJTy1QQ0kgZGV2aWNlIGlzIGhhbmRsaW5nIHZpcnR1YWwgZnVuY3Rpb25zIChWRnMpLiBMZXQncyBkaXZlIHJpZ2h0IGludG8gdGhlIGNvcmUgb2YgdGhlIG1hdHRlciwgd2hpY2ggbWVhbnMgSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgdmZpb19wY2lfY29yZS5jYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvdmZpby9wY2lgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGB2ZmlvX3BjaV9kZXZfaGFzX3Zmc2AgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVkZJTyBkcml2ZXIgZGV0ZXJtaW5lcyBpZiBhIGdpdmVuIFBDSSBkZXZpY2UgaXMgc2V0IHVwIHRvIGV4cG9zZSB2aXJ0dWFsIGZ1bmN0aW9ucywgYW5kIHRoZSBtZWNoYW5pc21zIGl0IHVzZXMgdG8gbWFuYWdlIHRoZW0uIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbidzIGxvZ2ljIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBpbnNpZ2h0IGludG8gdGhlIGRyaXZlcidzIFZGIGNhcGFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc2NSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjEwLjY3MzQzMDU1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcyNjEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV9kZXZfaGFzX3Zmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz04OTA9c3RhdGljIGludCB2ZmlvX3BjaV9jb3VudF9kZXZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtOTAxLSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjkwMjpzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9oYXNfdmZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTkwMy17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0yNTE2PXN0YXRpYyBpbnQgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTI2MTAtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MjYxMTpcXHRyZXQgPSBwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgdmZpb19wY2lfZGV2X2hhc192ZnMsIE5VTEwpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTI2MTItXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0yNjUzPXN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yNjczLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjI2NzQ6XFx0aWYgKCFwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgdmZpb19wY2lfZGV2X2hhc192ZnMsIE5VTEwpKVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTI2NzUtXFx0XFx0cmVzZXRfZG9uZSA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjEwLjcyMDE2Mjk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NTcwNDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiB0aGUgVkZJTyBSZXNldCBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWFuYWdpbmcgUENJIHJlc2V0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVkZJTyBjb250ZXh0LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgcGNpX3Jlc2V0X2J1c19jb25kYCwgYHBjaV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYCwgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gLCBgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXRgLCBgdmZpb19wY2lfZGV2X3NldF90cnlfcmVzZXRgLCBhbmQgYHZmaW9fcGNpX2lvY3RsX3Jlc2V0YC4gRWFjaCBvbmUgbGlrZWx5IHBsYXlzIGEgdml0YWwgcm9sZSBpbiBvcmNoZXN0cmF0aW5nIHRoZSByZXNldCBwcm9jZWR1cmVzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIGFuZCByZXNwb25zaWJpbGl0aWVzLiBCZWZvcmUgSSBkaXZlIGludG8gdGhlaXIgaW1wbGVtZW50YXRpb25zLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgdG8gZW5zdXJlIHRoYXQgVkZJT19QQ0kgaXMgZW5hYmxlZC4gVGhpcyB3aWxsIGdpdmUgbWUgZnVydGhlciBjb250ZXh0IGZvciB0aGUgaW1wb3J0YW5jZSBhbmQgaW1wYWN0IG9mIHRoZSByZXNldCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTEyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjE0LjI5NTg3MDIzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY1NjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19QQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgUENJIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNC1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTA6Y29uZmlnIFZGSU9fUENJX0lOVFhcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoyNDpjb25maWcgVkZJT19QQ0lfVkdBXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgc3VwcG9ydCBmb3IgVkdBIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzMtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo0Nzpjb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgczM5MHggS1ZNIHBhc3N0aHJvdWdoXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVxcdGRlZl9ib29sIHkgaWYgVkZJT19QQ0lfQ09SRSBcXHUwMDI2XFx1MDAyNiBQQ0lfUDJQRE1BIFxcdTAwMjZcXHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjE0LjM0MTUzMjA2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MzYyMTE2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gbG9va2luZyBhdDpcblxuKipWRklPLVBDSSBSZXNldCBGdW5jdGlvbmFsaXR5IERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYFZGSU9fUENJYCBoZXJlLCB0aGF0J3Mgb3VyIHRhcmdldC4gTXkgbWFpbiBjb25jZXJuIHJpZ2h0IG5vdyBpcyB1bmRlcnN0YW5kaW5nIHRoZSByZXNldCBjYXBhYmlsaXRpZXMgd2l0aGluIHRoaXMgc2V0dXAuIFNwZWNpZmljYWxseSwgSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIFBDSSBidXMgYW5kIGluZGl2aWR1YWwgZnVuY3Rpb25zIGFyZSByZXNldC5cblxuRmlyc3QgdGhpbmdzIGZpcnN0OiBMZXQgbWUgY29uZmlybSBpZiB0aGUga2VybmVsIGV4cG9ydHMgdGhlIGNydWNpYWwgZnVuY3Rpb25zIHdlIG5lZWQuIEknbSBjaGVja2luZyBpZiBgcGNpX3Jlc2V0X2J1c19jb25kYCBpcyBleHBvc2VkIGFzIGEgc3ltYm9sIGFuZCwgc3VyZSBlbm91Z2gsIGl0J3MgdGhlcmUsIGZsYWdnZWQgYXMgYEVYUE9SVF9TWU1CT0xfR1BMYC4gUGVyZmVjdCEgVGhlbiwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgYHBjaV9yZXNldF9mdW5jdGlvbmAsIFllcCwgdGhhdCdzIHRoZXJlIHRvby4gRmluYWxseSwgd2hhdCBhYm91dCB0aGUgbG9ja2VkIHZlcnNpb24gb2YgdGhhdCwgYHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWRgPyBJIG5lZWQgdG8ga25vdyBpZiB0aGF0J3MgYWxzbyBhdmFpbGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzkwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6MTguOTc3NzQ2Nzc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA3MTk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0dQTFxcXFwocGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZFxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcGNpL3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL3BjaS5jPTUyNzA9aW50IHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoc3RydWN0IHBjaV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS5jLTUyODktfVxcbmRyaXZlcnMvcGNpL3BjaS5jOjUyOTA6RVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZCk7XFxuZHJpdmVycy9wY2kvcGNpLmMtNTI5MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6MTkuMDI0ODI4MzMzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzAyMTYyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgRnVuY3Rpb24gRXhwb3J0KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gIGZ1bmN0aW9uIGlzIGV4cG9zZWQsIGkuZS4sIGV4cG9ydGVkLCBmb3IgdXNlIG91dHNpZGUgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCAqbGlrZWx5KiBkZWZpbmVzIGl0LiBUaGlzIGlzIGEgY29tbW9uIGZpcnN0IHN0ZXAsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcmFjdGluZyB3aXRoIFBDSSBkZXZpY2VzIG9yIHRyeWluZyB0byB3cml0ZSBhIGRyaXZlciBtb2R1bGUuIElmIGl0J3Mgbm90IGV4cG9ydGVkLCB0aGVuIEkgbmVlZCB0byBjb25zaWRlciBhbHRlcm5hdGl2ZXMg4oCTIHdoZXRoZXIgdGhlcmUncyBhbiBlcXVpdmFsZW50IGZ1bmN0aW9uYWxpdHkgYWxyZWFkeSBleHBvc2VkLCBpZiBJJ2xsIG5lZWQgdG8gcmV3cml0ZSBjb2RlIG9yIGJ1aWxkIHRoZSBtb2R1bGUgYWdhaW5zdCBhIGN1c3RvbSBrZXJuZWwgb3IsIHdvcnN0IGNhc2UsIGlmIEkgaGF2ZSB0byBjb25zaWRlciBhIGNvbXBsZXRlIGNoYW5nZSBvZiBhcHByb2FjaC4gVGhlIGFuc3dlciBoZXJlIGRpY3RhdGVzIGEgKmxvdCogb2YgdGhlIG5leHQgc3RlcHMsIHNvIEkgbmVlZCB0aGlzIGluZm9ybWF0aW9uIGF0IGhhbmQgYmVmb3JlIEkgc3RhcnQgZG9pbmcgYW55IGtpbmQgb2YgaGVhdnktbGlmdGluZyB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgzOSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjIyLjI1NTA0NzMyM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0MDgwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKHBjaV90cnlfcmVzZXRfZnVuY3Rpb25cXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BjaS9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9wY2kuYz01Mjk4PWludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MzE5LX1cXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzIwOkVYUE9SVF9TWU1CT0xfR1BMKHBjaV90cnlfcmVzZXRfZnVuY3Rpb24pO1xcbmRyaXZlcnMvcGNpL3BjaS5jLTUzMjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjIyLjI5OTQ2MDg0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUyOTg2MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipQQ0kgQnVzIFJlc2V0IEV4cG9ydCBDaGVjayoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgZnVuZGFtZW50YWwuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZSBgcGNpX3Jlc2V0X2J1c2AgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBmaXJzdCBzdGVwLiBJIGNhbid0IHByb2NlZWQgd2l0aCBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGF2YWlsYWJpbGl0eSBvciB1c2FnZSBpZiBpdCdzIG5vdCBhY3R1YWxseSBtYWRlIHB1YmxpYy4gS25vd2luZyB3aGV0aGVyIGl0J3MgZXhwb3J0ZWQgZGljdGF0ZXMgdGhlIGVudGlyZSBhcHByb2FjaCBJJ2xsIHRha2UuIElmIGl0IGlzbid0LCBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgcmUtZXZhbHVhdGUgYW5kIGxvb2sgZm9yIGFsdGVybmF0aXZlIG1ldGhvZHMuIFNvLCBsZXQncyB2ZXJpZnkgdGhhdCBleHBvcnQgc3RhdHVzIGJlZm9yZSBtb3ZpbmcgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTk1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6MjUuMjUyNDUwNDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTA2MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXChwY2lfcmVzZXRfYnVzXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wY2kvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvcGNpLmM9NTgwMj1pbnQgcGNpX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS5jLTU4MDUtfVxcbmRyaXZlcnMvcGNpL3BjaS5jOjU4MDY6RVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2J1cyk7XFxuZHJpdmVycy9wY2kvcGNpLmMtNTgwNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6MjUuMjk4OTYyODI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzI0NzgxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgS2VybmVsIFN5bWJvbCBFeHBvcnQgU3RhdHVzKipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdG8gdmVyaWZ5IGlmIHRoZSBgcGNpX3Jlc2V0X3N1cHBvcnRlZGAgc3ltYm9sIGlzIGFjdHVhbGx5IGV4cG9ydGVkIGJ5IHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAuIElmIHRoZSBzeW1ib2wgaXNuJ3QgZXhwb3J0ZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZXZlbiB0cnlpbmcgdG8gdXNlIGl0IOKAkyBpdCB3b24ndCBiZSB2aXNpYmxlIHRvIG1vZHVsZXMgb3IgZXh0ZXJuYWwgY29kZS4gSXQncyBiYXNpYyBkdWUgZGlsaWdlbmNlLCBlbnN1cmluZyB3ZSdyZSBub3QgY2hhc2luZyBhIGdob3N0IGFuZCB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IHdlJ3JlIGFpbWluZyB0byBsZXZlcmFnZSBpcywgaW4gZmFjdCwgYXZhaWxhYmxlIGZvciB1cyB0byB3b3JrIHdpdGguIEJlZm9yZSBkaXZpbmcgYW55IGRlZXBlciwgdGhpcyBjaGVjayBpcyBtYW5kYXRvcnkuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNToyOC44MzE0NDUwOTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODExMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXChwY2lfcmVzZXRfc3VwcG9ydGVkXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wY2kvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvcGNpLmM9OTc9Ym9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy0xMDAtfVxcbmRyaXZlcnMvcGNpL3BjaS5jOjEwMTpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfc3VwcG9ydGVkKTtcXG5kcml2ZXJzL3BjaS9wY2kuYy0xMDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjI4Ljg3NzI2MTc4OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDE4MjM1MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUENJIFJlc2V0IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgdGhlbiB0d2Vha2luZyBzZXZlcmFsIGV4aXN0aW5nIGZ1bmN0aW9uczogYHBjaV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYCwgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gLCBhbmQgYHBjaV9yZXNldF9idXNgLiBUaGF0J3MgdGhlIGNvcmUgUENJIHJlc2V0IGluZnJhc3RydWN0dXJlIGJlaW5nIHRvdWNoZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGF0IGB2ZmlvX3BjaV9jb3JlLmNgIGlzIGFsc28gZ2V0dGluZyBtb2RpZmllZCB0byBtYWtlIHVzZSBvZiB0aGUgbmV3IGNvbmRpdGlvbmFsIGJ1cyByZXNldCBmdW5jdGlvbiBhbmQgYHBjaV9yZXNldF9zdXBwb3J0ZWRgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHRpZ2h0ZW5pbmcgdGhlIGludGVncmF0aW9uIHdpdGggVkZJTy5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUga2V5IGZ1bmN0aW9ucyBpbXBsaWNhdGVkIGluIHRoaXMgY2hhbmdlOiBgcGNpX3Jlc2V0X2J1c19jb25kYCwgdGhlIHByaW1hcnkgbmV3IG9uZSwgaXMgbmF0dXJhbGx5IHRoZSBwcmlvcml0eS4gVGhlbiwgdGhlIHN0YW5kYXJkIGBwY2lfcmVzZXRfZnVuY3Rpb25gIGZhbWlseSBpcyBnZXR0aW5nIHJldmlzZWQuIEl0IGFsc28gbG9va3MgbGlrZSB0aGUgVkZJTyBjb2RlIGhhcyBzZWVuIHNpZ25pZmljYW50IGNoYW5nZSwgc2luY2UgYHZmaW9fcGNpX2NvcmUuY2AgaXMgYmVpbmcgYWx0ZXJlZC4gU3BlY2lmaWNhbGx5LCBgdmZpb19wY2lfaW9jdGxfcmVzZXRgLCB3aGljaCBoYW5kbGVzIHRoZSBpb2N0bCBmb3IgcmVzZXQsIGlzIHN0YXRpYywgYnV0IGl0J3MgKmNhbGxlZCogZnJvbSBgdmZpb19wY2lfY29yZV9pb2N0bGAgd2hpY2ggaXMsIGFzIGFuIGlvY3RsIGhhbmRsZXIsIGV4cG9ydGVkLiBUaGVuLCB3ZSBoYXZlIGB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldGAsIGFuZCBgdmZpb19wY2lfZGV2X3NldF90cnlfcmVzZXRgLCB3aGljaCBhcmUgYWxzbyBzdGF0aWMsIHdpdGggdGhlIGxhdHRlciBiZWluZyB1c2VkIGR1cmluZyBWRklPIGRldmljZSBkaXNhYmxlLlxuXG5Ib2xkIG9uLi4uIGB2ZmlvX3BjaV9pb2N0bF9yZXNldGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IGlmIGl0J3MgYmVpbmcgdXNlZCBieSBgdmZpb19wY2lfY29yZV9pb2N0bGAsIHRoZW4gdGhhdCBtZWFucyBpdCdzIHN0aWxsIGJlaW5nIGFjY2Vzc2VkIGV4dGVybmFsbHkuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgdmZpb19wY2lfY29yZV9pb2N0bGAgaXMgaW5kZWVkIGV4cG9ydGVkLiBJdCdzIGEgY3JpdGljYWwgcG9pbnQgdG8gZW5zdXJlIHRoZSBWRklPIHJlc2V0IG1lY2hhbmlzbSBpcyBwcm9wZXJseSBleHBvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgyNCwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNTozNC44OTU1MDA0OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTI4MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXCh2ZmlvX3BjaV9jb3JlX2lvY3RsXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTU2Nz1sb25nIHZmaW9fcGNpX2NvcmVfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTkyLX1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNTkzOkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfaW9jdGwpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE1OTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjM0Ljk0MzYzNjU3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDc1MzI5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSWRlbnRpZnlpbmcgdGhlIEtleSBGb2N1cyBmb3IgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBjaG9vc2UgdGhlIGJlc3QgZm9jdXMgZm9yIGRpZ2dpbmcgaW50byB0aGlzLiBgdmZpb19wY2lfY29yZV9pb2N0bGAuLi4gd2hpbGUgaXQgKmlzKiB0aGUgZ2VuZXJpYyBpb2N0bCBoYW5kbGVyLCB0aGF0J3MgYWxtb3N0IHRvbyBicm9hZCwgaXNuJ3QgaXQ/IEl04oCZcyBwcm9iYWJseSBnb2luZyB0byBsZWFkIHRvIGEgbG90IG9mIG5vaXNlLiBNYXliZSBzdGFydGluZyB0aGVyZSBpcyBhIGdvb2QgaWRlYSB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLCBidXQgaXQgbWlnaHQgYmUgaW5lZmZpY2llbnQuIGB2ZmlvX3BjaV9jb3JlX2Rpc2FibGVg4oCmIG5vdyAqdGhhdCogc2VlbXMgbW9yZSBwcm9taXNpbmcuIFNwZWNpZmljYWxseSwgKmRpc2FibGluZyogYSBmdW5jdGlvbiwgY291bGQgcmV2ZWFsIG1vcmUgYWJvdXQgYW55IHNwZWNpZmljIGlzc3VlcyBwcmVzZW50LiBMZXQncyBzdGFydCB3aXRoIHRoYXQgYW5kIHRoZW4gY2lyY2xlIGJhY2sgdG8gdGhlIElvQ3RsIGhhbmRsZXIgaWYgd2UgbmVlZCB0by5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MjEsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNTozOC40OTExNzI3NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyODU0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKHZmaW9fcGNpX2NvcmVfZGlzYWJsZVxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTY3OD12b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04MTItfVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjgxMzpFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2Rpc2FibGUpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTgxNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6MzguNTM1NDY1MDY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODc5MjA5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIFZGSU8tUENJJ3MgRXhwb3J0ZWQgU3ltYm9scyoqXG5cbkFscmlnaHQsIHNvIGB2ZmlvX3BjaV9jb3JlX2Rpc2FibGVgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQuIFRoYXQgY29uZmlybXMgYSBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIHRoZSBuYXR1cmFsIGZvbGxvdy11cCBxdWVzdGlvbiBpc+KApiB3aGF0IGFib3V0IGl0cyBjb3VudGVycGFydD8gSXMgYHZmaW9fcGNpX2NvcmVfZW5hYmxlYCBhbHNvIGV4cG9zZWQ/IEkgbmVlZCB0byBrbm93IGlmIEkgaGF2ZSB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBvciBpZiB0aGVyZSBpcyBhbm90aGVyIG1lY2hhbmlzbSBmb3IgdGhlIGVuYWJsZSBwcm9jZWR1cmUuIFRoaXMgY291bGQgaW1wYWN0IGhvdyBJIGFwcHJvYWNoIFggb24gbXkgY3VycmVudCBwcm9qZWN0LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc3ltYm9sIHRhYmxlIGRpcmVjdGx5IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTM2LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6NDEuNzIzMzg5MjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODk5NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXCh2ZmlvX3BjaV9jb3JlX2VuYWJsZVxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTU4Nz1pbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtNjc1LX1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzo2NzY6RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9lbmFibGUpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTY3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6NDEuNzcxMjkzNDM5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzI1Njg2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWRklPIFBDSSBSZXNldCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBpdCdzIGFsdGVyaW5nIHRoZSByZXNldCBtZWNoYW5pc21zIHdpdGhpbiB0aGUgVkZJTy1QQ0kgZnJhbWV3b3JrLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgdmZpb19wY2lfY29yZV9lbmFibGVgIGFuZCBgdmZpb19wY2lfY29yZV9kaXNhYmxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJvdXRpbmVzIGFyZSBiZWluZyBtb2RpZmllZCBhbmQgaG93IHRoYXQgYWZmZWN0cyB0aGUgZGV2aWNlIHJlc2V0IGxpZmVjeWNsZS5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gc29tZSBrZXkgc3ltYm9scy4gSSdtIG5vdGluZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgYXMgdGhleSBhcmUgbGlrZWx5IHdoZXJlIHRoZSBoZWF2eSBsaWZ0aW5nIGlzIGhhcHBlbmluZzogYHBjaV9yZXNldF9idXNfY29uZGAsIGBwY2lfcmVzZXRfZnVuY3Rpb25gLCBgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZGAsIGBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uYCwgYHZmaW9fcGNpX2NvcmVfaW9jdGxgLCBgdmZpb19wY2lfY29yZV9kaXNhYmxlYCwgYW5kIGB2ZmlvX3BjaV9jb3JlX2VuYWJsZWAuXG5cbldhaXQgYSBtaW51dGUsIEkgc2VlIHRoYXQgYHBjaV9yZXNldF9idXNgIGlzIGFsc28gYmVpbmcgdG91Y2hlZCwgd2hpY2ggaXMgbm93IGNhbGxpbmcgYHBjaV9yZXNldF9idXNfY29uZGAuIFRoYXQncyBhbiBpbXBvcnRhbnQgY2hhbmdlOyBJJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjb25kaXRpb25hbCByZXNldCBsb2dpYyBoZXJlLlxuXG5BIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgcGNpX3Jlc2V0X3N1cHBvcnRlZGAgaXMgYmVpbmcgZXhwb3J0ZWQuIFRoaXMgc3VnZ2VzdHMgaXQncyBiZWNvbWluZyBtb3JlIHdpZGVseSBhY2Nlc3NpYmxlLCB3aGljaCBjb3VsZCBiZSBhbiBpbnRlcmVzdGluZyBhcmNoaXRlY3R1cmFsIHNoaWZ0LiBJJ2xsIG5lZWQgdG8gc2VlIHdoZXJlIGl0J3MgYmVpbmcgdXNlZC5cblxuTm93LCB0byBjb21waWxlIHRoaXMsIEknbGwgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBJJ20gZ29pbmcgdG8gbmVlZCBgUENJYCBhbmQgYFZGSU9fUENJYC4gQnV0IEkgc2hvdWxkIGRvdWJsZS1jaGVjayBkZXBlbmRlbmNpZXMuIExldCBtZSBzZWUuLi4geWVzLCBgVkZJT19QQ0lgIGRlcGVuZHMgb24gYFZGSU9gIGFuZCBgUENJYC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIG90aGVyIGRlcGVuZGVuY2llcyB0b28sIGJ1dCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6NDcuOTAzODY1MTA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc0OTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozOlxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MTA9Y29uZmlnIFZGSU9fUENJX0lOVFhcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMjpcXHRkZXBlbmRzIG9uIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTMtXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjQ9Y29uZmlnIFZGSU9fUENJX1ZHQVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoyNjpcXHRkZXBlbmRzIG9uIFg4NiBcXHUwMDI2XFx1MDAyNiBWR0FfQVJCXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0zND1jb25maWcgVkZJT19QQ0lfSUdEXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MzY6XFx0ZGVwZW5kcyBvbiBYODZcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzctXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9NDc9Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBTMzkwIFxcdTAwMjZcXHUwMDI2IEtWTVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01MC1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6NDcuOTUzNjIwNzQ3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzE3MjY4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgVmVyaWZpY2F0aW9uIC0gVkZJTydzIEZvdW5kYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBWRklPX1BDSWAuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgUENJYCwgdGhhdCdzIGZ1bmRhbWVudGFsLiBBbmQgbmF0dXJhbGx5LCBgVkZJT2AgaXRzZWxmIGlzIHJlcXVpcmVkIGZvciBgVkZJT19QQ0lgIHRvIGRvIGl0cyB0aGluZy5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYFZGSU9gIHBpZWNlcyBhcmUgY29ycmVjdGx5IHNldCB1cC4gSSdsbCBuZWVkIHRvIGp1bXAgaW50byBgZHJpdmVycy92ZmlvL0tjb25maWdgIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSdtIGFmdGVyIHRoZSBjb3JlIGBWRklPYCBjb25maWd1cmF0aW9uLiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0J3MgYWxsIGxpbmVkIHVwIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjUxLjE4NTM1MDUzOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMDU4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOm1lbnVjb25maWcgVkZJT1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz0xNj1pZiBWRklPXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MTc6Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMjktXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MzA6Y29uZmlnIFZGSU9fR1JPVVBcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zMS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBncm91cCAvZGV2L3ZmaW8vJGdyb3VwX2lkXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMzktXFxuZHJpdmVycy92ZmlvL0tjb25maWc6NDA6Y29uZmlnIFZGSU9fQ09OVEFJTkVSXFxuZHJpdmVycy92ZmlvL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NTI9aWYgVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mzpjb25maWcgVkZJT19JT01NVV9UWVBFMVxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01Ni1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Nzpjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01OC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NjE9ZW5kaWZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02Mi1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2Mzpjb25maWcgVkZJT19OT0lPTU1VXFxuZHJpdmVycy92ZmlvL0tjb25maWctNjQtXFx0Ym9vbCBcXFwiVkZJTyBOby1JT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzctXFxuZHJpdmVycy92ZmlvL0tjb25maWc6Nzg6Y29uZmlnIFZGSU9fVklSUUZEXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzktXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctODItXFxuZHJpdmVycy92ZmlvL0tjb25maWc6ODM6Y29uZmlnIFZGSU9fREVCVUdGU1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkV4cG9ydCBWRklPIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNTo1MS4yMjgzNjE5NDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3OTAwOTUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQQ0kgYW5kIFZGSU8gSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gaW50ZWdyYXRpbmcgc29tZSBjcnVjaWFsIHVwZGF0ZXMuIEZpcnN0LCBJJ20gYWRkaW5nIGBQQ0lgLCBgVkZJT2AsIGFuZCBgVkZJT19QQ0lgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGVzZSBmZWF0dXJlcyBhcmUgcHJvcGVybHkgZW5hYmxlZCBpbiB0aGUgc3lzdGVtLlxuXG5Ob3csIGxldCdzIHZlcmlmeSBhIGNyaXRpY2FsIGRldGFpbDogaXMgYHBjaV9yZXNldF9idXNfY29uZGAgZXhwb3J0ZWQ/IFllcCwgbG9va3MgZ29vZC4gVGhpcyBpcyBhIGtleSBmdW5jdGlvbi4gVGhlc2UgY2hhbmdlcyBzZWVtIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS5cblxuVGhlIGxvZ2ljIGJlaGluZCB0aGVzZSBjaGFuZ2VzIGlzIHNvdW5kLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgdGhlbiBpdCBtb2RpZmllcyB0aG9zZSBQQ0kgcmVzZXQgZnVuY3Rpb25zIHNvIHRoYXQgd2UgYXZvaWQgdGhlIHNjZW5hcmlvIG9mIHJlc2V0dGluZyBTUi1JT1YgUGh5c2ljYWwgRnVuY3Rpb25zIChQRnMpIHdoZW4gdGhlaXIgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykgYXJlIGFjdGl2ZWx5IGluIHVzZS4gSXQgYWxzbyBtYWtlcyBzdXJlIHRoZSBWRklPIFBDSSBjb3JlIGlzIHVwZGF0ZWQgdG8gbGV2ZXJhZ2UgdGhlc2UgbmV3IGNoZWNrcy4gVGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBwY2lfcmVzZXRfYnVzX2NvbmRgLCBhcmUgcmVhY2hhYmxlIGNvcmUgUENJIGFuZCBWRklPIGZ1bmN0aW9ucywgYW5kIHRoZXkgYXJlIGNyaXRpY2FsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cblxuSSd2ZSBnb3QgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb25zIGluIG1pbmQ6XG5cbiogICBUaGUgY3JpdGljYWwgZnVuY3Rpb24sIGBwY2lfcmVzZXRfYnVzX2NvbmRgLlxuKiAgIFBDSSByZXNldCBmdW5jdGlvbnM6IGBwY2lfcmVzZXRfZnVuY3Rpb25gLCBgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZGAsIGBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uYCwgYW5kIGBwY2lfcmVzZXRfYnVzYCB3aGljaCB3aWxsIG5lZWQgdGhlIGBwY2lfcmVzZXRfYnVzX2NvbmRgLlxuKiAgIEFuZCBmaW5hbGx5IHRoZSBWRklPIGZ1bmN0aW9ucyB3aGljaCBtdXN0IGJlIGNvbnNpZGVyZWQ6IGB2ZmlvX3BjaV9jb3JlX2lvY3RsYCwgYHZmaW9fcGNpX2NvcmVfZGlzYWJsZWAsIGFuZCBgdmZpb19wY2lfY29yZV9lbmFibGVgLlxuXG5JJ20gc2V0dGluZyB1cCB0aGVzZSBjb25maWd1cmF0aW9uczogYFBDSWAsIGBWRklPYCwgYW5kIGBWRklPX1BDSWAuXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LiBFdmVyeXRoaW5nIGxvb2tzIGdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDQyLCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNTo1Ny42MDczNzQ2OTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU1OTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUENJXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJWRklPX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBjaV9yZXNldF9idXNfY29uZFwiLFxuICAgIFwicGNpX3Jlc2V0X2Z1bmN0aW9uXCIsXG4gICAgXCJwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkXCIsXG4gICAgXCJwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uXCIsXG4gICAgXCJwY2lfcmVzZXRfYnVzXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2lvY3RsXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2Rpc2FibGVcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZW5hYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgbW9kaWZpZXMgUENJIHJlc2V0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IHJlc2V0dGluZyBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gSXQgYWxzbyB1cGRhdGVzIFZGSU8gUENJIGNvcmUgdG8gdXNlIHRoZXNlIG5ldyBjaGVja3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBQQ0kgYW5kIFZGSU8gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUENJXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJWRklPX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBjaV9yZXNldF9idXNfY29uZFwiLFxuICAgIFwicGNpX3Jlc2V0X2Z1bmN0aW9uXCIsXG4gICAgXCJwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkXCIsXG4gICAgXCJwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uXCIsXG4gICAgXCJwY2lfcmVzZXRfYnVzXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2lvY3RsXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2Rpc2FibGVcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZW5hYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgbW9kaWZpZXMgUENJIHJlc2V0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IHJlc2V0dGluZyBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gSXQgYWxzbyB1cGRhdGVzIFZGSU8gUENJIGNvcmUgdG8gdXNlIHRoZXNlIG5ldyBjaGVja3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBQQ0kgYW5kIFZGSU8gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjU3LjY4Njk0MDM3NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyOTgxMjgwNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNTo1Ny42ODc0NTMxNDZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTkyOTc2MDg5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBkZXZpY2Ugc3RhdGUgbWFuYWdlbWVudCwgYW5kIFBDSSBzdWJzeXN0ZW0gQVBJcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBtb2RpZnkgYnVmZmVyIGFsbG9jYXRpb25zLCBwYWRkaW5nLCBvciBpbml0aWFsaXphdGlvbiBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBgdmZpb19kZXZpY2VfaW5mb2Agc3RydWN0dXJlIG1vZGlmaWVkIGluIGB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mb2AgaXMgYWxyZWFkeSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChgc3RydWN0IHZmaW9fZGV2aWNlX2luZm8gaW5mbyA9IHt9O2ApLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIGxvY2tpbmcgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGM4ZTAwY2M0YmFlNGZjYjgzOGQ3NzgwYTQ1OTFjMmZjMTQ4ZjY5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA1OjI0OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuY1xuaW5kZXggNzdiMTdiMTNlZTYxNS4uMGI0ZjEzMzk3ZGEyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jXG4rKysgYi9kcml2ZXJzL3BjaS9wY2kuY1xuQEAgLTk4LDYgKzk4LDcgQEAgYm9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4ge1xuIFx0cmV0dXJuIGRldi1cdTAwM2VyZXNldF9tZXRob2RzWzBdICE9IDA7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9zdXBwb3J0ZWQpO1xuIFxuICNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlNcbiBpbnQgcGNpX2RvbWFpbnNfc3VwcG9ydGVkID0gMTtcbkBAIC01MjIyLDExICs1MjIzLDIyIEBAIGludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdFx0cGNpX2Rldl9sb2NrKGJyaWRnZSk7XG4gXG4gXHRwY2lfZGV2X2xvY2soZGV2KTtcbitcbitcdC8qXG4rXHQgKiBSZXNldCBvZiBhbiBTUi1JT1YgUEYgbmVjZXNzYXJpbHkgcmVzZXRzIGFueSBhY3RpdmUgVkZzLiAgU3VjaCByZXNldHMgYXJlXG4rXHQgKiBiZXlvbmQgdGhlIHNjb3BlIGFkdmVydGlzZWQgZm9yIHBjaV9yZXNldF9mdW5jdGlvbigpIGFuZCB2YXJpYW50cywgcmVmdXNlLlxuK1x0ICovXG4rXHRpZiAocGNpX251bV92ZihkZXYpIFx1MDAzZSAwKSB7XG4rXHRcdHJjID0gLUVOT1RUWTtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4gXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcbiBcbiBcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XG4gXG4gXHRwY2lfZGV2X3Jlc3RvcmUoZGV2KTtcbit1bmxvY2s6XG4gXHRwY2lfZGV2X3VubG9jayhkZXYpO1xuIFxuIFx0aWYgKGJyaWRnZSlcbkBAIC01MjY0LDYgKzUyNzYsOSBAQCBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKGRldikpXG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFxuK1x0aWYgKHBjaV9udW1fdmYoZGV2KSBcdTAwM2UgMClcbitcdFx0cmV0dXJuIC1FTk9UVFk7XG4rXG4gXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcbiBcbiBcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XG5AQCAtNTI5MCw2ICs1MzA1LDExIEBAIGludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gXHRpZiAoIXBjaV9kZXZfdHJ5bG9jayhkZXYpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcbitcdGlmIChwY2lfbnVtX3ZmKGRldikgXHUwMDNlIDApIHtcbitcdFx0cGNpX2Rldl91bmxvY2soZGV2KTtcbitcdFx0cmV0dXJuIC1FTk9UVFk7XG4rXHR9XG4rXG4gXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcbiBcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XG4gXHRwY2lfZGV2X3Jlc3RvcmUoZGV2KTtcbkBAIC01NTQ4LDkgKzU1NjgsMzYgQEAgaW50IHBjaV9wcm9iZV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X3Nsb3QpO1xuIFxuKy8qIENhbGwgQGNiIG9uIGV2ZXJ5IGRldmljZSBhIHNsb3Qgb3IgYnVzIHJlc2V0IGFmZmVjdHMsIHN0b3BwaW5nIG9uIGVycm9yLiAqL1xuK3N0YXRpYyBpbnQgcGNpX3dhbGtfcmVzZXRfY2hlY2soc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9zbG90ICpzbG90LFxuK1x0XHRcdFx0aW50ICgqY2IpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxuK1x0XHRcdFx0dm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqZGV2O1xuK1x0aW50IHJjO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIFx1MDAyNmJ1cy1cdTAwM2VkZXZpY2VzLCBidXNfbGlzdCkge1xuK1x0XHRpZiAoc2xvdCBcdTAwMjZcdTAwMjYgKCFkZXYtXHUwMDNlc2xvdCB8fCBkZXYtXHUwMDNlc2xvdCAhPSBzbG90KSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0cmMgPSBjYihkZXYsIGRhdGEpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHRpZiAoZGV2LVx1MDAzZXN1Ym9yZGluYXRlKSB7XG4rXHRcdFx0cmMgPSBwY2lfd2Fsa19yZXNldF9jaGVjayhkZXYtXHUwMDNlc3Vib3JkaW5hdGUsXG4rXHRcdFx0XHRcdFx0ICBOVUxMLCBjYiwgZGF0YSk7XG4rXHRcdFx0aWYgKHJjKVxuK1x0XHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICogcGNpX3RyeV9yZXNldF9zbG90IC0gVHJ5IHRvIHJlc2V0IGEgUENJIHNsb3RcbiAgKiBAc2xvdDogUENJIHNsb3QgdG8gcmVzZXRcbisgKiBAY2hlY2s6IG9wdGlvbmFsIHBlci1kZXZpY2UgY2FsbGJhY2sgdGhhdCBjYW4gYWJvcnQgdGhlIHJlc2V0XG4rICogQGRhdGE6IG9wYXF1ZSBhcmd1bWVudCBmb3IgQGNoZWNrXG4gICpcbiAgKiBBIFBDSSBidXMgbWF5IGhvc3QgbXVsdGlwbGUgc2xvdHMsIGVhY2ggc2xvdCBtYXkgc3VwcG9ydCBhIHJlc2V0IG1lY2hhbmlzbVxuICAqIGluZGVwZW5kZW50IG9mIG90aGVyIHNsb3RzLiAgRm9yIGluc3RhbmNlLCBzb21lIHNsb3RzIG1heSBzdXBwb3J0IHNsb3QgcG93ZXJcbkBAIC01NTYzLDcgKzU2MTAsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfc2xvdCk7XG4gICpcbiAgKiBTYW1lIGFzIGFib3ZlIGV4Y2VwdCByZXR1cm4gLUVBR0FJTiBpZiB0aGUgc2xvdCBjYW5ub3QgYmUgbG9ja2VkXG4gICovXG4tc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KVxuK3N0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCxcbitcdFx0XHQgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4rXHRcdFx0ICAgICAgdm9pZCAqZGF0YSlcbiB7XG4gXHRpbnQgcmM7XG4gXG5AQCAtNTU3MiwxMCArNTYyMSwxNCBAQCBzdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpXG4gXHRcdHJldHVybiByYztcbiBcbiBcdGlmIChwY2lfc2xvdF90cnlsb2NrKHNsb3QpKSB7XG4tXHRcdHBjaV9zbG90X3NhdmVfYW5kX2Rpc2FibGVfbG9ja2VkKHNsb3QpO1xuLVx0XHRtaWdodF9zbGVlcCgpO1xuLVx0XHRyYyA9IHBjaV9yZXNldF9ob3RwbHVnX3Nsb3Qoc2xvdC1cdTAwM2Vob3RwbHVnLCBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xuLVx0XHRwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTtcbitcdFx0cmMgPSBjaGVjayA/IHBjaV93YWxrX3Jlc2V0X2NoZWNrKHNsb3QtXHUwMDNlYnVzLCBzbG90LCBjaGVjaywgZGF0YSkgOiAwO1xuK1x0XHRpZiAoIXJjKSB7XG4rXHRcdFx0cGNpX3Nsb3Rfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoc2xvdCk7XG4rXHRcdFx0bWlnaHRfc2xlZXAoKTtcbitcdFx0XHRyYyA9IHBjaV9yZXNldF9ob3RwbHVnX3Nsb3Qoc2xvdC1cdTAwM2Vob3RwbHVnLFxuK1x0XHRcdFx0XHRcdCAgICBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xuK1x0XHRcdHBjaV9zbG90X3Jlc3RvcmVfbG9ja2VkKHNsb3QpO1xuK1x0XHR9XG4gXHRcdHBjaV9zbG90X3VubG9jayhzbG90KTtcbiBcdH0gZWxzZVxuIFx0XHRyYyA9IC1FQUdBSU47XG5AQCAtNTYwNywxMCArNTY2MCwxNCBAQCBzdGF0aWMgaW50IHBjaV9idXNfcmVzZXQoc3RydWN0IHBjaV9idXMgKmJ1cywgYm9vbCBwcm9iZSlcbiAvKipcbiAgKiBwY2lfdHJ5X3Jlc2V0X2J1cyAtIFRyeSB0byByZXNldCBhIFBDSSBidXNcbiAgKiBAYnVzOiB0b3AgbGV2ZWwgUENJIGJ1cyB0byByZXNldFxuKyAqIEBjaGVjazogb3B0aW9uYWwgcGVyLWRldmljZSBjYWxsYmFjayB0aGF0IGNhbiBhYm9ydCB0aGUgcmVzZXRcbisgKiBAZGF0YTogb3BhcXVlIGFyZ3VtZW50IGZvciBAY2hlY2tcbiAgKlxuICAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBidXMgY2Fubm90IGJlIGxvY2tlZFxuICAqL1xuLXN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cylcbitzdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsXG4rXHRcdFx0ICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4rXHRcdFx0ICAgICB2b2lkICpkYXRhKVxuIHtcbiBcdGludCByYztcbiBcbkBAIC01NjE5LDEwICs1Njc2LDEzIEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuIFx0aWYgKHBjaV9idXNfdHJ5bG9jayhidXMpKSB7XG4tXHRcdHBjaV9idXNfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoYnVzKTtcbi1cdFx0bWlnaHRfc2xlZXAoKTtcbi1cdFx0cmMgPSBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoYnVzLVx1MDAzZXNlbGYpO1xuLVx0XHRwY2lfYnVzX3Jlc3RvcmVfbG9ja2VkKGJ1cyk7XG4rXHRcdHJjID0gY2hlY2sgPyBwY2lfd2Fsa19yZXNldF9jaGVjayhidXMsIE5VTEwsIGNoZWNrLCBkYXRhKSA6IDA7XG4rXHRcdGlmICghcmMpIHtcbitcdFx0XHRwY2lfYnVzX3NhdmVfYW5kX2Rpc2FibGVfbG9ja2VkKGJ1cyk7XG4rXHRcdFx0bWlnaHRfc2xlZXAoKTtcbitcdFx0XHRyYyA9IHBjaV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19yZXNldChidXMtXHUwMDNlc2VsZik7XG4rXHRcdFx0cGNpX2J1c19yZXN0b3JlX2xvY2tlZChidXMpO1xuK1x0XHR9XG4gXHRcdHBjaV9idXNfdW5sb2NrKGJ1cyk7XG4gXHR9IGVsc2VcbiBcdFx0cmMgPSAtRUFHQUlOO1xuQEAgLTU2NjEsNyArNTcyMSw3IEBAIHN0YXRpYyBpbnQgcGNpX3Jlc2V0X2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlLCBib29sIHJlc3RvcmUpXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsIFx1MDAyNmJ1cy1cdTAwM2VzbG90cywgbGlzdCkge1xuIFx0XHRpZiAocmVzdG9yZSlcbi1cdFx0XHRyZXQgPSBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc2xvdCk7XG4rXHRcdFx0cmV0ID0gcGNpX3RyeV9yZXNldF9zbG90KHNsb3QsIE5VTEwsIE5VTEwpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmV0ID0gcGNpX3Nsb3RfcmVzZXQoc2xvdCwgUENJX1JFU0VUX0RPX1JFU0VUKTtcbiBcbkBAIC01Njc1LDcgKzU3MzUsNyBAQCBzdGF0aWMgaW50IHBjaV9yZXNldF9icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgYm9vbCByZXN0b3JlKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBjaV9zbG90X211dGV4KTtcbiBcbiBcdGlmIChyZXN0b3JlKVxuLVx0XHRyZXR1cm4gcGNpX3RyeV9yZXNldF9idXMoYnVzKTtcbitcdFx0cmV0dXJuIHBjaV90cnlfcmVzZXRfYnVzKGJ1cywgTlVMTCwgTlVMTCk7XG4gXHRyZXR1cm4gcGNpX2J1c19yZXNldChicmlkZ2UtXHUwMDNlc3Vib3JkaW5hdGUsIFBDSV9SRVNFVF9ET19SRVNFVCk7XG4gfVxuIFxuQEAgLTU3MDUsMTYgKzU3NjUsNDMgQEAgaW50IHBjaV9wcm9iZV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cylcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X2J1cyk7XG4gXG4rLyoqXG4rICogcGNpX3Jlc2V0X2J1c19jb25kIC0gY29uZGl0aW9uYWxseSByZXNldCB0aGUgc2xvdCBvciBidXMgY29udGFpbmluZyBhIGRldmljZVxuKyAqIEBwZGV2OiB0b3AgbGV2ZWwgUENJIGRldmljZSB0byByZXNldCB2aWEgc2xvdC9idXNcbisgKiBAY2hlY2s6IG9wdGlvbmFsIGNhbGxiYWNrIGludm9rZWQgb24gZWFjaCBhZmZlY3RlZCBkZXZpY2UgYmVmb3JlIHRoZSByZXNldFxuKyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgcGFzc2VkIHRvIEBjaGVja1xuKyAqXG4rICogUmVzZXQgdGhlIHNsb3Qgb3IgYnVzIGNvbnRhaW5pbmcgQHBkZXYuICBPbmNlIHRoZSBlbnRpcmUgcGh5c2ljYWwgYnVzL3Nsb3RcbisgKiBoaWVyYXJjaHkgaXMgbG9ja2VkLCBAY2hlY2sgKGlmIG5vdCBOVUxMKSBpcyBjYWxsZWQgb24gZWFjaCBvZiB0aG9zZSBsb2NrZWRcbisgKiBkZXZpY2VzLiAgQSBub256ZXJvIHJldHVybiBhYm9ydHMgdGhlIHJlc2V0IGFuZCBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLFxuKyAqIG90aGVyd2lzZSB0aGUgcmVzZXQgcHJvY2VlZHMuXG4rICpcbisgKiBOQi4gQGNoZWNrIHJ1bnMgd2l0aCB0aGUgZnVsbCBzZXQgb2YgZGV2aWNlX2xvY2tzIG5vdGVkIGFib3ZlIGhlbGQ7IGNhbGxiYWNrc1xuKyAqIG11c3QgdGFrZSB0aGVzZSBsb2NraW5nIHNlbWFudGljcyBpbnRvIGFjY291bnQuICBVc2UgTlVMTCB0byBwZXJmb3JtIGFuXG4rICogdW5jb25kaXRpb25hbCByZXNldC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU5PVFRZIGlmIEBwZGV2IGlzIG5vdCByZXNldHRhYmxlLCAtRUFHQUlOIGlmIHRoZVxuKyAqIGRldmljZXMgY2Fubm90IGJlIGxvY2tlZCwgb3IgdGhlIHZhbHVlIHJldHVybmVkIGJ5IEBjaGVjay5cbisgKi9cbitpbnQgcGNpX3Jlc2V0X2J1c19jb25kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHQgICAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxuK1x0XHQgICAgICAgdm9pZCAqZGF0YSlcbit7XG4rXHRyZXR1cm4gIXBjaV9wcm9iZV9yZXNldF9zbG90KHBkZXYtXHUwMDNlc2xvdCkgP1xuK1x0XHRwY2lfdHJ5X3Jlc2V0X3Nsb3QocGRldi1cdTAwM2VzbG90LCBjaGVjaywgZGF0YSkgOlxuK1x0XHRwY2lfdHJ5X3Jlc2V0X2J1cyhwZGV2LVx1MDAzZWJ1cywgY2hlY2ssIGRhdGEpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfYnVzX2NvbmQpO1xuK1xuIC8qKlxuICAqIHBjaV9yZXNldF9idXMgLSBUcnkgdG8gcmVzZXQgYSBQQ0kgYnVzXG4gICogQHBkZXY6IHRvcCBsZXZlbCBQQ0kgZGV2aWNlIHRvIHJlc2V0IHZpYSBzbG90L2J1c1xuICAqXG4tICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIGJ1cyBjYW5ub3QgYmUgbG9ja2VkXG4rICogU2FtZSBhcyBhYm92ZSB3aXRob3V0IHRoZSBjb25kaXRpb25hbCBjaGVjay5cbiAgKi9cbiBpbnQgcGNpX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4tXHRyZXR1cm4gKCFwY2lfcHJvYmVfcmVzZXRfc2xvdChwZGV2LVx1MDAzZXNsb3QpKSA/XG4tXHQgICAgcGNpX3RyeV9yZXNldF9zbG90KHBkZXYtXHUwMDNlc2xvdCkgOiBwY2lfdHJ5X3Jlc2V0X2J1cyhwZGV2LVx1MDAzZWJ1cyk7XG4rXHRyZXR1cm4gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIE5VTEwsIE5VTEwpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfYnVzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oXG5pbmRleCA0NDY5ZTFhNzdmM2MxLi40MTZmZDZiNzRhYmU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLmhcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oXG5AQCAtMjMwLDcgKzIzMCw2IEBAIGVudW0gcGNpX21tYXBfYXBpIHtcbiBpbnQgcGNpX21tYXBfZml0cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHJlc25vLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYWksXG4gXHRcdCAgZW51bSBwY2lfbW1hcF9hcGkgbW1hcF9hcGkpO1xuIFxuLWJvb2wgcGNpX3Jlc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB2b2lkIHBjaV9pbml0X3Jlc2V0X21ldGhvZHMoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX2J1c19lcnJvcl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCAzZjExYTk2MjRiOWMwLi44ZTQyMzQyZDU2ZDNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtNjA5LDcgKzYwOSw2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRpZiAocmV0ID09IC1FQUdBSU4pXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xuIFxuLVx0dmRldi1cdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XG4gXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcdHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpO1xuIFx0aWYgKCF2ZGV2LVx1MDAzZXBjaV9zYXZlZF9zdGF0ZSlcbkBAIC03NjYsNyArNzY1LDcgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0aWYgKHBjaV9sb2FkX2FuZF9mcmVlX3NhdmVkX3N0YXRlKHBkZXYsIFx1MDAyNnZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKSkge1xuIFx0XHRwY2lfaW5mbyhwZGV2LCBcIiVzOiBDb3VsZG4ndCByZWxvYWQgc2F2ZWQgc3RhdGVcXG5cIiwgX19mdW5jX18pO1xuIFxuLVx0XHRpZiAoIXZkZXYtXHUwMDNlcmVzZXRfd29ya3MpXG4rXHRcdGlmICghcGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiBcdFx0cGNpX3NhdmVfc3RhdGUocGRldik7XG5AQCAtNzg1LDEyICs3ODQsMTQgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0ICogV2UgY2FuIG5vdCB1c2UgdGhlIFwidHJ5XCIgcmVzZXQgaW50ZXJmYWNlIGhlcmUsIHdoaWNoIHdpbGxcbiBcdCAqIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXNseSByZXN0b3JlZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLlxuIFx0ICovXG4tXHRpZiAodmRldi1cdTAwM2VyZXNldF93b3Jrcykge1xuK1x0aWYgKHBjaV9yZXNldF9zdXBwb3J0ZWQocGRldikpIHtcbiBcdFx0YnJpZGdlID0gcGNpX3Vwc3RyZWFtX2JyaWRnZShwZGV2KTtcbiBcdFx0aWYgKGJyaWRnZSBcdTAwMjZcdTAwMjYgIXBjaV9kZXZfdHJ5bG9jayhicmlkZ2UpKVxuIFx0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfc3RhdGU7XG4gXHRcdGlmIChwY2lfZGV2X3RyeWxvY2socGRldikpIHtcbi1cdFx0XHRpZiAoIV9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KSlcbitcdFx0XHQvKiBFbmZvcmNlIGZ1bmN0aW9uIHNjb3BlIHVuZGVyIGxvY2sgZm9yIFNSLUlPViBQRnMgKi9cbitcdFx0XHRpZiAoIXBjaV9udW1fdmYocGRldikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICFfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQocGRldikpXG4gXHRcdFx0XHR2ZGV2LVx1MDAzZW5lZWRzX3Jlc2V0ID0gZmFsc2U7XG4gXHRcdFx0cGNpX2Rldl91bmxvY2socGRldik7XG4gXHRcdH1cbkBAIC04OTIsNiArODkzLDE3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfY291bnRfZGV2cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIFBDSSB3YWxrIGNhbGxiYWNrIHRvIGNoZWNrIGZvciBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gIFZGcyBhcmUgbm90XG4rICogZW51bWVyYXRlZCB3aGVuIGRldGVybWluaW5nIGFmZmVjdGVkIGRldmljZXMgYW5kIG1heSBiZSBvd25lZCBieSBzZXBhcmF0ZVxuKyAqIHVzZXJzcGFjZSBwcm9jZXNzZXMgZnJvbSB0aGUgUEYuICBJdCdzIHRoZXJlZm9yZSB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5XG4rICogdG8gdGVhcmRvd24gVkZzIGZvciBhbnkgYWZmZWN0ZWQgUEYgYmVmb3JlIHBlcmZvcm1pbmcgYSBob3QtcmVzZXQuXG4rICovXG4rc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSlcbit7XG4rXHRyZXR1cm4gcGNpX251bV92ZihwZGV2KSA/IC1FQlVTWSA6IDA7XG4rfVxuK1xuIHN0cnVjdCB2ZmlvX3BjaV9maWxsX2luZm8ge1xuIFx0c3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2O1xuIFx0c3RydWN0IHZmaW9fcGNpX2RlcGVuZGVudF9kZXZpY2UgKmRldmljZXM7XG5AQCAtMTA4NSw3ICsxMDk3LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mbyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXG4gXHRpbmZvLmZsYWdzID0gVkZJT19ERVZJQ0VfRkxBR1NfUENJO1xuIFxuLVx0aWYgKHZkZXYtXHUwMDNlcmVzZXRfd29ya3MpXG4rXHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYpKVxuIFx0XHRpbmZvLmZsYWdzIHw9IFZGSU9fREVWSUNFX0ZMQUdTX1JFU0VUO1xuIFxuIFx0aW5mby5udW1fcmVnaW9ucyA9IFZGSU9fUENJX05VTV9SRUdJT05TICsgdmRldi1cdTAwM2VudW1fcmVnaW9ucztcbkBAIC0xMzE3LDcgKzEzMjksNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCF2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzKVxuK1x0aWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xuQEAgLTI1OTYsNyArMjYwOCw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCxcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodmRldiwgXHUwMDI2ZGV2X3NldC1cdTAwM2VkZXZpY2VfbGlzdCwgdmRldi5kZXZfc2V0X2xpc3QpXG4gXHRcdHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xuIFxuLVx0cmV0ID0gcGNpX3Jlc2V0X2J1cyhwZGV2KTtcbitcdHJldCA9IHBjaV9yZXNldF9idXNfY29uZChwZGV2LCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcywgTlVMTCk7XG4gXG4gXHR2ZGV2ID0gbGlzdF9sYXN0X2VudHJ5KFx1MDAyNmRldl9zZXQtXHUwMDNlZGV2aWNlX2xpc3QsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSwgdmRldi5kZXZfc2V0X2xpc3QpO1xuQEAgLTI2NTksNyArMjY3MSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXG4gXHRpZiAodmZpb19wY2lfZGV2X3NldF9wbV9ydW50aW1lX2dldChkZXZfc2V0KSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFwY2lfcmVzZXRfYnVzKHBkZXYpKVxuK1x0aWYgKCFwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgdmZpb19wY2lfZGV2X2hhc192ZnMsIE5VTEwpKVxuIFx0XHRyZXNldF9kb25lID0gdHJ1ZTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcdTAwMjZkZXZfc2V0LVx1MDAzZWRldmljZV9saXN0LCB2ZGV2LmRldl9zZXRfbGlzdCkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5pbmRleCA2NGIzMDhiNmU2MWMxLi40ZGUyMWU2YWM1MzhmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaFxuQEAgLTE0NzQsMTIgKzE0NzQsMTYgQEAgdm9pZCBwY2llX3ByaW50X2xpbmtfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2llX3Jlc2V0X2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIHByb2JlKTtcbiBpbnQgcGNpZV9mbHIoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbitib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3Byb2JlX3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KTtcbiBpbnQgcGNpX3Byb2JlX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTtcbiBpbnQgcGNpX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbitpbnQgcGNpX3Jlc2V0X2J1c19jb25kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHQgICAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxuK1x0XHQgICAgICAgdm9pZCAqZGF0YSk7XG4gdm9pZCBwY2lfcmVzZXRfc2Vjb25kYXJ5X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB2b2lkIHBjaWJpb3NfcmVzZXRfc2Vjb25kYXJ5X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB2b2lkIHBjaV91cGRhdGVfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5pbmRleCA5YTE2NzRjMTUyYWEyLi42ZmI1OTllYzI5MTkxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5AQCAtMTIxLDcgKzEyMSw2IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7XG4gXHQvKiBGbGFncyBvbmx5IG1vZGlmaWVkIG9uIHNldHVwL3JlbGVhc2UgLSBiaXRmaWVsZCBvayAqL1xuIFx0Ym9vbFx0XHRcdGhhc19keW5fbXNpeDoxO1xuIFx0Ym9vbFx0XHRcdHBjaV8yXzM6MTtcbi1cdGJvb2xcdFx0XHRyZXNldF93b3JrczoxO1xuIFx0Ym9vbFx0XHRcdGV4dGVuZGVkX2NhcHM6MTtcbiBcdGJvb2xcdFx0XHRoYXNfdmdhOjE7XG4gXHRib29sXHRcdFx0bm9pbnR4OjE7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbmluZGV4IDVkZTYxOGEzYTVlZWUuLjg2MDM5NTlmMTczNTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtNzcyLDYgKzc3Miw5IEBAIHN0cnVjdCB2ZmlvX3BjaV9ob3RfcmVzZXRfaW5mbyB7XG4gICogTWl4ZWQgdXNhZ2Ugb2YgbGVnYWN5IGdyb3VwcyBhbmQgY2RldnMgYWNyb3NzIHRoZSBzZXQgb2YgYWZmZWN0ZWRcbiAgKiBkZXZpY2VzIGlzIG5vdCBzdXBwb3J0ZWQuXG4gICpcbisgKiBIb3QgcmVzZXQgb2YgU1ItSU9WIFBGcyB3aXRoIGFjdGl2ZSBWRnMgaXMgbm90IHN1cHBvcnRlZCwgU1ItSU9WXG4rICogc2hvdWxkIGZpcnN0IGJlIGRpc2FibGVkIG9uIGFueSBhZmZlY3RlZCBQRi5cbisgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbiBzdHJ1Y3QgdmZpb19wY2lfaG90X3Jlc2V0IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjU3LjY4NzQ1NDA3NloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDY4MzMxMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUENJIFJlc2V0IFBhdGNoIGZvciBTUi1JT1YgUEZzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGl0J3MgY2xlYXIgdGhpcyBpcyBhYm91dCB0aWdodGVuaW5nIHVwIHRoZSBQQ0kgcmVzZXQgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHdoZW4gd2UgaGF2ZSBTaW5nbGUgUm9vdCBJL08gVmlydHVhbGl6YXRpb24gKFNSLUlPVikgUGh5c2ljYWwgRnVuY3Rpb25zIChQRnMpIHdpdGggYWN0aXZlIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGUgcHJpbWFyeSBnb2FsIHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgYWNjaWRlbnRhbCByZXNldHMgb2YgdGhlIFBGIGlmIFZGcyBhcmUgaW4gdXNlIOKAkyBhIGNyaXRpY2FsIHNhZmVndWFyZC5cblxuVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgcGNpX251bV92ZihkZXYpIFx1MDAzZSAwYCBjaGVja3MuIFRoaXMgc2ltcGxlIGNoZWNrIGlzIGFkZGVkIHRvIGJsb2NrIFBGIHJlc2V0cyB3aGVuIFZGcyBhcmUgcHJlc2VudC4gU21hcnQuIEl0J3MgYWxzbyBtYWtpbmcgdXNlIG9mIGBwY2lfcmVzZXRfYnVzX2NvbmRgLCB3aGljaCBsZXRzIHVzIGluamVjdCBhIGNhbGxiYWNrIGZvciBkZXZpY2Ugc3RhdHVzIGNoZWNrcyAqYmVmb3JlKiBhIGJ1cyBvciBzbG90IHJlc2V0IGlzIGluaXRpYXRlZC4gVGhhdCdzIGEgcG93ZXJmdWwgdG9vbCwgcHJvdmlkaW5nIG1vcmUgZ3JhbnVsYXIgY29udHJvbC5cblxuSSBzZWUgdGhhdCBgdmZpb19wY2lfY29yZS5jYCBoYXMgYmVlbiByZWZhY3RvcmVkLiBUaGUgYHZkZXYtXHUwMDNlcmVzZXRfd29ya3NgIGZsYWcgaXMgZ29uZSwgcmVwbGFjZWQgd2l0aCBgcGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KWAuIEZ1bmN0aW9uIGNhbGxzIGFyZSBnZW5lcmFsbHkgcHJlZmVycmVkIG92ZXIgZmxhZ3MgZm9yIHRoaXMga2luZCBvZiBsb2dpYy4gSW4gdGhlIGNvbnRleHQgb2YgYHZmaW9fcGNpX2NvcmUuY2AsIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhlIHJlbW92YWwgb2YgdGhhdCBmbGFnIGFmZmVjdHMgZXhpc3RpbmcgbG9naWM7IHRoaXMgd291bGQgYmUgbW9zdCBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aGUgYFZGSU9fREVWSUNFX0dFVF9JTkZPYCBpb2N0bC5cblxuVGhlIGFkZGl0aW9uIG9mIHRoZSBgdmZpb19wY2lfZGV2X2hhc192ZnNgIGNhbGxiYWNrLCByZXR1cm5pbmcgYC1FQlVTWWAgd2hlbiBWRnMgYXJlIGFjdGl2ZSwgaXMgY2xldmVyLiBJdCdzIGVsZWdhbnRseSBpbnRlZ3JhdGVkIGludG8gYHBjaV9yZXNldF9idXNfY29uZGAgd2l0aGluIGB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldGAgYW5kIGB2ZmlvX3BjaV9kZXZfc2V0X3RyeV9yZXNldGAuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gYXR0ZW1wdHMgdG8gcmVzZXQgdGhyb3VnaCBob3QgcmVzZXQgb3IgdHJ5IHJlc2V0IHdpbGwgcmVzcGVjdCB0aGUgVkYgcHJlc2VuY2UuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjaGFuZ2VzIGRvbid0IG9wZW4gdXAgYW55IHZ1bG5lcmFiaWxpdGllcy4gV2hpbGUgdGhlIHBhdGNoIG1vc3RseSBtb2RpZmllcyBjb250cm9sIGZsb3csIHJldHVybmluZyBgLUVOT1RUWWAgb3IgYC1FQlVTWWAsIGFuZCBzd2FwcyBhIGZsYWcgZm9yIGEgZnVuY3Rpb24gY2FsbCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJ20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZSBmcm9tIGByZXNldF93b3Jrc2AgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQocGRldilgIOKAkyB0aGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50IHRvIGV2YWx1YXRlLCBwYXJ0aWN1bGFybHkgdGhlIGNvbnRleHQgYXJvdW5kIGBWRklPX0RFVklDRV9HRVRfSU5GT2AgYW5kIHRoZSBzZXR0aW5nIG9mIGBpbmZvLmZsYWdzYC5cblxuT2theSwgc28gbG9va2luZyBhdCB0aGUgY29kZSBhcm91bmQgYHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvYCwgaXQgbG9va3MgbGlrZSBgaW5mb2AgaXMgYSBsb2NhbCB2YXJpYWJsZS4gVGhlIHBhdGNoIGlzIHNpbXBseSBjaGFuZ2luZyB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYFZGSU9fREVWSUNFX0ZMQUdTX1JFU0VUYCB0aHJvdWdoIHRoZSB1c2Ugb2YgYHBjaV9yZXNldF9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2KWAuIEknbGwgY29uZmlybSB0aGF0IGBpbmZvYCBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIHRoYXQgZXhpc3RpbmcgY29kZSBwYXRoIGlzIGNvdmVyZWQgYnkgZXhpc3RpbmcgY2hlY2tzLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AgYXJvdW5kIGxpbmUgMTA4NSB0byBtYWtlIHN1cmUuIExldCBtZSB1c2UgYGRlZmF1bHRfYXBpOnJlYWQtZmlsZWAgdG8gZG8gYSBxdWljayBjaGVjay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjY6MDYuMTU1Nzg4NjE0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdH1cXG4xMDgxOlxcdFxcbjEwODI6XFx0c3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mbyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuMTA4MzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdmZpb19kZXZpY2VfaW5mbyBfX3VzZXIgKmFyZylcXG4xMDg0OlxcdHtcXG4xMDg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWluc3ogPSBvZmZzZXRvZmVuZChzdHJ1Y3QgdmZpb19kZXZpY2VfaW5mbywgbnVtX2lycXMpO1xcbjEwODY6XFx0XFx0c3RydWN0IHZmaW9fZGV2aWNlX2luZm8gaW5mbyA9IHt9O1xcbjEwODc6XFx0XFx0c3RydWN0IHZmaW9faW5mb19jYXAgY2FwcyA9IHsgLmJ1ZiA9IE5VTEwsIC5zaXplID0gMCB9O1xcbjEwODg6XFx0XFx0aW50IHJldDtcXG4xMDg5OlxcdFxcbjEwOTA6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZpbmZvLCBhcmcsIG1pbnN6KSlcXG4xMDkxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjEwOTI6XFx0XFxuMTA5MzpcXHRcXHRpZiAoaW5mby5hcmdzeiBcXHUwMDNjIG1pbnN6KVxcbjEwOTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTA5NTpcXHRcXG4xMDk2OlxcdFxcdG1pbnN6ID0gbWluX3Qoc2l6ZV90LCBpbmZvLmFyZ3N6LCBzaXplb2YoaW5mbykpO1xcbjEwOTc6XFx0XFxuMTA5ODpcXHRcXHRpbmZvLmZsYWdzID0gVkZJT19ERVZJQ0VfRkxBR1NfUENJO1xcbjEwOTk6XFx0XFxuMTEwMDpcXHRcXHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZCh2ZGV2LVxcdTAwM2VwZGV2KSlcXG4xMTAxOlxcdFxcdFxcdGluZm8uZmxhZ3MgfD0gVkZJT19ERVZJQ0VfRkxBR1NfUkVTRVQ7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdFxcdGluZm8ubnVtX3JlZ2lvbnMgPSBWRklPX1BDSV9OVU1fUkVHSU9OUyArIHZkZXYtXFx1MDAzZW51bV9yZWdpb25zO1xcbjExMDQ6XFx0XFx0aW5mby5udW1faXJxcyA9IFZGSU9fUENJX05VTV9JUlFTO1xcbjExMDU6XFx0XFxuMTEwNjpcXHRcXHRyZXQgPSB2ZmlvX3BjaV9pbmZvX3pkZXZfYWRkX2NhcHModmRldiwgXFx1MDAyNmNhcHMpO1xcbjExMDc6XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVOT0RFVikge1xcbjExMDg6XFx0XFx0XFx0cGNpX3dhcm4odmRldi1cXHUwMDNlcGRldixcXG4xMTA5OlxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHNldHVwIHpQQ0kgaW5mbyBjYXBhYmlsaXRpZXNcXFxcblxcXCIpO1xcbjExMTA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTExOlxcdFxcdH1cXG4xMTEyOlxcdFxcbjExMTM6XFx0XFx0cmV0ID0gdmZpb19wY2lfaW5mb19hdG9taWNfY2FwKHZkZXYsIFxcdTAwMjZjYXBzKTtcXG4xMTE0OlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FTk9ERVYpIHtcXG4xMTE1OlxcdFxcdFxcdHBjaV93YXJuKHZkZXYtXFx1MDAzZXBkZXYsXFxuMTExNjpcXHRcXHRcXHRcXHQgXFxcIkZhaWxlZCB0byBzZXR1cCBBdG9taWNPcHMgaW5mbyBjYXBhYmlsaXR5XFxcXG5cXFwiKTtcXG4xMTE3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTExODpcXHRcXHR9XFxuMTExOTpcXHRcXG4xMTIwOlxcdFxcdGlmIChjYXBzLnNpemUpIHtcXG4xMTIxOlxcdFxcdFxcdGluZm8uZmxhZ3MgfD0gVkZJT19ERVZJQ0VfRkxBR1NfQ0FQUztcXG4xMTIyOlxcdFxcdFxcdGlmIChpbmZvLmFyZ3N6IFxcdTAwM2Mgc2l6ZW9mKGluZm8pICsgY2Fwcy5zaXplKSB7XFxuMTEyMzpcXHRcXHRcXHRcXHRpbmZvLmFyZ3N6ID0gc2l6ZW9mKGluZm8pICsgY2Fwcy5zaXplO1xcbjExMjQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4xMTI1OlxcdFxcdFxcdFxcdHZmaW9faW5mb19jYXBfc2hpZnQoXFx1MDAyNmNhcHMsIHNpemVvZihpbmZvKSk7XFxuMTEyNjpcXHRcXHRcXHRcXHRpZiAoY29weV90b191c2VyKGFyZyArIDEsIGNhcHMuYnVmLCBjYXBzLnNpemUpKSB7XFxuMTEyNzpcXHRcXHRcXHRcXHRcXHRrZnJlZShjYXBzLmJ1Zik7XFxuMTEyODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xMTI5OlxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjY6MDYuMTU2MDQ2MDE0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODI4OTg4NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBDSSBSZXNldCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZyb20gYSBzYWZldHkgcGVyc3BlY3RpdmUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYGluZm9gIHN0cnVjdCBiZWluZyBpbml0aWFsaXplZCB0byBge31gIHJpZ2h0IG9mZiB0aGUgYmF0IGVuc3VyZXMgaXQgc3RhcnRzIHplcm9lZC4gVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGZvY3VzZXMgb24gbW9kaWZ5aW5nIHRoZSBsb2dpYyBhcm91bmQgUENJIGRldmljZSByZXNldHMsIHBhcnRpY3VsYXJseSBhdm9pZGluZyB0aGUgcmVzZXQgb2YgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB0aGF0IGhhdmUgYWN0aXZlIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLlxuXG5UaGUgaW50cm9kdWN0aW9uIG9mIGBwY2lfcmVzZXRfYnVzX2NvbmRgIGlzIGEga2V5IGFkZGl0aW9uOyBpdCB0YWtlcyBhIGNhbGxiYWNrLCBhbGxvd2luZyBmb3IgbW9yZSBncmFudWxhciBkZXZpY2UgY2hlY2tzICpiZWZvcmUqIGEgcmVzZXQgaXMgdHJpZ2dlcmVkLiBUaGlzIGNhbGxiYWNrLCBgdmZpb19wY2lfZGV2X2hhc192ZnNgIHNwZWNpZmljYWxseSwgaXMgdXNlZCB0byBwcmV2ZW50IHRoZSByZXNldCBvZiB0aG9zZSBQRnMgd2l0aCBhY3RpdmUgVkZzLiBXZSBhcmUgYWxzbyBpbnRyb2R1Y2luZyBmdW5jdGlvbnMgdG8gYWlkIHRoZSBwcm9jZXNzIGluIGBwY2lfd2Fsa19yZXNldF9jaGVja2AsIGBwY2lfdHJ5X3Jlc2V0X3Nsb3RgLCBhbmQgYHBjaV90cnlfcmVzZXRfYnVzYCwgYXMgd2VsbCBhcyBleHBvcnRpbmcgYHBjaV9yZXNldF9zdXBwb3J0ZWRgLlxuXG5Tbywgbm90aGluZyBqdW1wcyBvdXQgYXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgaW5mbyBsZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uLiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgdGhlIHJpZ2h0IHRvb2xzIGhlcmUuIFRoZSBjaGFuZ2VzIGFyZSBsYXJnZWx5IGFib3V0IGNvbnRyb2xsaW5nIHRoZSBmbG93IG9mIHRoZSByZXNldCBwcm9jZXNzIGFuZCBtYWtpbmcgc3VyZSB0aGUgcmlnaHQgUENJIGRldmljZXMgYXJlIHRhcmdldGVkIG9yIHNraXBwZWQuIEkndmUgY29uZmlybWVkIHRoaXMgYnkgZXhhbWluaW5nIGFsbCBvZiB0aGUgb3RoZXIgY2hhbmdlczogYHZmaW9fcGNpX2NvcmVfZW5hYmxlYCwgYHZmaW9fcGNpX2NvcmVfZGlzYWJsZWAsIGB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mb2AsIGB2ZmlvX3BjaV9pb2N0bF9yZXNldGAsIGB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldGAsIGFuZCBgdmZpb19wY2lfZGV2X3NldF90cnlfcmVzZXRgIGFsbCBzZWVtIHRvIGJlIGxldmVyYWdpbmcgdGhpcyBuZXcgY29uZGl0aW9uYWwgbG9naWMuXG5cbkdpdmVuIHRoaXMsIEknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBwYXRjaC4gVGhlIHByaW1hcnkgcmlzayBpcyB0aGUgbG9naWMgb2Ygd2hlbiBhIHJlc2V0IGhhcHBlbnMsIG5vdCAqaG93KiBtZW1vcnkgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxOCwiT3V0cHV0VG9rZW5zIjoyOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNjoxNi45ODUwMzc5NDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBkZXZpY2Ugc3RhdGUgbWFuYWdlbWVudCwgYW5kIFBDSSBzdWJzeXN0ZW0gQVBJcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBtb2RpZnkgYnVmZmVyIGFsbG9jYXRpb25zLCBwYWRkaW5nLCBvciBpbml0aWFsaXphdGlvbiBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBgdmZpb19kZXZpY2VfaW5mb2Agc3RydWN0dXJlIG1vZGlmaWVkIGluIGB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mb2AgaXMgYWxyZWFkeSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChgc3RydWN0IHZmaW9fZGV2aWNlX2luZm8gaW5mbyA9IHt9O2ApLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIGxvY2tpbmcgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBDSSByZXNldCBsb2dpYyB0byBwcmV2ZW50IHJlc2V0dGluZyBTUi1JT1YgUGh5c2ljYWwgRnVuY3Rpb25zIChQRnMpIHdoZW4gVmlydHVhbCBGdW5jdGlvbnMgKFZGcykgYXJlIGFjdGl2ZS4gSXQgaW50cm9kdWNlcyBhIGNvbmRpdGlvbmFsIGJ1cyByZXNldCBmdW5jdGlvbiAoYHBjaV9yZXNldF9idXNfY29uZGApIHRoYXQgYWNjZXB0cyBhIGNhbGxiYWNrIHRvIGNoZWNrIGRldmljZXMgYmVmb3JlIHBlcmZvcm1pbmcgYSByZXNldC4gSW4gdGhlIFZGSU8gUENJIGNvcmUsIGl0IHJlcGxhY2VzIGEgY2FjaGVkIGByZXNldF93b3Jrc2AgYm9vbGVhbiB3aXRoIGRpcmVjdCBjYWxscyB0byBgcGNpX3Jlc2V0X3N1cHBvcnRlZCgpYCBhbmQgdXNlcyB0aGUgbmV3IGNvbmRpdGlvbmFsIHJlc2V0IEFQSSB0byBjaGVjayBmb3IgYWN0aXZlIFZGcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3csIGRldmljZSBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgUENJIHN1YnN5c3RlbSBBUElzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IG1vZGlmeSBidWZmZXIgYWxsb2NhdGlvbnMsIHBhZGRpbmcsIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIGB2ZmlvX2RldmljZV9pbmZvYCBzdHJ1Y3R1cmUgbW9kaWZpZWQgaW4gYHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvYCBpcyBhbHJlYWR5IGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgKGBzdHJ1Y3QgdmZpb19kZXZpY2VfaW5mbyBpbmZvID0ge307YCkuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhh98s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 05:07:47 +0000 UTC FinishedAt: 2026-08-12 05:26:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCI", "VFIO", "VFIO_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "5ec42d57655c690234c14aece6dd3f209778c1d8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCI", "VFIO", "VFIO_PCI" ], "series_id": "f35822b8-9b69-428c-b485-0c19a12bc0e2" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "pci_reset_bus_cond", "pci_reset_function", "pci_reset_function_locked", "pci_try_reset_function", "pci_reset_bus", "vfio_pci_core_ioctl", "vfio_pci_core_disable", "vfio_pci_core_enable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSSYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGNpX3Jlc2V0X2J1c19jb25kJiMzNDssCiAgICAmIzM0O3BjaV9yZXNldF9mdW5jdGlvbiYjMzQ7LAogICAgJiMzNDtwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkJiMzNDssCiAgICAmIzM0O3BjaV90cnlfcmVzZXRfZnVuY3Rpb24mIzM0OywKICAgICYjMzQ7cGNpX3Jlc2V0X2J1cyYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2lvY3RsJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2VuYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgZGV2aWNlIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCBQQ0kgc3Vic3lzdGVtIEFQSXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgbW9kaWZ5IGJ1ZmZlciBhbGxvY2F0aW9ucywgcGFkZGluZywgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgYHZmaW9fZGV2aWNlX2luZm9gIHN0cnVjdHVyZSBtb2RpZmllZCBpbiBgdmZpb19wY2lfaW9jdGxfZ2V0X2luZm9gIGlzIGFscmVhZHkgZnVsbHkgemVyby1pbml0aWFsaXplZCAoYHN0cnVjdCB2ZmlvX2RldmljZV9pbmZvIGluZm8gPSB7fTtgKS5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgbW9kaWZpZXMgUENJIHJlc2V0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IHJlc2V0dGluZyBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gSXQgYWxzbyB1cGRhdGVzIFZGSU8gUENJIGNvcmUgdG8gdXNlIHRoZXNlIG5ldyBjaGVja3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBQQ0kgYW5kIFZGSU8gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0YzhlMDBjYzRiYWU0ZmNiODM4ZDc3ODBhNDU5MWMyZmMxNDhmNjljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDU6MjQ6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuY1xuaW5kZXggNzdiMTdiMTNlZTYxNS4uMGI0ZjEzMzk3ZGEyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2kuY1xuQEAgLTk4LDYgJiM0Mzs5OCw3IEBAIGJvb2wgcGNpX3Jlc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIHtcbiBcdHJldHVybiBkZXYtXHUwMDNlcmVzZXRfbWV0aG9kc1swXSAhPSAwO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X3N1cHBvcnRlZCk7XG4gXG4gI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOU1xuIGludCBwY2lfZG9tYWluc19zdXBwb3J0ZWQgPSAxO1xuQEAgLTUyMjIsMTEgJiM0Mzs1MjIzLDIyIEBAIGludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdFx0cGNpX2Rldl9sb2NrKGJyaWRnZSk7XG4gXG4gXHRwY2lfZGV2X2xvY2soZGV2KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXNldCBvZiBhbiBTUi1JT1YgUEYgbmVjZXNzYXJpbHkgcmVzZXRzIGFueSBhY3RpdmUgVkZzLiAgU3VjaCByZXNldHMgYXJlXG4mIzQzO1x0ICogYmV5b25kIHRoZSBzY29wZSBhZHZlcnRpc2VkIGZvciBwY2lfcmVzZXRfZnVuY3Rpb24oKSBhbmQgdmFyaWFudHMsIHJlZnVzZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocGNpX251bV92ZihkZXYpIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRyYyA9IC1FTk9UVFk7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKGRldik7XG4gXG4gXHRyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpO1xuIFxuIFx0cGNpX2Rldl9yZXN0b3JlKGRldik7XG4mIzQzO3VubG9jazpcbiBcdHBjaV9kZXZfdW5sb2NrKGRldik7XG4gXG4gXHRpZiAoYnJpZGdlKVxuQEAgLTUyNjQsNiAmIzQzOzUyNzYsOSBAQCBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKGRldikpXG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFxuJiM0MztcdGlmIChwY2lfbnVtX3ZmKGRldikgXHUwMDNlIDApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1RUWTtcbiYjNDM7XG4gXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcbiBcbiBcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XG5AQCAtNTI5MCw2ICYjNDM7NTMwNSwxMSBAQCBpbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aWYgKCFwY2lfZGV2X3RyeWxvY2soZGV2KSlcbiBcdFx0cmV0dXJuIC1FQUdBSU47XG4gXG4mIzQzO1x0aWYgKHBjaV9udW1fdmYoZGV2KSBcdTAwM2UgMCkge1xuJiM0MztcdFx0cGNpX2Rldl91bmxvY2soZGV2KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PVFRZO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcbiBcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XG4gXHRwY2lfZGV2X3Jlc3RvcmUoZGV2KTtcbkBAIC01NTQ4LDkgJiM0Mzs1NTY4LDM2IEBAIGludCBwY2lfcHJvYmVfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wcm9iZV9yZXNldF9zbG90KTtcbiBcbiYjNDM7LyogQ2FsbCBAY2Igb24gZXZlcnkgZGV2aWNlIGEgc2xvdCBvciBidXMgcmVzZXQgYWZmZWN0cywgc3RvcHBpbmcgb24gZXJyb3IuICovXG4mIzQzO3N0YXRpYyBpbnQgcGNpX3dhbGtfcmVzZXRfY2hlY2soc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9zbG90ICpzbG90LFxuJiM0MztcdFx0XHRcdGludCAoKmNiKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSxcbiYjNDM7XHRcdFx0XHR2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKmRldjtcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBcdTAwMjZidXMtXHUwMDNlZGV2aWNlcywgYnVzX2xpc3QpIHtcbiYjNDM7XHRcdGlmIChzbG90IFx1MDAyNlx1MDAyNiAoIWRldi1cdTAwM2VzbG90IHx8IGRldi1cdTAwM2VzbG90ICE9IHNsb3QpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJjID0gY2IoZGV2LCBkYXRhKTtcbiYjNDM7XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0cmV0dXJuIHJjO1xuJiM0MztcdFx0aWYgKGRldi1cdTAwM2VzdWJvcmRpbmF0ZSkge1xuJiM0MztcdFx0XHRyYyA9IHBjaV93YWxrX3Jlc2V0X2NoZWNrKGRldi1cdTAwM2VzdWJvcmRpbmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBOVUxMLCBjYiwgZGF0YSk7XG4mIzQzO1x0XHRcdGlmIChyYylcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBwY2lfdHJ5X3Jlc2V0X3Nsb3QgLSBUcnkgdG8gcmVzZXQgYSBQQ0kgc2xvdFxuICAqIEBzbG90OiBQQ0kgc2xvdCB0byByZXNldFxuJiM0MzsgKiBAY2hlY2s6IG9wdGlvbmFsIHBlci1kZXZpY2UgY2FsbGJhY2sgdGhhdCBjYW4gYWJvcnQgdGhlIHJlc2V0XG4mIzQzOyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgZm9yIEBjaGVja1xuICAqXG4gICogQSBQQ0kgYnVzIG1heSBob3N0IG11bHRpcGxlIHNsb3RzLCBlYWNoIHNsb3QgbWF5IHN1cHBvcnQgYSByZXNldCBtZWNoYW5pc21cbiAgKiBpbmRlcGVuZGVudCBvZiBvdGhlciBzbG90cy4gIEZvciBpbnN0YW5jZSwgc29tZSBzbG90cyBtYXkgc3VwcG9ydCBzbG90IHBvd2VyXG5AQCAtNTU2Myw3ICYjNDM7NTYxMCw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wcm9iZV9yZXNldF9zbG90KTtcbiAgKlxuICAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBzbG90IGNhbm5vdCBiZSBsb2NrZWRcbiAgKi9cbi1zdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpXG4mIzQzO3N0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCxcbiYjNDM7XHRcdFx0ICAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxuJiM0MztcdFx0XHQgICAgICB2b2lkICpkYXRhKVxuIHtcbiBcdGludCByYztcbiBcbkBAIC01NTcyLDEwICYjNDM7NTYyMSwxNCBAQCBzdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpXG4gXHRcdHJldHVybiByYztcbiBcbiBcdGlmIChwY2lfc2xvdF90cnlsb2NrKHNsb3QpKSB7XG4tXHRcdHBjaV9zbG90X3NhdmVfYW5kX2Rpc2FibGVfbG9ja2VkKHNsb3QpO1xuLVx0XHRtaWdodF9zbGVlcCgpO1xuLVx0XHRyYyA9IHBjaV9yZXNldF9ob3RwbHVnX3Nsb3Qoc2xvdC1cdTAwM2Vob3RwbHVnLCBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xuLVx0XHRwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTtcbiYjNDM7XHRcdHJjID0gY2hlY2sgPyBwY2lfd2Fsa19yZXNldF9jaGVjayhzbG90LVx1MDAzZWJ1cywgc2xvdCwgY2hlY2ssIGRhdGEpIDogMDtcbiYjNDM7XHRcdGlmICghcmMpIHtcbiYjNDM7XHRcdFx0cGNpX3Nsb3Rfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoc2xvdCk7XG4mIzQzO1x0XHRcdG1pZ2h0X3NsZWVwKCk7XG4mIzQzO1x0XHRcdHJjID0gcGNpX3Jlc2V0X2hvdHBsdWdfc2xvdChzbG90LVx1MDAzZWhvdHBsdWcsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xuJiM0MztcdFx0XHRwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTtcbiYjNDM7XHRcdH1cbiBcdFx0cGNpX3Nsb3RfdW5sb2NrKHNsb3QpO1xuIFx0fSBlbHNlXG4gXHRcdHJjID0gLUVBR0FJTjtcbkBAIC01NjA3LDEwICYjNDM7NTY2MCwxNCBAQCBzdGF0aWMgaW50IHBjaV9idXNfcmVzZXQoc3RydWN0IHBjaV9idXMgKmJ1cywgYm9vbCBwcm9iZSlcbiAvKipcbiAgKiBwY2lfdHJ5X3Jlc2V0X2J1cyAtIFRyeSB0byByZXNldCBhIFBDSSBidXNcbiAgKiBAYnVzOiB0b3AgbGV2ZWwgUENJIGJ1cyB0byByZXNldFxuJiM0MzsgKiBAY2hlY2s6IG9wdGlvbmFsIHBlci1kZXZpY2UgY2FsbGJhY2sgdGhhdCBjYW4gYWJvcnQgdGhlIHJlc2V0XG4mIzQzOyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgZm9yIEBjaGVja1xuICAqXG4gICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIGJ1cyBjYW5ub3QgYmUgbG9ja2VkXG4gICovXG4tc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKVxuJiM0MztzdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsXG4mIzQzO1x0XHRcdCAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxuJiM0MztcdFx0XHQgICAgIHZvaWQgKmRhdGEpXG4ge1xuIFx0aW50IHJjO1xuIFxuQEAgLTU2MTksMTAgJiM0Mzs1Njc2LDEzIEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuIFx0aWYgKHBjaV9idXNfdHJ5bG9jayhidXMpKSB7XG4tXHRcdHBjaV9idXNfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoYnVzKTtcbi1cdFx0bWlnaHRfc2xlZXAoKTtcbi1cdFx0cmMgPSBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoYnVzLVx1MDAzZXNlbGYpO1xuLVx0XHRwY2lfYnVzX3Jlc3RvcmVfbG9ja2VkKGJ1cyk7XG4mIzQzO1x0XHRyYyA9IGNoZWNrID8gcGNpX3dhbGtfcmVzZXRfY2hlY2soYnVzLCBOVUxMLCBjaGVjaywgZGF0YSkgOiAwO1xuJiM0MztcdFx0aWYgKCFyYykge1xuJiM0MztcdFx0XHRwY2lfYnVzX3NhdmVfYW5kX2Rpc2FibGVfbG9ja2VkKGJ1cyk7XG4mIzQzO1x0XHRcdG1pZ2h0X3NsZWVwKCk7XG4mIzQzO1x0XHRcdHJjID0gcGNpX2JyaWRnZV9zZWNvbmRhcnlfYnVzX3Jlc2V0KGJ1cy1cdTAwM2VzZWxmKTtcbiYjNDM7XHRcdFx0cGNpX2J1c19yZXN0b3JlX2xvY2tlZChidXMpO1xuJiM0MztcdFx0fVxuIFx0XHRwY2lfYnVzX3VubG9jayhidXMpO1xuIFx0fSBlbHNlXG4gXHRcdHJjID0gLUVBR0FJTjtcbkBAIC01NjYxLDcgJiM0Mzs1NzIxLDcgQEAgc3RhdGljIGludCBwY2lfcmVzZXRfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsIGJvb2wgcmVzdG9yZSlcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xvdCwgXHUwMDI2YnVzLVx1MDAzZXNsb3RzLCBsaXN0KSB7XG4gXHRcdGlmIChyZXN0b3JlKVxuLVx0XHRcdHJldCA9IHBjaV90cnlfcmVzZXRfc2xvdChzbG90KTtcbiYjNDM7XHRcdFx0cmV0ID0gcGNpX3RyeV9yZXNldF9zbG90KHNsb3QsIE5VTEwsIE5VTEwpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmV0ID0gcGNpX3Nsb3RfcmVzZXQoc2xvdCwgUENJX1JFU0VUX0RPX1JFU0VUKTtcbiBcbkBAIC01Njc1LDcgJiM0Mzs1NzM1LDcgQEAgc3RhdGljIGludCBwY2lfcmVzZXRfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsIGJvb2wgcmVzdG9yZSlcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwY2lfc2xvdF9tdXRleCk7XG4gXG4gXHRpZiAocmVzdG9yZSlcbi1cdFx0cmV0dXJuIHBjaV90cnlfcmVzZXRfYnVzKGJ1cyk7XG4mIzQzO1x0XHRyZXR1cm4gcGNpX3RyeV9yZXNldF9idXMoYnVzLCBOVUxMLCBOVUxMKTtcbiBcdHJldHVybiBwY2lfYnVzX3Jlc2V0KGJyaWRnZS1cdTAwM2VzdWJvcmRpbmF0ZSwgUENJX1JFU0VUX0RPX1JFU0VUKTtcbiB9XG4gXG5AQCAtNTcwNSwxNiAmIzQzOzU3NjUsNDMgQEAgaW50IHBjaV9wcm9iZV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cylcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X2J1cyk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBwY2lfcmVzZXRfYnVzX2NvbmQgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRoZSBzbG90IG9yIGJ1cyBjb250YWluaW5nIGEgZGV2aWNlXG4mIzQzOyAqIEBwZGV2OiB0b3AgbGV2ZWwgUENJIGRldmljZSB0byByZXNldCB2aWEgc2xvdC9idXNcbiYjNDM7ICogQGNoZWNrOiBvcHRpb25hbCBjYWxsYmFjayBpbnZva2VkIG9uIGVhY2ggYWZmZWN0ZWQgZGV2aWNlIGJlZm9yZSB0aGUgcmVzZXRcbiYjNDM7ICogQGRhdGE6IG9wYXF1ZSBhcmd1bWVudCBwYXNzZWQgdG8gQGNoZWNrXG4mIzQzOyAqXG4mIzQzOyAqIFJlc2V0IHRoZSBzbG90IG9yIGJ1cyBjb250YWluaW5nIEBwZGV2LiAgT25jZSB0aGUgZW50aXJlIHBoeXNpY2FsIGJ1cy9zbG90XG4mIzQzOyAqIGhpZXJhcmNoeSBpcyBsb2NrZWQsIEBjaGVjayAoaWYgbm90IE5VTEwpIGlzIGNhbGxlZCBvbiBlYWNoIG9mIHRob3NlIGxvY2tlZFxuJiM0MzsgKiBkZXZpY2VzLiAgQSBub256ZXJvIHJldHVybiBhYm9ydHMgdGhlIHJlc2V0IGFuZCBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLFxuJiM0MzsgKiBvdGhlcndpc2UgdGhlIHJlc2V0IHByb2NlZWRzLlxuJiM0MzsgKlxuJiM0MzsgKiBOQi4gQGNoZWNrIHJ1bnMgd2l0aCB0aGUgZnVsbCBzZXQgb2YgZGV2aWNlX2xvY2tzIG5vdGVkIGFib3ZlIGhlbGQ7IGNhbGxiYWNrc1xuJiM0MzsgKiBtdXN0IHRha2UgdGhlc2UgbG9ja2luZyBzZW1hbnRpY3MgaW50byBhY2NvdW50LiAgVXNlIE5VTEwgdG8gcGVyZm9ybSBhblxuJiM0MzsgKiB1bmNvbmRpdGlvbmFsIHJlc2V0LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVOT1RUWSBpZiBAcGRldiBpcyBub3QgcmVzZXR0YWJsZSwgLUVBR0FJTiBpZiB0aGVcbiYjNDM7ICogZGV2aWNlcyBjYW5ub3QgYmUgbG9ja2VkLCBvciB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgQGNoZWNrLlxuJiM0MzsgKi9cbiYjNDM7aW50IHBjaV9yZXNldF9idXNfY29uZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiYjNDM7XHRcdCAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4mIzQzO1x0XHQgICAgICAgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAhcGNpX3Byb2JlX3Jlc2V0X3Nsb3QocGRldi1cdTAwM2VzbG90KSA/XG4mIzQzO1x0XHRwY2lfdHJ5X3Jlc2V0X3Nsb3QocGRldi1cdTAwM2VzbG90LCBjaGVjaywgZGF0YSkgOlxuJiM0MztcdFx0cGNpX3RyeV9yZXNldF9idXMocGRldi1cdTAwM2VidXMsIGNoZWNrLCBkYXRhKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfYnVzX2NvbmQpO1xuJiM0MztcbiAvKipcbiAgKiBwY2lfcmVzZXRfYnVzIC0gVHJ5IHRvIHJlc2V0IGEgUENJIGJ1c1xuICAqIEBwZGV2OiB0b3AgbGV2ZWwgUENJIGRldmljZSB0byByZXNldCB2aWEgc2xvdC9idXNcbiAgKlxuLSAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBidXMgY2Fubm90IGJlIGxvY2tlZFxuJiM0MzsgKiBTYW1lIGFzIGFib3ZlIHdpdGhvdXQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLlxuICAqL1xuIGludCBwY2lfcmVzZXRfYnVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbi1cdHJldHVybiAoIXBjaV9wcm9iZV9yZXNldF9zbG90KHBkZXYtXHUwMDNlc2xvdCkpID9cbi1cdCAgICBwY2lfdHJ5X3Jlc2V0X3Nsb3QocGRldi1cdTAwM2VzbG90KSA6IHBjaV90cnlfcmVzZXRfYnVzKHBkZXYtXHUwMDNlYnVzKTtcbiYjNDM7XHRyZXR1cm4gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIE5VTEwsIE5VTEwpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfYnVzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oXG5pbmRleCA0NDY5ZTFhNzdmM2MxLi40MTZmZDZiNzRhYmU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS5oXG5AQCAtMjMwLDcgJiM0MzsyMzAsNiBAQCBlbnVtIHBjaV9tbWFwX2FwaSB7XG4gaW50IHBjaV9tbWFwX2ZpdHMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCByZXNubywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFpLFxuIFx0XHQgIGVudW0gcGNpX21tYXBfYXBpIG1tYXBfYXBpKTtcbiBcbi1ib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gdm9pZCBwY2lfaW5pdF9yZXNldF9tZXRob2RzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaV9idXNfZXJyb3JfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuaW5kZXggM2YxMWE5NjI0YjljMC4uOGU0MjM0MmQ1NmQzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuQEAgLTYwOSw3ICYjNDM7NjA5LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdGlmIChyZXQgPT0gLUVBR0FJTilcbiBcdFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XG4gXG4tXHR2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzID0gIXJldDtcbiBcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFx0dmRldi1cdTAwM2VwY2lfc2F2ZWRfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7XG4gXHRpZiAoIXZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKVxuQEAgLTc2Niw3ICYjNDM7NzY1LDcgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0aWYgKHBjaV9sb2FkX2FuZF9mcmVlX3NhdmVkX3N0YXRlKHBkZXYsIFx1MDAyNnZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKSkge1xuIFx0XHRwY2lfaW5mbyhwZGV2LCBcJiMzNDslczogQ291bGRuJiMzOTt0IHJlbG9hZCBzYXZlZCBzdGF0ZVxcblwmIzM0OywgX19mdW5jX18pO1xuIFxuLVx0XHRpZiAoIXZkZXYtXHUwMDNlcmVzZXRfd29ya3MpXG4mIzQzO1x0XHRpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQocGRldikpXG4gXHRcdFx0Z290byBvdXQ7XG4gXG4gXHRcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuQEAgLTc4NSwxMiAmIzQzOzc4NCwxNCBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHQgKiBXZSBjYW4gbm90IHVzZSB0aGUgXCYjMzQ7dHJ5XCYjMzQ7IHJlc2V0IGludGVyZmFjZSBoZXJlLCB3aGljaCB3aWxsXG4gXHQgKiBvdmVyd3JpdGUgdGhlIHByZXZpb3VzbHkgcmVzdG9yZWQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi5cbiBcdCAqL1xuLVx0aWYgKHZkZXYtXHUwMDNlcmVzZXRfd29ya3MpIHtcbiYjNDM7XHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KSkge1xuIFx0XHRicmlkZ2UgPSBwY2lfdXBzdHJlYW1fYnJpZGdlKHBkZXYpO1xuIFx0XHRpZiAoYnJpZGdlIFx1MDAyNlx1MDAyNiAhcGNpX2Rldl90cnlsb2NrKGJyaWRnZSkpXG4gXHRcdFx0Z290byBvdXRfcmVzdG9yZV9zdGF0ZTtcbiBcdFx0aWYgKHBjaV9kZXZfdHJ5bG9jayhwZGV2KSkge1xuLVx0XHRcdGlmICghX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHBkZXYpKVxuJiM0MztcdFx0XHQvKiBFbmZvcmNlIGZ1bmN0aW9uIHNjb3BlIHVuZGVyIGxvY2sgZm9yIFNSLUlPViBQRnMgKi9cbiYjNDM7XHRcdFx0aWYgKCFwY2lfbnVtX3ZmKHBkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIV9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KSlcbiBcdFx0XHRcdHZkZXYtXHUwMDNlbmVlZHNfcmVzZXQgPSBmYWxzZTtcbiBcdFx0XHRwY2lfZGV2X3VubG9jayhwZGV2KTtcbiBcdFx0fVxuQEAgLTg5Miw2ICYjNDM7ODkzLDE3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfY291bnRfZGV2cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUENJIHdhbGsgY2FsbGJhY2sgdG8gY2hlY2sgZm9yIFNSLUlPViBQRnMgd2l0aCBhY3RpdmUgVkZzLiAgVkZzIGFyZSBub3RcbiYjNDM7ICogZW51bWVyYXRlZCB3aGVuIGRldGVybWluaW5nIGFmZmVjdGVkIGRldmljZXMgYW5kIG1heSBiZSBvd25lZCBieSBzZXBhcmF0ZVxuJiM0MzsgKiB1c2Vyc3BhY2UgcHJvY2Vzc2VzIGZyb20gdGhlIFBGLiAgSXQmIzM5O3MgdGhlcmVmb3JlIHRoZSB1c2VyJiMzOTtzIHJlc3BvbnNpYmlsaXR5XG4mIzQzOyAqIHRvIHRlYXJkb3duIFZGcyBmb3IgYW55IGFmZmVjdGVkIFBGIGJlZm9yZSBwZXJmb3JtaW5nIGEgaG90LXJlc2V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwY2lfbnVtX3ZmKHBkZXYpID8gLUVCVVNZIDogMDtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3QgdmZpb19wY2lfZmlsbF9pbmZvIHtcbiBcdHN0cnVjdCB2ZmlvX2RldmljZSAqdmRldjtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kZXBlbmRlbnRfZGV2aWNlICpkZXZpY2VzO1xuQEAgLTEwODUsNyAmIzQzOzEwOTcsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcbiBcdGluZm8uZmxhZ3MgPSBWRklPX0RFVklDRV9GTEFHU19QQ0k7XG4gXG4tXHRpZiAodmRldi1cdTAwM2VyZXNldF93b3JrcylcbiYjNDM7XHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYpKVxuIFx0XHRpbmZvLmZsYWdzIHw9IFZGSU9fREVWSUNFX0ZMQUdTX1JFU0VUO1xuIFxuIFx0aW5mby5udW1fcmVnaW9ucyA9IFZGSU9fUENJX05VTV9SRUdJT05TICYjNDM7IHZkZXYtXHUwMDNlbnVtX3JlZ2lvbnM7XG5AQCAtMTMxNyw3ICYjNDM7MTMyOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoIXZkZXYtXHUwMDNlcmVzZXRfd29ya3MpXG4mIzQzO1x0aWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xuQEAgLTI1OTYsNyAmIzQzOzI2MDgsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZkZXYsIFx1MDAyNmRldl9zZXQtXHUwMDNlZGV2aWNlX2xpc3QsIHZkZXYuZGV2X3NldF9saXN0KVxuIFx0XHR2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTtcbiBcbi1cdHJldCA9IHBjaV9yZXNldF9idXMocGRldik7XG4mIzQzO1x0cmV0ID0gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIHZmaW9fcGNpX2Rldl9oYXNfdmZzLCBOVUxMKTtcbiBcbiBcdHZkZXYgPSBsaXN0X2xhc3RfZW50cnkoXHUwMDI2ZGV2X3NldC1cdTAwM2VkZXZpY2VfbGlzdCxcbiBcdFx0XHQgICAgICAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlLCB2ZGV2LmRldl9zZXRfbGlzdCk7XG5AQCAtMjY1OSw3ICYjNDM7MjY3MSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXG4gXHRpZiAodmZpb19wY2lfZGV2X3NldF9wbV9ydW50aW1lX2dldChkZXZfc2V0KSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFwY2lfcmVzZXRfYnVzKHBkZXYpKVxuJiM0MztcdGlmICghcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIHZmaW9fcGNpX2Rldl9oYXNfdmZzLCBOVUxMKSlcbiBcdFx0cmVzZXRfZG9uZSA9IHRydWU7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgXHUwMDI2ZGV2X3NldC1cdTAwM2VkZXZpY2VfbGlzdCwgdmRldi5kZXZfc2V0X2xpc3QpIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxuaW5kZXggNjRiMzA4YjZlNjFjMS4uNGRlMjFlNmFjNTM4ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC0xNDc0LDEyICYjNDM7MTQ3NCwxNiBAQCB2b2lkIHBjaWVfcHJpbnRfbGlua19zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaWVfcmVzZXRfZmxyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgcHJvYmUpO1xuIGludCBwY2llX2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuJiM0Mztib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3Byb2JlX3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KTtcbiBpbnQgcGNpX3Byb2JlX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTtcbiBpbnQgcGNpX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiYjNDM7aW50IHBjaV9yZXNldF9idXNfY29uZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiYjNDM7XHRcdCAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4mIzQzO1x0XHQgICAgICAgdm9pZCAqZGF0YSk7XG4gdm9pZCBwY2lfcmVzZXRfc2Vjb25kYXJ5X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB2b2lkIHBjaWJpb3NfcmVzZXRfc2Vjb25kYXJ5X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB2b2lkIHBjaV91cGRhdGVfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5pbmRleCA5YTE2NzRjMTUyYWEyLi42ZmI1OTllYzI5MTkxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5AQCAtMTIxLDcgJiM0MzsxMjEsNiBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xuIFx0LyogRmxhZ3Mgb25seSBtb2RpZmllZCBvbiBzZXR1cC9yZWxlYXNlIC0gYml0ZmllbGQgb2sgKi9cbiBcdGJvb2xcdFx0XHRoYXNfZHluX21zaXg6MTtcbiBcdGJvb2xcdFx0XHRwY2lfMl8zOjE7XG4tXHRib29sXHRcdFx0cmVzZXRfd29ya3M6MTtcbiBcdGJvb2xcdFx0XHRleHRlbmRlZF9jYXBzOjE7XG4gXHRib29sXHRcdFx0aGFzX3ZnYToxO1xuIFx0Ym9vbFx0XHRcdG5vaW50eDoxO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlLi44NjAzOTU5ZjE3MzUwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuQEAgLTc3Miw2ICYjNDM7NzcyLDkgQEAgc3RydWN0IHZmaW9fcGNpX2hvdF9yZXNldF9pbmZvIHtcbiAgKiBNaXhlZCB1c2FnZSBvZiBsZWdhY3kgZ3JvdXBzIGFuZCBjZGV2cyBhY3Jvc3MgdGhlIHNldCBvZiBhZmZlY3RlZFxuICAqIGRldmljZXMgaXMgbm90IHN1cHBvcnRlZC5cbiAgKlxuJiM0MzsgKiBIb3QgcmVzZXQgb2YgU1ItSU9WIFBGcyB3aXRoIGFjdGl2ZSBWRnMgaXMgbm90IHN1cHBvcnRlZCwgU1ItSU9WXG4mIzQzOyAqIHNob3VsZCBmaXJzdCBiZSBkaXNhYmxlZCBvbiBhbnkgYWZmZWN0ZWQgUEYuXG4mIzQzOyAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxuICAqL1xuIHN0cnVjdCB2ZmlvX3BjaV9ob3RfcmVzZXQge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQ0kmIzM0OywKICAgICYjMzQ7VkZJTyYjMzQ7LAogICAgJiMzNDtWRklPX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BjaV9yZXNldF9idXNfY29uZCYjMzQ7LAogICAgJiMzNDtwY2lfcmVzZXRfZnVuY3Rpb24mIzM0OywKICAgICYjMzQ7cGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uJiMzNDssCiAgICAmIzM0O3BjaV9yZXNldF9idXMmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9pb2N0bCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2Rpc2FibGUmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9lbmFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgbW9kaWZpZXMgUENJIHJlc2V0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IHJlc2V0dGluZyBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gSXQgYWxzbyB1cGRhdGVzIFZGSU8gUENJIGNvcmUgdG8gdXNlIHRoZXNlIG5ldyBjaGVja3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBQQ0kgYW5kIFZGSU8gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YzhlMDBjYzRiYWU0ZmNiODM4ZDc3ODBhNDU5MWMyZmMxNDhmNjljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDU6MjQ6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jCmluZGV4IDc3YjE3YjEzZWU2MTUuLjBiNGYxMzM5N2RhMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS5jCkBAIC05OCw2ICYjNDM7OTgsNyBAQCBib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlyZXR1cm4gZGV2LSZndDtyZXNldF9tZXRob2RzWzBdICE9IDA7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X3N1cHBvcnRlZCk7CiAKICNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlMKIGludCBwY2lfZG9tYWluc19zdXBwb3J0ZWQgPSAxOwpAQCAtNTIyMiwxMSAmIzQzOzUyMjMsMjIgQEAgaW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogCQlwY2lfZGV2X2xvY2soYnJpZGdlKTsKIAogCXBjaV9kZXZfbG9jayhkZXYpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZXNldCBvZiBhbiBTUi1JT1YgUEYgbmVjZXNzYXJpbHkgcmVzZXRzIGFueSBhY3RpdmUgVkZzLiAgU3VjaCByZXNldHMgYXJlCiYjNDM7CSAqIGJleW9uZCB0aGUgc2NvcGUgYWR2ZXJ0aXNlZCBmb3IgcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgYW5kIHZhcmlhbnRzLCByZWZ1c2UuCiYjNDM7CSAqLwomIzQzOwlpZiAocGNpX251bV92ZihkZXYpICZndDsgMCkgewomIzQzOwkJcmMgPSAtRU5PVFRZOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKIAlwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTsKIAogCXJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7CiAKIAlwY2lfZGV2X3Jlc3RvcmUoZGV2KTsKJiM0Mzt1bmxvY2s6CiAJcGNpX2Rldl91bmxvY2soZGV2KTsKIAogCWlmIChicmlkZ2UpCkBAIC01MjY0LDYgJiM0Mzs1Mjc2LDkgQEAgaW50IHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoc3RydWN0IHBjaV9kZXYgKmRldikKIAlpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQoZGV2KSkKIAkJcmV0dXJuIC1FTk9UVFk7CiAKJiM0MzsJaWYgKHBjaV9udW1fdmYoZGV2KSAmZ3Q7IDApCiYjNDM7CQlyZXR1cm4gLUVOT1RUWTsKJiM0MzsKIAlwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTsKIAogCXJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7CkBAIC01MjkwLDYgJiM0Mzs1MzA1LDExIEBAIGludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJaWYgKCFwY2lfZGV2X3RyeWxvY2soZGV2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKJiM0MzsJaWYgKHBjaV9udW1fdmYoZGV2KSAmZ3Q7IDApIHsKJiM0MzsJCXBjaV9kZXZfdW5sb2NrKGRldik7CiYjNDM7CQlyZXR1cm4gLUVOT1RUWTsKJiM0MzsJfQomIzQzOwogCXBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZShkZXYpOwogCXJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7CiAJcGNpX2Rldl9yZXN0b3JlKGRldik7CkBAIC01NTQ4LDkgJiM0Mzs1NTY4LDM2IEBAIGludCBwY2lfcHJvYmVfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfc2xvdCk7CiAKJiM0MzsvKiBDYWxsIEBjYiBvbiBldmVyeSBkZXZpY2UgYSBzbG90IG9yIGJ1cyByZXNldCBhZmZlY3RzLCBzdG9wcGluZyBvbiBlcnJvci4gKi8KJiM0MztzdGF0aWMgaW50IHBjaV93YWxrX3Jlc2V0X2NoZWNrKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfc2xvdCAqc2xvdCwKJiM0MzsJCQkJaW50ICgqY2IpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLAomIzQzOwkJCQl2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXYgKmRldjsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmFtcDtidXMtJmd0O2RldmljZXMsIGJ1c19saXN0KSB7CiYjNDM7CQlpZiAoc2xvdCAmYW1wOyZhbXA7ICghZGV2LSZndDtzbG90IHx8IGRldi0mZ3Q7c2xvdCAhPSBzbG90KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJjID0gY2IoZGV2LCBkYXRhKTsKJiM0MzsJCWlmIChyYykKJiM0MzsJCQlyZXR1cm4gcmM7CiYjNDM7CQlpZiAoZGV2LSZndDtzdWJvcmRpbmF0ZSkgewomIzQzOwkJCXJjID0gcGNpX3dhbGtfcmVzZXRfY2hlY2soZGV2LSZndDtzdWJvcmRpbmF0ZSwKJiM0MzsJCQkJCQkgIE5VTEwsIGNiLCBkYXRhKTsKJiM0MzsJCQlpZiAocmMpCiYjNDM7CQkJCXJldHVybiByYzsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHBjaV90cnlfcmVzZXRfc2xvdCAtIFRyeSB0byByZXNldCBhIFBDSSBzbG90CiAgKiBAc2xvdDogUENJIHNsb3QgdG8gcmVzZXQKJiM0MzsgKiBAY2hlY2s6IG9wdGlvbmFsIHBlci1kZXZpY2UgY2FsbGJhY2sgdGhhdCBjYW4gYWJvcnQgdGhlIHJlc2V0CiYjNDM7ICogQGRhdGE6IG9wYXF1ZSBhcmd1bWVudCBmb3IgQGNoZWNrCiAgKgogICogQSBQQ0kgYnVzIG1heSBob3N0IG11bHRpcGxlIHNsb3RzLCBlYWNoIHNsb3QgbWF5IHN1cHBvcnQgYSByZXNldCBtZWNoYW5pc20KICAqIGluZGVwZW5kZW50IG9mIG90aGVyIHNsb3RzLiAgRm9yIGluc3RhbmNlLCBzb21lIHNsb3RzIG1heSBzdXBwb3J0IHNsb3QgcG93ZXIKQEAgLTU1NjMsNyAmIzQzOzU2MTAsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfc2xvdCk7CiAgKgogICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIHNsb3QgY2Fubm90IGJlIGxvY2tlZAogICovCi1zdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpCiYjNDM7c3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90LAomIzQzOwkJCSAgICAgIGludCAoKmNoZWNrKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSwKJiM0MzsJCQkgICAgICB2b2lkICpkYXRhKQogewogCWludCByYzsKIApAQCAtNTU3MiwxMCAmIzQzOzU2MjEsMTQgQEAgc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KQogCQlyZXR1cm4gcmM7CiAKIAlpZiAocGNpX3Nsb3RfdHJ5bG9jayhzbG90KSkgewotCQlwY2lfc2xvdF9zYXZlX2FuZF9kaXNhYmxlX2xvY2tlZChzbG90KTsKLQkJbWlnaHRfc2xlZXAoKTsKLQkJcmMgPSBwY2lfcmVzZXRfaG90cGx1Z19zbG90KHNsb3QtJmd0O2hvdHBsdWcsIFBDSV9SRVNFVF9ET19SRVNFVCk7Ci0JCXBjaV9zbG90X3Jlc3RvcmVfbG9ja2VkKHNsb3QpOwomIzQzOwkJcmMgPSBjaGVjayA/IHBjaV93YWxrX3Jlc2V0X2NoZWNrKHNsb3QtJmd0O2J1cywgc2xvdCwgY2hlY2ssIGRhdGEpIDogMDsKJiM0MzsJCWlmICghcmMpIHsKJiM0MzsJCQlwY2lfc2xvdF9zYXZlX2FuZF9kaXNhYmxlX2xvY2tlZChzbG90KTsKJiM0MzsJCQltaWdodF9zbGVlcCgpOwomIzQzOwkJCXJjID0gcGNpX3Jlc2V0X2hvdHBsdWdfc2xvdChzbG90LSZndDtob3RwbHVnLAomIzQzOwkJCQkJCSAgICBQQ0lfUkVTRVRfRE9fUkVTRVQpOwomIzQzOwkJCXBjaV9zbG90X3Jlc3RvcmVfbG9ja2VkKHNsb3QpOwomIzQzOwkJfQogCQlwY2lfc2xvdF91bmxvY2soc2xvdCk7CiAJfSBlbHNlCiAJCXJjID0gLUVBR0FJTjsKQEAgLTU2MDcsMTAgJiM0Mzs1NjYwLDE0IEBAIHN0YXRpYyBpbnQgcGNpX2J1c19yZXNldChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBib29sIHByb2JlKQogLyoqCiAgKiBwY2lfdHJ5X3Jlc2V0X2J1cyAtIFRyeSB0byByZXNldCBhIFBDSSBidXMKICAqIEBidXM6IHRvcCBsZXZlbCBQQ0kgYnVzIHRvIHJlc2V0CiYjNDM7ICogQGNoZWNrOiBvcHRpb25hbCBwZXItZGV2aWNlIGNhbGxiYWNrIHRoYXQgY2FuIGFib3J0IHRoZSByZXNldAomIzQzOyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgZm9yIEBjaGVjawogICoKICAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBidXMgY2Fubm90IGJlIGxvY2tlZAogICovCi1zdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCiYjNDM7c3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAomIzQzOwkJCSAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLAomIzQzOwkJCSAgICAgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmM7CiAKQEAgLTU2MTksMTAgJiM0Mzs1Njc2LDEzIEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKIAkJcmV0dXJuIHJjOwogCiAJaWYgKHBjaV9idXNfdHJ5bG9jayhidXMpKSB7Ci0JCXBjaV9idXNfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoYnVzKTsKLQkJbWlnaHRfc2xlZXAoKTsKLQkJcmMgPSBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoYnVzLSZndDtzZWxmKTsKLQkJcGNpX2J1c19yZXN0b3JlX2xvY2tlZChidXMpOwomIzQzOwkJcmMgPSBjaGVjayA/IHBjaV93YWxrX3Jlc2V0X2NoZWNrKGJ1cywgTlVMTCwgY2hlY2ssIGRhdGEpIDogMDsKJiM0MzsJCWlmICghcmMpIHsKJiM0MzsJCQlwY2lfYnVzX3NhdmVfYW5kX2Rpc2FibGVfbG9ja2VkKGJ1cyk7CiYjNDM7CQkJbWlnaHRfc2xlZXAoKTsKJiM0MzsJCQlyYyA9IHBjaV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19yZXNldChidXMtJmd0O3NlbGYpOwomIzQzOwkJCXBjaV9idXNfcmVzdG9yZV9sb2NrZWQoYnVzKTsKJiM0MzsJCX0KIAkJcGNpX2J1c191bmxvY2soYnVzKTsKIAl9IGVsc2UKIAkJcmMgPSAtRUFHQUlOOwpAQCAtNTY2MSw3ICYjNDM7NTcyMSw3IEBAIHN0YXRpYyBpbnQgcGNpX3Jlc2V0X2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlLCBib29sIHJlc3RvcmUpCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsICZhbXA7YnVzLSZndDtzbG90cywgbGlzdCkgewogCQlpZiAocmVzdG9yZSkKLQkJCXJldCA9IHBjaV90cnlfcmVzZXRfc2xvdChzbG90KTsKJiM0MzsJCQlyZXQgPSBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc2xvdCwgTlVMTCwgTlVMTCk7CiAJCWVsc2UKIAkJCXJldCA9IHBjaV9zbG90X3Jlc2V0KHNsb3QsIFBDSV9SRVNFVF9ET19SRVNFVCk7CiAKQEAgLTU2NzUsNyAmIzQzOzU3MzUsNyBAQCBzdGF0aWMgaW50IHBjaV9yZXNldF9icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgYm9vbCByZXN0b3JlKQogCW11dGV4X3VubG9jaygmYW1wO3BjaV9zbG90X211dGV4KTsKIAogCWlmIChyZXN0b3JlKQotCQlyZXR1cm4gcGNpX3RyeV9yZXNldF9idXMoYnVzKTsKJiM0MzsJCXJldHVybiBwY2lfdHJ5X3Jlc2V0X2J1cyhidXMsIE5VTEwsIE5VTEwpOwogCXJldHVybiBwY2lfYnVzX3Jlc2V0KGJyaWRnZS0mZ3Q7c3Vib3JkaW5hdGUsIFBDSV9SRVNFVF9ET19SRVNFVCk7CiB9CiAKQEAgLTU3MDUsMTYgJiM0Mzs1NzY1LDQzIEBAIGludCBwY2lfcHJvYmVfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfYnVzKTsKIAomIzQzOy8qKgomIzQzOyAqIHBjaV9yZXNldF9idXNfY29uZCAtIGNvbmRpdGlvbmFsbHkgcmVzZXQgdGhlIHNsb3Qgb3IgYnVzIGNvbnRhaW5pbmcgYSBkZXZpY2UKJiM0MzsgKiBAcGRldjogdG9wIGxldmVsIFBDSSBkZXZpY2UgdG8gcmVzZXQgdmlhIHNsb3QvYnVzCiYjNDM7ICogQGNoZWNrOiBvcHRpb25hbCBjYWxsYmFjayBpbnZva2VkIG9uIGVhY2ggYWZmZWN0ZWQgZGV2aWNlIGJlZm9yZSB0aGUgcmVzZXQKJiM0MzsgKiBAZGF0YTogb3BhcXVlIGFyZ3VtZW50IHBhc3NlZCB0byBAY2hlY2sKJiM0MzsgKgomIzQzOyAqIFJlc2V0IHRoZSBzbG90IG9yIGJ1cyBjb250YWluaW5nIEBwZGV2LiAgT25jZSB0aGUgZW50aXJlIHBoeXNpY2FsIGJ1cy9zbG90CiYjNDM7ICogaGllcmFyY2h5IGlzIGxvY2tlZCwgQGNoZWNrIChpZiBub3QgTlVMTCkgaXMgY2FsbGVkIG9uIGVhY2ggb2YgdGhvc2UgbG9ja2VkCiYjNDM7ICogZGV2aWNlcy4gIEEgbm9uemVybyByZXR1cm4gYWJvcnRzIHRoZSByZXNldCBhbmQgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciwKJiM0MzsgKiBvdGhlcndpc2UgdGhlIHJlc2V0IHByb2NlZWRzLgomIzQzOyAqCiYjNDM7ICogTkIuIEBjaGVjayBydW5zIHdpdGggdGhlIGZ1bGwgc2V0IG9mIGRldmljZV9sb2NrcyBub3RlZCBhYm92ZSBoZWxkOyBjYWxsYmFja3MKJiM0MzsgKiBtdXN0IHRha2UgdGhlc2UgbG9ja2luZyBzZW1hbnRpY3MgaW50byBhY2NvdW50LiAgVXNlIE5VTEwgdG8gcGVyZm9ybSBhbgomIzQzOyAqIHVuY29uZGl0aW9uYWwgcmVzZXQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVOT1RUWSBpZiBAcGRldiBpcyBub3QgcmVzZXR0YWJsZSwgLUVBR0FJTiBpZiB0aGUKJiM0MzsgKiBkZXZpY2VzIGNhbm5vdCBiZSBsb2NrZWQsIG9yIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBAY2hlY2suCiYjNDM7ICovCiYjNDM7aW50IHBjaV9yZXNldF9idXNfY29uZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCSAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksCiYjNDM7CQkgICAgICAgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXJldHVybiAhcGNpX3Byb2JlX3Jlc2V0X3Nsb3QocGRldi0mZ3Q7c2xvdCkgPwomIzQzOwkJcGNpX3RyeV9yZXNldF9zbG90KHBkZXYtJmd0O3Nsb3QsIGNoZWNrLCBkYXRhKSA6CiYjNDM7CQlwY2lfdHJ5X3Jlc2V0X2J1cyhwZGV2LSZndDtidXMsIGNoZWNrLCBkYXRhKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2J1c19jb25kKTsKJiM0MzsKIC8qKgogICogcGNpX3Jlc2V0X2J1cyAtIFRyeSB0byByZXNldCBhIFBDSSBidXMKICAqIEBwZGV2OiB0b3AgbGV2ZWwgUENJIGRldmljZSB0byByZXNldCB2aWEgc2xvdC9idXMKICAqCi0gKiBTYW1lIGFzIGFib3ZlIGV4Y2VwdCByZXR1cm4gLUVBR0FJTiBpZiB0aGUgYnVzIGNhbm5vdCBiZSBsb2NrZWQKJiM0MzsgKiBTYW1lIGFzIGFib3ZlIHdpdGhvdXQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLgogICovCiBpbnQgcGNpX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlyZXR1cm4gKCFwY2lfcHJvYmVfcmVzZXRfc2xvdChwZGV2LSZndDtzbG90KSkgPwotCSAgICBwY2lfdHJ5X3Jlc2V0X3Nsb3QocGRldi0mZ3Q7c2xvdCkgOiBwY2lfdHJ5X3Jlc2V0X2J1cyhwZGV2LSZndDtidXMpOwomIzQzOwlyZXR1cm4gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIE5VTEwsIE5VTEwpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2J1cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggNDQ2OWUxYTc3ZjNjMS4uNDE2ZmQ2Yjc0YWJlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTIzMCw3ICYjNDM7MjMwLDYgQEAgZW51bSBwY2lfbW1hcF9hcGkgewogaW50IHBjaV9tbWFwX2ZpdHMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCByZXNubywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFpLAogCQkgIGVudW0gcGNpX21tYXBfYXBpIG1tYXBfYXBpKTsKIAotYm9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBwY2lfaW5pdF9yZXNldF9tZXRob2RzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfYnVzX2Vycm9yX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwppbmRleCAzZjExYTk2MjRiOWMwLi44ZTQyMzQyZDU2ZDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwpAQCAtNjA5LDcgJiM0Mzs2MDksNiBAQCBpbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCWlmIChyZXQgPT0gLUVBR0FJTikKIAkJZ290byBvdXRfZGlzYWJsZV9kZXZpY2U7CiAKLQl2ZGV2LSZndDtyZXNldF93b3JrcyA9ICFyZXQ7CiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJdmRldi0mZ3Q7cGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpOwogCWlmICghdmRldi0mZ3Q7cGNpX3NhdmVkX3N0YXRlKQpAQCAtNzY2LDcgJiM0Mzs3NjUsNyBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiAJaWYgKHBjaV9sb2FkX2FuZF9mcmVlX3NhdmVkX3N0YXRlKHBkZXYsICZhbXA7dmRldi0mZ3Q7cGNpX3NhdmVkX3N0YXRlKSkgewogCQlwY2lfaW5mbyhwZGV2LCAmIzM0OyVzOiBDb3VsZG4mIzM5O3QgcmVsb2FkIHNhdmVkIHN0YXRlXG4mIzM0OywgX19mdW5jX18pOwogCi0JCWlmICghdmRldi0mZ3Q7cmVzZXRfd29ya3MpCiYjNDM7CQlpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQocGRldikpCiAJCQlnb3RvIG91dDsKIAogCQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKQEAgLTc4NSwxMiAmIzQzOzc4NCwxNCBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiAJICogV2UgY2FuIG5vdCB1c2UgdGhlICYjMzQ7dHJ5JiMzNDsgcmVzZXQgaW50ZXJmYWNlIGhlcmUsIHdoaWNoIHdpbGwKIAkgKiBvdmVyd3JpdGUgdGhlIHByZXZpb3VzbHkgcmVzdG9yZWQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KIAkgKi8KLQlpZiAodmRldi0mZ3Q7cmVzZXRfd29ya3MpIHsKJiM0MzsJaWYgKHBjaV9yZXNldF9zdXBwb3J0ZWQocGRldikpIHsKIAkJYnJpZGdlID0gcGNpX3Vwc3RyZWFtX2JyaWRnZShwZGV2KTsKIAkJaWYgKGJyaWRnZSAmYW1wOyZhbXA7ICFwY2lfZGV2X3RyeWxvY2soYnJpZGdlKSkKIAkJCWdvdG8gb3V0X3Jlc3RvcmVfc3RhdGU7CiAJCWlmIChwY2lfZGV2X3RyeWxvY2socGRldikpIHsKLQkJCWlmICghX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHBkZXYpKQomIzQzOwkJCS8qIEVuZm9yY2UgZnVuY3Rpb24gc2NvcGUgdW5kZXIgbG9jayBmb3IgU1ItSU9WIFBGcyAqLwomIzQzOwkJCWlmICghcGNpX251bV92ZihwZGV2KSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICFfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQocGRldikpCiAJCQkJdmRldi0mZ3Q7bmVlZHNfcmVzZXQgPSBmYWxzZTsKIAkJCXBjaV9kZXZfdW5sb2NrKHBkZXYpOwogCQl9CkBAIC04OTIsNiAmIzQzOzg5MywxNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvdW50X2RldnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgKmRhdGEpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFBDSSB3YWxrIGNhbGxiYWNrIHRvIGNoZWNrIGZvciBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gIFZGcyBhcmUgbm90CiYjNDM7ICogZW51bWVyYXRlZCB3aGVuIGRldGVybWluaW5nIGFmZmVjdGVkIGRldmljZXMgYW5kIG1heSBiZSBvd25lZCBieSBzZXBhcmF0ZQomIzQzOyAqIHVzZXJzcGFjZSBwcm9jZXNzZXMgZnJvbSB0aGUgUEYuICBJdCYjMzk7cyB0aGVyZWZvcmUgdGhlIHVzZXImIzM5O3MgcmVzcG9uc2liaWxpdHkKJiM0MzsgKiB0byB0ZWFyZG93biBWRnMgZm9yIGFueSBhZmZlY3RlZCBQRiBiZWZvcmUgcGVyZm9ybWluZyBhIGhvdC1yZXNldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9oYXNfdmZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBjaV9udW1fdmYocGRldikgPyAtRUJVU1kgOiAwOwomIzQzO30KJiM0MzsKIHN0cnVjdCB2ZmlvX3BjaV9maWxsX2luZm8gewogCXN0cnVjdCB2ZmlvX2RldmljZSAqdmRldjsKIAlzdHJ1Y3QgdmZpb19wY2lfZGVwZW5kZW50X2RldmljZSAqZGV2aWNlczsKQEAgLTEwODUsNyAmIzQzOzEwOTcsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIAogCWluZm8uZmxhZ3MgPSBWRklPX0RFVklDRV9GTEFHU19QQ0k7CiAKLQlpZiAodmRldi0mZ3Q7cmVzZXRfd29ya3MpCiYjNDM7CWlmIChwY2lfcmVzZXRfc3VwcG9ydGVkKHZkZXYtJmd0O3BkZXYpKQogCQlpbmZvLmZsYWdzIHw9IFZGSU9fREVWSUNFX0ZMQUdTX1JFU0VUOwogCiAJaW5mby5udW1fcmVnaW9ucyA9IFZGSU9fUENJX05VTV9SRUdJT05TICYjNDM7IHZkZXYtJmd0O251bV9yZWdpb25zOwpAQCAtMTMxNyw3ICYjNDM7MTMyOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAogewogCWludCByZXQ7CiAKLQlpZiAoIXZkZXYtJmd0O3Jlc2V0X3dvcmtzKQomIzQzOwlpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQodmRldi0mZ3Q7cGRldikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpOwpAQCAtMjU5Niw3ICYjNDM7MjYwOCw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCwKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZkZXYsICZhbXA7ZGV2X3NldC0mZ3Q7ZGV2aWNlX2xpc3QsIHZkZXYuZGV2X3NldF9saXN0KQogCQl2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTsKIAotCXJldCA9IHBjaV9yZXNldF9idXMocGRldik7CiYjNDM7CXJldCA9IHBjaV9yZXNldF9idXNfY29uZChwZGV2LCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcywgTlVMTCk7CiAKIAl2ZGV2ID0gbGlzdF9sYXN0X2VudHJ5KCZhbXA7ZGV2X3NldC0mZ3Q7ZGV2aWNlX2xpc3QsCiAJCQkgICAgICAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlLCB2ZGV2LmRldl9zZXRfbGlzdCk7CkBAIC0yNjU5LDcgJiM0MzsyNjcxLDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZGV2X3NldF90cnlfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCkKIAlpZiAodmZpb19wY2lfZGV2X3NldF9wbV9ydW50aW1lX2dldChkZXZfc2V0KSkKIAkJcmV0dXJuOwogCi0JaWYgKCFwY2lfcmVzZXRfYnVzKHBkZXYpKQomIzQzOwlpZiAoIXBjaV9yZXNldF9idXNfY29uZChwZGV2LCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcywgTlVMTCkpCiAJCXJlc2V0X2RvbmUgPSB0cnVlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsICZhbXA7ZGV2X3NldC0mZ3Q7ZGV2aWNlX2xpc3QsIHZkZXYuZGV2X3NldF9saXN0KSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCA2NGIzMDhiNmU2MWMxLi40ZGUyMWU2YWM1MzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTE0NzQsMTIgJiM0MzsxNDc0LDE2IEBAIHZvaWQgcGNpZV9wcmludF9saW5rX3N0YXR1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2llX3Jlc2V0X2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIHByb2JlKTsKIGludCBwY2llX2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoc3RydWN0IHBjaV9kZXYgKmRldik7CiYjNDM7Ym9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV90cnlfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX3Byb2JlX3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KTsKIGludCBwY2lfcHJvYmVfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogaW50IHBjaV9yZXNldF9idXMoc3RydWN0IHBjaV9kZXYgKmRldik7CiYjNDM7aW50IHBjaV9yZXNldF9idXNfY29uZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKJiM0MzsJCSAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksCiYjNDM7CQkgICAgICAgdm9pZCAqZGF0YSk7CiB2b2lkIHBjaV9yZXNldF9zZWNvbmRhcnlfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBwY2liaW9zX3Jlc2V0X3NlY29uZGFyeV9idXMoc3RydWN0IHBjaV9kZXYgKmRldik7CiB2b2lkIHBjaV91cGRhdGVfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgKaW5kZXggOWExNjc0YzE1MmFhMi4uNmZiNTk5ZWMyOTE5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgKQEAgLTEyMSw3ICYjNDM7MTIxLDYgQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHsKIAkvKiBGbGFncyBvbmx5IG1vZGlmaWVkIG9uIHNldHVwL3JlbGVhc2UgLSBiaXRmaWVsZCBvayAqLwogCWJvb2wJCQloYXNfZHluX21zaXg6MTsKIAlib29sCQkJcGNpXzJfMzoxOwotCWJvb2wJCQlyZXNldF93b3JrczoxOwogCWJvb2wJCQlleHRlbmRlZF9jYXBzOjE7CiAJYm9vbAkJCWhhc192Z2E6MTsKIAlib29sCQkJbm9pbnR4OjE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaAppbmRleCA1ZGU2MThhM2E1ZWVlLi44NjAzOTU5ZjE3MzUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKQEAgLTc3Miw2ICYjNDM7NzcyLDkgQEAgc3RydWN0IHZmaW9fcGNpX2hvdF9yZXNldF9pbmZvIHsKICAqIE1peGVkIHVzYWdlIG9mIGxlZ2FjeSBncm91cHMgYW5kIGNkZXZzIGFjcm9zcyB0aGUgc2V0IG9mIGFmZmVjdGVkCiAgKiBkZXZpY2VzIGlzIG5vdCBzdXBwb3J0ZWQuCiAgKgomIzQzOyAqIEhvdCByZXNldCBvZiBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcyBpcyBub3Qgc3VwcG9ydGVkLCBTUi1JT1YKJiM0MzsgKiBzaG91bGQgZmlyc3QgYmUgZGlzYWJsZWQgb24gYW55IGFmZmVjdGVkIFBGLgomIzQzOyAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUuCiAgKi8KIHN0cnVjdCB2ZmlvX3BjaV9ob3RfcmVzZXQgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTkwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBQQ0kgUmVzZXQgTG9naWMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCBJIG5lZWQgdG8gYXNzZXNzIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBkZWZpbml0ZWx5IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFBDSSBzdWJzeXN0ZW0gYW5kIHRoZSBWRklPIFBDSSBjb3JlLCBzbyBpdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHRvdWNoZXMgYGRyaXZlcnMvcGNpL3BjaS5jYCBhbmQgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYCwgd2hpY2ggYXJlIGNyaXRpY2FsIGFyZWFzLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIHRoZSBQQ0kgcmVzZXQgbG9naWMuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYHBjaV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYCwgYW5kIGBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uYCwgYWRkaW5nIGNoZWNrcyByZWxhdGVkIHRvIHRoZSBudW1iZXIgb2YgdmlydHVhbCBmdW5jdGlvbnMgKGBwY2lfbnVtX3ZmKGRldikgJmd0OyAwYCkuIEl0IGludHJvZHVjZXMgYHBjaV9yZXNldF9idXNfY29uZGAgYW5kIGFsdGVycyBob3cgYHBjaV90cnlfcmVzZXRfc2xvdGAgYW5kIGBwY2lfdHJ5X3Jlc2V0X2J1c2Agd29yaywgaW5jb3Jwb3JhdGluZyBhIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGUgVkZJTyBzaWRlIGxldmVyYWdlcyB0aGlzIG5ldyBgcGNpX3Jlc2V0X2J1c19jb25kYCB3aXRoIGEgYHZmaW9fcGNpX2Rldl9oYXNfdmZzYCBjYWxsYmFjayB0byBwcmV2ZW50IGhvdCByZXNldHMgb2YgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyB3aXRoIGFjdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9ucy4gSSYjMzk7bSBhbHNvIHNlZWluZyBzb21lIGNsZWFudXAgd2hlcmUgYHZkZXYtJmd0O3Jlc2V0X3dvcmtzYCBpcyByZW1vdmVkIGluIGZhdm9yIG9mIGEgZGlyZWN0IGNoZWNrIHdpdGggYHBjaV9yZXNldF9zdXBwb3J0ZWQocGRldilgLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBDb25zaWRlcmluZyBWRklPIGFuZCBQQ0kgcmVzZXRzIGFyZSBRRU1VIGNvbnRyb2xsYWJsZSwgdGhlIGFuc3dlciBpcyBhIHllcy4gTm93LCBRRU1VIGhhcyBzb21lIHN1cHBvcnQgZm9yIFNSLUlPViAoaWdiLCBudm1lKS4gSG93ZXZlciwgZXZlbiB3aXRob3V0IFNSLUlPViwgdGhlIGNvcmUgUENJIHJlc2V0IGZ1bmN0aW9ucyBsaWtlIGBwY2lfcmVzZXRfZnVuY3Rpb25gIGFuZCB0aGUgbmV3IGBwY2lfcmVzZXRfYnVzX2NvbmRgIHdpbGwgYmUgcmVhY2hlZCwgc28gdGhpcyBuZWVkcyB0byBiZSBmdXp6ZWQgZXZlbiBpZiBTUi1JT1YgaXMgbm90IHByZXNlbnQuIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgY29yZSBQQ0kgZnVuY3Rpb25zOiBgcGNpX3Jlc2V0X2Z1bmN0aW9uYCwgYHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWRgLCBgcGNpX3RyeV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfYnVzX2NvbmRgLCBgcGNpX3Jlc2V0X2J1c2AuCgpJJiMzOTtsbCBjaGVjayB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucy4gSSBrbm93IHRoYXQgYHBjaV9yZXNldF9mdW5jdGlvbmAgaXMgZXhwb3J0ZWQgYW5kIHVzZWQgYnkgdmFyaW91cyBkcml2ZXJzLCBwbHVzIHN5c2ZzLCBzbyB0aGVyZSBhcmUgbXVsdGlwbGUgZW50cnkgcG9pbnRzLiBgcGNpX3Jlc2V0X2J1c19jb25kYCBpcyBhbHNvIGV4cG9ydGVkIGFuZCwgY3J1Y2lhbGx5LCB1c2VkIGJ5IFZGSU8sIHdoaWNoIGdpdmVzIHVzIGEgZ3JlYXQgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgYENPTkZJR19QQ0lgLCBvYnZpb3VzbHkuIFRoZW4sIGZvciBzdXJlLCBJJiMzOTtsbCBuZWVkIGBDT05GSUdfVkZJT19QQ0lgIHRvIGFjdGl2YXRlIHRoZSBWRklPIGNoYW5nZXMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYHBjaV9yZXNldF9idXNfY29uZGAgaW4gYGRyaXZlcnMvcGNpL3BjaS5jYCBmb3IgYW55IGV4dHJhIGNvbmZpZyBvcHRpb24gaW5mby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVzZXRfYnVzX2NvbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9wY2kuYz01NzY2PUVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wcm9iZV9yZXNldF9idXMpO1xuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTU3NjgtLyoqXG5kcml2ZXJzL3BjaS9wY2kuYzo1NzY5OiAqIHBjaV9yZXNldF9idXNfY29uZCAtIGNvbmRpdGlvbmFsbHkgcmVzZXQgdGhlIHNsb3Qgb3IgYnVzIGNvbnRhaW5pbmcgYSBkZXZpY2VcbmRyaXZlcnMvcGNpL3BjaS5jLTU3NzAtICogQHBkZXY6IHRvcCBsZXZlbCBQQ0kgZGV2aWNlIHRvIHJlc2V0IHZpYSBzbG90L2J1c1xuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTU3ODUtICovXG5kcml2ZXJzL3BjaS9wY2kuYzo1Nzg2OmludCBwY2lfcmVzZXRfYnVzX2NvbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL3BjaS9wY2kuYy01Nzg3LVx0XHQgICAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTU3OTMtfVxuZHJpdmVycy9wY2kvcGNpLmM6NTc5NDpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfYnVzX2NvbmQpO1xuZHJpdmVycy9wY2kvcGNpLmMtNTc5NS1cbi0tXG5kcml2ZXJzL3BjaS9wY2kuYz01ODAyPWludCBwY2lfcmVzZXRfYnVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuZHJpdmVycy9wY2kvcGNpLmMtNTgwMy17XG5kcml2ZXJzL3BjaS9wY2kuYzo1ODA0Olx0cmV0dXJuIHBjaV9yZXNldF9idXNfY29uZChwZGV2LCBOVUxMLCBOVUxMKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTU4MDUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBWRklPLVBDSSBEZXZpY2UgQ2FwYWJpbGl0aWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBhIFZGSU8tUENJIGRldmljZSBpcyBoYW5kbGluZyB2aXJ0dWFsIGZ1bmN0aW9ucyAoVkZzKS4gTGV0JiMzOTtzIGRpdmUgcmlnaHQgaW50byB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLCB3aGljaCBtZWFucyBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGB2ZmlvX3BjaV9jb3JlLmNgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy92ZmlvL3BjaWAgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGB2ZmlvX3BjaV9kZXZfaGFzX3Zmc2AgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVkZJTyBkcml2ZXIgZGV0ZXJtaW5lcyBpZiBhIGdpdmVuIFBDSSBkZXZpY2UgaXMgc2V0IHVwIHRvIGV4cG9zZSB2aXJ0dWFsIGZ1bmN0aW9ucywgYW5kIHRoZSBtZWNoYW5pc21zIGl0IHVzZXMgdG8gbWFuYWdlIHRoZW0uIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiYjMzk7cyBsb2dpYyB3aWxsIGdpdmUgbWUgdGhlIGJlc3QgaW5zaWdodCBpbnRvIHRoZSBkcml2ZXImIzM5O3MgVkYgY2FwYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2Rldl9oYXNfdmZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9ODkwPXN0YXRpYyBpbnQgdmZpb19wY2lfY291bnRfZGV2cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy05MDEtICovXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzo5MDI6c3RhdGljIGludCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTkwMy17XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MjUxNj1zdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjYxMC1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjI2MTE6XHRyZXQgPSBwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgdmZpb19wY2lfZGV2X2hhc192ZnMsIE5VTEwpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjYxMi1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0yNjUzPXN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMjY3My1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjI2NzQ6XHRpZiAoIXBjaV9yZXNldF9idXNfY29uZChwZGV2LCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcywgTlVMTCkpXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yNjc1LVx0XHRyZXNldF9kb25lID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTEyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIHRoZSBWRklPIFJlc2V0IExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIG1hbmFnaW5nIFBDSSByZXNldHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFZGSU8gY29udGV4dC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZXNlIGZ1bmN0aW9uczogYHBjaV9yZXNldF9idXNfY29uZGAsIGBwY2lfcmVzZXRfZnVuY3Rpb25gLCBgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZGAsIGBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uYCwgYHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0YCwgYHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0YCwgYW5kIGB2ZmlvX3BjaV9pb2N0bF9yZXNldGAuIEVhY2ggb25lIGxpa2VseSBwbGF5cyBhIHZpdGFsIHJvbGUgaW4gb3JjaGVzdHJhdGluZyB0aGUgcmVzZXQgcHJvY2VkdXJlcywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9ucyBhbmQgcmVzcG9uc2liaWxpdGllcy4gQmVmb3JlIEkgZGl2ZSBpbnRvIHRoZWlyIGltcGxlbWVudGF0aW9ucywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIHRvIGVuc3VyZSB0aGF0IFZGSU9fUENJIGlzIGVuYWJsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGZ1cnRoZXIgY29udGV4dCBmb3IgdGhlIGltcG9ydGFuY2UgYW5kIGltcGFjdCBvZiB0aGUgcmVzZXQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJT19QQ0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTI9bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy05LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXHRkZWZfYm9vbCB5IGlmICFTMzkwXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjE0OmNvbmZpZyBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBWRklPIHN1cHBvcnQgZm9yIGFueSBQQ0kgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTIzPWlmIFZGSU9fUENJXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDYtXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXHRib29sIFwmIzM0O1ZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTktXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzOTAKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQ6CgoqKlZGSU8tUENJIFJlc2V0IEZ1bmN0aW9uYWxpdHkgRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBWRklPX1BDSWAgaGVyZSwgdGhhdCYjMzk7cyBvdXIgdGFyZ2V0LiBNeSBtYWluIGNvbmNlcm4gcmlnaHQgbm93IGlzIHVuZGVyc3RhbmRpbmcgdGhlIHJlc2V0IGNhcGFiaWxpdGllcyB3aXRoaW4gdGhpcyBzZXR1cC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIFBDSSBidXMgYW5kIGluZGl2aWR1YWwgZnVuY3Rpb25zIGFyZSByZXNldC4KCkZpcnN0IHRoaW5ncyBmaXJzdDogTGV0IG1lIGNvbmZpcm0gaWYgdGhlIGtlcm5lbCBleHBvcnRzIHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB3ZSBuZWVkLiBJJiMzOTttIGNoZWNraW5nIGlmIGBwY2lfcmVzZXRfYnVzX2NvbmRgIGlzIGV4cG9zZWQgYXMgYSBzeW1ib2wgYW5kLCBzdXJlIGVub3VnaCwgaXQmIzM5O3MgdGhlcmUsIGZsYWdnZWQgYXMgYEVYUE9SVF9TWU1CT0xfR1BMYC4gUGVyZmVjdCEgVGhlbiwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgYHBjaV9yZXNldF9mdW5jdGlvbmAsIFllcCwgdGhhdCYjMzk7cyB0aGVyZSB0b28uIEZpbmFsbHksIHdoYXQgYWJvdXQgdGhlIGxvY2tlZCB2ZXJzaW9uIG9mIHRoYXQsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYD8gSSBuZWVkIHRvIGtub3cgaWYgdGhhdCYjMzk7cyBhbHNvIGF2YWlsYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcGNpLmM9NTI3MD1pbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTUyODktfVxuZHJpdmVycy9wY2kvcGNpLmM6NTI5MDpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTUyOTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODM5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBGdW5jdGlvbiBFeHBvcnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uYCBmdW5jdGlvbiBpcyBleHBvc2VkLCBpLmUuLCBleHBvcnRlZCwgZm9yIHVzZSBvdXRzaWRlIHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgKmxpa2VseSogZGVmaW5lcyBpdC4gVGhpcyBpcyBhIGNvbW1vbiBmaXJzdCBzdGVwLCBlc3BlY2lhbGx5IHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBQQ0kgZGV2aWNlcyBvciB0cnlpbmcgdG8gd3JpdGUgYSBkcml2ZXIgbW9kdWxlLiBJZiBpdCYjMzk7cyBub3QgZXhwb3J0ZWQsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIGFsdGVybmF0aXZlcyDigJMgd2hldGhlciB0aGVyZSYjMzk7cyBhbiBlcXVpdmFsZW50IGZ1bmN0aW9uYWxpdHkgYWxyZWFkeSBleHBvc2VkLCBpZiBJJiMzOTtsbCBuZWVkIHRvIHJld3JpdGUgY29kZSBvciBidWlsZCB0aGUgbW9kdWxlIGFnYWluc3QgYSBjdXN0b20ga2VybmVsIG9yLCB3b3JzdCBjYXNlLCBpZiBJIGhhdmUgdG8gY29uc2lkZXIgYSBjb21wbGV0ZSBjaGFuZ2Ugb2YgYXBwcm9hY2guIFRoZSBhbnN3ZXIgaGVyZSBkaWN0YXRlcyBhICpsb3QqIG9mIHRoZSBuZXh0IHN0ZXBzLCBzbyBJIG5lZWQgdGhpcyBpbmZvcm1hdGlvbiBhdCBoYW5kIGJlZm9yZSBJIHN0YXJ0IGRvaW5nIGFueSBraW5kIG9mIGhlYXZ5LWxpZnRpbmcgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcGNpLmM9NTI5OD1pbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTUzMTktfVxuZHJpdmVycy9wY2kvcGNpLmM6NTMyMDpFWFBPUlRfU1lNQk9MX0dQTChwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTUzMjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTk1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqUENJIEJ1cyBSZXNldCBFeHBvcnQgQ2hlY2sqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZSBgcGNpX3Jlc2V0X2J1c2AgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBmaXJzdCBzdGVwLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGggYW55IGFzc3VtcHRpb25zIGFib3V0IGl0cyBhdmFpbGFiaWxpdHkgb3IgdXNhZ2UgaWYgaXQmIzM5O3Mgbm90IGFjdHVhbGx5IG1hZGUgcHVibGljLiBLbm93aW5nIHdoZXRoZXIgaXQmIzM5O3MgZXhwb3J0ZWQgZGljdGF0ZXMgdGhlIGVudGlyZSBhcHByb2FjaCBJJiMzOTtsbCB0YWtlLiBJZiBpdCBpc24mIzM5O3QsIEkmIzM5O2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgcmUtZXZhbHVhdGUgYW5kIGxvb2sgZm9yIGFsdGVybmF0aXZlIG1ldGhvZHMuIFNvLCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgZXhwb3J0IHN0YXR1cyBiZWZvcmUgbW92aW5nIGFueSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKHBjaV9yZXNldF9idXNcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9wY2kuYz01ODAyPWludCBwY2lfcmVzZXRfYnVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvcGNpL3BjaS5jLTU4MDUtfVxuZHJpdmVycy9wY2kvcGNpLmM6NTgwNjpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfYnVzKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTU4MDctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTA1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIEtlcm5lbCBTeW1ib2wgRXhwb3J0IFN0YXR1cyoqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyB0byB2ZXJpZnkgaWYgdGhlIGBwY2lfcmVzZXRfc3VwcG9ydGVkYCBzeW1ib2wgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYnkgdGhlIGtlcm5lbC4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcC4gSWYgdGhlIHN5bWJvbCBpc24mIzM5O3QgZXhwb3J0ZWQsIHRoZXJlJiMzOTtzIG5vIHBvaW50IGluIGV2ZW4gdHJ5aW5nIHRvIHVzZSBpdCDigJMgaXQgd29uJiMzOTt0IGJlIHZpc2libGUgdG8gbW9kdWxlcyBvciBleHRlcm5hbCBjb2RlLiBJdCYjMzk7cyBiYXNpYyBkdWUgZGlsaWdlbmNlLCBlbnN1cmluZyB3ZSYjMzk7cmUgbm90IGNoYXNpbmcgYSBnaG9zdCBhbmQgdGhhdCB0aGUgZnVuY3Rpb25hbGl0eSB3ZSYjMzk7cmUgYWltaW5nIHRvIGxldmVyYWdlIGlzLCBpbiBmYWN0LCBhdmFpbGFibGUgZm9yIHVzIHRvIHdvcmsgd2l0aC4gQmVmb3JlIGRpdmluZyBhbnkgZGVlcGVyLCB0aGlzIGNoZWNrIGlzIG1hbmRhdG9yeS4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChwY2lfcmVzZXRfc3VwcG9ydGVkXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvcGNpLmM9OTc9Ym9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9wY2kvcGNpLmMtMTAwLX1cbmRyaXZlcnMvcGNpL3BjaS5jOjEwMTpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfc3VwcG9ydGVkKTtcbmRyaXZlcnMvcGNpL3BjaS5jLTEwMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjQKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQQ0kgUmVzZXQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgdGhlbiB0d2Vha2luZyBzZXZlcmFsIGV4aXN0aW5nIGZ1bmN0aW9uczogYHBjaV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYCwgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gLCBhbmQgYHBjaV9yZXNldF9idXNgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIFBDSSByZXNldCBpbmZyYXN0cnVjdHVyZSBiZWluZyB0b3VjaGVkLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgdmZpb19wY2lfY29yZS5jYCBpcyBhbHNvIGdldHRpbmcgbW9kaWZpZWQgdG8gbWFrZSB1c2Ugb2YgdGhlIG5ldyBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gYW5kIGBwY2lfcmVzZXRfc3VwcG9ydGVkYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgdGlnaHRlbmluZyB0aGUgaW50ZWdyYXRpb24gd2l0aCBWRklPLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgaW1wbGljYXRlZCBpbiB0aGlzIGNoYW5nZTogYHBjaV9yZXNldF9idXNfY29uZGAsIHRoZSBwcmltYXJ5IG5ldyBvbmUsIGlzIG5hdHVyYWxseSB0aGUgcHJpb3JpdHkuIFRoZW4sIHRoZSBzdGFuZGFyZCBgcGNpX3Jlc2V0X2Z1bmN0aW9uYCBmYW1pbHkgaXMgZ2V0dGluZyByZXZpc2VkLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlIFZGSU8gY29kZSBoYXMgc2VlbiBzaWduaWZpY2FudCBjaGFuZ2UsIHNpbmNlIGB2ZmlvX3BjaV9jb3JlLmNgIGlzIGJlaW5nIGFsdGVyZWQuIFNwZWNpZmljYWxseSwgYHZmaW9fcGNpX2lvY3RsX3Jlc2V0YCwgd2hpY2ggaGFuZGxlcyB0aGUgaW9jdGwgZm9yIHJlc2V0LCBpcyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyAqY2FsbGVkKiBmcm9tIGB2ZmlvX3BjaV9jb3JlX2lvY3RsYCB3aGljaCBpcywgYXMgYW4gaW9jdGwgaGFuZGxlciwgZXhwb3J0ZWQuIFRoZW4sIHdlIGhhdmUgYHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0YCwgYW5kIGB2ZmlvX3BjaV9kZXZfc2V0X3RyeV9yZXNldGAsIHdoaWNoIGFyZSBhbHNvIHN0YXRpYywgd2l0aCB0aGUgbGF0dGVyIGJlaW5nIHVzZWQgZHVyaW5nIFZGSU8gZGV2aWNlIGRpc2FibGUuCgpIb2xkIG9uLi4uIGB2ZmlvX3BjaV9pb2N0bF9yZXNldGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IGlmIGl0JiMzOTtzIGJlaW5nIHVzZWQgYnkgYHZmaW9fcGNpX2NvcmVfaW9jdGxgLCB0aGVuIHRoYXQgbWVhbnMgaXQmIzM5O3Mgc3RpbGwgYmVpbmcgYWNjZXNzZWQgZXh0ZXJuYWxseS4gSSBzaG91bGQgY29uZmlybSB0aGF0IGB2ZmlvX3BjaV9jb3JlX2lvY3RsYCBpcyBpbmRlZWQgZXhwb3J0ZWQuIEl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgdG8gZW5zdXJlIHRoZSBWRklPIHJlc2V0IG1lY2hhbmlzbSBpcyBwcm9wZXJseSBleHBvc2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKHZmaW9fcGNpX2NvcmVfaW9jdGxcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTY3PWxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTkyLX1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE1OTM6RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9pb2N0bCk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTk0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcyMQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSWRlbnRpZnlpbmcgdGhlIEtleSBGb2N1cyBmb3IgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gY2hvb3NlIHRoZSBiZXN0IGZvY3VzIGZvciBkaWdnaW5nIGludG8gdGhpcy4gYHZmaW9fcGNpX2NvcmVfaW9jdGxgLi4uIHdoaWxlIGl0ICppcyogdGhlIGdlbmVyaWMgaW9jdGwgaGFuZGxlciwgdGhhdCYjMzk7cyBhbG1vc3QgdG9vIGJyb2FkLCBpc24mIzM5O3QgaXQ/IEl04oCZcyBwcm9iYWJseSBnb2luZyB0byBsZWFkIHRvIGEgbG90IG9mIG5vaXNlLiBNYXliZSBzdGFydGluZyB0aGVyZSBpcyBhIGdvb2QgaWRlYSB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLCBidXQgaXQgbWlnaHQgYmUgaW5lZmZpY2llbnQuIGB2ZmlvX3BjaV9jb3JlX2Rpc2FibGVg4oCmIG5vdyAqdGhhdCogc2VlbXMgbW9yZSBwcm9taXNpbmcuIFNwZWNpZmljYWxseSwgKmRpc2FibGluZyogYSBmdW5jdGlvbiwgY291bGQgcmV2ZWFsIG1vcmUgYWJvdXQgYW55IHNwZWNpZmljIGlzc3VlcyBwcmVzZW50LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGF0IGFuZCB0aGVuIGNpcmNsZSBiYWNrIHRvIHRoZSBJb0N0bCBoYW5kbGVyIGlmIHdlIG5lZWQgdG8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwodmZpb19wY2lfY29yZV9kaXNhYmxlXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9Njc4PXZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04MTItfVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6ODEzOkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfZGlzYWJsZSk7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04MTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTM2CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIFZGSU8tUENJJiMzOTtzIEV4cG9ydGVkIFN5bWJvbHMqKgoKQWxyaWdodCwgc28gYHZmaW9fcGNpX2NvcmVfZGlzYWJsZWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZC4gVGhhdCBjb25maXJtcyBhIHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgdGhlIG5hdHVyYWwgZm9sbG93LXVwIHF1ZXN0aW9uIGlz4oCmIHdoYXQgYWJvdXQgaXRzIGNvdW50ZXJwYXJ0PyBJcyBgdmZpb19wY2lfY29yZV9lbmFibGVgIGFsc28gZXhwb3NlZD8gSSBuZWVkIHRvIGtub3cgaWYgSSBoYXZlIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIG9yIGlmIHRoZXJlIGlzIGFub3RoZXIgbWVjaGFuaXNtIGZvciB0aGUgZW5hYmxlIHByb2NlZHVyZS4gVGhpcyBjb3VsZCBpbXBhY3QgaG93IEkgYXBwcm9hY2ggWCBvbiBteSBjdXJyZW50IHByb2plY3QuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgc3ltYm9sIHRhYmxlIGRpcmVjdGx5IHRvIGJlIGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0xfR1BMXFwodmZpb19wY2lfY29yZV9lbmFibGVcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz01ODc9aW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy02NzUtfVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6Njc2OkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfZW5hYmxlKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTY3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWRklPIFBDSSBSZXNldCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IGl0JiMzOTtzIGFsdGVyaW5nIHRoZSByZXNldCBtZWNoYW5pc21zIHdpdGhpbiB0aGUgVkZJTy1QQ0kgZnJhbWV3b3JrLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgdmZpb19wY2lfY29yZV9lbmFibGVgIGFuZCBgdmZpb19wY2lfY29yZV9kaXNhYmxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJvdXRpbmVzIGFyZSBiZWluZyBtb2RpZmllZCBhbmQgaG93IHRoYXQgYWZmZWN0cyB0aGUgZGV2aWNlIHJlc2V0IGxpZmVjeWNsZS4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBzb21lIGtleSBzeW1ib2xzLiBJJiMzOTttIG5vdGluZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgYXMgdGhleSBhcmUgbGlrZWx5IHdoZXJlIHRoZSBoZWF2eSBsaWZ0aW5nIGlzIGhhcHBlbmluZzogYHBjaV9yZXNldF9idXNfY29uZGAsIGBwY2lfcmVzZXRfZnVuY3Rpb25gLCBgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZGAsIGBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uYCwgYHZmaW9fcGNpX2NvcmVfaW9jdGxgLCBgdmZpb19wY2lfY29yZV9kaXNhYmxlYCwgYW5kIGB2ZmlvX3BjaV9jb3JlX2VuYWJsZWAuCgpXYWl0IGEgbWludXRlLCBJIHNlZSB0aGF0IGBwY2lfcmVzZXRfYnVzYCBpcyBhbHNvIGJlaW5nIHRvdWNoZWQsIHdoaWNoIGlzIG5vdyBjYWxsaW5nIGBwY2lfcmVzZXRfYnVzX2NvbmRgLiBUaGF0JiMzOTtzIGFuIGltcG9ydGFudCBjaGFuZ2U7IEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjb25kaXRpb25hbCByZXNldCBsb2dpYyBoZXJlLgoKQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYHBjaV9yZXNldF9zdXBwb3J0ZWRgIGlzIGJlaW5nIGV4cG9ydGVkLiBUaGlzIHN1Z2dlc3RzIGl0JiMzOTtzIGJlY29taW5nIG1vcmUgd2lkZWx5IGFjY2Vzc2libGUsIHdoaWNoIGNvdWxkIGJlIGFuIGludGVyZXN0aW5nIGFyY2hpdGVjdHVyYWwgc2hpZnQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuCgpOb3csIHRvIGNvbXBpbGUgdGhpcywgSSYjMzk7bGwgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBJJiMzOTttIGdvaW5nIHRvIG5lZWQgYFBDSWAgYW5kIGBWRklPX1BDSWAuIEJ1dCBJIHNob3VsZCBkb3VibGUtY2hlY2sgZGVwZW5kZW5jaWVzLiBMZXQgbWUgc2VlLi4uIHllcywgYFZGSU9fUENJYCBkZXBlbmRzIG9uIGBWRklPYCBhbmQgYFBDSWAuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG91dCBmb3Igb3RoZXIgZGVwZW5kZW5jaWVzIHRvbywgYnV0IHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM6XHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXG4tLVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTEwPWNvbmZpZyBWRklPX1BDSV9JTlRYXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXHRkZWZfYm9vbCB5IGlmICFTMzkwXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTI6XHRkZXBlbmRzIG9uIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjQ9Y29uZmlnIFZGSU9fUENJX1ZHQVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVx0Ym9vbCBcJiMzNDtHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXCYjMzQ7XG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjY6XHRkZXBlbmRzIG9uIFg4NiBcdTAwMjZcdTAwMjYgVkdBX0FSQlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI3LVx0aGVscFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0zND1jb25maWcgVkZJT19QQ0lfSUdEXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM2Olx0ZGVwZW5kcyBvbiBYODZcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zNy1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00Nz1jb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7VkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgczM5MHggS1ZNIHBhc3N0aHJvdWdoXCYjMzQ7XG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDk6XHRkZXBlbmRzIG9uIFMzOTAgXHUwMDI2XHUwMDI2IEtWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTUwLVx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjY0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGVwZW5kZW5jaWVzIGFuZCBWZXJpZmljYXRpb24gLSBWRklPJiMzOTtzIEZvdW5kYXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYFZGSU9fUENJYC4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgUENJYCwgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbC4gQW5kIG5hdHVyYWxseSwgYFZGSU9gIGl0c2VsZiBpcyByZXF1aXJlZCBmb3IgYFZGSU9fUENJYCB0byBkbyBpdHMgdGhpbmcuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYFZGSU9gIHBpZWNlcyBhcmUgY29ycmVjdGx5IHNldCB1cC4gSSYjMzk7bGwgbmVlZCB0byBqdW1wIGludG8gYGRyaXZlcnMvdmZpby9LY29uZmlnYCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEkmIzM5O20gYWZ0ZXIgdGhlIGNvcmUgYFZGSU9gIGNvbmZpZ3VyYXRpb24uIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgYWxsIGxpbmVkIHVwIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkZJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOm1lbnVjb25maWcgVkZJT1xuZHJpdmVycy92ZmlvL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1ZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz0xNj1pZiBWRklPXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoxNzpjb25maWcgVkZJT19ERVZJQ0VfQ0RFVlxuZHJpdmVycy92ZmlvL0tjb25maWctMTgtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBWRklPIGNkZXYgL2Rldi92ZmlvL2RldmljZXMvdmZpb1hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0yOS1cbmRyaXZlcnMvdmZpby9LY29uZmlnOjMwOmNvbmZpZyBWRklPX0dST1VQXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zMS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gZ3JvdXAgL2Rldi92ZmlvLyRncm91cF9pZFwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTM5LVxuZHJpdmVycy92ZmlvL0tjb25maWc6NDA6Y29uZmlnIFZGSU9fQ09OVEFJTkVSXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWc9NTI9aWYgVkZJT19DT05UQUlORVJcbmRyaXZlcnMvdmZpby9LY29uZmlnOjUzOmNvbmZpZyBWRklPX0lPTU1VX1RZUEUxXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01NC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctNTYtXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Nzpjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU4LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz02MT1lbmRpZlxuZHJpdmVycy92ZmlvL0tjb25maWctNjItXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2Mzpjb25maWcgVkZJT19OT0lPTU1VXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02NC1cdGJvb2wgXCYjMzQ7VkZJTyBOby1JT01NVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy92ZmlvL0tjb25maWctNzctXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo3ODpjb25maWcgVkZJT19WSVJRRkRcbmRyaXZlcnMvdmZpby9LY29uZmlnLTc5LVx0Ym9vbFxuLS1cbmRyaXZlcnMvdmZpby9LY29uZmlnLTgyLVxuZHJpdmVycy92ZmlvL0tjb25maWc6ODM6Y29uZmlnIFZGSU9fREVCVUdGU1xuZHJpdmVycy92ZmlvL0tjb25maWctODQtXHRib29sIFwmIzM0O0V4cG9ydCBWRklPIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDQyCgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQQ0kgYW5kIFZGSU8gSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBpbnRlZ3JhdGluZyBzb21lIGNydWNpYWwgdXBkYXRlcy4gRmlyc3QsIEkmIzM5O20gYWRkaW5nIGBQQ0lgLCBgVkZJT2AsIGFuZCBgVkZJT19QQ0lgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGVzZSBmZWF0dXJlcyBhcmUgcHJvcGVybHkgZW5hYmxlZCBpbiB0aGUgc3lzdGVtLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IGEgY3JpdGljYWwgZGV0YWlsOiBpcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBleHBvcnRlZD8gWWVwLCBsb29rcyBnb29kLiBUaGlzIGlzIGEga2V5IGZ1bmN0aW9uLiBUaGVzZSBjaGFuZ2VzIHNlZW0gZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLgoKVGhlIGxvZ2ljIGJlaGluZCB0aGVzZSBjaGFuZ2VzIGlzIHNvdW5kLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgdGhlbiBpdCBtb2RpZmllcyB0aG9zZSBQQ0kgcmVzZXQgZnVuY3Rpb25zIHNvIHRoYXQgd2UgYXZvaWQgdGhlIHNjZW5hcmlvIG9mIHJlc2V0dGluZyBTUi1JT1YgUGh5c2ljYWwgRnVuY3Rpb25zIChQRnMpIHdoZW4gdGhlaXIgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykgYXJlIGFjdGl2ZWx5IGluIHVzZS4gSXQgYWxzbyBtYWtlcyBzdXJlIHRoZSBWRklPIFBDSSBjb3JlIGlzIHVwZGF0ZWQgdG8gbGV2ZXJhZ2UgdGhlc2UgbmV3IGNoZWNrcy4gVGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBwY2lfcmVzZXRfYnVzX2NvbmRgLCBhcmUgcmVhY2hhYmxlIGNvcmUgUENJIGFuZCBWRklPIGZ1bmN0aW9ucywgYW5kIHRoZXkgYXJlIGNyaXRpY2FsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KCkkmIzM5O3ZlIGdvdCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMgaW4gbWluZDoKCiogICBUaGUgY3JpdGljYWwgZnVuY3Rpb24sIGBwY2lfcmVzZXRfYnVzX2NvbmRgLgoqICAgUENJIHJlc2V0IGZ1bmN0aW9uczogYHBjaV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYCwgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gLCBhbmQgYHBjaV9yZXNldF9idXNgIHdoaWNoIHdpbGwgbmVlZCB0aGUgYHBjaV9yZXNldF9idXNfY29uZGAuCiogICBBbmQgZmluYWxseSB0aGUgVkZJTyBmdW5jdGlvbnMgd2hpY2ggbXVzdCBiZSBjb25zaWRlcmVkOiBgdmZpb19wY2lfY29yZV9pb2N0bGAsIGB2ZmlvX3BjaV9jb3JlX2Rpc2FibGVgLCBhbmQgYHZmaW9fcGNpX2NvcmVfZW5hYmxlYC4KCkkmIzM5O20gc2V0dGluZyB1cCB0aGVzZSBjb25maWd1cmF0aW9uczogYFBDSWAsIGBWRklPYCwgYW5kIGBWRklPX1BDSWAuCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuIEV2ZXJ5dGhpbmcgbG9va3MgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSSYjMzQ7LAogICAgJiMzNDtWRklPJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGNpX3Jlc2V0X2J1c19jb25kJiMzNDssCiAgICAmIzM0O3BjaV9yZXNldF9mdW5jdGlvbiYjMzQ7LAogICAgJiMzNDtwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkJiMzNDssCiAgICAmIzM0O3BjaV90cnlfcmVzZXRfZnVuY3Rpb24mIzM0OywKICAgICYjMzQ7cGNpX3Jlc2V0X2J1cyYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2lvY3RsJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2VuYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGBwY2lfcmVzZXRfYnVzX2NvbmRgIGFuZCBtb2RpZmllcyBQQ0kgcmVzZXQgZnVuY3Rpb25zIHRvIHByZXZlbnQgcmVzZXR0aW5nIFNSLUlPViBQRnMgd2l0aCBhY3RpdmUgVkZzLiBJdCBhbHNvIHVwZGF0ZXMgVkZJTyBQQ0kgY29yZSB0byB1c2UgdGhlc2UgbmV3IGNoZWNrcy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIFBDSSBhbmQgVkZJTyBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UENJJiMzNDssCiAgICAmIzM0O1ZGSU8mIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwY2lfcmVzZXRfYnVzX2NvbmQmIzM0OywKICAgICYjMzQ7cGNpX3Jlc2V0X2Z1bmN0aW9uJiMzNDssCiAgICAmIzM0O3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQmIzM0OywKICAgICYjMzQ7cGNpX3RyeV9yZXNldF9mdW5jdGlvbiYjMzQ7LAogICAgJiMzNDtwY2lfcmVzZXRfYnVzJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfaW9jdGwmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9kaXNhYmxlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZW5hYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYHBjaV9yZXNldF9idXNfY29uZGAgYW5kIG1vZGlmaWVzIFBDSSByZXNldCBmdW5jdGlvbnMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBGcyB3aXRoIGFjdGl2ZSBWRnMuIEl0IGFsc28gdXBkYXRlcyBWRklPIFBDSSBjb3JlIHRvIHVzZSB0aGVzZSBuZXcgY2hlY2tzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgUENJIGFuZCBWRklPIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgZGV2aWNlIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCBQQ0kgc3Vic3lzdGVtIEFQSXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgbW9kaWZ5IGJ1ZmZlciBhbGxvY2F0aW9ucywgcGFkZGluZywgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgYHZmaW9fZGV2aWNlX2luZm9gIHN0cnVjdHVyZSBtb2RpZmllZCBpbiBgdmZpb19wY2lfaW9jdGxfZ2V0X2luZm9gIGlzIGFscmVhZHkgZnVsbHkgemVyby1pbml0aWFsaXplZCAoYHN0cnVjdCB2ZmlvX2RldmljZV9pbmZvIGluZm8gPSB7fTtgKS5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNGM4ZTAwY2M0YmFlNGZjYjgzOGQ3NzgwYTQ1OTFjMmZjMTQ4ZjY5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDA1OjI0OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCA3N2IxN2IxM2VlNjE1Li4wYjRmMTMzOTdkYTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtOTgsNiAmIzQzOzk4LDcgQEAgYm9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJcmV0dXJuIGRldi0mZ3Q7cmVzZXRfbWV0aG9kc1swXSAhPSAwOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9zdXBwb3J0ZWQpOwogCiAjaWZkZWYgQ09ORklHX1BDSV9ET01BSU5TCiBpbnQgcGNpX2RvbWFpbnNfc3VwcG9ydGVkID0gMTsKQEAgLTUyMjIsMTEgJiM0Mzs1MjIzLDIyIEBAIGludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldikKIAkJcGNpX2Rldl9sb2NrKGJyaWRnZSk7CiAKIAlwY2lfZGV2X2xvY2soZGV2KTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmVzZXQgb2YgYW4gU1ItSU9WIFBGIG5lY2Vzc2FyaWx5IHJlc2V0cyBhbnkgYWN0aXZlIFZGcy4gIFN1Y2ggcmVzZXRzIGFyZQomIzQzOwkgKiBiZXlvbmQgdGhlIHNjb3BlIGFkdmVydGlzZWQgZm9yIHBjaV9yZXNldF9mdW5jdGlvbigpIGFuZCB2YXJpYW50cywgcmVmdXNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBjaV9udW1fdmYoZGV2KSAmZ3Q7IDApIHsKJiM0MzsJCXJjID0gLUVOT1RUWTsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiAJcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKGRldik7CiAKIAlyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpOwogCiAJcGNpX2Rldl9yZXN0b3JlKGRldik7CiYjNDM7dW5sb2NrOgogCXBjaV9kZXZfdW5sb2NrKGRldik7CiAKIAlpZiAoYnJpZGdlKQpAQCAtNTI2NCw2ICYjNDM7NTI3Niw5IEBAIGludCBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAJaWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKGRldikpCiAJCXJldHVybiAtRU5PVFRZOwogCiYjNDM7CWlmIChwY2lfbnVtX3ZmKGRldikgJmd0OyAwKQomIzQzOwkJcmV0dXJuIC1FTk9UVFk7CiYjNDM7CiAJcGNpX2Rldl9zYXZlX2FuZF9kaXNhYmxlKGRldik7CiAKIAlyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpOwpAQCAtNTI5MCw2ICYjNDM7NTMwNSwxMSBAQCBpbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogCWlmICghcGNpX2Rldl90cnlsb2NrKGRldikpCiAJCXJldHVybiAtRUFHQUlOOwogCiYjNDM7CWlmIChwY2lfbnVtX3ZmKGRldikgJmd0OyAwKSB7CiYjNDM7CQlwY2lfZGV2X3VubG9jayhkZXYpOwomIzQzOwkJcmV0dXJuIC1FTk9UVFk7CiYjNDM7CX0KJiM0MzsKIAlwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTsKIAlyYyA9IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChkZXYpOwogCXBjaV9kZXZfcmVzdG9yZShkZXYpOwpAQCAtNTU0OCw5ICYjNDM7NTU2OCwzNiBAQCBpbnQgcGNpX3Byb2JlX3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KQogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X3Nsb3QpOwogCiYjNDM7LyogQ2FsbCBAY2Igb24gZXZlcnkgZGV2aWNlIGEgc2xvdCBvciBidXMgcmVzZXQgYWZmZWN0cywgc3RvcHBpbmcgb24gZXJyb3IuICovCiYjNDM7c3RhdGljIGludCBwY2lfd2Fsa19yZXNldF9jaGVjayhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsCiYjNDM7CQkJCWludCAoKmNiKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSwKJiM0MzsJCQkJdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpkZXY7CiYjNDM7CWludCByYzsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZhbXA7YnVzLSZndDtkZXZpY2VzLCBidXNfbGlzdCkgewomIzQzOwkJaWYgKHNsb3QgJmFtcDsmYW1wOyAoIWRldi0mZ3Q7c2xvdCB8fCBkZXYtJmd0O3Nsb3QgIT0gc2xvdCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlyYyA9IGNiKGRldiwgZGF0YSk7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJaWYgKGRldi0mZ3Q7c3Vib3JkaW5hdGUpIHsKJiM0MzsJCQlyYyA9IHBjaV93YWxrX3Jlc2V0X2NoZWNrKGRldi0mZ3Q7c3Vib3JkaW5hdGUsCiYjNDM7CQkJCQkJICBOVUxMLCBjYiwgZGF0YSk7CiYjNDM7CQkJaWYgKHJjKQomIzQzOwkJCQlyZXR1cm4gcmM7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBwY2lfdHJ5X3Jlc2V0X3Nsb3QgLSBUcnkgdG8gcmVzZXQgYSBQQ0kgc2xvdAogICogQHNsb3Q6IFBDSSBzbG90IHRvIHJlc2V0CiYjNDM7ICogQGNoZWNrOiBvcHRpb25hbCBwZXItZGV2aWNlIGNhbGxiYWNrIHRoYXQgY2FuIGFib3J0IHRoZSByZXNldAomIzQzOyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgZm9yIEBjaGVjawogICoKICAqIEEgUENJIGJ1cyBtYXkgaG9zdCBtdWx0aXBsZSBzbG90cywgZWFjaCBzbG90IG1heSBzdXBwb3J0IGEgcmVzZXQgbWVjaGFuaXNtCiAgKiBpbmRlcGVuZGVudCBvZiBvdGhlciBzbG90cy4gIEZvciBpbnN0YW5jZSwgc29tZSBzbG90cyBtYXkgc3VwcG9ydCBzbG90IHBvd2VyCkBAIC01NTYzLDcgJiM0Mzs1NjEwLDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X3Nsb3QpOwogICoKICAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBzbG90IGNhbm5vdCBiZSBsb2NrZWQKICAqLwotc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KQomIzQzO3N0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCwKJiM0MzsJCQkgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksCiYjNDM7CQkJICAgICAgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmM7CiAKQEAgLTU1NzIsMTAgJiM0Mzs1NjIxLDE0IEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCkKIAkJcmV0dXJuIHJjOwogCiAJaWYgKHBjaV9zbG90X3RyeWxvY2soc2xvdCkpIHsKLQkJcGNpX3Nsb3Rfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoc2xvdCk7Ci0JCW1pZ2h0X3NsZWVwKCk7Ci0JCXJjID0gcGNpX3Jlc2V0X2hvdHBsdWdfc2xvdChzbG90LSZndDtob3RwbHVnLCBQQ0lfUkVTRVRfRE9fUkVTRVQpOwotCQlwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTsKJiM0MzsJCXJjID0gY2hlY2sgPyBwY2lfd2Fsa19yZXNldF9jaGVjayhzbG90LSZndDtidXMsIHNsb3QsIGNoZWNrLCBkYXRhKSA6IDA7CiYjNDM7CQlpZiAoIXJjKSB7CiYjNDM7CQkJcGNpX3Nsb3Rfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoc2xvdCk7CiYjNDM7CQkJbWlnaHRfc2xlZXAoKTsKJiM0MzsJCQlyYyA9IHBjaV9yZXNldF9ob3RwbHVnX3Nsb3Qoc2xvdC0mZ3Q7aG90cGx1ZywKJiM0MzsJCQkJCQkgICAgUENJX1JFU0VUX0RPX1JFU0VUKTsKJiM0MzsJCQlwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTsKJiM0MzsJCX0KIAkJcGNpX3Nsb3RfdW5sb2NrKHNsb3QpOwogCX0gZWxzZQogCQlyYyA9IC1FQUdBSU47CkBAIC01NjA3LDEwICYjNDM7NTY2MCwxNCBAQCBzdGF0aWMgaW50IHBjaV9idXNfcmVzZXQoc3RydWN0IHBjaV9idXMgKmJ1cywgYm9vbCBwcm9iZSkKIC8qKgogICogcGNpX3RyeV9yZXNldF9idXMgLSBUcnkgdG8gcmVzZXQgYSBQQ0kgYnVzCiAgKiBAYnVzOiB0b3AgbGV2ZWwgUENJIGJ1cyB0byByZXNldAomIzQzOyAqIEBjaGVjazogb3B0aW9uYWwgcGVyLWRldmljZSBjYWxsYmFjayB0aGF0IGNhbiBhYm9ydCB0aGUgcmVzZXQKJiM0MzsgKiBAZGF0YTogb3BhcXVlIGFyZ3VtZW50IGZvciBAY2hlY2sKICAqCiAgKiBTYW1lIGFzIGFib3ZlIGV4Y2VwdCByZXR1cm4gLUVBR0FJTiBpZiB0aGUgYnVzIGNhbm5vdCBiZSBsb2NrZWQKICAqLwotc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQomIzQzO3N0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cywKJiM0MzsJCQkgICAgIGludCAoKmNoZWNrKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSwKJiM0MzsJCQkgICAgIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJjOwogCkBAIC01NjE5LDEwICYjNDM7NTY3NiwxMyBAQCBzdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCiAJCXJldHVybiByYzsKIAogCWlmIChwY2lfYnVzX3RyeWxvY2soYnVzKSkgewotCQlwY2lfYnVzX3NhdmVfYW5kX2Rpc2FibGVfbG9ja2VkKGJ1cyk7Ci0JCW1pZ2h0X3NsZWVwKCk7Ci0JCXJjID0gcGNpX2JyaWRnZV9zZWNvbmRhcnlfYnVzX3Jlc2V0KGJ1cy0mZ3Q7c2VsZik7Ci0JCXBjaV9idXNfcmVzdG9yZV9sb2NrZWQoYnVzKTsKJiM0MzsJCXJjID0gY2hlY2sgPyBwY2lfd2Fsa19yZXNldF9jaGVjayhidXMsIE5VTEwsIGNoZWNrLCBkYXRhKSA6IDA7CiYjNDM7CQlpZiAoIXJjKSB7CiYjNDM7CQkJcGNpX2J1c19zYXZlX2FuZF9kaXNhYmxlX2xvY2tlZChidXMpOwomIzQzOwkJCW1pZ2h0X3NsZWVwKCk7CiYjNDM7CQkJcmMgPSBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoYnVzLSZndDtzZWxmKTsKJiM0MzsJCQlwY2lfYnVzX3Jlc3RvcmVfbG9ja2VkKGJ1cyk7CiYjNDM7CQl9CiAJCXBjaV9idXNfdW5sb2NrKGJ1cyk7CiAJfSBlbHNlCiAJCXJjID0gLUVBR0FJTjsKQEAgLTU2NjEsNyAmIzQzOzU3MjEsNyBAQCBzdGF0aWMgaW50IHBjaV9yZXNldF9icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgYm9vbCByZXN0b3JlKQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzbG90LCAmYW1wO2J1cy0mZ3Q7c2xvdHMsIGxpc3QpIHsKIAkJaWYgKHJlc3RvcmUpCi0JCQlyZXQgPSBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc2xvdCk7CiYjNDM7CQkJcmV0ID0gcGNpX3RyeV9yZXNldF9zbG90KHNsb3QsIE5VTEwsIE5VTEwpOwogCQllbHNlCiAJCQlyZXQgPSBwY2lfc2xvdF9yZXNldChzbG90LCBQQ0lfUkVTRVRfRE9fUkVTRVQpOwogCkBAIC01Njc1LDcgJiM0Mzs1NzM1LDcgQEAgc3RhdGljIGludCBwY2lfcmVzZXRfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsIGJvb2wgcmVzdG9yZSkKIAltdXRleF91bmxvY2soJmFtcDtwY2lfc2xvdF9tdXRleCk7CiAKIAlpZiAocmVzdG9yZSkKLQkJcmV0dXJuIHBjaV90cnlfcmVzZXRfYnVzKGJ1cyk7CiYjNDM7CQlyZXR1cm4gcGNpX3RyeV9yZXNldF9idXMoYnVzLCBOVUxMLCBOVUxMKTsKIAlyZXR1cm4gcGNpX2J1c19yZXNldChicmlkZ2UtJmd0O3N1Ym9yZGluYXRlLCBQQ0lfUkVTRVRfRE9fUkVTRVQpOwogfQogCkBAIC01NzA1LDE2ICYjNDM7NTc2NSw0MyBAQCBpbnQgcGNpX3Byb2JlX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X2J1cyk7CiAKJiM0MzsvKioKJiM0MzsgKiBwY2lfcmVzZXRfYnVzX2NvbmQgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRoZSBzbG90IG9yIGJ1cyBjb250YWluaW5nIGEgZGV2aWNlCiYjNDM7ICogQHBkZXY6IHRvcCBsZXZlbCBQQ0kgZGV2aWNlIHRvIHJlc2V0IHZpYSBzbG90L2J1cwomIzQzOyAqIEBjaGVjazogb3B0aW9uYWwgY2FsbGJhY2sgaW52b2tlZCBvbiBlYWNoIGFmZmVjdGVkIGRldmljZSBiZWZvcmUgdGhlIHJlc2V0CiYjNDM7ICogQGRhdGE6IG9wYXF1ZSBhcmd1bWVudCBwYXNzZWQgdG8gQGNoZWNrCiYjNDM7ICoKJiM0MzsgKiBSZXNldCB0aGUgc2xvdCBvciBidXMgY29udGFpbmluZyBAcGRldi4gIE9uY2UgdGhlIGVudGlyZSBwaHlzaWNhbCBidXMvc2xvdAomIzQzOyAqIGhpZXJhcmNoeSBpcyBsb2NrZWQsIEBjaGVjayAoaWYgbm90IE5VTEwpIGlzIGNhbGxlZCBvbiBlYWNoIG9mIHRob3NlIGxvY2tlZAomIzQzOyAqIGRldmljZXMuICBBIG5vbnplcm8gcmV0dXJuIGFib3J0cyB0aGUgcmVzZXQgYW5kIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIsCiYjNDM7ICogb3RoZXJ3aXNlIHRoZSByZXNldCBwcm9jZWVkcy4KJiM0MzsgKgomIzQzOyAqIE5CLiBAY2hlY2sgcnVucyB3aXRoIHRoZSBmdWxsIHNldCBvZiBkZXZpY2VfbG9ja3Mgbm90ZWQgYWJvdmUgaGVsZDsgY2FsbGJhY2tzCiYjNDM7ICogbXVzdCB0YWtlIHRoZXNlIGxvY2tpbmcgc2VtYW50aWNzIGludG8gYWNjb3VudC4gIFVzZSBOVUxMIHRvIHBlcmZvcm0gYW4KJiM0MzsgKiB1bmNvbmRpdGlvbmFsIHJlc2V0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9UVFkgaWYgQHBkZXYgaXMgbm90IHJlc2V0dGFibGUsIC1FQUdBSU4gaWYgdGhlCiYjNDM7ICogZGV2aWNlcyBjYW5ub3QgYmUgbG9ja2VkLCBvciB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgQGNoZWNrLgomIzQzOyAqLwomIzQzO2ludCBwY2lfcmVzZXRfYnVzX2NvbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiYjNDM7CQkgICAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLAomIzQzOwkJICAgICAgIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlyZXR1cm4gIXBjaV9wcm9iZV9yZXNldF9zbG90KHBkZXYtJmd0O3Nsb3QpID8KJiM0MzsJCXBjaV90cnlfcmVzZXRfc2xvdChwZGV2LSZndDtzbG90LCBjaGVjaywgZGF0YSkgOgomIzQzOwkJcGNpX3RyeV9yZXNldF9idXMocGRldi0mZ3Q7YnVzLCBjaGVjaywgZGF0YSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9idXNfY29uZCk7CiYjNDM7CiAvKioKICAqIHBjaV9yZXNldF9idXMgLSBUcnkgdG8gcmVzZXQgYSBQQ0kgYnVzCiAgKiBAcGRldjogdG9wIGxldmVsIFBDSSBkZXZpY2UgdG8gcmVzZXQgdmlhIHNsb3QvYnVzCiAgKgotICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIGJ1cyBjYW5ub3QgYmUgbG9ja2VkCiYjNDM7ICogU2FtZSBhcyBhYm92ZSB3aXRob3V0IHRoZSBjb25kaXRpb25hbCBjaGVjay4KICAqLwogaW50IHBjaV9yZXNldF9idXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JcmV0dXJuICghcGNpX3Byb2JlX3Jlc2V0X3Nsb3QocGRldi0mZ3Q7c2xvdCkpID8KLQkgICAgcGNpX3RyeV9yZXNldF9zbG90KHBkZXYtJmd0O3Nsb3QpIDogcGNpX3RyeV9yZXNldF9idXMocGRldi0mZ3Q7YnVzKTsKJiM0MzsJcmV0dXJuIHBjaV9yZXNldF9idXNfY29uZChwZGV2LCBOVUxMLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9idXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oCmluZGV4IDQ0NjllMWE3N2YzYzEuLjQxNmZkNmI3NGFiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3BjaS5oCkBAIC0yMzAsNyAmIzQzOzIzMCw2IEBAIGVudW0gcGNpX21tYXBfYXBpIHsKIGludCBwY2lfbW1hcF9maXRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgcmVzbm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1haSwKIAkJICBlbnVtIHBjaV9tbWFwX2FwaSBtbWFwX2FwaSk7CiAKLWJvb2wgcGNpX3Jlc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgcGNpX2luaXRfcmVzZXRfbWV0aG9kcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX2J1c19lcnJvcl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKaW5kZXggM2YxMWE5NjI0YjljMC4uOGU0MjM0MmQ1NmQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKQEAgLTYwOSw3ICYjNDM7NjA5LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAlpZiAocmV0ID09IC1FQUdBSU4pCiAJCWdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlOwogCi0JdmRldi0mZ3Q7cmVzZXRfd29ya3MgPSAhcmV0OwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXZkZXYtJmd0O3BjaV9zYXZlZF9zdGF0ZSA9IHBjaV9zdG9yZV9zYXZlZF9zdGF0ZShwZGV2KTsKIAlpZiAoIXZkZXYtJmd0O3BjaV9zYXZlZF9zdGF0ZSkKQEAgLTc2Niw3ICYjNDM7NzY1LDcgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCWlmIChwY2lfbG9hZF9hbmRfZnJlZV9zYXZlZF9zdGF0ZShwZGV2LCAmYW1wO3ZkZXYtJmd0O3BjaV9zYXZlZF9zdGF0ZSkpIHsKIAkJcGNpX2luZm8ocGRldiwgJiMzNDslczogQ291bGRuJiMzOTt0IHJlbG9hZCBzYXZlZCBzdGF0ZVxuJiMzNDssIF9fZnVuY19fKTsKIAotCQlpZiAoIXZkZXYtJmd0O3Jlc2V0X3dvcmtzKQomIzQzOwkJaWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKHBkZXYpKQogCQkJZ290byBvdXQ7CiAKIAkJcGNpX3NhdmVfc3RhdGUocGRldik7CkBAIC03ODUsMTIgJiM0Mzs3ODQsMTQgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCSAqIFdlIGNhbiBub3QgdXNlIHRoZSAmIzM0O3RyeSYjMzQ7IHJlc2V0IGludGVyZmFjZSBoZXJlLCB3aGljaCB3aWxsCiAJICogb3ZlcndyaXRlIHRoZSBwcmV2aW91c2x5IHJlc3RvcmVkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCiAJICovCi0JaWYgKHZkZXYtJmd0O3Jlc2V0X3dvcmtzKSB7CiYjNDM7CWlmIChwY2lfcmVzZXRfc3VwcG9ydGVkKHBkZXYpKSB7CiAJCWJyaWRnZSA9IHBjaV91cHN0cmVhbV9icmlkZ2UocGRldik7CiAJCWlmIChicmlkZ2UgJmFtcDsmYW1wOyAhcGNpX2Rldl90cnlsb2NrKGJyaWRnZSkpCiAJCQlnb3RvIG91dF9yZXN0b3JlX3N0YXRlOwogCQlpZiAocGNpX2Rldl90cnlsb2NrKHBkZXYpKSB7Ci0JCQlpZiAoIV9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KSkKJiM0MzsJCQkvKiBFbmZvcmNlIGZ1bmN0aW9uIHNjb3BlIHVuZGVyIGxvY2sgZm9yIFNSLUlPViBQRnMgKi8KJiM0MzsJCQlpZiAoIXBjaV9udW1fdmYocGRldikgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHBkZXYpKQogCQkJCXZkZXYtJmd0O25lZWRzX3Jlc2V0ID0gZmFsc2U7CiAJCQlwY2lfZGV2X3VubG9jayhwZGV2KTsKIAkJfQpAQCAtODkyLDYgJiM0Mzs4OTMsMTcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3VudF9kZXZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKQogCXJldHVybiAwOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQQ0kgd2FsayBjYWxsYmFjayB0byBjaGVjayBmb3IgU1ItSU9WIFBGcyB3aXRoIGFjdGl2ZSBWRnMuICBWRnMgYXJlIG5vdAomIzQzOyAqIGVudW1lcmF0ZWQgd2hlbiBkZXRlcm1pbmluZyBhZmZlY3RlZCBkZXZpY2VzIGFuZCBtYXkgYmUgb3duZWQgYnkgc2VwYXJhdGUKJiM0MzsgKiB1c2Vyc3BhY2UgcHJvY2Vzc2VzIGZyb20gdGhlIFBGLiAgSXQmIzM5O3MgdGhlcmVmb3JlIHRoZSB1c2VyJiMzOTtzIHJlc3BvbnNpYmlsaXR5CiYjNDM7ICogdG8gdGVhcmRvd24gVkZzIGZvciBhbnkgYWZmZWN0ZWQgUEYgYmVmb3JlIHBlcmZvcm1pbmcgYSBob3QtcmVzZXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXJldHVybiBwY2lfbnVtX3ZmKHBkZXYpID8gLUVCVVNZIDogMDsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgdmZpb19wY2lfZmlsbF9pbmZvIHsKIAlzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXY7CiAJc3RydWN0IHZmaW9fcGNpX2RlcGVuZGVudF9kZXZpY2UgKmRldmljZXM7CkBAIC0xMDg1LDcgJiM0MzsxMDk3LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mbyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiAKIAlpbmZvLmZsYWdzID0gVkZJT19ERVZJQ0VfRkxBR1NfUENJOwogCi0JaWYgKHZkZXYtJmd0O3Jlc2V0X3dvcmtzKQomIzQzOwlpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2KSkKIAkJaW5mby5mbGFncyB8PSBWRklPX0RFVklDRV9GTEFHU19SRVNFVDsKIAogCWluZm8ubnVtX3JlZ2lvbnMgPSBWRklPX1BDSV9OVU1fUkVHSU9OUyAmIzQzOyB2ZGV2LSZndDtudW1fcmVnaW9uczsKQEAgLTEzMTcsNyAmIzQzOzEzMjksNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCF2ZGV2LSZndDtyZXNldF93b3JrcykKJiM0MzsJaWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKHZkZXYtJmd0O3BkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTsKQEAgLTI1OTYsNyAmIzQzOzI2MDgsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2ZGV2LCAmYW1wO2Rldl9zZXQtJmd0O2RldmljZV9saXN0LCB2ZGV2LmRldl9zZXRfbGlzdCkKIAkJdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7CiAKLQlyZXQgPSBwY2lfcmVzZXRfYnVzKHBkZXYpOwomIzQzOwlyZXQgPSBwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgdmZpb19wY2lfZGV2X2hhc192ZnMsIE5VTEwpOwogCiAJdmRldiA9IGxpc3RfbGFzdF9lbnRyeSgmYW1wO2Rldl9zZXQtJmd0O2RldmljZV9saXN0LAogCQkJICAgICAgIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSwgdmRldi5kZXZfc2V0X2xpc3QpOwpAQCAtMjY1OSw3ICYjNDM7MjY3MSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpCiAJaWYgKHZmaW9fcGNpX2Rldl9zZXRfcG1fcnVudGltZV9nZXQoZGV2X3NldCkpCiAJCXJldHVybjsKIAotCWlmICghcGNpX3Jlc2V0X2J1cyhwZGV2KSkKJiM0MzsJaWYgKCFwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgdmZpb19wY2lfZGV2X2hhc192ZnMsIE5VTEwpKQogCQlyZXNldF9kb25lID0gdHJ1ZTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCAmYW1wO2Rldl9zZXQtJmd0O2RldmljZV9saXN0LCB2ZGV2LmRldl9zZXRfbGlzdCkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggNjRiMzA4YjZlNjFjMS4uNGRlMjFlNmFjNTM4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0xNDc0LDEyICYjNDM7MTQ3NCwxNiBAQCB2b2lkIHBjaWVfcHJpbnRfbGlua19zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpZV9yZXNldF9mbHIoc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBwcm9iZSk7CiBpbnQgcGNpZV9mbHIoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwomIzQzO2Jvb2wgcGNpX3Jlc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV9wcm9iZV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCk7CiBpbnQgcGNpX3Byb2JlX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIGludCBwY2lfcmVzZXRfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwomIzQzO2ludCBwY2lfcmVzZXRfYnVzX2NvbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiYjNDM7CQkgICAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLAomIzQzOwkJICAgICAgIHZvaWQgKmRhdGEpOwogdm9pZCBwY2lfcmVzZXRfc2Vjb25kYXJ5X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgcGNpYmlvc19yZXNldF9zZWNvbmRhcnlfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBwY2lfdXBkYXRlX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCmluZGV4IDlhMTY3NGMxNTJhYTIuLjZmYjU5OWVjMjkxOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCkBAIC0xMjEsNyAmIzQzOzEyMSw2IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7CiAJLyogRmxhZ3Mgb25seSBtb2RpZmllZCBvbiBzZXR1cC9yZWxlYXNlIC0gYml0ZmllbGQgb2sgKi8KIAlib29sCQkJaGFzX2R5bl9tc2l4OjE7CiAJYm9vbAkJCXBjaV8yXzM6MTsKLQlib29sCQkJcmVzZXRfd29ya3M6MTsKIAlib29sCQkJZXh0ZW5kZWRfY2FwczoxOwogCWJvb2wJCQloYXNfdmdhOjE7CiAJYm9vbAkJCW5vaW50eDoxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKaW5kZXggNWRlNjE4YTNhNWVlZS4uODYwMzk1OWYxNzM1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCkBAIC03NzIsNiAmIzQzOzc3Miw5IEBAIHN0cnVjdCB2ZmlvX3BjaV9ob3RfcmVzZXRfaW5mbyB7CiAgKiBNaXhlZCB1c2FnZSBvZiBsZWdhY3kgZ3JvdXBzIGFuZCBjZGV2cyBhY3Jvc3MgdGhlIHNldCBvZiBhZmZlY3RlZAogICogZGV2aWNlcyBpcyBub3Qgc3VwcG9ydGVkLgogICoKJiM0MzsgKiBIb3QgcmVzZXQgb2YgU1ItSU9WIFBGcyB3aXRoIGFjdGl2ZSBWRnMgaXMgbm90IHN1cHBvcnRlZCwgU1ItSU9WCiYjNDM7ICogc2hvdWxkIGZpcnN0IGJlIGRpc2FibGVkIG9uIGFueSBhZmZlY3RlZCBQRi4KJiM0MzsgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgogICovCiBzdHJ1Y3QgdmZpb19wY2lfaG90X3Jlc2V0IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxODcKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQQ0kgUmVzZXQgUGF0Y2ggZm9yIFNSLUlPViBQRnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIGFib3V0IHRpZ2h0ZW5pbmcgdXAgdGhlIFBDSSByZXNldCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgd2hlbiB3ZSBoYXZlIFNpbmdsZSBSb290IEkvTyBWaXJ0dWFsaXphdGlvbiAoU1ItSU9WKSBQaHlzaWNhbCBGdW5jdGlvbnMgKFBGcykgd2l0aCBhY3RpdmUgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykuIFRoZSBwcmltYXJ5IGdvYWwgc2VlbXMgdG8gYmUgcHJldmVudGluZyBhY2NpZGVudGFsIHJlc2V0cyBvZiB0aGUgUEYgaWYgVkZzIGFyZSBpbiB1c2Ug4oCTIGEgY3JpdGljYWwgc2FmZWd1YXJkLgoKVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgcGNpX251bV92ZihkZXYpICZndDsgMGAgY2hlY2tzLiBUaGlzIHNpbXBsZSBjaGVjayBpcyBhZGRlZCB0byBibG9jayBQRiByZXNldHMgd2hlbiBWRnMgYXJlIHByZXNlbnQuIFNtYXJ0LiBJdCYjMzk7cyBhbHNvIG1ha2luZyB1c2Ugb2YgYHBjaV9yZXNldF9idXNfY29uZGAsIHdoaWNoIGxldHMgdXMgaW5qZWN0IGEgY2FsbGJhY2sgZm9yIGRldmljZSBzdGF0dXMgY2hlY2tzICpiZWZvcmUqIGEgYnVzIG9yIHNsb3QgcmVzZXQgaXMgaW5pdGlhdGVkLiBUaGF0JiMzOTtzIGEgcG93ZXJmdWwgdG9vbCwgcHJvdmlkaW5nIG1vcmUgZ3JhbnVsYXIgY29udHJvbC4KCkkgc2VlIHRoYXQgYHZmaW9fcGNpX2NvcmUuY2AgaGFzIGJlZW4gcmVmYWN0b3JlZC4gVGhlIGB2ZGV2LSZndDtyZXNldF93b3Jrc2AgZmxhZyBpcyBnb25lLCByZXBsYWNlZCB3aXRoIGBwY2lfcmVzZXRfc3VwcG9ydGVkKHBkZXYpYC4gRnVuY3Rpb24gY2FsbHMgYXJlIGdlbmVyYWxseSBwcmVmZXJyZWQgb3ZlciBmbGFncyBmb3IgdGhpcyBraW5kIG9mIGxvZ2ljLiBJbiB0aGUgY29udGV4dCBvZiBgdmZpb19wY2lfY29yZS5jYCwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhlIHJlbW92YWwgb2YgdGhhdCBmbGFnIGFmZmVjdHMgZXhpc3RpbmcgbG9naWM7IHRoaXMgd291bGQgYmUgbW9zdCBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aGUgYFZGSU9fREVWSUNFX0dFVF9JTkZPYCBpb2N0bC4KClRoZSBhZGRpdGlvbiBvZiB0aGUgYHZmaW9fcGNpX2Rldl9oYXNfdmZzYCBjYWxsYmFjaywgcmV0dXJuaW5nIGAtRUJVU1lgIHdoZW4gVkZzIGFyZSBhY3RpdmUsIGlzIGNsZXZlci4gSXQmIzM5O3MgZWxlZ2FudGx5IGludGVncmF0ZWQgaW50byBgcGNpX3Jlc2V0X2J1c19jb25kYCB3aXRoaW4gYHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0YCBhbmQgYHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0YC4gVGhpcyBlbnN1cmVzIHRoYXQgZXZlbiBhdHRlbXB0cyB0byByZXNldCB0aHJvdWdoIGhvdCByZXNldCBvciB0cnkgcmVzZXQgd2lsbCByZXNwZWN0IHRoZSBWRiBwcmVzZW5jZS4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjaGFuZ2VzIGRvbiYjMzk7dCBvcGVuIHVwIGFueSB2dWxuZXJhYmlsaXRpZXMuIFdoaWxlIHRoZSBwYXRjaCBtb3N0bHkgbW9kaWZpZXMgY29udHJvbCBmbG93LCByZXR1cm5pbmcgYC1FTk9UVFlgIG9yIGAtRUJVU1lgLCBhbmQgc3dhcHMgYSBmbGFnIGZvciBhIGZ1bmN0aW9uIGNhbGwsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY2hhbmdlIGZyb20gYHJlc2V0X3dvcmtzYCB0byBgcGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KWAg4oCTIHRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQgdG8gZXZhbHVhdGUsIHBhcnRpY3VsYXJseSB0aGUgY29udGV4dCBhcm91bmQgYFZGSU9fREVWSUNFX0dFVF9JTkZPYCBhbmQgdGhlIHNldHRpbmcgb2YgYGluZm8uZmxhZ3NgLgoKT2theSwgc28gbG9va2luZyBhdCB0aGUgY29kZSBhcm91bmQgYHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvYCwgaXQgbG9va3MgbGlrZSBgaW5mb2AgaXMgYSBsb2NhbCB2YXJpYWJsZS4gVGhlIHBhdGNoIGlzIHNpbXBseSBjaGFuZ2luZyB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYFZGSU9fREVWSUNFX0ZMQUdTX1JFU0VUYCB0aHJvdWdoIHRoZSB1c2Ugb2YgYHBjaV9yZXNldF9zdXBwb3J0ZWQodmRldi0mZ3Q7cGRldilgLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgYGluZm9gIGlzIGZ1bGx5IGluaXRpYWxpemVkLCBhbmQgdGhhdCBleGlzdGluZyBjb2RlIHBhdGggaXMgY292ZXJlZCBieSBleGlzdGluZyBjaGVja3MuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AgYXJvdW5kIGxpbmUgMTA4NSB0byBtYWtlIHN1cmUuIExldCBtZSB1c2UgYGRlZmF1bHRfYXBpOnJlYWQtZmlsZWAgdG8gZG8gYSBxdWljayBjaGVjay4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0fVxuMTA4MTpcdFxuMTA4MjpcdHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfZ2V0X2luZm8oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuMTA4MzpcdFx0XHRcdFx0ICAgc3RydWN0IHZmaW9fZGV2aWNlX2luZm8gX191c2VyICphcmcpXG4xMDg0Olx0e1xuMTA4NTpcdFx0dW5zaWduZWQgbG9uZyBtaW5zeiA9IG9mZnNldG9mZW5kKHN0cnVjdCB2ZmlvX2RldmljZV9pbmZvLCBudW1faXJxcyk7XG4xMDg2Olx0XHRzdHJ1Y3QgdmZpb19kZXZpY2VfaW5mbyBpbmZvID0ge307XG4xMDg3Olx0XHRzdHJ1Y3QgdmZpb19pbmZvX2NhcCBjYXBzID0geyAuYnVmID0gTlVMTCwgLnNpemUgPSAwIH07XG4xMDg4Olx0XHRpbnQgcmV0O1xuMTA4OTpcdFxuMTA5MDpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmluZm8sIGFyZywgbWluc3opKVxuMTA5MTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjEwOTI6XHRcbjEwOTM6XHRcdGlmIChpbmZvLmFyZ3N6IFx1MDAzYyBtaW5zeilcbjEwOTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMDk1Olx0XG4xMDk2Olx0XHRtaW5zeiA9IG1pbl90KHNpemVfdCwgaW5mby5hcmdzeiwgc2l6ZW9mKGluZm8pKTtcbjEwOTc6XHRcbjEwOTg6XHRcdGluZm8uZmxhZ3MgPSBWRklPX0RFVklDRV9GTEFHU19QQ0k7XG4xMDk5Olx0XG4xMTAwOlx0XHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYpKVxuMTEwMTpcdFx0XHRpbmZvLmZsYWdzIHw9IFZGSU9fREVWSUNFX0ZMQUdTX1JFU0VUO1xuMTEwMjpcdFxuMTEwMzpcdFx0aW5mby5udW1fcmVnaW9ucyA9IFZGSU9fUENJX05VTV9SRUdJT05TICYjNDM7IHZkZXYtXHUwMDNlbnVtX3JlZ2lvbnM7XG4xMTA0Olx0XHRpbmZvLm51bV9pcnFzID0gVkZJT19QQ0lfTlVNX0lSUVM7XG4xMTA1Olx0XG4xMTA2Olx0XHRyZXQgPSB2ZmlvX3BjaV9pbmZvX3pkZXZfYWRkX2NhcHModmRldiwgXHUwMDI2Y2Fwcyk7XG4xMTA3Olx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVikge1xuMTEwODpcdFx0XHRwY2lfd2Fybih2ZGV2LVx1MDAzZXBkZXYsXG4xMTA5Olx0XHRcdFx0IFwmIzM0O0ZhaWxlZCB0byBzZXR1cCB6UENJIGluZm8gY2FwYWJpbGl0aWVzXFxuXCYjMzQ7KTtcbjExMTA6XHRcdFx0cmV0dXJuIHJldDtcbjExMTE6XHRcdH1cbjExMTI6XHRcbjExMTM6XHRcdHJldCA9IHZmaW9fcGNpX2luZm9fYXRvbWljX2NhcCh2ZGV2LCBcdTAwMjZjYXBzKTtcbjExMTQ6XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU5PREVWKSB7XG4xMTE1Olx0XHRcdHBjaV93YXJuKHZkZXYtXHUwMDNlcGRldixcbjExMTY6XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIEF0b21pY09wcyBpbmZvIGNhcGFiaWxpdHlcXG5cJiMzNDspO1xuMTExNzpcdFx0XHRyZXR1cm4gcmV0O1xuMTExODpcdFx0fVxuMTExOTpcdFxuMTEyMDpcdFx0aWYgKGNhcHMuc2l6ZSkge1xuMTEyMTpcdFx0XHRpbmZvLmZsYWdzIHw9IFZGSU9fREVWSUNFX0ZMQUdTX0NBUFM7XG4xMTIyOlx0XHRcdGlmIChpbmZvLmFyZ3N6IFx1MDAzYyBzaXplb2YoaW5mbykgJiM0MzsgY2Fwcy5zaXplKSB7XG4xMTIzOlx0XHRcdFx0aW5mby5hcmdzeiA9IHNpemVvZihpbmZvKSAmIzQzOyBjYXBzLnNpemU7XG4xMTI0Olx0XHRcdH0gZWxzZSB7XG4xMTI1Olx0XHRcdFx0dmZpb19pbmZvX2NhcF9zaGlmdChcdTAwMjZjYXBzLCBzaXplb2YoaW5mbykpO1xuMTEyNjpcdFx0XHRcdGlmIChjb3B5X3RvX3VzZXIoYXJnICYjNDM7IDEsIGNhcHMuYnVmLCBjYXBzLnNpemUpKSB7XG4xMTI3Olx0XHRcdFx0XHRrZnJlZShjYXBzLmJ1Zik7XG4xMTI4Olx0XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjExMjk6XHRcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTgKCQkJCQkJCW91dHB1dDogMjkyCgkJCQkJCQl0aG91Z2h0czogNTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBDSSBSZXNldCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZnJvbSBhIHNhZmV0eSBwZXJzcGVjdGl2ZSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBgaW5mb2Agc3RydWN0IGJlaW5nIGluaXRpYWxpemVkIHRvIGB7fWAgcmlnaHQgb2ZmIHRoZSBiYXQgZW5zdXJlcyBpdCBzdGFydHMgemVyb2VkLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBtb2RpZnlpbmcgdGhlIGxvZ2ljIGFyb3VuZCBQQ0kgZGV2aWNlIHJlc2V0cywgcGFydGljdWxhcmx5IGF2b2lkaW5nIHRoZSByZXNldCBvZiBTUi1JT1YgUGh5c2ljYWwgRnVuY3Rpb25zIChQRnMpIHRoYXQgaGF2ZSBhY3RpdmUgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykuCgpUaGUgaW50cm9kdWN0aW9uIG9mIGBwY2lfcmVzZXRfYnVzX2NvbmRgIGlzIGEga2V5IGFkZGl0aW9uOyBpdCB0YWtlcyBhIGNhbGxiYWNrLCBhbGxvd2luZyBmb3IgbW9yZSBncmFudWxhciBkZXZpY2UgY2hlY2tzICpiZWZvcmUqIGEgcmVzZXQgaXMgdHJpZ2dlcmVkLiBUaGlzIGNhbGxiYWNrLCBgdmZpb19wY2lfZGV2X2hhc192ZnNgIHNwZWNpZmljYWxseSwgaXMgdXNlZCB0byBwcmV2ZW50IHRoZSByZXNldCBvZiB0aG9zZSBQRnMgd2l0aCBhY3RpdmUgVkZzLiBXZSBhcmUgYWxzbyBpbnRyb2R1Y2luZyBmdW5jdGlvbnMgdG8gYWlkIHRoZSBwcm9jZXNzIGluIGBwY2lfd2Fsa19yZXNldF9jaGVja2AsIGBwY2lfdHJ5X3Jlc2V0X3Nsb3RgLCBhbmQgYHBjaV90cnlfcmVzZXRfYnVzYCwgYXMgd2VsbCBhcyBleHBvcnRpbmcgYHBjaV9yZXNldF9zdXBwb3J0ZWRgLgoKU28sIG5vdGhpbmcganVtcHMgb3V0IGFzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2ssIGluZm8gbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbi4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHRoZSByaWdodCB0b29scyBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgbGFyZ2VseSBhYm91dCBjb250cm9sbGluZyB0aGUgZmxvdyBvZiB0aGUgcmVzZXQgcHJvY2VzcyBhbmQgbWFraW5nIHN1cmUgdGhlIHJpZ2h0IFBDSSBkZXZpY2VzIGFyZSB0YXJnZXRlZCBvciBza2lwcGVkLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhpcyBieSBleGFtaW5pbmcgYWxsIG9mIHRoZSBvdGhlciBjaGFuZ2VzOiBgdmZpb19wY2lfY29yZV9lbmFibGVgLCBgdmZpb19wY2lfY29yZV9kaXNhYmxlYCwgYHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvYCwgYHZmaW9fcGNpX2lvY3RsX3Jlc2V0YCwgYHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0YCwgYW5kIGB2ZmlvX3BjaV9kZXZfc2V0X3RyeV9yZXNldGAgYWxsIHNlZW0gdG8gYmUgbGV2ZXJhZ2luZyB0aGlzIG5ldyBjb25kaXRpb25hbCBsb2dpYy4KCkdpdmVuIHRoaXMsIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIFRoZSBwcmltYXJ5IHJpc2sgaXMgdGhlIGxvZ2ljIG9mIHdoZW4gYSByZXNldCBoYXBwZW5zLCBub3QgKmhvdyogbWVtb3J5IGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgZGV2aWNlIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCBQQ0kgc3Vic3lzdGVtIEFQSXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgbW9kaWZ5IGJ1ZmZlciBhbGxvY2F0aW9ucywgcGFkZGluZywgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgYHZmaW9fZGV2aWNlX2luZm9gIHN0cnVjdHVyZSBtb2RpZmllZCBpbiBgdmZpb19wY2lfaW9jdGxfZ2V0X2luZm9gIGlzIGFscmVhZHkgZnVsbHkgemVyby1pbml0aWFsaXplZCAoYHN0cnVjdCB2ZmlvX2RldmljZV9pbmZvIGluZm8gPSB7fTtgKS5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgZGV2aWNlIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCBQQ0kgc3Vic3lzdGVtIEFQSXMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgbW9kaWZ5IGJ1ZmZlciBhbGxvY2F0aW9ucywgcGFkZGluZywgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGUgYHZmaW9fZGV2aWNlX2luZm9gIHN0cnVjdHVyZSBtb2RpZmllZCBpbiBgdmZpb19wY2lfaW9jdGxfZ2V0X2luZm9gIGlzIGFscmVhZHkgZnVsbHkgemVyby1pbml0aWFsaXplZCAoYHN0cnVjdCB2ZmlvX2RldmljZV9pbmZvIGluZm8gPSB7fTtgKS5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjQ6NTMuNTk5ODQ2NTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzM4NTIzNjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQ0lcIixcbiAgICBcIlZGSU9cIixcbiAgICBcIlZGSU9fUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGNpX3Jlc2V0X2J1c19jb25kXCIsXG4gICAgXCJwY2lfcmVzZXRfZnVuY3Rpb25cIixcbiAgICBcInBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWRcIixcbiAgICBcInBjaV90cnlfcmVzZXRfZnVuY3Rpb25cIixcbiAgICBcInBjaV9yZXNldF9idXNcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfaW9jdGxcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZGlzYWJsZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9lbmFibGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBkZXZpY2Ugc3RhdGUgbWFuYWdlbWVudCwgYW5kIFBDSSBzdWJzeXN0ZW0gQVBJcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBtb2RpZnkgYnVmZmVyIGFsbG9jYXRpb25zLCBwYWRkaW5nLCBvciBpbml0aWFsaXphdGlvbiBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBgdmZpb19kZXZpY2VfaW5mb2Agc3RydWN0dXJlIG1vZGlmaWVkIGluIGB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mb2AgaXMgYWxyZWFkeSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChgc3RydWN0IHZmaW9fZGV2aWNlX2luZm8gaW5mbyA9IHt9O2ApLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIGxvY2tpbmcgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgbW9kaWZpZXMgUENJIHJlc2V0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IHJlc2V0dGluZyBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gSXQgYWxzbyB1cGRhdGVzIFZGSU8gUENJIGNvcmUgdG8gdXNlIHRoZXNlIG5ldyBjaGVja3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBQQ0kgYW5kIFZGSU8gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI0OjUzLjU5OTg1MjU2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ1NTM0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YzhlMDBjYzRiYWU0ZmNiODM4ZDc3ODBhNDU5MWMyZmMxNDhmNjljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDA1OjI0OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmNcXG5pbmRleCA3N2IxN2IxM2VlNjE1Li4wYjRmMTMzOTdkYTI0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jXFxuKysrIGIvZHJpdmVycy9wY2kvcGNpLmNcXG5AQCAtOTgsNiArOTgsNyBAQCBib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldilcXG4ge1xcbiBcXHRyZXR1cm4gZGV2LVxcdTAwM2VyZXNldF9tZXRob2RzWzBdICE9IDA7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X3N1cHBvcnRlZCk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1BDSV9ET01BSU5TXFxuIGludCBwY2lfZG9tYWluc19zdXBwb3J0ZWQgPSAxO1xcbkBAIC01MjIyLDExICs1MjIzLDIyIEBAIGludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldilcXG4gXFx0XFx0cGNpX2Rldl9sb2NrKGJyaWRnZSk7XFxuIFxcbiBcXHRwY2lfZGV2X2xvY2soZGV2KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJlc2V0IG9mIGFuIFNSLUlPViBQRiBuZWNlc3NhcmlseSByZXNldHMgYW55IGFjdGl2ZSBWRnMuICBTdWNoIHJlc2V0cyBhcmVcXG4rXFx0ICogYmV5b25kIHRoZSBzY29wZSBhZHZlcnRpc2VkIGZvciBwY2lfcmVzZXRfZnVuY3Rpb24oKSBhbmQgdmFyaWFudHMsIHJlZnVzZS5cXG4rXFx0ICovXFxuK1xcdGlmIChwY2lfbnVtX3ZmKGRldikgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHJjID0gLUVOT1RUWTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuIFxcdHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZShkZXYpO1xcbiBcXG4gXFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcXG4gXFxuIFxcdHBjaV9kZXZfcmVzdG9yZShkZXYpO1xcbit1bmxvY2s6XFxuIFxcdHBjaV9kZXZfdW5sb2NrKGRldik7XFxuIFxcbiBcXHRpZiAoYnJpZGdlKVxcbkBAIC01MjY0LDYgKzUyNzYsOSBAQCBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXHRpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQoZGV2KSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIFxcbitcXHRpZiAocGNpX251bV92ZihkZXYpIFxcdTAwM2UgMClcXG4rXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuK1xcbiBcXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcXG4gXFxuIFxcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XFxuQEAgLTUyOTAsNiArNTMwNSwxMSBAQCBpbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxcbiBcXHRpZiAoIXBjaV9kZXZfdHJ5bG9jayhkZXYpKVxcbiBcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gXFxuK1xcdGlmIChwY2lfbnVtX3ZmKGRldikgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdHBjaV9kZXZfdW5sb2NrKGRldik7XFxuK1xcdFxcdHJldHVybiAtRU5PVFRZO1xcbitcXHR9XFxuK1xcbiBcXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcXG4gXFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcXG4gXFx0cGNpX2Rldl9yZXN0b3JlKGRldik7XFxuQEAgLTU1NDgsOSArNTU2OCwzNiBAQCBpbnQgcGNpX3Byb2JlX3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wcm9iZV9yZXNldF9zbG90KTtcXG4gXFxuKy8qIENhbGwgQGNiIG9uIGV2ZXJ5IGRldmljZSBhIHNsb3Qgb3IgYnVzIHJlc2V0IGFmZmVjdHMsIHN0b3BwaW5nIG9uIGVycm9yLiAqL1xcbitzdGF0aWMgaW50IHBjaV93YWxrX3Jlc2V0X2NoZWNrKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCBwY2lfc2xvdCAqc2xvdCxcXG4rXFx0XFx0XFx0XFx0aW50ICgqY2IpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxcbitcXHRcXHRcXHRcXHR2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpkZXY7XFxuK1xcdGludCByYztcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBcXHUwMDI2YnVzLVxcdTAwM2VkZXZpY2VzLCBidXNfbGlzdCkge1xcbitcXHRcXHRpZiAoc2xvdCBcXHUwMDI2XFx1MDAyNiAoIWRldi1cXHUwMDNlc2xvdCB8fCBkZXYtXFx1MDAzZXNsb3QgIT0gc2xvdCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyYyA9IGNiKGRldiwgZGF0YSk7XFxuK1xcdFxcdGlmIChyYylcXG4rXFx0XFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHRpZiAoZGV2LVxcdTAwM2VzdWJvcmRpbmF0ZSkge1xcbitcXHRcXHRcXHRyYyA9IHBjaV93YWxrX3Jlc2V0X2NoZWNrKGRldi1cXHUwMDNlc3Vib3JkaW5hdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgTlVMTCwgY2IsIGRhdGEpO1xcbitcXHRcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHBjaV90cnlfcmVzZXRfc2xvdCAtIFRyeSB0byByZXNldCBhIFBDSSBzbG90XFxuICAqIEBzbG90OiBQQ0kgc2xvdCB0byByZXNldFxcbisgKiBAY2hlY2s6IG9wdGlvbmFsIHBlci1kZXZpY2UgY2FsbGJhY2sgdGhhdCBjYW4gYWJvcnQgdGhlIHJlc2V0XFxuKyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgZm9yIEBjaGVja1xcbiAgKlxcbiAgKiBBIFBDSSBidXMgbWF5IGhvc3QgbXVsdGlwbGUgc2xvdHMsIGVhY2ggc2xvdCBtYXkgc3VwcG9ydCBhIHJlc2V0IG1lY2hhbmlzbVxcbiAgKiBpbmRlcGVuZGVudCBvZiBvdGhlciBzbG90cy4gIEZvciBpbnN0YW5jZSwgc29tZSBzbG90cyBtYXkgc3VwcG9ydCBzbG90IHBvd2VyXFxuQEAgLTU1NjMsNyArNTYxMCw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wcm9iZV9yZXNldF9zbG90KTtcXG4gICpcXG4gICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIHNsb3QgY2Fubm90IGJlIGxvY2tlZFxcbiAgKi9cXG4tc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KVxcbitzdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsXFxuK1xcdFxcdFxcdCAgICAgIGludCAoKmNoZWNrKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSxcXG4rXFx0XFx0XFx0ICAgICAgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRpbnQgcmM7XFxuIFxcbkBAIC01NTcyLDEwICs1NjIxLDE0IEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdClcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXG4gXFx0aWYgKHBjaV9zbG90X3RyeWxvY2soc2xvdCkpIHtcXG4tXFx0XFx0cGNpX3Nsb3Rfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoc2xvdCk7XFxuLVxcdFxcdG1pZ2h0X3NsZWVwKCk7XFxuLVxcdFxcdHJjID0gcGNpX3Jlc2V0X2hvdHBsdWdfc2xvdChzbG90LVxcdTAwM2Vob3RwbHVnLCBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xcbi1cXHRcXHRwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTtcXG4rXFx0XFx0cmMgPSBjaGVjayA/IHBjaV93YWxrX3Jlc2V0X2NoZWNrKHNsb3QtXFx1MDAzZWJ1cywgc2xvdCwgY2hlY2ssIGRhdGEpIDogMDtcXG4rXFx0XFx0aWYgKCFyYykge1xcbitcXHRcXHRcXHRwY2lfc2xvdF9zYXZlX2FuZF9kaXNhYmxlX2xvY2tlZChzbG90KTtcXG4rXFx0XFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4rXFx0XFx0XFx0cmMgPSBwY2lfcmVzZXRfaG90cGx1Z19zbG90KHNsb3QtXFx1MDAzZWhvdHBsdWcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xcbitcXHRcXHRcXHRwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRwY2lfc2xvdF91bmxvY2soc2xvdCk7XFxuIFxcdH0gZWxzZVxcbiBcXHRcXHRyYyA9IC1FQUdBSU47XFxuQEAgLTU2MDcsMTAgKzU2NjAsMTQgQEAgc3RhdGljIGludCBwY2lfYnVzX3Jlc2V0KHN0cnVjdCBwY2lfYnVzICpidXMsIGJvb2wgcHJvYmUpXFxuIC8qKlxcbiAgKiBwY2lfdHJ5X3Jlc2V0X2J1cyAtIFRyeSB0byByZXNldCBhIFBDSSBidXNcXG4gICogQGJ1czogdG9wIGxldmVsIFBDSSBidXMgdG8gcmVzZXRcXG4rICogQGNoZWNrOiBvcHRpb25hbCBwZXItZGV2aWNlIGNhbGxiYWNrIHRoYXQgY2FuIGFib3J0IHRoZSByZXNldFxcbisgKiBAZGF0YTogb3BhcXVlIGFyZ3VtZW50IGZvciBAY2hlY2tcXG4gICpcXG4gICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIGJ1cyBjYW5ub3QgYmUgbG9ja2VkXFxuICAqL1xcbi1zdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpXFxuK3N0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cyxcXG4rXFx0XFx0XFx0ICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXFxuK1xcdFxcdFxcdCAgICAgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRpbnQgcmM7XFxuIFxcbkBAIC01NjE5LDEwICs1Njc2LDEzIEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXG4gXFx0aWYgKHBjaV9idXNfdHJ5bG9jayhidXMpKSB7XFxuLVxcdFxcdHBjaV9idXNfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoYnVzKTtcXG4tXFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4tXFx0XFx0cmMgPSBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoYnVzLVxcdTAwM2VzZWxmKTtcXG4tXFx0XFx0cGNpX2J1c19yZXN0b3JlX2xvY2tlZChidXMpO1xcbitcXHRcXHRyYyA9IGNoZWNrID8gcGNpX3dhbGtfcmVzZXRfY2hlY2soYnVzLCBOVUxMLCBjaGVjaywgZGF0YSkgOiAwO1xcbitcXHRcXHRpZiAoIXJjKSB7XFxuK1xcdFxcdFxcdHBjaV9idXNfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoYnVzKTtcXG4rXFx0XFx0XFx0bWlnaHRfc2xlZXAoKTtcXG4rXFx0XFx0XFx0cmMgPSBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoYnVzLVxcdTAwM2VzZWxmKTtcXG4rXFx0XFx0XFx0cGNpX2J1c19yZXN0b3JlX2xvY2tlZChidXMpO1xcbitcXHRcXHR9XFxuIFxcdFxcdHBjaV9idXNfdW5sb2NrKGJ1cyk7XFxuIFxcdH0gZWxzZVxcbiBcXHRcXHRyYyA9IC1FQUdBSU47XFxuQEAgLTU2NjEsNyArNTcyMSw3IEBAIHN0YXRpYyBpbnQgcGNpX3Jlc2V0X2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlLCBib29sIHJlc3RvcmUpXFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsIFxcdTAwMjZidXMtXFx1MDAzZXNsb3RzLCBsaXN0KSB7XFxuIFxcdFxcdGlmIChyZXN0b3JlKVxcbi1cXHRcXHRcXHRyZXQgPSBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc2xvdCk7XFxuK1xcdFxcdFxcdHJldCA9IHBjaV90cnlfcmVzZXRfc2xvdChzbG90LCBOVUxMLCBOVUxMKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRyZXQgPSBwY2lfc2xvdF9yZXNldChzbG90LCBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xcbiBcXG5AQCAtNTY3NSw3ICs1NzM1LDcgQEAgc3RhdGljIGludCBwY2lfcmVzZXRfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsIGJvb2wgcmVzdG9yZSlcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwY2lfc2xvdF9tdXRleCk7XFxuIFxcbiBcXHRpZiAocmVzdG9yZSlcXG4tXFx0XFx0cmV0dXJuIHBjaV90cnlfcmVzZXRfYnVzKGJ1cyk7XFxuK1xcdFxcdHJldHVybiBwY2lfdHJ5X3Jlc2V0X2J1cyhidXMsIE5VTEwsIE5VTEwpO1xcbiBcXHRyZXR1cm4gcGNpX2J1c19yZXNldChicmlkZ2UtXFx1MDAzZXN1Ym9yZGluYXRlLCBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xcbiB9XFxuIFxcbkBAIC01NzA1LDE2ICs1NzY1LDQzIEBAIGludCBwY2lfcHJvYmVfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X2J1cyk7XFxuIFxcbisvKipcXG4rICogcGNpX3Jlc2V0X2J1c19jb25kIC0gY29uZGl0aW9uYWxseSByZXNldCB0aGUgc2xvdCBvciBidXMgY29udGFpbmluZyBhIGRldmljZVxcbisgKiBAcGRldjogdG9wIGxldmVsIFBDSSBkZXZpY2UgdG8gcmVzZXQgdmlhIHNsb3QvYnVzXFxuKyAqIEBjaGVjazogb3B0aW9uYWwgY2FsbGJhY2sgaW52b2tlZCBvbiBlYWNoIGFmZmVjdGVkIGRldmljZSBiZWZvcmUgdGhlIHJlc2V0XFxuKyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgcGFzc2VkIHRvIEBjaGVja1xcbisgKlxcbisgKiBSZXNldCB0aGUgc2xvdCBvciBidXMgY29udGFpbmluZyBAcGRldi4gIE9uY2UgdGhlIGVudGlyZSBwaHlzaWNhbCBidXMvc2xvdFxcbisgKiBoaWVyYXJjaHkgaXMgbG9ja2VkLCBAY2hlY2sgKGlmIG5vdCBOVUxMKSBpcyBjYWxsZWQgb24gZWFjaCBvZiB0aG9zZSBsb2NrZWRcXG4rICogZGV2aWNlcy4gIEEgbm9uemVybyByZXR1cm4gYWJvcnRzIHRoZSByZXNldCBhbmQgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlcixcXG4rICogb3RoZXJ3aXNlIHRoZSByZXNldCBwcm9jZWVkcy5cXG4rICpcXG4rICogTkIuIEBjaGVjayBydW5zIHdpdGggdGhlIGZ1bGwgc2V0IG9mIGRldmljZV9sb2NrcyBub3RlZCBhYm92ZSBoZWxkOyBjYWxsYmFja3NcXG4rICogbXVzdCB0YWtlIHRoZXNlIGxvY2tpbmcgc2VtYW50aWNzIGludG8gYWNjb3VudC4gIFVzZSBOVUxMIHRvIHBlcmZvcm0gYW5cXG4rICogdW5jb25kaXRpb25hbCByZXNldC5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9UVFkgaWYgQHBkZXYgaXMgbm90IHJlc2V0dGFibGUsIC1FQUdBSU4gaWYgdGhlXFxuKyAqIGRldmljZXMgY2Fubm90IGJlIGxvY2tlZCwgb3IgdGhlIHZhbHVlIHJldHVybmVkIGJ5IEBjaGVjay5cXG4rICovXFxuK2ludCBwY2lfcmVzZXRfYnVzX2NvbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdCAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXFxuK1xcdFxcdCAgICAgICB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHJldHVybiAhcGNpX3Byb2JlX3Jlc2V0X3Nsb3QocGRldi1cXHUwMDNlc2xvdCkgP1xcbitcXHRcXHRwY2lfdHJ5X3Jlc2V0X3Nsb3QocGRldi1cXHUwMDNlc2xvdCwgY2hlY2ssIGRhdGEpIDpcXG4rXFx0XFx0cGNpX3RyeV9yZXNldF9idXMocGRldi1cXHUwMDNlYnVzLCBjaGVjaywgZGF0YSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2J1c19jb25kKTtcXG4rXFxuIC8qKlxcbiAgKiBwY2lfcmVzZXRfYnVzIC0gVHJ5IHRvIHJlc2V0IGEgUENJIGJ1c1xcbiAgKiBAcGRldjogdG9wIGxldmVsIFBDSSBkZXZpY2UgdG8gcmVzZXQgdmlhIHNsb3QvYnVzXFxuICAqXFxuLSAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBidXMgY2Fubm90IGJlIGxvY2tlZFxcbisgKiBTYW1lIGFzIGFib3ZlIHdpdGhvdXQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLlxcbiAgKi9cXG4gaW50IHBjaV9yZXNldF9idXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4tXFx0cmV0dXJuICghcGNpX3Byb2JlX3Jlc2V0X3Nsb3QocGRldi1cXHUwMDNlc2xvdCkpID9cXG4tXFx0ICAgIHBjaV90cnlfcmVzZXRfc2xvdChwZGV2LVxcdTAwM2VzbG90KSA6IHBjaV90cnlfcmVzZXRfYnVzKHBkZXYtXFx1MDAzZWJ1cyk7XFxuK1xcdHJldHVybiBwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgTlVMTCwgTlVMTCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2J1cyk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oXFxuaW5kZXggNDQ2OWUxYTc3ZjNjMS4uNDE2ZmQ2Yjc0YWJlNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS9wY2kuaFxcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oXFxuQEAgLTIzMCw3ICsyMzAsNiBAQCBlbnVtIHBjaV9tbWFwX2FwaSB7XFxuIGludCBwY2lfbW1hcF9maXRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgcmVzbm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1haSxcXG4gXFx0XFx0ICBlbnVtIHBjaV9tbWFwX2FwaSBtbWFwX2FwaSk7XFxuIFxcbi1ib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIHZvaWQgcGNpX2luaXRfcmVzZXRfbWV0aG9kcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gaW50IHBjaV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gaW50IHBjaV9idXNfZXJyb3JfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcXG5pbmRleCAzZjExYTk2MjRiOWMwLi44ZTQyMzQyZDU2ZDNjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcXG5AQCAtNjA5LDcgKzYwOSw2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuIFxcdGlmIChyZXQgPT0gLUVBR0FJTilcXG4gXFx0XFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XFxuIFxcbi1cXHR2ZGV2LVxcdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XFxuIFxcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXHR2ZGV2LVxcdTAwM2VwY2lfc2F2ZWRfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7XFxuIFxcdGlmICghdmRldi1cXHUwMDNlcGNpX3NhdmVkX3N0YXRlKVxcbkBAIC03NjYsNyArNzY1LDcgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBcXHRpZiAocGNpX2xvYWRfYW5kX2ZyZWVfc2F2ZWRfc3RhdGUocGRldiwgXFx1MDAyNnZkZXYtXFx1MDAzZXBjaV9zYXZlZF9zdGF0ZSkpIHtcXG4gXFx0XFx0cGNpX2luZm8ocGRldiwgXFxcIiVzOiBDb3VsZG4ndCByZWxvYWQgc2F2ZWQgc3RhdGVcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gXFxuLVxcdFxcdGlmICghdmRldi1cXHUwMDNlcmVzZXRfd29ya3MpXFxuK1xcdFxcdGlmICghcGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KSlcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRcXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcXG5AQCAtNzg1LDEyICs3ODQsMTQgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBcXHQgKiBXZSBjYW4gbm90IHVzZSB0aGUgXFxcInRyeVxcXCIgcmVzZXQgaW50ZXJmYWNlIGhlcmUsIHdoaWNoIHdpbGxcXG4gXFx0ICogb3ZlcndyaXRlIHRoZSBwcmV2aW91c2x5IHJlc3RvcmVkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXFxuIFxcdCAqL1xcbi1cXHRpZiAodmRldi1cXHUwMDNlcmVzZXRfd29ya3MpIHtcXG4rXFx0aWYgKHBjaV9yZXNldF9zdXBwb3J0ZWQocGRldikpIHtcXG4gXFx0XFx0YnJpZGdlID0gcGNpX3Vwc3RyZWFtX2JyaWRnZShwZGV2KTtcXG4gXFx0XFx0aWYgKGJyaWRnZSBcXHUwMDI2XFx1MDAyNiAhcGNpX2Rldl90cnlsb2NrKGJyaWRnZSkpXFxuIFxcdFxcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfc3RhdGU7XFxuIFxcdFxcdGlmIChwY2lfZGV2X3RyeWxvY2socGRldikpIHtcXG4tXFx0XFx0XFx0aWYgKCFfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQocGRldikpXFxuK1xcdFxcdFxcdC8qIEVuZm9yY2UgZnVuY3Rpb24gc2NvcGUgdW5kZXIgbG9jayBmb3IgU1ItSU9WIFBGcyAqL1xcbitcXHRcXHRcXHRpZiAoIXBjaV9udW1fdmYocGRldikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICFfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQocGRldikpXFxuIFxcdFxcdFxcdFxcdHZkZXYtXFx1MDAzZW5lZWRzX3Jlc2V0ID0gZmFsc2U7XFxuIFxcdFxcdFxcdHBjaV9kZXZfdW5sb2NrKHBkZXYpO1xcbiBcXHRcXHR9XFxuQEAgLTg5Miw2ICs4OTMsMTcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3VudF9kZXZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLypcXG4rICogUENJIHdhbGsgY2FsbGJhY2sgdG8gY2hlY2sgZm9yIFNSLUlPViBQRnMgd2l0aCBhY3RpdmUgVkZzLiAgVkZzIGFyZSBub3RcXG4rICogZW51bWVyYXRlZCB3aGVuIGRldGVybWluaW5nIGFmZmVjdGVkIGRldmljZXMgYW5kIG1heSBiZSBvd25lZCBieSBzZXBhcmF0ZVxcbisgKiB1c2Vyc3BhY2UgcHJvY2Vzc2VzIGZyb20gdGhlIFBGLiAgSXQncyB0aGVyZWZvcmUgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0eVxcbisgKiB0byB0ZWFyZG93biBWRnMgZm9yIGFueSBhZmZlY3RlZCBQRiBiZWZvcmUgcGVyZm9ybWluZyBhIGhvdC1yZXNldC5cXG4rICovXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZGV2X2hhc192ZnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0cmV0dXJuIHBjaV9udW1fdmYocGRldikgPyAtRUJVU1kgOiAwO1xcbit9XFxuK1xcbiBzdHJ1Y3QgdmZpb19wY2lfZmlsbF9pbmZvIHtcXG4gXFx0c3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2O1xcbiBcXHRzdHJ1Y3QgdmZpb19wY2lfZGVwZW5kZW50X2RldmljZSAqZGV2aWNlcztcXG5AQCAtMTA4NSw3ICsxMDk3LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mbyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuIFxcbiBcXHRpbmZvLmZsYWdzID0gVkZJT19ERVZJQ0VfRkxBR1NfUENJO1xcbiBcXG4tXFx0aWYgKHZkZXYtXFx1MDAzZXJlc2V0X3dvcmtzKVxcbitcXHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZCh2ZGV2LVxcdTAwM2VwZGV2KSlcXG4gXFx0XFx0aW5mby5mbGFncyB8PSBWRklPX0RFVklDRV9GTEFHU19SRVNFVDtcXG4gXFxuIFxcdGluZm8ubnVtX3JlZ2lvbnMgPSBWRklPX1BDSV9OVU1fUkVHSU9OUyArIHZkZXYtXFx1MDAzZW51bV9yZWdpb25zO1xcbkBAIC0xMzE3LDcgKzEzMjksNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKCF2ZGV2LVxcdTAwM2VyZXNldF93b3JrcylcXG4rXFx0aWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKHZkZXYtXFx1MDAzZXBkZXYpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcXG5AQCAtMjU5Niw3ICsyNjA4LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHZkZXYsIFxcdTAwMjZkZXZfc2V0LVxcdTAwM2VkZXZpY2VfbGlzdCwgdmRldi5kZXZfc2V0X2xpc3QpXFxuIFxcdFxcdHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xcbiBcXG4tXFx0cmV0ID0gcGNpX3Jlc2V0X2J1cyhwZGV2KTtcXG4rXFx0cmV0ID0gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIHZmaW9fcGNpX2Rldl9oYXNfdmZzLCBOVUxMKTtcXG4gXFxuIFxcdHZkZXYgPSBsaXN0X2xhc3RfZW50cnkoXFx1MDAyNmRldl9zZXQtXFx1MDAzZWRldmljZV9saXN0LFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlLCB2ZGV2LmRldl9zZXRfbGlzdCk7XFxuQEAgLTI2NTksNyArMjY3MSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXFxuIFxcdGlmICh2ZmlvX3BjaV9kZXZfc2V0X3BtX3J1bnRpbWVfZ2V0KGRldl9zZXQpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAoIXBjaV9yZXNldF9idXMocGRldikpXFxuK1xcdGlmICghcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIHZmaW9fcGNpX2Rldl9oYXNfdmZzLCBOVUxMKSlcXG4gXFx0XFx0cmVzZXRfZG9uZSA9IHRydWU7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgXFx1MDAyNmRldl9zZXQtXFx1MDAzZWRldmljZV9saXN0LCB2ZGV2LmRldl9zZXRfbGlzdCkge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbmluZGV4IDY0YjMwOGI2ZTYxYzEuLjRkZTIxZTZhYzUzOGYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmhcXG5AQCAtMTQ3NCwxMiArMTQ3NCwxNiBAQCB2b2lkIHBjaWVfcHJpbnRfbGlua19zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIGludCBwY2llX3Jlc2V0X2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIHByb2JlKTtcXG4gaW50IHBjaWVfZmxyKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbiBpbnQgX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbitib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIGludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldik7XFxuIGludCBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbiBpbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gaW50IHBjaV9wcm9iZV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCk7XFxuIGludCBwY2lfcHJvYmVfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpO1xcbiBpbnQgcGNpX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4raW50IHBjaV9yZXNldF9idXNfY29uZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4rXFx0XFx0ICAgICAgIGludCAoKmNoZWNrKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSxcXG4rXFx0XFx0ICAgICAgIHZvaWQgKmRhdGEpO1xcbiB2b2lkIHBjaV9yZXNldF9zZWNvbmRhcnlfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbiB2b2lkIHBjaWJpb3NfcmVzZXRfc2Vjb25kYXJ5X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcXG4gdm9pZCBwY2lfdXBkYXRlX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubyk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG5pbmRleCA5YTE2NzRjMTUyYWEyLi42ZmI1OTllYzI5MTkxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG5AQCAtMTIxLDcgKzEyMSw2IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7XFxuIFxcdC8qIEZsYWdzIG9ubHkgbW9kaWZpZWQgb24gc2V0dXAvcmVsZWFzZSAtIGJpdGZpZWxkIG9rICovXFxuIFxcdGJvb2xcXHRcXHRcXHRoYXNfZHluX21zaXg6MTtcXG4gXFx0Ym9vbFxcdFxcdFxcdHBjaV8yXzM6MTtcXG4tXFx0Ym9vbFxcdFxcdFxcdHJlc2V0X3dvcmtzOjE7XFxuIFxcdGJvb2xcXHRcXHRcXHRleHRlbmRlZF9jYXBzOjE7XFxuIFxcdGJvb2xcXHRcXHRcXHRoYXNfdmdhOjE7XFxuIFxcdGJvb2xcXHRcXHRcXHRub2ludHg6MTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcXG5pbmRleCA1ZGU2MThhM2E1ZWVlLi44NjAzOTU5ZjE3MzUwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXFxuQEAgLTc3Miw2ICs3NzIsOSBAQCBzdHJ1Y3QgdmZpb19wY2lfaG90X3Jlc2V0X2luZm8ge1xcbiAgKiBNaXhlZCB1c2FnZSBvZiBsZWdhY3kgZ3JvdXBzIGFuZCBjZGV2cyBhY3Jvc3MgdGhlIHNldCBvZiBhZmZlY3RlZFxcbiAgKiBkZXZpY2VzIGlzIG5vdCBzdXBwb3J0ZWQuXFxuICAqXFxuKyAqIEhvdCByZXNldCBvZiBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcyBpcyBub3Qgc3VwcG9ydGVkLCBTUi1JT1ZcXG4rICogc2hvdWxkIGZpcnN0IGJlIGRpc2FibGVkIG9uIGFueSBhZmZlY3RlZCBQRi5cXG4rICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxcbiAgKi9cXG4gc3RydWN0IHZmaW9fcGNpX2hvdF9yZXNldCB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI0OjU0LjAzNTExOTE2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYzNjUxODE3NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSVwiLFxuICAgIFwiVkZJT1wiLFxuICAgIFwiVkZJT19QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwY2lfcmVzZXRfYnVzX2NvbmRcIixcbiAgICBcInBjaV9yZXNldF9mdW5jdGlvblwiLFxuICAgIFwicGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZFwiLFxuICAgIFwicGNpX3RyeV9yZXNldF9mdW5jdGlvblwiLFxuICAgIFwicGNpX3Jlc2V0X2J1c1wiLFxuICAgIFwidmZpb19wY2lfY29yZV9pb2N0bFwiLFxuICAgIFwidmZpb19wY2lfY29yZV9kaXNhYmxlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2VuYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYHBjaV9yZXNldF9idXNfY29uZGAgYW5kIG1vZGlmaWVzIFBDSSByZXNldCBmdW5jdGlvbnMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBGcyB3aXRoIGFjdGl2ZSBWRnMuIEl0IGFsc28gdXBkYXRlcyBWRklPIFBDSSBjb3JlIHRvIHVzZSB0aGVzZSBuZXcgY2hlY2tzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUgUENJIGFuZCBWRklPIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0YzhlMDBjYzRiYWU0ZmNiODM4ZDc3ODBhNDU5MWMyZmMxNDhmNjljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDU6MjQ6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaS5jXG5pbmRleCA3N2IxN2IxM2VlNjE1Li4wYjRmMTMzOTdkYTI0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLmNcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS5jXG5AQCAtOTgsNiArOTgsNyBAQCBib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldilcbiB7XG4gXHRyZXR1cm4gZGV2LVx1MDAzZXJlc2V0X21ldGhvZHNbMF0gIT0gMDtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X3N1cHBvcnRlZCk7XG4gXG4gI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOU1xuIGludCBwY2lfZG9tYWluc19zdXBwb3J0ZWQgPSAxO1xuQEAgLTUyMjIsMTEgKzUyMjMsMjIgQEAgaW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0XHRwY2lfZGV2X2xvY2soYnJpZGdlKTtcbiBcbiBcdHBjaV9kZXZfbG9jayhkZXYpO1xuK1xuK1x0LypcbitcdCAqIFJlc2V0IG9mIGFuIFNSLUlPViBQRiBuZWNlc3NhcmlseSByZXNldHMgYW55IGFjdGl2ZSBWRnMuICBTdWNoIHJlc2V0cyBhcmVcbitcdCAqIGJleW9uZCB0aGUgc2NvcGUgYWR2ZXJ0aXNlZCBmb3IgcGNpX3Jlc2V0X2Z1bmN0aW9uKCkgYW5kIHZhcmlhbnRzLCByZWZ1c2UuXG4rXHQgKi9cbitcdGlmIChwY2lfbnVtX3ZmKGRldikgXHUwMDNlIDApIHtcbitcdFx0cmMgPSAtRU5PVFRZO1xuK1x0XHRnb3RvIHVubG9jaztcbitcdH1cbitcbiBcdHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZShkZXYpO1xuIFxuIFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcbiBcbiBcdHBjaV9kZXZfcmVzdG9yZShkZXYpO1xuK3VubG9jazpcbiBcdHBjaV9kZXZfdW5sb2NrKGRldik7XG4gXG4gXHRpZiAoYnJpZGdlKVxuQEAgLTUyNjQsNiArNTI3Niw5IEBAIGludCBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gXHRpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQoZGV2KSlcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXG4rXHRpZiAocGNpX251bV92ZihkZXYpIFx1MDAzZSAwKVxuK1x0XHRyZXR1cm4gLUVOT1RUWTtcbitcbiBcdHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZShkZXYpO1xuIFxuIFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcbkBAIC01MjkwLDYgKzUzMDUsMTEgQEAgaW50IHBjaV90cnlfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdGlmICghcGNpX2Rldl90cnlsb2NrKGRldikpXG4gXHRcdHJldHVybiAtRUFHQUlOO1xuIFxuK1x0aWYgKHBjaV9udW1fdmYoZGV2KSBcdTAwM2UgMCkge1xuK1x0XHRwY2lfZGV2X3VubG9jayhkZXYpO1xuK1x0XHRyZXR1cm4gLUVOT1RUWTtcbitcdH1cbitcbiBcdHBjaV9kZXZfc2F2ZV9hbmRfZGlzYWJsZShkZXYpO1xuIFx0cmMgPSBfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoZGV2KTtcbiBcdHBjaV9kZXZfcmVzdG9yZShkZXYpO1xuQEAgLTU1NDgsOSArNTU2OCwzNiBAQCBpbnQgcGNpX3Byb2JlX3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfc2xvdCk7XG4gXG4rLyogQ2FsbCBAY2Igb24gZXZlcnkgZGV2aWNlIGEgc2xvdCBvciBidXMgcmVzZXQgYWZmZWN0cywgc3RvcHBpbmcgb24gZXJyb3IuICovXG4rc3RhdGljIGludCBwY2lfd2Fsa19yZXNldF9jaGVjayhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QsXG4rXHRcdFx0XHRpbnQgKCpjYikoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4rXHRcdFx0XHR2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBwY2lfZGV2ICpkZXY7XG4rXHRpbnQgcmM7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgXHUwMDI2YnVzLVx1MDAzZWRldmljZXMsIGJ1c19saXN0KSB7XG4rXHRcdGlmIChzbG90IFx1MDAyNlx1MDAyNiAoIWRldi1cdTAwM2VzbG90IHx8IGRldi1cdTAwM2VzbG90ICE9IHNsb3QpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRyYyA9IGNiKGRldiwgZGF0YSk7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdGlmIChkZXYtXHUwMDNlc3Vib3JkaW5hdGUpIHtcbitcdFx0XHRyYyA9IHBjaV93YWxrX3Jlc2V0X2NoZWNrKGRldi1cdTAwM2VzdWJvcmRpbmF0ZSxcbitcdFx0XHRcdFx0XHQgIE5VTEwsIGNiLCBkYXRhKTtcbitcdFx0XHRpZiAocmMpXG4rXHRcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiAvKipcbiAgKiBwY2lfdHJ5X3Jlc2V0X3Nsb3QgLSBUcnkgdG8gcmVzZXQgYSBQQ0kgc2xvdFxuICAqIEBzbG90OiBQQ0kgc2xvdCB0byByZXNldFxuKyAqIEBjaGVjazogb3B0aW9uYWwgcGVyLWRldmljZSBjYWxsYmFjayB0aGF0IGNhbiBhYm9ydCB0aGUgcmVzZXRcbisgKiBAZGF0YTogb3BhcXVlIGFyZ3VtZW50IGZvciBAY2hlY2tcbiAgKlxuICAqIEEgUENJIGJ1cyBtYXkgaG9zdCBtdWx0aXBsZSBzbG90cywgZWFjaCBzbG90IG1heSBzdXBwb3J0IGEgcmVzZXQgbWVjaGFuaXNtXG4gICogaW5kZXBlbmRlbnQgb2Ygb3RoZXIgc2xvdHMuICBGb3IgaW5zdGFuY2UsIHNvbWUgc2xvdHMgbWF5IHN1cHBvcnQgc2xvdCBwb3dlclxuQEAgLTU1NjMsNyArNTYxMCw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9wcm9iZV9yZXNldF9zbG90KTtcbiAgKlxuICAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBzbG90IGNhbm5vdCBiZSBsb2NrZWRcbiAgKi9cbi1zdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpXG4rc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90LFxuK1x0XHRcdCAgICAgIGludCAoKmNoZWNrKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSxcbitcdFx0XHQgICAgICB2b2lkICpkYXRhKVxuIHtcbiBcdGludCByYztcbiBcbkBAIC01NTcyLDEwICs1NjIxLDE0IEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdClcbiBcdFx0cmV0dXJuIHJjO1xuIFxuIFx0aWYgKHBjaV9zbG90X3RyeWxvY2soc2xvdCkpIHtcbi1cdFx0cGNpX3Nsb3Rfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoc2xvdCk7XG4tXHRcdG1pZ2h0X3NsZWVwKCk7XG4tXHRcdHJjID0gcGNpX3Jlc2V0X2hvdHBsdWdfc2xvdChzbG90LVx1MDAzZWhvdHBsdWcsIFBDSV9SRVNFVF9ET19SRVNFVCk7XG4tXHRcdHBjaV9zbG90X3Jlc3RvcmVfbG9ja2VkKHNsb3QpO1xuK1x0XHRyYyA9IGNoZWNrID8gcGNpX3dhbGtfcmVzZXRfY2hlY2soc2xvdC1cdTAwM2VidXMsIHNsb3QsIGNoZWNrLCBkYXRhKSA6IDA7XG4rXHRcdGlmICghcmMpIHtcbitcdFx0XHRwY2lfc2xvdF9zYXZlX2FuZF9kaXNhYmxlX2xvY2tlZChzbG90KTtcbitcdFx0XHRtaWdodF9zbGVlcCgpO1xuK1x0XHRcdHJjID0gcGNpX3Jlc2V0X2hvdHBsdWdfc2xvdChzbG90LVx1MDAzZWhvdHBsdWcsXG4rXHRcdFx0XHRcdFx0ICAgIFBDSV9SRVNFVF9ET19SRVNFVCk7XG4rXHRcdFx0cGNpX3Nsb3RfcmVzdG9yZV9sb2NrZWQoc2xvdCk7XG4rXHRcdH1cbiBcdFx0cGNpX3Nsb3RfdW5sb2NrKHNsb3QpO1xuIFx0fSBlbHNlXG4gXHRcdHJjID0gLUVBR0FJTjtcbkBAIC01NjA3LDEwICs1NjYwLDE0IEBAIHN0YXRpYyBpbnQgcGNpX2J1c19yZXNldChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBib29sIHByb2JlKVxuIC8qKlxuICAqIHBjaV90cnlfcmVzZXRfYnVzIC0gVHJ5IHRvIHJlc2V0IGEgUENJIGJ1c1xuICAqIEBidXM6IHRvcCBsZXZlbCBQQ0kgYnVzIHRvIHJlc2V0XG4rICogQGNoZWNrOiBvcHRpb25hbCBwZXItZGV2aWNlIGNhbGxiYWNrIHRoYXQgY2FuIGFib3J0IHRoZSByZXNldFxuKyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgZm9yIEBjaGVja1xuICAqXG4gICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIGJ1cyBjYW5ub3QgYmUgbG9ja2VkXG4gICovXG4tc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKVxuK3N0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cyxcbitcdFx0XHQgICAgIGludCAoKmNoZWNrKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKSxcbitcdFx0XHQgICAgIHZvaWQgKmRhdGEpXG4ge1xuIFx0aW50IHJjO1xuIFxuQEAgLTU2MTksMTAgKzU2NzYsMTMgQEAgc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG4gXHRpZiAocGNpX2J1c190cnlsb2NrKGJ1cykpIHtcbi1cdFx0cGNpX2J1c19zYXZlX2FuZF9kaXNhYmxlX2xvY2tlZChidXMpO1xuLVx0XHRtaWdodF9zbGVlcCgpO1xuLVx0XHRyYyA9IHBjaV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19yZXNldChidXMtXHUwMDNlc2VsZik7XG4tXHRcdHBjaV9idXNfcmVzdG9yZV9sb2NrZWQoYnVzKTtcbitcdFx0cmMgPSBjaGVjayA/IHBjaV93YWxrX3Jlc2V0X2NoZWNrKGJ1cywgTlVMTCwgY2hlY2ssIGRhdGEpIDogMDtcbitcdFx0aWYgKCFyYykge1xuK1x0XHRcdHBjaV9idXNfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoYnVzKTtcbitcdFx0XHRtaWdodF9zbGVlcCgpO1xuK1x0XHRcdHJjID0gcGNpX2JyaWRnZV9zZWNvbmRhcnlfYnVzX3Jlc2V0KGJ1cy1cdTAwM2VzZWxmKTtcbitcdFx0XHRwY2lfYnVzX3Jlc3RvcmVfbG9ja2VkKGJ1cyk7XG4rXHRcdH1cbiBcdFx0cGNpX2J1c191bmxvY2soYnVzKTtcbiBcdH0gZWxzZVxuIFx0XHRyYyA9IC1FQUdBSU47XG5AQCAtNTY2MSw3ICs1NzIxLDcgQEAgc3RhdGljIGludCBwY2lfcmVzZXRfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpicmlkZ2UsIGJvb2wgcmVzdG9yZSlcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoc2xvdCwgXHUwMDI2YnVzLVx1MDAzZXNsb3RzLCBsaXN0KSB7XG4gXHRcdGlmIChyZXN0b3JlKVxuLVx0XHRcdHJldCA9IHBjaV90cnlfcmVzZXRfc2xvdChzbG90KTtcbitcdFx0XHRyZXQgPSBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc2xvdCwgTlVMTCwgTlVMTCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRyZXQgPSBwY2lfc2xvdF9yZXNldChzbG90LCBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xuIFxuQEAgLTU2NzUsNyArNTczNSw3IEBAIHN0YXRpYyBpbnQgcGNpX3Jlc2V0X2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlLCBib29sIHJlc3RvcmUpXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGNpX3Nsb3RfbXV0ZXgpO1xuIFxuIFx0aWYgKHJlc3RvcmUpXG4tXHRcdHJldHVybiBwY2lfdHJ5X3Jlc2V0X2J1cyhidXMpO1xuK1x0XHRyZXR1cm4gcGNpX3RyeV9yZXNldF9idXMoYnVzLCBOVUxMLCBOVUxMKTtcbiBcdHJldHVybiBwY2lfYnVzX3Jlc2V0KGJyaWRnZS1cdTAwM2VzdWJvcmRpbmF0ZSwgUENJX1JFU0VUX0RPX1JFU0VUKTtcbiB9XG4gXG5AQCAtNTcwNSwxNiArNTc2NSw0MyBAQCBpbnQgcGNpX3Byb2JlX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfYnVzKTtcbiBcbisvKipcbisgKiBwY2lfcmVzZXRfYnVzX2NvbmQgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRoZSBzbG90IG9yIGJ1cyBjb250YWluaW5nIGEgZGV2aWNlXG4rICogQHBkZXY6IHRvcCBsZXZlbCBQQ0kgZGV2aWNlIHRvIHJlc2V0IHZpYSBzbG90L2J1c1xuKyAqIEBjaGVjazogb3B0aW9uYWwgY2FsbGJhY2sgaW52b2tlZCBvbiBlYWNoIGFmZmVjdGVkIGRldmljZSBiZWZvcmUgdGhlIHJlc2V0XG4rICogQGRhdGE6IG9wYXF1ZSBhcmd1bWVudCBwYXNzZWQgdG8gQGNoZWNrXG4rICpcbisgKiBSZXNldCB0aGUgc2xvdCBvciBidXMgY29udGFpbmluZyBAcGRldi4gIE9uY2UgdGhlIGVudGlyZSBwaHlzaWNhbCBidXMvc2xvdFxuKyAqIGhpZXJhcmNoeSBpcyBsb2NrZWQsIEBjaGVjayAoaWYgbm90IE5VTEwpIGlzIGNhbGxlZCBvbiBlYWNoIG9mIHRob3NlIGxvY2tlZFxuKyAqIGRldmljZXMuICBBIG5vbnplcm8gcmV0dXJuIGFib3J0cyB0aGUgcmVzZXQgYW5kIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIsXG4rICogb3RoZXJ3aXNlIHRoZSByZXNldCBwcm9jZWVkcy5cbisgKlxuKyAqIE5CLiBAY2hlY2sgcnVucyB3aXRoIHRoZSBmdWxsIHNldCBvZiBkZXZpY2VfbG9ja3Mgbm90ZWQgYWJvdmUgaGVsZDsgY2FsbGJhY2tzXG4rICogbXVzdCB0YWtlIHRoZXNlIGxvY2tpbmcgc2VtYW50aWNzIGludG8gYWNjb3VudC4gIFVzZSBOVUxMIHRvIHBlcmZvcm0gYW5cbisgKiB1bmNvbmRpdGlvbmFsIHJlc2V0LlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9UVFkgaWYgQHBkZXYgaXMgbm90IHJlc2V0dGFibGUsIC1FQUdBSU4gaWYgdGhlXG4rICogZGV2aWNlcyBjYW5ub3QgYmUgbG9ja2VkLCBvciB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgQGNoZWNrLlxuKyAqL1xuK2ludCBwY2lfcmVzZXRfYnVzX2NvbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4rXHRcdCAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4rXHRcdCAgICAgICB2b2lkICpkYXRhKVxuK3tcbitcdHJldHVybiAhcGNpX3Byb2JlX3Jlc2V0X3Nsb3QocGRldi1cdTAwM2VzbG90KSA/XG4rXHRcdHBjaV90cnlfcmVzZXRfc2xvdChwZGV2LVx1MDAzZXNsb3QsIGNoZWNrLCBkYXRhKSA6XG4rXHRcdHBjaV90cnlfcmVzZXRfYnVzKHBkZXYtXHUwMDNlYnVzLCBjaGVjaywgZGF0YSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9idXNfY29uZCk7XG4rXG4gLyoqXG4gICogcGNpX3Jlc2V0X2J1cyAtIFRyeSB0byByZXNldCBhIFBDSSBidXNcbiAgKiBAcGRldjogdG9wIGxldmVsIFBDSSBkZXZpY2UgdG8gcmVzZXQgdmlhIHNsb3QvYnVzXG4gICpcbi0gKiBTYW1lIGFzIGFib3ZlIGV4Y2VwdCByZXR1cm4gLUVBR0FJTiBpZiB0aGUgYnVzIGNhbm5vdCBiZSBsb2NrZWRcbisgKiBTYW1lIGFzIGFib3ZlIHdpdGhvdXQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrLlxuICAqL1xuIGludCBwY2lfcmVzZXRfYnVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbi1cdHJldHVybiAoIXBjaV9wcm9iZV9yZXNldF9zbG90KHBkZXYtXHUwMDNlc2xvdCkpID9cbi1cdCAgICBwY2lfdHJ5X3Jlc2V0X3Nsb3QocGRldi1cdTAwM2VzbG90KSA6IHBjaV90cnlfcmVzZXRfYnVzKHBkZXYtXHUwMDNlYnVzKTtcbitcdHJldHVybiBwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgTlVMTCwgTlVMTCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9idXMpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmhcbmluZGV4IDQ0NjllMWE3N2YzYzEuLjQxNmZkNmI3NGFiZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wY2kuaFxuKysrIGIvZHJpdmVycy9wY2kvcGNpLmhcbkBAIC0yMzAsNyArMjMwLDYgQEAgZW51bSBwY2lfbW1hcF9hcGkge1xuIGludCBwY2lfbW1hcF9maXRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgcmVzbm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1haSxcbiBcdFx0ICBlbnVtIHBjaV9tbWFwX2FwaSBtbWFwX2FwaSk7XG4gXG4tYm9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIHZvaWQgcGNpX2luaXRfcmVzZXRfbWV0aG9kcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX2JyaWRnZV9zZWNvbmRhcnlfYnVzX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfYnVzX2Vycm9yX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbmluZGV4IDNmMTFhOTYyNGI5YzAuLjhlNDIzNDJkNTZkM2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC02MDksNyArNjA5LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdGlmIChyZXQgPT0gLUVBR0FJTilcbiBcdFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XG4gXG4tXHR2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzID0gIXJldDtcbiBcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuIFx0dmRldi1cdTAwM2VwY2lfc2F2ZWRfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7XG4gXHRpZiAoIXZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKVxuQEAgLTc2Niw3ICs3NjUsNyBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRpZiAocGNpX2xvYWRfYW5kX2ZyZWVfc2F2ZWRfc3RhdGUocGRldiwgXHUwMDI2dmRldi1cdTAwM2VwY2lfc2F2ZWRfc3RhdGUpKSB7XG4gXHRcdHBjaV9pbmZvKHBkZXYsIFwiJXM6IENvdWxkbid0IHJlbG9hZCBzYXZlZCBzdGF0ZVxcblwiLCBfX2Z1bmNfXyk7XG4gXG4tXHRcdGlmICghdmRldi1cdTAwM2VyZXNldF93b3JrcylcbitcdFx0aWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKHBkZXYpKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFxuIFx0XHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbkBAIC03ODUsMTIgKzc4NCwxNCBAQCB2b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHQgKiBXZSBjYW4gbm90IHVzZSB0aGUgXCJ0cnlcIiByZXNldCBpbnRlcmZhY2UgaGVyZSwgd2hpY2ggd2lsbFxuIFx0ICogb3ZlcndyaXRlIHRoZSBwcmV2aW91c2x5IHJlc3RvcmVkIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXG4gXHQgKi9cbi1cdGlmICh2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzKSB7XG4rXHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KSkge1xuIFx0XHRicmlkZ2UgPSBwY2lfdXBzdHJlYW1fYnJpZGdlKHBkZXYpO1xuIFx0XHRpZiAoYnJpZGdlIFx1MDAyNlx1MDAyNiAhcGNpX2Rldl90cnlsb2NrKGJyaWRnZSkpXG4gXHRcdFx0Z290byBvdXRfcmVzdG9yZV9zdGF0ZTtcbiBcdFx0aWYgKHBjaV9kZXZfdHJ5bG9jayhwZGV2KSkge1xuLVx0XHRcdGlmICghX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHBkZXYpKVxuK1x0XHRcdC8qIEVuZm9yY2UgZnVuY3Rpb24gc2NvcGUgdW5kZXIgbG9jayBmb3IgU1ItSU9WIFBGcyAqL1xuK1x0XHRcdGlmICghcGNpX251bV92ZihwZGV2KSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIV9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KSlcbiBcdFx0XHRcdHZkZXYtXHUwMDNlbmVlZHNfcmVzZXQgPSBmYWxzZTtcbiBcdFx0XHRwY2lfZGV2X3VubG9jayhwZGV2KTtcbiBcdFx0fVxuQEAgLTg5Miw2ICs4OTMsMTcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3VudF9kZXZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuKy8qXG4rICogUENJIHdhbGsgY2FsbGJhY2sgdG8gY2hlY2sgZm9yIFNSLUlPViBQRnMgd2l0aCBhY3RpdmUgVkZzLiAgVkZzIGFyZSBub3RcbisgKiBlbnVtZXJhdGVkIHdoZW4gZGV0ZXJtaW5pbmcgYWZmZWN0ZWQgZGV2aWNlcyBhbmQgbWF5IGJlIG93bmVkIGJ5IHNlcGFyYXRlXG4rICogdXNlcnNwYWNlIHByb2Nlc3NlcyBmcm9tIHRoZSBQRi4gIEl0J3MgdGhlcmVmb3JlIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHlcbisgKiB0byB0ZWFyZG93biBWRnMgZm9yIGFueSBhZmZlY3RlZCBQRiBiZWZvcmUgcGVyZm9ybWluZyBhIGhvdC1yZXNldC5cbisgKi9cbitzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9oYXNfdmZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKVxuK3tcbitcdHJldHVybiBwY2lfbnVtX3ZmKHBkZXYpID8gLUVCVVNZIDogMDtcbit9XG4rXG4gc3RydWN0IHZmaW9fcGNpX2ZpbGxfaW5mbyB7XG4gXHRzdHJ1Y3QgdmZpb19kZXZpY2UgKnZkZXY7XG4gXHRzdHJ1Y3QgdmZpb19wY2lfZGVwZW5kZW50X2RldmljZSAqZGV2aWNlcztcbkBAIC0xMDg1LDcgKzEwOTcsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcbiBcdGluZm8uZmxhZ3MgPSBWRklPX0RFVklDRV9GTEFHU19QQ0k7XG4gXG4tXHRpZiAodmRldi1cdTAwM2VyZXNldF93b3JrcylcbitcdGlmIChwY2lfcmVzZXRfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4gXHRcdGluZm8uZmxhZ3MgfD0gVkZJT19ERVZJQ0VfRkxBR1NfUkVTRVQ7XG4gXG4gXHRpbmZvLm51bV9yZWdpb25zID0gVkZJT19QQ0lfTlVNX1JFR0lPTlMgKyB2ZGV2LVx1MDAzZW51bV9yZWdpb25zO1xuQEAgLTEzMTcsNyArMTMyOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRpZiAoIXZkZXYtXHUwMDNlcmVzZXRfd29ya3MpXG4rXHRpZiAoIXBjaV9yZXNldF9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHR2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2sodmRldik7XG5AQCAtMjU5Niw3ICsyNjA4LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeSh2ZGV2LCBcdTAwMjZkZXZfc2V0LVx1MDAzZWRldmljZV9saXN0LCB2ZGV2LmRldl9zZXRfbGlzdClcbiBcdFx0dmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XG4gXG4tXHRyZXQgPSBwY2lfcmVzZXRfYnVzKHBkZXYpO1xuK1x0cmV0ID0gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIHZmaW9fcGNpX2Rldl9oYXNfdmZzLCBOVUxMKTtcbiBcbiBcdHZkZXYgPSBsaXN0X2xhc3RfZW50cnkoXHUwMDI2ZGV2X3NldC1cdTAwM2VkZXZpY2VfbGlzdCxcbiBcdFx0XHQgICAgICAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlLCB2ZGV2LmRldl9zZXRfbGlzdCk7XG5AQCAtMjY1OSw3ICsyNjcxLDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZGV2X3NldF90cnlfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldClcbiBcdGlmICh2ZmlvX3BjaV9kZXZfc2V0X3BtX3J1bnRpbWVfZ2V0KGRldl9zZXQpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIXBjaV9yZXNldF9idXMocGRldikpXG4rXHRpZiAoIXBjaV9yZXNldF9idXNfY29uZChwZGV2LCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcywgTlVMTCkpXG4gXHRcdHJlc2V0X2RvbmUgPSB0cnVlO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsIFx1MDAyNmRldl9zZXQtXHUwMDNlZGV2aWNlX2xpc3QsIHZkZXYuZGV2X3NldF9saXN0KSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDY0YjMwOGI2ZTYxYzEuLjRkZTIxZTZhYzUzOGYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5AQCAtMTQ3NCwxMiArMTQ3NCwxNiBAQCB2b2lkIHBjaWVfcHJpbnRfbGlua19zdGF0dXMoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaWVfcmVzZXRfZmxyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgcHJvYmUpO1xuIGludCBwY2llX2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuK2Jvb2wgcGNpX3Jlc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2lfcHJvYmVfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpO1xuIGludCBwY2lfcHJvYmVfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpO1xuIGludCBwY2lfcmVzZXRfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuK2ludCBwY2lfcmVzZXRfYnVzX2NvbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4rXHRcdCAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4rXHRcdCAgICAgICB2b2lkICpkYXRhKTtcbiB2b2lkIHBjaV9yZXNldF9zZWNvbmRhcnlfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIHZvaWQgcGNpYmlvc19yZXNldF9zZWNvbmRhcnlfYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIHZvaWQgcGNpX3VwZGF0ZV9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8pO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbmluZGV4IDlhMTY3NGMxNTJhYTIuLjZmYjU5OWVjMjkxOTEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuKysrIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbkBAIC0xMjEsNyArMTIxLDYgQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHtcbiBcdC8qIEZsYWdzIG9ubHkgbW9kaWZpZWQgb24gc2V0dXAvcmVsZWFzZSAtIGJpdGZpZWxkIG9rICovXG4gXHRib29sXHRcdFx0aGFzX2R5bl9tc2l4OjE7XG4gXHRib29sXHRcdFx0cGNpXzJfMzoxO1xuLVx0Ym9vbFx0XHRcdHJlc2V0X3dvcmtzOjE7XG4gXHRib29sXHRcdFx0ZXh0ZW5kZWRfY2FwczoxO1xuIFx0Ym9vbFx0XHRcdGhhc192Z2E6MTtcbiBcdGJvb2xcdFx0XHRub2ludHg6MTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuaW5kZXggNWRlNjE4YTNhNWVlZS4uODYwMzk1OWYxNzM1MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbkBAIC03NzIsNiArNzcyLDkgQEAgc3RydWN0IHZmaW9fcGNpX2hvdF9yZXNldF9pbmZvIHtcbiAgKiBNaXhlZCB1c2FnZSBvZiBsZWdhY3kgZ3JvdXBzIGFuZCBjZGV2cyBhY3Jvc3MgdGhlIHNldCBvZiBhZmZlY3RlZFxuICAqIGRldmljZXMgaXMgbm90IHN1cHBvcnRlZC5cbiAgKlxuKyAqIEhvdCByZXNldCBvZiBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcyBpcyBub3Qgc3VwcG9ydGVkLCBTUi1JT1ZcbisgKiBzaG91bGQgZmlyc3QgYmUgZGlzYWJsZWQgb24gYW55IGFmZmVjdGVkIFBGLlxuKyAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLlxuICAqL1xuIHN0cnVjdCB2ZmlvX3BjaV9ob3RfcmVzZXQge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjQ6NTQuMDM1MTIxNTg3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5MzYxNjAxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFBDSSBSZXNldCBMb2dpYyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCBJIG5lZWQgdG8gYXNzZXNzIGZvciBmdXp6aW5nIHBvdGVudGlhbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBkZWZpbml0ZWx5IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFBDSSBzdWJzeXN0ZW0gYW5kIHRoZSBWRklPIFBDSSBjb3JlLCBzbyBpdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHRvdWNoZXMgYGRyaXZlcnMvcGNpL3BjaS5jYCBhbmQgYGRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jYCwgd2hpY2ggYXJlIGNyaXRpY2FsIGFyZWFzLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlIFBDSSByZXNldCBsb2dpYy4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgcGNpX3Jlc2V0X2Z1bmN0aW9uYCwgYHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWRgLCBhbmQgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gLCBhZGRpbmcgY2hlY2tzIHJlbGF0ZWQgdG8gdGhlIG51bWJlciBvZiB2aXJ0dWFsIGZ1bmN0aW9ucyAoYHBjaV9udW1fdmYoZGV2KSBcdTAwM2UgMGApLiBJdCBpbnRyb2R1Y2VzIGBwY2lfcmVzZXRfYnVzX2NvbmRgIGFuZCBhbHRlcnMgaG93IGBwY2lfdHJ5X3Jlc2V0X3Nsb3RgIGFuZCBgcGNpX3RyeV9yZXNldF9idXNgIHdvcmssIGluY29ycG9yYXRpbmcgYSBjYWxsYmFjayBmdW5jdGlvbi4gVGhlIFZGSU8gc2lkZSBsZXZlcmFnZXMgdGhpcyBuZXcgYHBjaV9yZXNldF9idXNfY29uZGAgd2l0aCBhIGB2ZmlvX3BjaV9kZXZfaGFzX3Zmc2AgY2FsbGJhY2sgdG8gcHJldmVudCBob3QgcmVzZXRzIG9mIFNSLUlPViBQaHlzaWNhbCBGdW5jdGlvbnMgd2l0aCBhY3RpdmUgVmlydHVhbCBGdW5jdGlvbnMuIEknbSBhbHNvIHNlZWluZyBzb21lIGNsZWFudXAgd2hlcmUgYHZkZXYtXHUwMDNlcmVzZXRfd29ya3NgIGlzIHJlbW92ZWQgaW4gZmF2b3Igb2YgYSBkaXJlY3QgY2hlY2sgd2l0aCBgcGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KWAuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQ29uc2lkZXJpbmcgVkZJTyBhbmQgUENJIHJlc2V0cyBhcmUgUUVNVSBjb250cm9sbGFibGUsIHRoZSBhbnN3ZXIgaXMgYSB5ZXMuIE5vdywgUUVNVSBoYXMgc29tZSBzdXBwb3J0IGZvciBTUi1JT1YgKGlnYiwgbnZtZSkuIEhvd2V2ZXIsIGV2ZW4gd2l0aG91dCBTUi1JT1YsIHRoZSBjb3JlIFBDSSByZXNldCBmdW5jdGlvbnMgbGlrZSBgcGNpX3Jlc2V0X2Z1bmN0aW9uYCBhbmQgdGhlIG5ldyBgcGNpX3Jlc2V0X2J1c19jb25kYCB3aWxsIGJlIHJlYWNoZWQsIHNvIHRoaXMgbmVlZHMgdG8gYmUgZnV6emVkIGV2ZW4gaWYgU1ItSU9WIGlzIG5vdCBwcmVzZW50LiBUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIGNvcmUgUENJIGZ1bmN0aW9uczogYHBjaV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYCwgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gLCBgcGNpX3Jlc2V0X2J1c19jb25kYCwgYHBjaV9yZXNldF9idXNgLlxuXG5JJ2xsIGNoZWNrIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zLiBJIGtub3cgdGhhdCBgcGNpX3Jlc2V0X2Z1bmN0aW9uYCBpcyBleHBvcnRlZCBhbmQgdXNlZCBieSB2YXJpb3VzIGRyaXZlcnMsIHBsdXMgc3lzZnMsIHNvIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRyeSBwb2ludHMuIGBwY2lfcmVzZXRfYnVzX2NvbmRgIGlzIGFsc28gZXhwb3J0ZWQgYW5kLCBjcnVjaWFsbHksIHVzZWQgYnkgVkZJTywgd2hpY2ggZ2l2ZXMgdXMgYSBncmVhdCB0YXJnZXQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgbmVlZCBgQ09ORklHX1BDSWAsIG9idmlvdXNseS4gVGhlbiwgZm9yIHN1cmUsIEknbGwgbmVlZCBgQ09ORklHX1ZGSU9fUENJYCB0byBhY3RpdmF0ZSB0aGUgVkZJTyBjaGFuZ2VzLiBJJ2xsIHNlYXJjaCBmb3IgYHBjaV9yZXNldF9idXNfY29uZGAgaW4gYGRyaXZlcnMvcGNpL3BjaS5jYCBmb3IgYW55IGV4dHJhIGNvbmZpZyBvcHRpb24gaW5mby5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjA2Ljk3MTI4NTQ3NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDMxMjA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcmVzZXRfYnVzX2NvbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wY2kvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvcGNpLmM9NTc2Nj1FWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfYnVzKTtcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS5jLTU3NjgtLyoqXFxuZHJpdmVycy9wY2kvcGNpLmM6NTc2OTogKiBwY2lfcmVzZXRfYnVzX2NvbmQgLSBjb25kaXRpb25hbGx5IHJlc2V0IHRoZSBzbG90IG9yIGJ1cyBjb250YWluaW5nIGEgZGV2aWNlXFxuZHJpdmVycy9wY2kvcGNpLmMtNTc3MC0gKiBAcGRldjogdG9wIGxldmVsIFBDSSBkZXZpY2UgdG8gcmVzZXQgdmlhIHNsb3QvYnVzXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01Nzg1LSAqL1xcbmRyaXZlcnMvcGNpL3BjaS5jOjU3ODY6aW50IHBjaV9yZXNldF9idXNfY29uZChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL3BjaS9wY2kuYy01Nzg3LVxcdFxcdCAgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01NzkzLX1cXG5kcml2ZXJzL3BjaS9wY2kuYzo1Nzk0OkVYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9idXNfY29uZCk7XFxuZHJpdmVycy9wY2kvcGNpLmMtNTc5NS1cXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS5jPTU4MDI9aW50IHBjaV9yZXNldF9idXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9wY2kvcGNpLmMtNTgwMy17XFxuZHJpdmVycy9wY2kvcGNpLmM6NTgwNDpcXHRyZXR1cm4gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIE5VTEwsIE5VTEwpO1xcbmRyaXZlcnMvcGNpL3BjaS5jLTU4MDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNTowNy4wMjU2MDU4MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ3ODIxODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBWRklPLVBDSSBEZXZpY2UgQ2FwYWJpbGl0aWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGEgVkZJTy1QQ0kgZGV2aWNlIGlzIGhhbmRsaW5nIHZpcnR1YWwgZnVuY3Rpb25zIChWRnMpLiBMZXQncyBkaXZlIHJpZ2h0IGludG8gdGhlIGNvcmUgb2YgdGhlIG1hdHRlciwgd2hpY2ggbWVhbnMgSSBzaG91bGQgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgdmZpb19wY2lfY29yZS5jYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvdmZpby9wY2lgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gdGhlIGB2ZmlvX3BjaV9kZXZfaGFzX3Zmc2AgZnVuY3Rpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgVkZJTyBkcml2ZXIgZGV0ZXJtaW5lcyBpZiBhIGdpdmVuIFBDSSBkZXZpY2UgaXMgc2V0IHVwIHRvIGV4cG9zZSB2aXJ0dWFsIGZ1bmN0aW9ucywgYW5kIHRoZSBtZWNoYW5pc21zIGl0IHVzZXMgdG8gbWFuYWdlIHRoZW0uIFVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbidzIGxvZ2ljIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCBpbnNpZ2h0IGludG8gdGhlIGRyaXZlcidzIFZGIGNhcGFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc2NSwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjEwLjY3MzQzMDU1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjcyNjEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV9kZXZfaGFzX3Zmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz04OTA9c3RhdGljIGludCB2ZmlvX3BjaV9jb3VudF9kZXZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtOTAxLSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjkwMjpzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9oYXNfdmZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTkwMy17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0yNTE2PXN0YXRpYyBpbnQgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTI2MTAtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MjYxMTpcXHRyZXQgPSBwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgdmZpb19wY2lfZGV2X2hhc192ZnMsIE5VTEwpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTI2MTItXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0yNjUzPXN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0yNjczLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjI2NzQ6XFx0aWYgKCFwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgdmZpb19wY2lfZGV2X2hhc192ZnMsIE5VTEwpKVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTI2NzUtXFx0XFx0cmVzZXRfZG9uZSA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjEwLjcyMDE2Mjk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NTcwNDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiB0aGUgVkZJTyBSZXNldCBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWFuYWdpbmcgUENJIHJlc2V0cywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVkZJTyBjb250ZXh0LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlc2UgZnVuY3Rpb25zOiBgcGNpX3Jlc2V0X2J1c19jb25kYCwgYHBjaV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYCwgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gLCBgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXRgLCBgdmZpb19wY2lfZGV2X3NldF90cnlfcmVzZXRgLCBhbmQgYHZmaW9fcGNpX2lvY3RsX3Jlc2V0YC4gRWFjaCBvbmUgbGlrZWx5IHBsYXlzIGEgdml0YWwgcm9sZSBpbiBvcmNoZXN0cmF0aW5nIHRoZSByZXNldCBwcm9jZWR1cmVzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIGFuZCByZXNwb25zaWJpbGl0aWVzLiBCZWZvcmUgSSBkaXZlIGludG8gdGhlaXIgaW1wbGVtZW50YXRpb25zLCBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgdG8gZW5zdXJlIHRoYXQgVkZJT19QQ0kgaXMgZW5hYmxlZC4gVGhpcyB3aWxsIGdpdmUgbWUgZnVydGhlciBjb250ZXh0IGZvciB0aGUgaW1wb3J0YW5jZSBhbmQgaW1wYWN0IG9mIHRoZSByZXNldCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTEyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjE0LjI5NTg3MDIzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY1NjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkZJT19QQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXFxcIlZGSU8gc3VwcG9ydCBmb3IgUENJIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNC1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTpjb25maWcgVkZJT19QQ0lfQ09SRVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTA6Y29uZmlnIFZGSU9fUENJX0lOVFhcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTEzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoyNDpjb25maWcgVkZJT19QQ0lfVkdBXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgc3VwcG9ydCBmb3IgVkdBIGRldmljZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzMtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjM0OmNvbmZpZyBWRklPX1BDSV9JR0RcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiR2VuZXJpYyBWRklPIFBDSSBleHRlbnNpb25zIGZvciBJbnRlbCBncmFwaGljcyAoR1ZULWQpXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnPTQ1PWVuZGlmXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo0Nzpjb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgczM5MHggS1ZNIHBhc3N0aHJvdWdoXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzo1ODpjb25maWcgVkZJT19QQ0lfRE1BQlVGXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVxcdGRlZl9ib29sIHkgaWYgVkZJT19QQ0lfQ09SRSBcXHUwMDI2XFx1MDAyNiBQQ0lfUDJQRE1BIFxcdTAwMjZcXHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjE0LjM0MTUzMjA2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MzYyMTE2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gbG9va2luZyBhdDpcblxuKipWRklPLVBDSSBSZXNldCBGdW5jdGlvbmFsaXR5IERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYFZGSU9fUENJYCBoZXJlLCB0aGF0J3Mgb3VyIHRhcmdldC4gTXkgbWFpbiBjb25jZXJuIHJpZ2h0IG5vdyBpcyB1bmRlcnN0YW5kaW5nIHRoZSByZXNldCBjYXBhYmlsaXRpZXMgd2l0aGluIHRoaXMgc2V0dXAuIFNwZWNpZmljYWxseSwgSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIFBDSSBidXMgYW5kIGluZGl2aWR1YWwgZnVuY3Rpb25zIGFyZSByZXNldC5cblxuRmlyc3QgdGhpbmdzIGZpcnN0OiBMZXQgbWUgY29uZmlybSBpZiB0aGUga2VybmVsIGV4cG9ydHMgdGhlIGNydWNpYWwgZnVuY3Rpb25zIHdlIG5lZWQuIEknbSBjaGVja2luZyBpZiBgcGNpX3Jlc2V0X2J1c19jb25kYCBpcyBleHBvc2VkIGFzIGEgc3ltYm9sIGFuZCwgc3VyZSBlbm91Z2gsIGl0J3MgdGhlcmUsIGZsYWdnZWQgYXMgYEVYUE9SVF9TWU1CT0xfR1BMYC4gUGVyZmVjdCEgVGhlbiwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgYHBjaV9yZXNldF9mdW5jdGlvbmAsIFllcCwgdGhhdCdzIHRoZXJlIHRvby4gRmluYWxseSwgd2hhdCBhYm91dCB0aGUgbG9ja2VkIHZlcnNpb24gb2YgdGhhdCwgYHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWRgPyBJIG5lZWQgdG8ga25vdyBpZiB0aGF0J3MgYWxzbyBhdmFpbGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzkwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6MTguOTc3NzQ2Nzc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA3MTk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0dQTFxcXFwocGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZFxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvcGNpL3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL3BjaS5jPTUyNzA9aW50IHBjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQoc3RydWN0IHBjaV9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS5jLTUyODktfVxcbmRyaXZlcnMvcGNpL3BjaS5jOjUyOTA6RVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZCk7XFxuZHJpdmVycy9wY2kvcGNpLmMtNTI5MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6MTkuMDI0ODI4MzMzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzAyMTYyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgRnVuY3Rpb24gRXhwb3J0KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGUgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gIGZ1bmN0aW9uIGlzIGV4cG9zZWQsIGkuZS4sIGV4cG9ydGVkLCBmb3IgdXNlIG91dHNpZGUgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCAqbGlrZWx5KiBkZWZpbmVzIGl0LiBUaGlzIGlzIGEgY29tbW9uIGZpcnN0IHN0ZXAsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcmFjdGluZyB3aXRoIFBDSSBkZXZpY2VzIG9yIHRyeWluZyB0byB3cml0ZSBhIGRyaXZlciBtb2R1bGUuIElmIGl0J3Mgbm90IGV4cG9ydGVkLCB0aGVuIEkgbmVlZCB0byBjb25zaWRlciBhbHRlcm5hdGl2ZXMg4oCTIHdoZXRoZXIgdGhlcmUncyBhbiBlcXVpdmFsZW50IGZ1bmN0aW9uYWxpdHkgYWxyZWFkeSBleHBvc2VkLCBpZiBJJ2xsIG5lZWQgdG8gcmV3cml0ZSBjb2RlIG9yIGJ1aWxkIHRoZSBtb2R1bGUgYWdhaW5zdCBhIGN1c3RvbSBrZXJuZWwgb3IsIHdvcnN0IGNhc2UsIGlmIEkgaGF2ZSB0byBjb25zaWRlciBhIGNvbXBsZXRlIGNoYW5nZSBvZiBhcHByb2FjaC4gVGhlIGFuc3dlciBoZXJlIGRpY3RhdGVzIGEgKmxvdCogb2YgdGhlIG5leHQgc3RlcHMsIHNvIEkgbmVlZCB0aGlzIGluZm9ybWF0aW9uIGF0IGhhbmQgYmVmb3JlIEkgc3RhcnQgZG9pbmcgYW55IGtpbmQgb2YgaGVhdnktbGlmdGluZyB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgzOSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjIyLjI1NTA0NzMyM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ0MDgwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKHBjaV90cnlfcmVzZXRfZnVuY3Rpb25cXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BjaS9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjaS9wY2kuYz01Mjk4PWludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy01MzE5LX1cXG5kcml2ZXJzL3BjaS9wY2kuYzo1MzIwOkVYUE9SVF9TWU1CT0xfR1BMKHBjaV90cnlfcmVzZXRfZnVuY3Rpb24pO1xcbmRyaXZlcnMvcGNpL3BjaS5jLTUzMjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjIyLjI5OTQ2MDg0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUyOTg2MDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipQQ0kgQnVzIFJlc2V0IEV4cG9ydCBDaGVjayoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgZnVuZGFtZW50YWwuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIHRoZSBgcGNpX3Jlc2V0X2J1c2AgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBmaXJzdCBzdGVwLiBJIGNhbid0IHByb2NlZWQgd2l0aCBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgaXRzIGF2YWlsYWJpbGl0eSBvciB1c2FnZSBpZiBpdCdzIG5vdCBhY3R1YWxseSBtYWRlIHB1YmxpYy4gS25vd2luZyB3aGV0aGVyIGl0J3MgZXhwb3J0ZWQgZGljdGF0ZXMgdGhlIGVudGlyZSBhcHByb2FjaCBJJ2xsIHRha2UuIElmIGl0IGlzbid0LCBJJ2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgcmUtZXZhbHVhdGUgYW5kIGxvb2sgZm9yIGFsdGVybmF0aXZlIG1ldGhvZHMuIFNvLCBsZXQncyB2ZXJpZnkgdGhhdCBleHBvcnQgc3RhdHVzIGJlZm9yZSBtb3ZpbmcgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTk1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6MjUuMjUyNDUwNDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTA2MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXChwY2lfcmVzZXRfYnVzXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wY2kvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvcGNpLmM9NTgwMj1pbnQgcGNpX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS5jLTU4MDUtfVxcbmRyaXZlcnMvcGNpL3BjaS5jOjU4MDY6RVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2V0X2J1cyk7XFxuZHJpdmVycy9wY2kvcGNpLmMtNTgwNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6MjUuMjk4OTYyODI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzI0NzgxMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgS2VybmVsIFN5bWJvbCBFeHBvcnQgU3RhdHVzKipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgdG8gdmVyaWZ5IGlmIHRoZSBgcGNpX3Jlc2V0X3N1cHBvcnRlZGAgc3ltYm9sIGlzIGFjdHVhbGx5IGV4cG9ydGVkIGJ5IHRoZSBrZXJuZWwuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAuIElmIHRoZSBzeW1ib2wgaXNuJ3QgZXhwb3J0ZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZXZlbiB0cnlpbmcgdG8gdXNlIGl0IOKAkyBpdCB3b24ndCBiZSB2aXNpYmxlIHRvIG1vZHVsZXMgb3IgZXh0ZXJuYWwgY29kZS4gSXQncyBiYXNpYyBkdWUgZGlsaWdlbmNlLCBlbnN1cmluZyB3ZSdyZSBub3QgY2hhc2luZyBhIGdob3N0IGFuZCB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IHdlJ3JlIGFpbWluZyB0byBsZXZlcmFnZSBpcywgaW4gZmFjdCwgYXZhaWxhYmxlIGZvciB1cyB0byB3b3JrIHdpdGguIEJlZm9yZSBkaXZpbmcgYW55IGRlZXBlciwgdGhpcyBjaGVjayBpcyBtYW5kYXRvcnkuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNToyOC44MzE0NDUwOTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODExMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXChwY2lfcmVzZXRfc3VwcG9ydGVkXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wY2kvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvcGNpLmM9OTc9Ym9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS9wY2kuYy0xMDAtfVxcbmRyaXZlcnMvcGNpL3BjaS5jOjEwMTpFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfc3VwcG9ydGVkKTtcXG5kcml2ZXJzL3BjaS9wY2kuYy0xMDItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjI4Ljg3NzI2MTc4OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDE4MjM1MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUENJIFJlc2V0IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgdGhlbiB0d2Vha2luZyBzZXZlcmFsIGV4aXN0aW5nIGZ1bmN0aW9uczogYHBjaV9yZXNldF9mdW5jdGlvbmAsIGBwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkYCwgYHBjaV90cnlfcmVzZXRfZnVuY3Rpb25gLCBhbmQgYHBjaV9yZXNldF9idXNgLiBUaGF0J3MgdGhlIGNvcmUgUENJIHJlc2V0IGluZnJhc3RydWN0dXJlIGJlaW5nIHRvdWNoZWQsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGF0IGB2ZmlvX3BjaV9jb3JlLmNgIGlzIGFsc28gZ2V0dGluZyBtb2RpZmllZCB0byBtYWtlIHVzZSBvZiB0aGUgbmV3IGNvbmRpdGlvbmFsIGJ1cyByZXNldCBmdW5jdGlvbiBhbmQgYHBjaV9yZXNldF9zdXBwb3J0ZWRgLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHRpZ2h0ZW5pbmcgdGhlIGludGVncmF0aW9uIHdpdGggVkZJTy5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUga2V5IGZ1bmN0aW9ucyBpbXBsaWNhdGVkIGluIHRoaXMgY2hhbmdlOiBgcGNpX3Jlc2V0X2J1c19jb25kYCwgdGhlIHByaW1hcnkgbmV3IG9uZSwgaXMgbmF0dXJhbGx5IHRoZSBwcmlvcml0eS4gVGhlbiwgdGhlIHN0YW5kYXJkIGBwY2lfcmVzZXRfZnVuY3Rpb25gIGZhbWlseSBpcyBnZXR0aW5nIHJldmlzZWQuIEl0IGFsc28gbG9va3MgbGlrZSB0aGUgVkZJTyBjb2RlIGhhcyBzZWVuIHNpZ25pZmljYW50IGNoYW5nZSwgc2luY2UgYHZmaW9fcGNpX2NvcmUuY2AgaXMgYmVpbmcgYWx0ZXJlZC4gU3BlY2lmaWNhbGx5LCBgdmZpb19wY2lfaW9jdGxfcmVzZXRgLCB3aGljaCBoYW5kbGVzIHRoZSBpb2N0bCBmb3IgcmVzZXQsIGlzIHN0YXRpYywgYnV0IGl0J3MgKmNhbGxlZCogZnJvbSBgdmZpb19wY2lfY29yZV9pb2N0bGAgd2hpY2ggaXMsIGFzIGFuIGlvY3RsIGhhbmRsZXIsIGV4cG9ydGVkLiBUaGVuLCB3ZSBoYXZlIGB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldGAsIGFuZCBgdmZpb19wY2lfZGV2X3NldF90cnlfcmVzZXRgLCB3aGljaCBhcmUgYWxzbyBzdGF0aWMsIHdpdGggdGhlIGxhdHRlciBiZWluZyB1c2VkIGR1cmluZyBWRklPIGRldmljZSBkaXNhYmxlLlxuXG5Ib2xkIG9uLi4uIGB2ZmlvX3BjaV9pb2N0bF9yZXNldGAgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IGlmIGl0J3MgYmVpbmcgdXNlZCBieSBgdmZpb19wY2lfY29yZV9pb2N0bGAsIHRoZW4gdGhhdCBtZWFucyBpdCdzIHN0aWxsIGJlaW5nIGFjY2Vzc2VkIGV4dGVybmFsbHkuIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCBgdmZpb19wY2lfY29yZV9pb2N0bGAgaXMgaW5kZWVkIGV4cG9ydGVkLiBJdCdzIGEgY3JpdGljYWwgcG9pbnQgdG8gZW5zdXJlIHRoZSBWRklPIHJlc2V0IG1lY2hhbmlzbSBpcyBwcm9wZXJseSBleHBvc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTgyNCwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNTozNC44OTU1MDA0OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTI4MDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXCh2ZmlvX3BjaV9jb3JlX2lvY3RsXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTU2Nz1sb25nIHZmaW9fcGNpX2NvcmVfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTkyLX1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNTkzOkVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfaW9jdGwpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE1OTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjM0Ljk0MzYzNjU3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDc1MzI5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSWRlbnRpZnlpbmcgdGhlIEtleSBGb2N1cyBmb3IgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBjaG9vc2UgdGhlIGJlc3QgZm9jdXMgZm9yIGRpZ2dpbmcgaW50byB0aGlzLiBgdmZpb19wY2lfY29yZV9pb2N0bGAuLi4gd2hpbGUgaXQgKmlzKiB0aGUgZ2VuZXJpYyBpb2N0bCBoYW5kbGVyLCB0aGF0J3MgYWxtb3N0IHRvbyBicm9hZCwgaXNuJ3QgaXQ/IEl04oCZcyBwcm9iYWJseSBnb2luZyB0byBsZWFkIHRvIGEgbG90IG9mIG5vaXNlLiBNYXliZSBzdGFydGluZyB0aGVyZSBpcyBhIGdvb2QgaWRlYSB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLCBidXQgaXQgbWlnaHQgYmUgaW5lZmZpY2llbnQuIGB2ZmlvX3BjaV9jb3JlX2Rpc2FibGVg4oCmIG5vdyAqdGhhdCogc2VlbXMgbW9yZSBwcm9taXNpbmcuIFNwZWNpZmljYWxseSwgKmRpc2FibGluZyogYSBmdW5jdGlvbiwgY291bGQgcmV2ZWFsIG1vcmUgYWJvdXQgYW55IHNwZWNpZmljIGlzc3VlcyBwcmVzZW50LiBMZXQncyBzdGFydCB3aXRoIHRoYXQgYW5kIHRoZW4gY2lyY2xlIGJhY2sgdG8gdGhlIElvQ3RsIGhhbmRsZXIgaWYgd2UgbmVlZCB0by5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MjEsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNTozOC40OTExNzI3NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyODU0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKHZmaW9fcGNpX2NvcmVfZGlzYWJsZVxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTY3OD12b2lkIHZmaW9fcGNpX2NvcmVfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy04MTItfVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjgxMzpFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX2Rpc2FibGUpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTgxNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6MzguNTM1NDY1MDY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODc5MjA5MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIFZGSU8tUENJJ3MgRXhwb3J0ZWQgU3ltYm9scyoqXG5cbkFscmlnaHQsIHNvIGB2ZmlvX3BjaV9jb3JlX2Rpc2FibGVgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQuIFRoYXQgY29uZmlybXMgYSBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIHRoZSBuYXR1cmFsIGZvbGxvdy11cCBxdWVzdGlvbiBpc+KApiB3aGF0IGFib3V0IGl0cyBjb3VudGVycGFydD8gSXMgYHZmaW9fcGNpX2NvcmVfZW5hYmxlYCBhbHNvIGV4cG9zZWQ/IEkgbmVlZCB0byBrbm93IGlmIEkgaGF2ZSB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbiBvciBpZiB0aGVyZSBpcyBhbm90aGVyIG1lY2hhbmlzbSBmb3IgdGhlIGVuYWJsZSBwcm9jZWR1cmUuIFRoaXMgY291bGQgaW1wYWN0IGhvdyBJIGFwcHJvYWNoIFggb24gbXkgY3VycmVudCBwcm9qZWN0LiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgc3ltYm9sIHRhYmxlIGRpcmVjdGx5IHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTM2LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6NDEuNzIzMzg5MjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODk5NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXCh2ZmlvX3BjaV9jb3JlX2VuYWJsZVxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTU4Nz1pbnQgdmZpb19wY2lfY29yZV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtNjc1LX1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzo2NzY6RVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV9lbmFibGUpO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTY3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6NDEuNzcxMjkzNDM5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzI1Njg2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWRklPIFBDSSBSZXNldCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBpdCdzIGFsdGVyaW5nIHRoZSByZXNldCBtZWNoYW5pc21zIHdpdGhpbiB0aGUgVkZJTy1QQ0kgZnJhbWV3b3JrLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgdmZpb19wY2lfY29yZV9lbmFibGVgIGFuZCBgdmZpb19wY2lfY29yZV9kaXNhYmxlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJvdXRpbmVzIGFyZSBiZWluZyBtb2RpZmllZCBhbmQgaG93IHRoYXQgYWZmZWN0cyB0aGUgZGV2aWNlIHJlc2V0IGxpZmVjeWNsZS5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gc29tZSBrZXkgc3ltYm9scy4gSSdtIG5vdGluZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgYXMgdGhleSBhcmUgbGlrZWx5IHdoZXJlIHRoZSBoZWF2eSBsaWZ0aW5nIGlzIGhhcHBlbmluZzogYHBjaV9yZXNldF9idXNfY29uZGAsIGBwY2lfcmVzZXRfZnVuY3Rpb25gLCBgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZGAsIGBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uYCwgYHZmaW9fcGNpX2NvcmVfaW9jdGxgLCBgdmZpb19wY2lfY29yZV9kaXNhYmxlYCwgYW5kIGB2ZmlvX3BjaV9jb3JlX2VuYWJsZWAuXG5cbldhaXQgYSBtaW51dGUsIEkgc2VlIHRoYXQgYHBjaV9yZXNldF9idXNgIGlzIGFsc28gYmVpbmcgdG91Y2hlZCwgd2hpY2ggaXMgbm93IGNhbGxpbmcgYHBjaV9yZXNldF9idXNfY29uZGAuIFRoYXQncyBhbiBpbXBvcnRhbnQgY2hhbmdlOyBJJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdW5jdGlvbiBhcyB3ZWxsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjb25kaXRpb25hbCByZXNldCBsb2dpYyBoZXJlLlxuXG5BIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBgcGNpX3Jlc2V0X3N1cHBvcnRlZGAgaXMgYmVpbmcgZXhwb3J0ZWQuIFRoaXMgc3VnZ2VzdHMgaXQncyBiZWNvbWluZyBtb3JlIHdpZGVseSBhY2Nlc3NpYmxlLCB3aGljaCBjb3VsZCBiZSBhbiBpbnRlcmVzdGluZyBhcmNoaXRlY3R1cmFsIHNoaWZ0LiBJJ2xsIG5lZWQgdG8gc2VlIHdoZXJlIGl0J3MgYmVpbmcgdXNlZC5cblxuTm93LCB0byBjb21waWxlIHRoaXMsIEknbGwgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBJJ20gZ29pbmcgdG8gbmVlZCBgUENJYCBhbmQgYFZGSU9fUENJYC4gQnV0IEkgc2hvdWxkIGRvdWJsZS1jaGVjayBkZXBlbmRlbmNpZXMuIExldCBtZSBzZWUuLi4geWVzLCBgVkZJT19QQ0lgIGRlcGVuZHMgb24gYFZGSU9gIGFuZCBgUENJYC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuIEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIG90aGVyIGRlcGVuZGVuY2llcyB0b28sIGJ1dCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6NDcuOTAzODY1MTA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTc0OTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozOlxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MTA9Y29uZmlnIFZGSU9fUENJX0lOVFhcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTEtXFx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMjpcXHRkZXBlbmRzIG9uIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMTMtXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjQ9Y29uZmlnIFZGSU9fUENJX1ZHQVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoyNjpcXHRkZXBlbmRzIG9uIFg4NiBcXHUwMDI2XFx1MDAyNiBWR0FfQVJCXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTI3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0zND1jb25maWcgVkZJT19QQ0lfSUdEXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MzY6XFx0ZGVwZW5kcyBvbiBYODZcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzctXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9NDc9Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBTMzkwIFxcdTAwMjZcXHUwMDI2IEtWTVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01MC1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjU6NDcuOTUzNjIwNzQ3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzE3MjY4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgVmVyaWZpY2F0aW9uIC0gVkZJTydzIEZvdW5kYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBWRklPX1BDSWAuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgUENJYCwgdGhhdCdzIGZ1bmRhbWVudGFsLiBBbmQgbmF0dXJhbGx5LCBgVkZJT2AgaXRzZWxmIGlzIHJlcXVpcmVkIGZvciBgVkZJT19QQ0lgIHRvIGRvIGl0cyB0aGluZy5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYFZGSU9gIHBpZWNlcyBhcmUgY29ycmVjdGx5IHNldCB1cC4gSSdsbCBuZWVkIHRvIGp1bXAgaW50byBgZHJpdmVycy92ZmlvL0tjb25maWdgIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gSSdtIGFmdGVyIHRoZSBjb3JlIGBWRklPYCBjb25maWd1cmF0aW9uLiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0J3MgYWxsIGxpbmVkIHVwIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjUxLjE4NTM1MDUzOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMDU4MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZGSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzoyOm1lbnVjb25maWcgVkZJT1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlZGSU8gTm9uLVByaXZpbGVnZWQgdXNlcnNwYWNlIGRyaXZlciBmcmFtZXdvcmtcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZz0xNj1pZiBWRklPXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MTc6Y29uZmlnIFZGSU9fREVWSUNFX0NERVZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBjZGV2IC9kZXYvdmZpby9kZXZpY2VzL3ZmaW9YXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMjktXFxuZHJpdmVycy92ZmlvL0tjb25maWc6MzA6Y29uZmlnIFZGSU9fR1JPVVBcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy0zMS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgVkZJTyBncm91cCAvZGV2L3ZmaW8vJGdyb3VwX2lkXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctMzktXFxuZHJpdmVycy92ZmlvL0tjb25maWc6NDA6Y29uZmlnIFZGSU9fQ09OVEFJTkVSXFxuZHJpdmVycy92ZmlvL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdGhlIFZGSU8gY29udGFpbmVyIC9kZXYvdmZpby92ZmlvXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NTI9aWYgVkZJT19DT05UQUlORVJcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Mzpjb25maWcgVkZJT19JT01NVV9UWVBFMVxcbmRyaXZlcnMvdmZpby9LY29uZmlnLTU0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01Ni1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo1Nzpjb25maWcgVkZJT19JT01NVV9TUEFQUl9UQ0VcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy01OC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWc9NjE9ZW5kaWZcXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZy02Mi1cXG5kcml2ZXJzL3ZmaW8vS2NvbmZpZzo2Mzpjb25maWcgVkZJT19OT0lPTU1VXFxuZHJpdmVycy92ZmlvL0tjb25maWctNjQtXFx0Ym9vbCBcXFwiVkZJTyBOby1JT01NVSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzctXFxuZHJpdmVycy92ZmlvL0tjb25maWc6Nzg6Y29uZmlnIFZGSU9fVklSUUZEXFxuZHJpdmVycy92ZmlvL0tjb25maWctNzktXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy92ZmlvL0tjb25maWctODItXFxuZHJpdmVycy92ZmlvL0tjb25maWc6ODM6Y29uZmlnIFZGSU9fREVCVUdGU1xcbmRyaXZlcnMvdmZpby9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIkV4cG9ydCBWRklPIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNTo1MS4yMjgzNjE5NDZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3OTAwOTUyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQQ0kgYW5kIFZGSU8gSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gaW50ZWdyYXRpbmcgc29tZSBjcnVjaWFsIHVwZGF0ZXMuIEZpcnN0LCBJJ20gYWRkaW5nIGBQQ0lgLCBgVkZJT2AsIGFuZCBgVkZJT19QQ0lgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoaXMgaXMgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGVzZSBmZWF0dXJlcyBhcmUgcHJvcGVybHkgZW5hYmxlZCBpbiB0aGUgc3lzdGVtLlxuXG5Ob3csIGxldCdzIHZlcmlmeSBhIGNyaXRpY2FsIGRldGFpbDogaXMgYHBjaV9yZXNldF9idXNfY29uZGAgZXhwb3J0ZWQ/IFllcCwgbG9va3MgZ29vZC4gVGhpcyBpcyBhIGtleSBmdW5jdGlvbi4gVGhlc2UgY2hhbmdlcyBzZWVtIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS5cblxuVGhlIGxvZ2ljIGJlaGluZCB0aGVzZSBjaGFuZ2VzIGlzIHNvdW5kLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgdGhlbiBpdCBtb2RpZmllcyB0aG9zZSBQQ0kgcmVzZXQgZnVuY3Rpb25zIHNvIHRoYXQgd2UgYXZvaWQgdGhlIHNjZW5hcmlvIG9mIHJlc2V0dGluZyBTUi1JT1YgUGh5c2ljYWwgRnVuY3Rpb25zIChQRnMpIHdoZW4gdGhlaXIgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykgYXJlIGFjdGl2ZWx5IGluIHVzZS4gSXQgYWxzbyBtYWtlcyBzdXJlIHRoZSBWRklPIFBDSSBjb3JlIGlzIHVwZGF0ZWQgdG8gbGV2ZXJhZ2UgdGhlc2UgbmV3IGNoZWNrcy4gVGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGBwY2lfcmVzZXRfYnVzX2NvbmRgLCBhcmUgcmVhY2hhYmxlIGNvcmUgUENJIGFuZCBWRklPIGZ1bmN0aW9ucywgYW5kIHRoZXkgYXJlIGNyaXRpY2FsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cblxuSSd2ZSBnb3QgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb25zIGluIG1pbmQ6XG5cbiogICBUaGUgY3JpdGljYWwgZnVuY3Rpb24sIGBwY2lfcmVzZXRfYnVzX2NvbmRgLlxuKiAgIFBDSSByZXNldCBmdW5jdGlvbnM6IGBwY2lfcmVzZXRfZnVuY3Rpb25gLCBgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZGAsIGBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uYCwgYW5kIGBwY2lfcmVzZXRfYnVzYCB3aGljaCB3aWxsIG5lZWQgdGhlIGBwY2lfcmVzZXRfYnVzX2NvbmRgLlxuKiAgIEFuZCBmaW5hbGx5IHRoZSBWRklPIGZ1bmN0aW9ucyB3aGljaCBtdXN0IGJlIGNvbnNpZGVyZWQ6IGB2ZmlvX3BjaV9jb3JlX2lvY3RsYCwgYHZmaW9fcGNpX2NvcmVfZGlzYWJsZWAsIGFuZCBgdmZpb19wY2lfY29yZV9lbmFibGVgLlxuXG5JJ20gc2V0dGluZyB1cCB0aGVzZSBjb25maWd1cmF0aW9uczogYFBDSWAsIGBWRklPYCwgYW5kIGBWRklPX1BDSWAuXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LiBFdmVyeXRoaW5nIGxvb2tzIGdvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDQyLCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNTo1Ny42MDczNzQ2OTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU1OTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUENJXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJWRklPX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBjaV9yZXNldF9idXNfY29uZFwiLFxuICAgIFwicGNpX3Jlc2V0X2Z1bmN0aW9uXCIsXG4gICAgXCJwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkXCIsXG4gICAgXCJwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uXCIsXG4gICAgXCJwY2lfcmVzZXRfYnVzXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2lvY3RsXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2Rpc2FibGVcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZW5hYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgbW9kaWZpZXMgUENJIHJlc2V0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IHJlc2V0dGluZyBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gSXQgYWxzbyB1cGRhdGVzIFZGSU8gUENJIGNvcmUgdG8gdXNlIHRoZXNlIG5ldyBjaGVja3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBQQ0kgYW5kIFZGSU8gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUENJXCIsXG4gICAgXCJWRklPXCIsXG4gICAgXCJWRklPX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBjaV9yZXNldF9idXNfY29uZFwiLFxuICAgIFwicGNpX3Jlc2V0X2Z1bmN0aW9uXCIsXG4gICAgXCJwY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkXCIsXG4gICAgXCJwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uXCIsXG4gICAgXCJwY2lfcmVzZXRfYnVzXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2lvY3RsXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2Rpc2FibGVcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZW5hYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBgcGNpX3Jlc2V0X2J1c19jb25kYCBhbmQgbW9kaWZpZXMgUENJIHJlc2V0IGZ1bmN0aW9ucyB0byBwcmV2ZW50IHJlc2V0dGluZyBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gSXQgYWxzbyB1cGRhdGVzIFZGSU8gUENJIGNvcmUgdG8gdXNlIHRoZXNlIG5ldyBjaGVja3MuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBQQ0kgYW5kIFZGSU8gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjU3LjY4Njk0MDM3NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyOTgxMjgwNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNTo1Ny42ODc0NTMxNDZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTkyOTc2MDg5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBkZXZpY2Ugc3RhdGUgbWFuYWdlbWVudCwgYW5kIFBDSSBzdWJzeXN0ZW0gQVBJcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBtb2RpZnkgYnVmZmVyIGFsbG9jYXRpb25zLCBwYWRkaW5nLCBvciBpbml0aWFsaXphdGlvbiBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBgdmZpb19kZXZpY2VfaW5mb2Agc3RydWN0dXJlIG1vZGlmaWVkIGluIGB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mb2AgaXMgYWxyZWFkeSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChgc3RydWN0IHZmaW9fZGV2aWNlX2luZm8gaW5mbyA9IHt9O2ApLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIGxvY2tpbmcgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGM4ZTAwY2M0YmFlNGZjYjgzOGQ3NzgwYTQ1OTFjMmZjMTQ4ZjY5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA1OjI0OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuY1xuaW5kZXggNzdiMTdiMTNlZTYxNS4uMGI0ZjEzMzk3ZGEyNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcGNpL3BjaS5jXG4rKysgYi9kcml2ZXJzL3BjaS9wY2kuY1xuQEAgLTk4LDYgKzk4LDcgQEAgYm9vbCBwY2lfcmVzZXRfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4ge1xuIFx0cmV0dXJuIGRldi1cdTAwM2VyZXNldF9tZXRob2RzWzBdICE9IDA7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9yZXNldF9zdXBwb3J0ZWQpO1xuIFxuICNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlNcbiBpbnQgcGNpX2RvbWFpbnNfc3VwcG9ydGVkID0gMTtcbkBAIC01MjIyLDExICs1MjIzLDIyIEBAIGludCBwY2lfcmVzZXRfZnVuY3Rpb24oc3RydWN0IHBjaV9kZXYgKmRldilcbiBcdFx0cGNpX2Rldl9sb2NrKGJyaWRnZSk7XG4gXG4gXHRwY2lfZGV2X2xvY2soZGV2KTtcbitcbitcdC8qXG4rXHQgKiBSZXNldCBvZiBhbiBTUi1JT1YgUEYgbmVjZXNzYXJpbHkgcmVzZXRzIGFueSBhY3RpdmUgVkZzLiAgU3VjaCByZXNldHMgYXJlXG4rXHQgKiBiZXlvbmQgdGhlIHNjb3BlIGFkdmVydGlzZWQgZm9yIHBjaV9yZXNldF9mdW5jdGlvbigpIGFuZCB2YXJpYW50cywgcmVmdXNlLlxuK1x0ICovXG4rXHRpZiAocGNpX251bV92ZihkZXYpIFx1MDAzZSAwKSB7XG4rXHRcdHJjID0gLUVOT1RUWTtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4gXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcbiBcbiBcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XG4gXG4gXHRwY2lfZGV2X3Jlc3RvcmUoZGV2KTtcbit1bmxvY2s6XG4gXHRwY2lfZGV2X3VubG9jayhkZXYpO1xuIFxuIFx0aWYgKGJyaWRnZSlcbkBAIC01MjY0LDYgKzUyNzYsOSBAQCBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuIFx0aWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKGRldikpXG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFxuK1x0aWYgKHBjaV9udW1fdmYoZGV2KSBcdTAwM2UgMClcbitcdFx0cmV0dXJuIC1FTk9UVFk7XG4rXG4gXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcbiBcbiBcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XG5AQCAtNTI5MCw2ICs1MzA1LDExIEBAIGludCBwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG4gXHRpZiAoIXBjaV9kZXZfdHJ5bG9jayhkZXYpKVxuIFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcbitcdGlmIChwY2lfbnVtX3ZmKGRldikgXHUwMDNlIDApIHtcbitcdFx0cGNpX2Rldl91bmxvY2soZGV2KTtcbitcdFx0cmV0dXJuIC1FTk9UVFk7XG4rXHR9XG4rXG4gXHRwY2lfZGV2X3NhdmVfYW5kX2Rpc2FibGUoZGV2KTtcbiBcdHJjID0gX19wY2lfcmVzZXRfZnVuY3Rpb25fbG9ja2VkKGRldik7XG4gXHRwY2lfZGV2X3Jlc3RvcmUoZGV2KTtcbkBAIC01NTQ4LDkgKzU1NjgsMzYgQEAgaW50IHBjaV9wcm9iZV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X3Nsb3QpO1xuIFxuKy8qIENhbGwgQGNiIG9uIGV2ZXJ5IGRldmljZSBhIHNsb3Qgb3IgYnVzIHJlc2V0IGFmZmVjdHMsIHN0b3BwaW5nIG9uIGVycm9yLiAqL1xuK3N0YXRpYyBpbnQgcGNpX3dhbGtfcmVzZXRfY2hlY2soc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBjaV9zbG90ICpzbG90LFxuK1x0XHRcdFx0aW50ICgqY2IpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxuK1x0XHRcdFx0dm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqZGV2O1xuK1x0aW50IHJjO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIFx1MDAyNmJ1cy1cdTAwM2VkZXZpY2VzLCBidXNfbGlzdCkge1xuK1x0XHRpZiAoc2xvdCBcdTAwMjZcdTAwMjYgKCFkZXYtXHUwMDNlc2xvdCB8fCBkZXYtXHUwMDNlc2xvdCAhPSBzbG90KSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0cmMgPSBjYihkZXYsIGRhdGEpO1xuK1x0XHRpZiAocmMpXG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHRpZiAoZGV2LVx1MDAzZXN1Ym9yZGluYXRlKSB7XG4rXHRcdFx0cmMgPSBwY2lfd2Fsa19yZXNldF9jaGVjayhkZXYtXHUwMDNlc3Vib3JkaW5hdGUsXG4rXHRcdFx0XHRcdFx0ICBOVUxMLCBjYiwgZGF0YSk7XG4rXHRcdFx0aWYgKHJjKVxuK1x0XHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICogcGNpX3RyeV9yZXNldF9zbG90IC0gVHJ5IHRvIHJlc2V0IGEgUENJIHNsb3RcbiAgKiBAc2xvdDogUENJIHNsb3QgdG8gcmVzZXRcbisgKiBAY2hlY2s6IG9wdGlvbmFsIHBlci1kZXZpY2UgY2FsbGJhY2sgdGhhdCBjYW4gYWJvcnQgdGhlIHJlc2V0XG4rICogQGRhdGE6IG9wYXF1ZSBhcmd1bWVudCBmb3IgQGNoZWNrXG4gICpcbiAgKiBBIFBDSSBidXMgbWF5IGhvc3QgbXVsdGlwbGUgc2xvdHMsIGVhY2ggc2xvdCBtYXkgc3VwcG9ydCBhIHJlc2V0IG1lY2hhbmlzbVxuICAqIGluZGVwZW5kZW50IG9mIG90aGVyIHNsb3RzLiAgRm9yIGluc3RhbmNlLCBzb21lIHNsb3RzIG1heSBzdXBwb3J0IHNsb3QgcG93ZXJcbkBAIC01NTYzLDcgKzU2MTAsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcHJvYmVfcmVzZXRfc2xvdCk7XG4gICpcbiAgKiBTYW1lIGFzIGFib3ZlIGV4Y2VwdCByZXR1cm4gLUVBR0FJTiBpZiB0aGUgc2xvdCBjYW5ub3QgYmUgbG9ja2VkXG4gICovXG4tc3RhdGljIGludCBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KVxuK3N0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCxcbitcdFx0XHQgICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4rXHRcdFx0ICAgICAgdm9pZCAqZGF0YSlcbiB7XG4gXHRpbnQgcmM7XG4gXG5AQCAtNTU3MiwxMCArNTYyMSwxNCBAQCBzdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpXG4gXHRcdHJldHVybiByYztcbiBcbiBcdGlmIChwY2lfc2xvdF90cnlsb2NrKHNsb3QpKSB7XG4tXHRcdHBjaV9zbG90X3NhdmVfYW5kX2Rpc2FibGVfbG9ja2VkKHNsb3QpO1xuLVx0XHRtaWdodF9zbGVlcCgpO1xuLVx0XHRyYyA9IHBjaV9yZXNldF9ob3RwbHVnX3Nsb3Qoc2xvdC1cdTAwM2Vob3RwbHVnLCBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xuLVx0XHRwY2lfc2xvdF9yZXN0b3JlX2xvY2tlZChzbG90KTtcbitcdFx0cmMgPSBjaGVjayA/IHBjaV93YWxrX3Jlc2V0X2NoZWNrKHNsb3QtXHUwMDNlYnVzLCBzbG90LCBjaGVjaywgZGF0YSkgOiAwO1xuK1x0XHRpZiAoIXJjKSB7XG4rXHRcdFx0cGNpX3Nsb3Rfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoc2xvdCk7XG4rXHRcdFx0bWlnaHRfc2xlZXAoKTtcbitcdFx0XHRyYyA9IHBjaV9yZXNldF9ob3RwbHVnX3Nsb3Qoc2xvdC1cdTAwM2Vob3RwbHVnLFxuK1x0XHRcdFx0XHRcdCAgICBQQ0lfUkVTRVRfRE9fUkVTRVQpO1xuK1x0XHRcdHBjaV9zbG90X3Jlc3RvcmVfbG9ja2VkKHNsb3QpO1xuK1x0XHR9XG4gXHRcdHBjaV9zbG90X3VubG9jayhzbG90KTtcbiBcdH0gZWxzZVxuIFx0XHRyYyA9IC1FQUdBSU47XG5AQCAtNTYwNywxMCArNTY2MCwxNCBAQCBzdGF0aWMgaW50IHBjaV9idXNfcmVzZXQoc3RydWN0IHBjaV9idXMgKmJ1cywgYm9vbCBwcm9iZSlcbiAvKipcbiAgKiBwY2lfdHJ5X3Jlc2V0X2J1cyAtIFRyeSB0byByZXNldCBhIFBDSSBidXNcbiAgKiBAYnVzOiB0b3AgbGV2ZWwgUENJIGJ1cyB0byByZXNldFxuKyAqIEBjaGVjazogb3B0aW9uYWwgcGVyLWRldmljZSBjYWxsYmFjayB0aGF0IGNhbiBhYm9ydCB0aGUgcmVzZXRcbisgKiBAZGF0YTogb3BhcXVlIGFyZ3VtZW50IGZvciBAY2hlY2tcbiAgKlxuICAqIFNhbWUgYXMgYWJvdmUgZXhjZXB0IHJldHVybiAtRUFHQUlOIGlmIHRoZSBidXMgY2Fubm90IGJlIGxvY2tlZFxuICAqL1xuLXN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cylcbitzdGF0aWMgaW50IHBjaV90cnlfcmVzZXRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsXG4rXHRcdFx0ICAgICBpbnQgKCpjaGVjaykoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSksXG4rXHRcdFx0ICAgICB2b2lkICpkYXRhKVxuIHtcbiBcdGludCByYztcbiBcbkBAIC01NjE5LDEwICs1Njc2LDEzIEBAIHN0YXRpYyBpbnQgcGNpX3RyeV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuIFx0aWYgKHBjaV9idXNfdHJ5bG9jayhidXMpKSB7XG4tXHRcdHBjaV9idXNfc2F2ZV9hbmRfZGlzYWJsZV9sb2NrZWQoYnVzKTtcbi1cdFx0bWlnaHRfc2xlZXAoKTtcbi1cdFx0cmMgPSBwY2lfYnJpZGdlX3NlY29uZGFyeV9idXNfcmVzZXQoYnVzLVx1MDAzZXNlbGYpO1xuLVx0XHRwY2lfYnVzX3Jlc3RvcmVfbG9ja2VkKGJ1cyk7XG4rXHRcdHJjID0gY2hlY2sgPyBwY2lfd2Fsa19yZXNldF9jaGVjayhidXMsIE5VTEwsIGNoZWNrLCBkYXRhKSA6IDA7XG4rXHRcdGlmICghcmMpIHtcbitcdFx0XHRwY2lfYnVzX3NhdmVfYW5kX2Rpc2FibGVfbG9ja2VkKGJ1cyk7XG4rXHRcdFx0bWlnaHRfc2xlZXAoKTtcbitcdFx0XHRyYyA9IHBjaV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19yZXNldChidXMtXHUwMDNlc2VsZik7XG4rXHRcdFx0cGNpX2J1c19yZXN0b3JlX2xvY2tlZChidXMpO1xuK1x0XHR9XG4gXHRcdHBjaV9idXNfdW5sb2NrKGJ1cyk7XG4gXHR9IGVsc2VcbiBcdFx0cmMgPSAtRUFHQUlOO1xuQEAgLTU2NjEsNyArNTcyMSw3IEBAIHN0YXRpYyBpbnQgcGNpX3Jlc2V0X2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlLCBib29sIHJlc3RvcmUpXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsIFx1MDAyNmJ1cy1cdTAwM2VzbG90cywgbGlzdCkge1xuIFx0XHRpZiAocmVzdG9yZSlcbi1cdFx0XHRyZXQgPSBwY2lfdHJ5X3Jlc2V0X3Nsb3Qoc2xvdCk7XG4rXHRcdFx0cmV0ID0gcGNpX3RyeV9yZXNldF9zbG90KHNsb3QsIE5VTEwsIE5VTEwpO1xuIFx0XHRlbHNlXG4gXHRcdFx0cmV0ID0gcGNpX3Nsb3RfcmVzZXQoc2xvdCwgUENJX1JFU0VUX0RPX1JFU0VUKTtcbiBcbkBAIC01Njc1LDcgKzU3MzUsNyBAQCBzdGF0aWMgaW50IHBjaV9yZXNldF9icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSwgYm9vbCByZXN0b3JlKVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBjaV9zbG90X211dGV4KTtcbiBcbiBcdGlmIChyZXN0b3JlKVxuLVx0XHRyZXR1cm4gcGNpX3RyeV9yZXNldF9idXMoYnVzKTtcbitcdFx0cmV0dXJuIHBjaV90cnlfcmVzZXRfYnVzKGJ1cywgTlVMTCwgTlVMTCk7XG4gXHRyZXR1cm4gcGNpX2J1c19yZXNldChicmlkZ2UtXHUwMDNlc3Vib3JkaW5hdGUsIFBDSV9SRVNFVF9ET19SRVNFVCk7XG4gfVxuIFxuQEAgLTU3MDUsMTYgKzU3NjUsNDMgQEAgaW50IHBjaV9wcm9iZV9yZXNldF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cylcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Byb2JlX3Jlc2V0X2J1cyk7XG4gXG4rLyoqXG4rICogcGNpX3Jlc2V0X2J1c19jb25kIC0gY29uZGl0aW9uYWxseSByZXNldCB0aGUgc2xvdCBvciBidXMgY29udGFpbmluZyBhIGRldmljZVxuKyAqIEBwZGV2OiB0b3AgbGV2ZWwgUENJIGRldmljZSB0byByZXNldCB2aWEgc2xvdC9idXNcbisgKiBAY2hlY2s6IG9wdGlvbmFsIGNhbGxiYWNrIGludm9rZWQgb24gZWFjaCBhZmZlY3RlZCBkZXZpY2UgYmVmb3JlIHRoZSByZXNldFxuKyAqIEBkYXRhOiBvcGFxdWUgYXJndW1lbnQgcGFzc2VkIHRvIEBjaGVja1xuKyAqXG4rICogUmVzZXQgdGhlIHNsb3Qgb3IgYnVzIGNvbnRhaW5pbmcgQHBkZXYuICBPbmNlIHRoZSBlbnRpcmUgcGh5c2ljYWwgYnVzL3Nsb3RcbisgKiBoaWVyYXJjaHkgaXMgbG9ja2VkLCBAY2hlY2sgKGlmIG5vdCBOVUxMKSBpcyBjYWxsZWQgb24gZWFjaCBvZiB0aG9zZSBsb2NrZWRcbisgKiBkZXZpY2VzLiAgQSBub256ZXJvIHJldHVybiBhYm9ydHMgdGhlIHJlc2V0IGFuZCBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLFxuKyAqIG90aGVyd2lzZSB0aGUgcmVzZXQgcHJvY2VlZHMuXG4rICpcbisgKiBOQi4gQGNoZWNrIHJ1bnMgd2l0aCB0aGUgZnVsbCBzZXQgb2YgZGV2aWNlX2xvY2tzIG5vdGVkIGFib3ZlIGhlbGQ7IGNhbGxiYWNrc1xuKyAqIG11c3QgdGFrZSB0aGVzZSBsb2NraW5nIHNlbWFudGljcyBpbnRvIGFjY291bnQuICBVc2UgTlVMTCB0byBwZXJmb3JtIGFuXG4rICogdW5jb25kaXRpb25hbCByZXNldC5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU5PVFRZIGlmIEBwZGV2IGlzIG5vdCByZXNldHRhYmxlLCAtRUFHQUlOIGlmIHRoZVxuKyAqIGRldmljZXMgY2Fubm90IGJlIGxvY2tlZCwgb3IgdGhlIHZhbHVlIHJldHVybmVkIGJ5IEBjaGVjay5cbisgKi9cbitpbnQgcGNpX3Jlc2V0X2J1c19jb25kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHQgICAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxuK1x0XHQgICAgICAgdm9pZCAqZGF0YSlcbit7XG4rXHRyZXR1cm4gIXBjaV9wcm9iZV9yZXNldF9zbG90KHBkZXYtXHUwMDNlc2xvdCkgP1xuK1x0XHRwY2lfdHJ5X3Jlc2V0X3Nsb3QocGRldi1cdTAwM2VzbG90LCBjaGVjaywgZGF0YSkgOlxuK1x0XHRwY2lfdHJ5X3Jlc2V0X2J1cyhwZGV2LVx1MDAzZWJ1cywgY2hlY2ssIGRhdGEpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfYnVzX2NvbmQpO1xuK1xuIC8qKlxuICAqIHBjaV9yZXNldF9idXMgLSBUcnkgdG8gcmVzZXQgYSBQQ0kgYnVzXG4gICogQHBkZXY6IHRvcCBsZXZlbCBQQ0kgZGV2aWNlIHRvIHJlc2V0IHZpYSBzbG90L2J1c1xuICAqXG4tICogU2FtZSBhcyBhYm92ZSBleGNlcHQgcmV0dXJuIC1FQUdBSU4gaWYgdGhlIGJ1cyBjYW5ub3QgYmUgbG9ja2VkXG4rICogU2FtZSBhcyBhYm92ZSB3aXRob3V0IHRoZSBjb25kaXRpb25hbCBjaGVjay5cbiAgKi9cbiBpbnQgcGNpX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4tXHRyZXR1cm4gKCFwY2lfcHJvYmVfcmVzZXRfc2xvdChwZGV2LVx1MDAzZXNsb3QpKSA/XG4tXHQgICAgcGNpX3RyeV9yZXNldF9zbG90KHBkZXYtXHUwMDNlc2xvdCkgOiBwY2lfdHJ5X3Jlc2V0X2J1cyhwZGV2LVx1MDAzZWJ1cyk7XG4rXHRyZXR1cm4gcGNpX3Jlc2V0X2J1c19jb25kKHBkZXYsIE5VTEwsIE5VTEwpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzZXRfYnVzKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oXG5pbmRleCA0NDY5ZTFhNzdmM2MxLi40MTZmZDZiNzRhYmU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvcGNpLmhcbisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oXG5AQCAtMjMwLDcgKzIzMCw2IEBAIGVudW0gcGNpX21tYXBfYXBpIHtcbiBpbnQgcGNpX21tYXBfZml0cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHJlc25vLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYWksXG4gXHRcdCAgZW51bSBwY2lfbW1hcF9hcGkgbW1hcF9hcGkpO1xuIFxuLWJvb2wgcGNpX3Jlc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB2b2lkIHBjaV9pbml0X3Jlc2V0X21ldGhvZHMoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaV9icmlkZ2Vfc2Vjb25kYXJ5X2J1c19yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX2J1c19lcnJvcl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCAzZjExYTk2MjRiOWMwLi44ZTQyMzQyZDU2ZDNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtNjA5LDcgKzYwOSw2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRpZiAocmV0ID09IC1FQUdBSU4pXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xuIFxuLVx0dmRldi1cdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XG4gXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcdHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpO1xuIFx0aWYgKCF2ZGV2LVx1MDAzZXBjaV9zYXZlZF9zdGF0ZSlcbkBAIC03NjYsNyArNzY1LDcgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0aWYgKHBjaV9sb2FkX2FuZF9mcmVlX3NhdmVkX3N0YXRlKHBkZXYsIFx1MDAyNnZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlKSkge1xuIFx0XHRwY2lfaW5mbyhwZGV2LCBcIiVzOiBDb3VsZG4ndCByZWxvYWQgc2F2ZWQgc3RhdGVcXG5cIiwgX19mdW5jX18pO1xuIFxuLVx0XHRpZiAoIXZkZXYtXHUwMDNlcmVzZXRfd29ya3MpXG4rXHRcdGlmICghcGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KSlcbiBcdFx0XHRnb3RvIG91dDtcbiBcbiBcdFx0cGNpX3NhdmVfc3RhdGUocGRldik7XG5AQCAtNzg1LDEyICs3ODQsMTQgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0ICogV2UgY2FuIG5vdCB1c2UgdGhlIFwidHJ5XCIgcmVzZXQgaW50ZXJmYWNlIGhlcmUsIHdoaWNoIHdpbGxcbiBcdCAqIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXNseSByZXN0b3JlZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLlxuIFx0ICovXG4tXHRpZiAodmRldi1cdTAwM2VyZXNldF93b3Jrcykge1xuK1x0aWYgKHBjaV9yZXNldF9zdXBwb3J0ZWQocGRldikpIHtcbiBcdFx0YnJpZGdlID0gcGNpX3Vwc3RyZWFtX2JyaWRnZShwZGV2KTtcbiBcdFx0aWYgKGJyaWRnZSBcdTAwMjZcdTAwMjYgIXBjaV9kZXZfdHJ5bG9jayhicmlkZ2UpKVxuIFx0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfc3RhdGU7XG4gXHRcdGlmIChwY2lfZGV2X3RyeWxvY2socGRldikpIHtcbi1cdFx0XHRpZiAoIV9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChwZGV2KSlcbitcdFx0XHQvKiBFbmZvcmNlIGZ1bmN0aW9uIHNjb3BlIHVuZGVyIGxvY2sgZm9yIFNSLUlPViBQRnMgKi9cbitcdFx0XHRpZiAoIXBjaV9udW1fdmYocGRldikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgICFfX3BjaV9yZXNldF9mdW5jdGlvbl9sb2NrZWQocGRldikpXG4gXHRcdFx0XHR2ZGV2LVx1MDAzZW5lZWRzX3Jlc2V0ID0gZmFsc2U7XG4gXHRcdFx0cGNpX2Rldl91bmxvY2socGRldik7XG4gXHRcdH1cbkBAIC04OTIsNiArODkzLDE3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfY291bnRfZGV2cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIFBDSSB3YWxrIGNhbGxiYWNrIHRvIGNoZWNrIGZvciBTUi1JT1YgUEZzIHdpdGggYWN0aXZlIFZGcy4gIFZGcyBhcmUgbm90XG4rICogZW51bWVyYXRlZCB3aGVuIGRldGVybWluaW5nIGFmZmVjdGVkIGRldmljZXMgYW5kIG1heSBiZSBvd25lZCBieSBzZXBhcmF0ZVxuKyAqIHVzZXJzcGFjZSBwcm9jZXNzZXMgZnJvbSB0aGUgUEYuICBJdCdzIHRoZXJlZm9yZSB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5XG4rICogdG8gdGVhcmRvd24gVkZzIGZvciBhbnkgYWZmZWN0ZWQgUEYgYmVmb3JlIHBlcmZvcm1pbmcgYSBob3QtcmVzZXQuXG4rICovXG4rc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSlcbit7XG4rXHRyZXR1cm4gcGNpX251bV92ZihwZGV2KSA/IC1FQlVTWSA6IDA7XG4rfVxuK1xuIHN0cnVjdCB2ZmlvX3BjaV9maWxsX2luZm8ge1xuIFx0c3RydWN0IHZmaW9fZGV2aWNlICp2ZGV2O1xuIFx0c3RydWN0IHZmaW9fcGNpX2RlcGVuZGVudF9kZXZpY2UgKmRldmljZXM7XG5AQCAtMTA4NSw3ICsxMDk3LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mbyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXG4gXHRpbmZvLmZsYWdzID0gVkZJT19ERVZJQ0VfRkxBR1NfUENJO1xuIFxuLVx0aWYgKHZkZXYtXHUwMDNlcmVzZXRfd29ya3MpXG4rXHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYpKVxuIFx0XHRpbmZvLmZsYWdzIHw9IFZGSU9fREVWSUNFX0ZMQUdTX1JFU0VUO1xuIFxuIFx0aW5mby5udW1fcmVnaW9ucyA9IFZGSU9fUENJX05VTV9SRUdJT05TICsgdmRldi1cdTAwM2VudW1fcmVnaW9ucztcbkBAIC0xMzE3LDcgKzEzMjksNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0aWYgKCF2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzKVxuK1x0aWYgKCFwY2lfcmVzZXRfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xuQEAgLTI1OTYsNyArMjYwOCw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCxcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodmRldiwgXHUwMDI2ZGV2X3NldC1cdTAwM2VkZXZpY2VfbGlzdCwgdmRldi5kZXZfc2V0X2xpc3QpXG4gXHRcdHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xuIFxuLVx0cmV0ID0gcGNpX3Jlc2V0X2J1cyhwZGV2KTtcbitcdHJldCA9IHBjaV9yZXNldF9idXNfY29uZChwZGV2LCB2ZmlvX3BjaV9kZXZfaGFzX3ZmcywgTlVMTCk7XG4gXG4gXHR2ZGV2ID0gbGlzdF9sYXN0X2VudHJ5KFx1MDAyNmRldl9zZXQtXHUwMDNlZGV2aWNlX2xpc3QsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSwgdmRldi5kZXZfc2V0X2xpc3QpO1xuQEAgLTI2NTksNyArMjY3MSw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2Rldl9zZXRfdHJ5X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQpXG4gXHRpZiAodmZpb19wY2lfZGV2X3NldF9wbV9ydW50aW1lX2dldChkZXZfc2V0KSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFwY2lfcmVzZXRfYnVzKHBkZXYpKVxuK1x0aWYgKCFwY2lfcmVzZXRfYnVzX2NvbmQocGRldiwgdmZpb19wY2lfZGV2X2hhc192ZnMsIE5VTEwpKVxuIFx0XHRyZXNldF9kb25lID0gdHJ1ZTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCBcdTAwMjZkZXZfc2V0LVx1MDAzZWRldmljZV9saXN0LCB2ZGV2LmRldl9zZXRfbGlzdCkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oXG5pbmRleCA2NGIzMDhiNmU2MWMxLi40ZGUyMWU2YWM1MzhmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaFxuQEAgLTE0NzQsMTIgKzE0NzQsMTYgQEAgdm9pZCBwY2llX3ByaW50X2xpbmtfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xuIGludCBwY2llX3Jlc2V0X2ZscihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIHByb2JlKTtcbiBpbnQgcGNpZV9mbHIoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IF9fcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbitib29sIHBjaV9yZXNldF9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldik7XG4gaW50IHBjaV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3Jlc2V0X2Z1bmN0aW9uX2xvY2tlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3RyeV9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiBpbnQgcGNpX3Byb2JlX3Jlc2V0X3Nsb3Qoc3RydWN0IHBjaV9zbG90ICpzbG90KTtcbiBpbnQgcGNpX3Byb2JlX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTtcbiBpbnQgcGNpX3Jlc2V0X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbitpbnQgcGNpX3Jlc2V0X2J1c19jb25kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuK1x0XHQgICAgICAgaW50ICgqY2hlY2spKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKmRhdGEpLFxuK1x0XHQgICAgICAgdm9pZCAqZGF0YSk7XG4gdm9pZCBwY2lfcmVzZXRfc2Vjb25kYXJ5X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB2b2lkIHBjaWJpb3NfcmVzZXRfc2Vjb25kYXJ5X2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbiB2b2lkIHBjaV91cGRhdGVfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5pbmRleCA5YTE2NzRjMTUyYWEyLi42ZmI1OTllYzI5MTkxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5AQCAtMTIxLDcgKzEyMSw2IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7XG4gXHQvKiBGbGFncyBvbmx5IG1vZGlmaWVkIG9uIHNldHVwL3JlbGVhc2UgLSBiaXRmaWVsZCBvayAqL1xuIFx0Ym9vbFx0XHRcdGhhc19keW5fbXNpeDoxO1xuIFx0Ym9vbFx0XHRcdHBjaV8yXzM6MTtcbi1cdGJvb2xcdFx0XHRyZXNldF93b3JrczoxO1xuIFx0Ym9vbFx0XHRcdGV4dGVuZGVkX2NhcHM6MTtcbiBcdGJvb2xcdFx0XHRoYXNfdmdhOjE7XG4gXHRib29sXHRcdFx0bm9pbnR4OjE7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcbmluZGV4IDVkZTYxOGEzYTVlZWUuLjg2MDM5NTlmMTczNTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtNzcyLDYgKzc3Miw5IEBAIHN0cnVjdCB2ZmlvX3BjaV9ob3RfcmVzZXRfaW5mbyB7XG4gICogTWl4ZWQgdXNhZ2Ugb2YgbGVnYWN5IGdyb3VwcyBhbmQgY2RldnMgYWNyb3NzIHRoZSBzZXQgb2YgYWZmZWN0ZWRcbiAgKiBkZXZpY2VzIGlzIG5vdCBzdXBwb3J0ZWQuXG4gICpcbisgKiBIb3QgcmVzZXQgb2YgU1ItSU9WIFBGcyB3aXRoIGFjdGl2ZSBWRnMgaXMgbm90IHN1cHBvcnRlZCwgU1ItSU9WXG4rICogc2hvdWxkIGZpcnN0IGJlIGRpc2FibGVkIG9uIGFueSBhZmZlY3RlZCBQRi5cbisgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZS5cbiAgKi9cbiBzdHJ1Y3QgdmZpb19wY2lfaG90X3Jlc2V0IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjI1OjU3LjY4NzQ1NDA3NloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDY4MzMxMjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUENJIFJlc2V0IFBhdGNoIGZvciBTUi1JT1YgUEZzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGl0J3MgY2xlYXIgdGhpcyBpcyBhYm91dCB0aWdodGVuaW5nIHVwIHRoZSBQQ0kgcmVzZXQgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHdoZW4gd2UgaGF2ZSBTaW5nbGUgUm9vdCBJL08gVmlydHVhbGl6YXRpb24gKFNSLUlPVikgUGh5c2ljYWwgRnVuY3Rpb25zIChQRnMpIHdpdGggYWN0aXZlIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGUgcHJpbWFyeSBnb2FsIHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgYWNjaWRlbnRhbCByZXNldHMgb2YgdGhlIFBGIGlmIFZGcyBhcmUgaW4gdXNlIOKAkyBhIGNyaXRpY2FsIHNhZmVndWFyZC5cblxuVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgcGNpX251bV92ZihkZXYpIFx1MDAzZSAwYCBjaGVja3MuIFRoaXMgc2ltcGxlIGNoZWNrIGlzIGFkZGVkIHRvIGJsb2NrIFBGIHJlc2V0cyB3aGVuIFZGcyBhcmUgcHJlc2VudC4gU21hcnQuIEl0J3MgYWxzbyBtYWtpbmcgdXNlIG9mIGBwY2lfcmVzZXRfYnVzX2NvbmRgLCB3aGljaCBsZXRzIHVzIGluamVjdCBhIGNhbGxiYWNrIGZvciBkZXZpY2Ugc3RhdHVzIGNoZWNrcyAqYmVmb3JlKiBhIGJ1cyBvciBzbG90IHJlc2V0IGlzIGluaXRpYXRlZC4gVGhhdCdzIGEgcG93ZXJmdWwgdG9vbCwgcHJvdmlkaW5nIG1vcmUgZ3JhbnVsYXIgY29udHJvbC5cblxuSSBzZWUgdGhhdCBgdmZpb19wY2lfY29yZS5jYCBoYXMgYmVlbiByZWZhY3RvcmVkLiBUaGUgYHZkZXYtXHUwMDNlcmVzZXRfd29ya3NgIGZsYWcgaXMgZ29uZSwgcmVwbGFjZWQgd2l0aCBgcGNpX3Jlc2V0X3N1cHBvcnRlZChwZGV2KWAuIEZ1bmN0aW9uIGNhbGxzIGFyZSBnZW5lcmFsbHkgcHJlZmVycmVkIG92ZXIgZmxhZ3MgZm9yIHRoaXMga2luZCBvZiBsb2dpYy4gSW4gdGhlIGNvbnRleHQgb2YgYHZmaW9fcGNpX2NvcmUuY2AsIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhlIHJlbW92YWwgb2YgdGhhdCBmbGFnIGFmZmVjdHMgZXhpc3RpbmcgbG9naWM7IHRoaXMgd291bGQgYmUgbW9zdCBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aGUgYFZGSU9fREVWSUNFX0dFVF9JTkZPYCBpb2N0bC5cblxuVGhlIGFkZGl0aW9uIG9mIHRoZSBgdmZpb19wY2lfZGV2X2hhc192ZnNgIGNhbGxiYWNrLCByZXR1cm5pbmcgYC1FQlVTWWAgd2hlbiBWRnMgYXJlIGFjdGl2ZSwgaXMgY2xldmVyLiBJdCdzIGVsZWdhbnRseSBpbnRlZ3JhdGVkIGludG8gYHBjaV9yZXNldF9idXNfY29uZGAgd2l0aGluIGB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldGAgYW5kIGB2ZmlvX3BjaV9kZXZfc2V0X3RyeV9yZXNldGAuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gYXR0ZW1wdHMgdG8gcmVzZXQgdGhyb3VnaCBob3QgcmVzZXQgb3IgdHJ5IHJlc2V0IHdpbGwgcmVzcGVjdCB0aGUgVkYgcHJlc2VuY2UuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFyb3VuZCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjaGFuZ2VzIGRvbid0IG9wZW4gdXAgYW55IHZ1bG5lcmFiaWxpdGllcy4gV2hpbGUgdGhlIHBhdGNoIG1vc3RseSBtb2RpZmllcyBjb250cm9sIGZsb3csIHJldHVybmluZyBgLUVOT1RUWWAgb3IgYC1FQlVTWWAsIGFuZCBzd2FwcyBhIGZsYWcgZm9yIGEgZnVuY3Rpb24gY2FsbCwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJ20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZSBmcm9tIGByZXNldF93b3Jrc2AgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQocGRldilgIOKAkyB0aGlzIGlzIHRoZSBjcnVjaWFsIHBvaW50IHRvIGV2YWx1YXRlLCBwYXJ0aWN1bGFybHkgdGhlIGNvbnRleHQgYXJvdW5kIGBWRklPX0RFVklDRV9HRVRfSU5GT2AgYW5kIHRoZSBzZXR0aW5nIG9mIGBpbmZvLmZsYWdzYC5cblxuT2theSwgc28gbG9va2luZyBhdCB0aGUgY29kZSBhcm91bmQgYHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvYCwgaXQgbG9va3MgbGlrZSBgaW5mb2AgaXMgYSBsb2NhbCB2YXJpYWJsZS4gVGhlIHBhdGNoIGlzIHNpbXBseSBjaGFuZ2luZyB0aGUgY3JpdGVyaWEgZm9yIHNldHRpbmcgYFZGSU9fREVWSUNFX0ZMQUdTX1JFU0VUYCB0aHJvdWdoIHRoZSB1c2Ugb2YgYHBjaV9yZXNldF9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2KWAuIEknbGwgY29uZmlybSB0aGF0IGBpbmZvYCBpcyBmdWxseSBpbml0aWFsaXplZCwgYW5kIHRoYXQgZXhpc3RpbmcgY29kZSBwYXRoIGlzIGNvdmVyZWQgYnkgZXhpc3RpbmcgY2hlY2tzLiBJJ2xsIHRha2UgYSBsb29rIGF0IGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AgYXJvdW5kIGxpbmUgMTA4NSB0byBtYWtlIHN1cmUuIExldCBtZSB1c2UgYGRlZmF1bHRfYXBpOnJlYWQtZmlsZWAgdG8gZG8gYSBxdWljayBjaGVjay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjY6MDYuMTU1Nzg4NjE0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdH1cXG4xMDgxOlxcdFxcbjEwODI6XFx0c3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mbyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuMTA4MzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdmZpb19kZXZpY2VfaW5mbyBfX3VzZXIgKmFyZylcXG4xMDg0OlxcdHtcXG4xMDg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWluc3ogPSBvZmZzZXRvZmVuZChzdHJ1Y3QgdmZpb19kZXZpY2VfaW5mbywgbnVtX2lycXMpO1xcbjEwODY6XFx0XFx0c3RydWN0IHZmaW9fZGV2aWNlX2luZm8gaW5mbyA9IHt9O1xcbjEwODc6XFx0XFx0c3RydWN0IHZmaW9faW5mb19jYXAgY2FwcyA9IHsgLmJ1ZiA9IE5VTEwsIC5zaXplID0gMCB9O1xcbjEwODg6XFx0XFx0aW50IHJldDtcXG4xMDg5OlxcdFxcbjEwOTA6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZpbmZvLCBhcmcsIG1pbnN6KSlcXG4xMDkxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjEwOTI6XFx0XFxuMTA5MzpcXHRcXHRpZiAoaW5mby5hcmdzeiBcXHUwMDNjIG1pbnN6KVxcbjEwOTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTA5NTpcXHRcXG4xMDk2OlxcdFxcdG1pbnN6ID0gbWluX3Qoc2l6ZV90LCBpbmZvLmFyZ3N6LCBzaXplb2YoaW5mbykpO1xcbjEwOTc6XFx0XFxuMTA5ODpcXHRcXHRpbmZvLmZsYWdzID0gVkZJT19ERVZJQ0VfRkxBR1NfUENJO1xcbjEwOTk6XFx0XFxuMTEwMDpcXHRcXHRpZiAocGNpX3Jlc2V0X3N1cHBvcnRlZCh2ZGV2LVxcdTAwM2VwZGV2KSlcXG4xMTAxOlxcdFxcdFxcdGluZm8uZmxhZ3MgfD0gVkZJT19ERVZJQ0VfRkxBR1NfUkVTRVQ7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdFxcdGluZm8ubnVtX3JlZ2lvbnMgPSBWRklPX1BDSV9OVU1fUkVHSU9OUyArIHZkZXYtXFx1MDAzZW51bV9yZWdpb25zO1xcbjExMDQ6XFx0XFx0aW5mby5udW1faXJxcyA9IFZGSU9fUENJX05VTV9JUlFTO1xcbjExMDU6XFx0XFxuMTEwNjpcXHRcXHRyZXQgPSB2ZmlvX3BjaV9pbmZvX3pkZXZfYWRkX2NhcHModmRldiwgXFx1MDAyNmNhcHMpO1xcbjExMDc6XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVOT0RFVikge1xcbjExMDg6XFx0XFx0XFx0cGNpX3dhcm4odmRldi1cXHUwMDNlcGRldixcXG4xMTA5OlxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHNldHVwIHpQQ0kgaW5mbyBjYXBhYmlsaXRpZXNcXFxcblxcXCIpO1xcbjExMTA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTExOlxcdFxcdH1cXG4xMTEyOlxcdFxcbjExMTM6XFx0XFx0cmV0ID0gdmZpb19wY2lfaW5mb19hdG9taWNfY2FwKHZkZXYsIFxcdTAwMjZjYXBzKTtcXG4xMTE0OlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FTk9ERVYpIHtcXG4xMTE1OlxcdFxcdFxcdHBjaV93YXJuKHZkZXYtXFx1MDAzZXBkZXYsXFxuMTExNjpcXHRcXHRcXHRcXHQgXFxcIkZhaWxlZCB0byBzZXR1cCBBdG9taWNPcHMgaW5mbyBjYXBhYmlsaXR5XFxcXG5cXFwiKTtcXG4xMTE3OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTExODpcXHRcXHR9XFxuMTExOTpcXHRcXG4xMTIwOlxcdFxcdGlmIChjYXBzLnNpemUpIHtcXG4xMTIxOlxcdFxcdFxcdGluZm8uZmxhZ3MgfD0gVkZJT19ERVZJQ0VfRkxBR1NfQ0FQUztcXG4xMTIyOlxcdFxcdFxcdGlmIChpbmZvLmFyZ3N6IFxcdTAwM2Mgc2l6ZW9mKGluZm8pICsgY2Fwcy5zaXplKSB7XFxuMTEyMzpcXHRcXHRcXHRcXHRpbmZvLmFyZ3N6ID0gc2l6ZW9mKGluZm8pICsgY2Fwcy5zaXplO1xcbjExMjQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4xMTI1OlxcdFxcdFxcdFxcdHZmaW9faW5mb19jYXBfc2hpZnQoXFx1MDAyNmNhcHMsIHNpemVvZihpbmZvKSk7XFxuMTEyNjpcXHRcXHRcXHRcXHRpZiAoY29weV90b191c2VyKGFyZyArIDEsIGNhcHMuYnVmLCBjYXBzLnNpemUpKSB7XFxuMTEyNzpcXHRcXHRcXHRcXHRcXHRrZnJlZShjYXBzLmJ1Zik7XFxuMTEyODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xMTI5OlxcdFxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MjY6MDYuMTU2MDQ2MDE0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODI4OTg4NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBDSSBSZXNldCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZyb20gYSBzYWZldHkgcGVyc3BlY3RpdmUsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgYGluZm9gIHN0cnVjdCBiZWluZyBpbml0aWFsaXplZCB0byBge31gIHJpZ2h0IG9mZiB0aGUgYmF0IGVuc3VyZXMgaXQgc3RhcnRzIHplcm9lZC4gVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGZvY3VzZXMgb24gbW9kaWZ5aW5nIHRoZSBsb2dpYyBhcm91bmQgUENJIGRldmljZSByZXNldHMsIHBhcnRpY3VsYXJseSBhdm9pZGluZyB0aGUgcmVzZXQgb2YgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB0aGF0IGhhdmUgYWN0aXZlIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLlxuXG5UaGUgaW50cm9kdWN0aW9uIG9mIGBwY2lfcmVzZXRfYnVzX2NvbmRgIGlzIGEga2V5IGFkZGl0aW9uOyBpdCB0YWtlcyBhIGNhbGxiYWNrLCBhbGxvd2luZyBmb3IgbW9yZSBncmFudWxhciBkZXZpY2UgY2hlY2tzICpiZWZvcmUqIGEgcmVzZXQgaXMgdHJpZ2dlcmVkLiBUaGlzIGNhbGxiYWNrLCBgdmZpb19wY2lfZGV2X2hhc192ZnNgIHNwZWNpZmljYWxseSwgaXMgdXNlZCB0byBwcmV2ZW50IHRoZSByZXNldCBvZiB0aG9zZSBQRnMgd2l0aCBhY3RpdmUgVkZzLiBXZSBhcmUgYWxzbyBpbnRyb2R1Y2luZyBmdW5jdGlvbnMgdG8gYWlkIHRoZSBwcm9jZXNzIGluIGBwY2lfd2Fsa19yZXNldF9jaGVja2AsIGBwY2lfdHJ5X3Jlc2V0X3Nsb3RgLCBhbmQgYHBjaV90cnlfcmVzZXRfYnVzYCwgYXMgd2VsbCBhcyBleHBvcnRpbmcgYHBjaV9yZXNldF9zdXBwb3J0ZWRgLlxuXG5Tbywgbm90aGluZyBqdW1wcyBvdXQgYXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzaywgaW5mbyBsZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdpdGhvdXQgcHJvcGVyIGluaXRpYWxpemF0aW9uLiBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgdGhlIHJpZ2h0IHRvb2xzIGhlcmUuIFRoZSBjaGFuZ2VzIGFyZSBsYXJnZWx5IGFib3V0IGNvbnRyb2xsaW5nIHRoZSBmbG93IG9mIHRoZSByZXNldCBwcm9jZXNzIGFuZCBtYWtpbmcgc3VyZSB0aGUgcmlnaHQgUENJIGRldmljZXMgYXJlIHRhcmdldGVkIG9yIHNraXBwZWQuIEkndmUgY29uZmlybWVkIHRoaXMgYnkgZXhhbWluaW5nIGFsbCBvZiB0aGUgb3RoZXIgY2hhbmdlczogYHZmaW9fcGNpX2NvcmVfZW5hYmxlYCwgYHZmaW9fcGNpX2NvcmVfZGlzYWJsZWAsIGB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mb2AsIGB2ZmlvX3BjaV9pb2N0bF9yZXNldGAsIGB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldGAsIGFuZCBgdmZpb19wY2lfZGV2X3NldF90cnlfcmVzZXRgIGFsbCBzZWVtIHRvIGJlIGxldmVyYWdpbmcgdGhpcyBuZXcgY29uZGl0aW9uYWwgbG9naWMuXG5cbkdpdmVuIHRoaXMsIEknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBwYXRjaC4gVGhlIHByaW1hcnkgcmlzayBpcyB0aGUgbG9naWMgb2Ygd2hlbiBhIHJlc2V0IGhhcHBlbnMsIG5vdCAqaG93KiBtZW1vcnkgaXMgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxOCwiT3V0cHV0VG9rZW5zIjoyOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNToyNjoxNi45ODUwMzc5NDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBQQ0kgcmVzZXQgbG9naWMgdG8gcHJldmVudCByZXNldHRpbmcgU1ItSU9WIFBoeXNpY2FsIEZ1bmN0aW9ucyAoUEZzKSB3aGVuIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpIGFyZSBhY3RpdmUuIEl0IGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBidXMgcmVzZXQgZnVuY3Rpb24gKGBwY2lfcmVzZXRfYnVzX2NvbmRgKSB0aGF0IGFjY2VwdHMgYSBjYWxsYmFjayB0byBjaGVjayBkZXZpY2VzIGJlZm9yZSBwZXJmb3JtaW5nIGEgcmVzZXQuIEluIHRoZSBWRklPIFBDSSBjb3JlLCBpdCByZXBsYWNlcyBhIGNhY2hlZCBgcmVzZXRfd29ya3NgIGJvb2xlYW4gd2l0aCBkaXJlY3QgY2FsbHMgdG8gYHBjaV9yZXNldF9zdXBwb3J0ZWQoKWAgYW5kIHVzZXMgdGhlIG5ldyBjb25kaXRpb25hbCByZXNldCBBUEkgdG8gY2hlY2sgZm9yIGFjdGl2ZSBWRnMuXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBkZXZpY2Ugc3RhdGUgbWFuYWdlbWVudCwgYW5kIFBDSSBzdWJzeXN0ZW0gQVBJcy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBtb2RpZnkgYnVmZmVyIGFsbG9jYXRpb25zLCBwYWRkaW5nLCBvciBpbml0aWFsaXphdGlvbiBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZSBgdmZpb19kZXZpY2VfaW5mb2Agc3RydWN0dXJlIG1vZGlmaWVkIGluIGB2ZmlvX3BjaV9pb2N0bF9nZXRfaW5mb2AgaXMgYWxyZWFkeSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIChgc3RydWN0IHZmaW9fZGV2aWNlX2luZm8gaW5mbyA9IHt9O2ApLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIGxvY2tpbmcgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFBDSSByZXNldCBsb2dpYyB0byBwcmV2ZW50IHJlc2V0dGluZyBTUi1JT1YgUGh5c2ljYWwgRnVuY3Rpb25zIChQRnMpIHdoZW4gVmlydHVhbCBGdW5jdGlvbnMgKFZGcykgYXJlIGFjdGl2ZS4gSXQgaW50cm9kdWNlcyBhIGNvbmRpdGlvbmFsIGJ1cyByZXNldCBmdW5jdGlvbiAoYHBjaV9yZXNldF9idXNfY29uZGApIHRoYXQgYWNjZXB0cyBhIGNhbGxiYWNrIHRvIGNoZWNrIGRldmljZXMgYmVmb3JlIHBlcmZvcm1pbmcgYSByZXNldC4gSW4gdGhlIFZGSU8gUENJIGNvcmUsIGl0IHJlcGxhY2VzIGEgY2FjaGVkIGByZXNldF93b3Jrc2AgYm9vbGVhbiB3aXRoIGRpcmVjdCBjYWxscyB0byBgcGNpX3Jlc2V0X3N1cHBvcnRlZCgpYCBhbmQgdXNlcyB0aGUgbmV3IGNvbmRpdGlvbmFsIHJlc2V0IEFQSSB0byBjaGVjayBmb3IgYWN0aXZlIFZGcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3csIGRldmljZSBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgUENJIHN1YnN5c3RlbSBBUElzLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IG1vZGlmeSBidWZmZXIgYWxsb2NhdGlvbnMsIHBhZGRpbmcsIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlIGB2ZmlvX2RldmljZV9pbmZvYCBzdHJ1Y3R1cmUgbW9kaWZpZWQgaW4gYHZmaW9fcGNpX2lvY3RsX2dldF9pbmZvYCBpcyBhbHJlYWR5IGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgKGBzdHJ1Y3QgdmZpb19kZXZpY2VfaW5mbyBpbmZvID0ge307YCkuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgbG9ja2luZyBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhh98s[1] Phase: Succeeded StartedAt: 2026-08-12 05:26:28 +0000 UTC FinishedAt: 2026-08-12 05:26:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 05:26:28 +0000 UTC FinishedAt: 2026-08-12 05:26:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2] Phase: Succeeded StartedAt: 2026-08-12 05:26:28 +0000 UTC FinishedAt: 2026-08-12 06:41:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 05:26:28 +0000 UTC FinishedAt: 2026-08-12 06:41:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 05:26:28 +0000 UTC FinishedAt: 2026-08-12 05:26:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 05:26:28 +0000 UTC FinishedAt: 2026-08-12 05:26:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowhh98s/series-workflowhh98s-convert-artifact-2183564347/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 05:26:38 +0000 UTC FinishedAt: 2026-08-12 05:43:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 05:26:38 +0000 UTC FinishedAt: 2026-08-12 05:43:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0dd40cbf-ffae-4bd8-b37b-cb9b038ca7f8,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-workflowhh98s/series-workflowhh98s-convert-artifact-2183564347/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": "08b811d3-7a8f-46c1-b6fe-f8390697ffc7", "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-workflowhh98s/series-workflowhh98s-build-action-1375443577/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 05:26:38 +0000 UTC FinishedAt: 2026-08-12 05:43:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0dd40cbf-ffae-4bd8-b37b-cb9b038ca7f8,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-workflowhh98s/series-workflowhh98s-convert-artifact-2183564347/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": "08b811d3-7a8f-46c1-b6fe-f8390697ffc7", "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-workflowhh98s/series-workflowhh98s-build-action-1375443577/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 05:43:36 +0000 UTC FinishedAt: 2026-08-12 05:43:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 05:43:36 +0000 UTC FinishedAt: 2026-08-12 05:43:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 05:43:36 +0000 UTC FinishedAt: 2026-08-12 05:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 05:43:36 +0000 UTC FinishedAt: 2026-08-12 05:43:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowhh98s/series-workflowhh98s-convert-artifact-2036887698/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 05:43:46 +0000 UTC FinishedAt: 2026-08-12 05:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 05:43:46 +0000 UTC FinishedAt: 2026-08-12 05:45:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*08b811d3-7a8f-46c1-b6fe-f8390697ffc7,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-workflowhh98s/series-workflowhh98s-build-action-1375443577/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-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 05:45:53 +0000 UTC FinishedAt: 2026-08-12 05:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 05:45:53 +0000 UTC FinishedAt: 2026-08-12 05:45:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 05:45:53 +0000 UTC FinishedAt: 2026-08-12 06:05:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 05:45:53 +0000 UTC FinishedAt: 2026-08-12 06:05:24 +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:*0dd40cbf-ffae-4bd8-b37b-cb9b038ca7f8,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-workflowhh98s/series-workflowhh98s-convert-artifact-2036887698/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": "3396c146-b8ab-4ce9-b7e9-01505e86f72f", "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-workflowhh98s/series-workflowhh98s-build-action-213970214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 05:45:53 +0000 UTC FinishedAt: 2026-08-12 06:05:14 +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:*0dd40cbf-ffae-4bd8-b37b-cb9b038ca7f8,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-workflowhh98s/series-workflowhh98s-convert-artifact-2036887698/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": "3396c146-b8ab-4ce9-b7e9-01505e86f72f", "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-workflowhh98s/series-workflowhh98s-build-action-213970214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 06:05:24 +0000 UTC FinishedAt: 2026-08-12 06:05:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 06:05:24 +0000 UTC FinishedAt: 2026-08-12 06:05:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 06:05:24 +0000 UTC FinishedAt: 2026-08-12 06:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 06:05:24 +0000 UTC FinishedAt: 2026-08-12 06:07:19 +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:*3396c146-b8ab-4ce9-b7e9-01505e86f72f,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-workflowhh98s/series-workflowhh98s-build-action-213970214/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-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 06:07:29 +0000 UTC FinishedAt: 2026-08-12 06:41:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 06:07:29 +0000 UTC FinishedAt: 2026-08-12 06:41:42 +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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"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:*08b811d3-7a8f-46c1-b6fe-f8390697ffc7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3396c146-b8ab-4ce9-b7e9-01505e86f72f,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-workflowhh98s/series-workflowhh98s-build-action-1375443577/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-workflowhh98s/series-workflowhh98s-build-action-213970214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 06:07:29 +0000 UTC FinishedAt: 2026-08-12 06:07:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 06:07:29 +0000 UTC FinishedAt: 2026-08-12 06:07:36 +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-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"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-workflowhh98s/series-workflowhh98s-convert-artifact-2106373863/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 06:07:29 +0000 UTC FinishedAt: 2026-08-12 06:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 06:07:29 +0000 UTC FinishedAt: 2026-08-12 06:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 06:07:29 +0000 UTC FinishedAt: 2026-08-12 06:07:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 06:07:40 +0000 UTC FinishedAt: 2026-08-12 06:41:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhh98s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["pci_reset_bus_cond","pci_reset_function","pci_reset_function_locked","pci_try_reset_function","pci_reset_bus","vfio_pci_core_ioctl","vfio_pci_core_disable","vfio_pci_core_enable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ec42d57655c690234c14aece6dd3f209778c1d8","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCI","VFIO","VFIO_PCI"],"series_id":"f35822b8-9b69-428c-b485-0c19a12bc0e2","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 06:07:40 +0000 UTC FinishedAt: 2026-08-12 06:41:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*08b811d3-7a8f-46c1-b6fe-f8390697ffc7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3396c146-b8ab-4ce9-b7e9-01505e86f72f,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-workflowhh98s/series-workflowhh98s-build-action-1375443577/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-workflowhh98s/series-workflowhh98s-build-action-213970214/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-workflowhh98s/series-workflowhh98s-convert-artifact-2106373863/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,}