Name: series-workflowct86r Phase: Succeeded StartedAt: 2026-07-04 11:29:45 +0000 UTC FinishedAt: 2026-07-04 15:47:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[0] Phase: Succeeded StartedAt: 2026-07-04 11:29:45 +0000 UTC FinishedAt: 2026-07-04 11:40:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[0].run-triage Phase: Succeeded StartedAt: 2026-07-04 11:29:45 +0000 UTC FinishedAt: 2026-07-04 11:40:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d6456743424721a837e1509b912f362caaeecd97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d6456743424721a837e1509b912f362caaeecd97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN" ], "series_id": "01ccfb70-4d44-4a49-a66d-5bdd6cc763bc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tun_set_iff" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDExOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9zZXRfaWZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdHVuX25ldF94bWl0IGFuZCBfX3R1bl93YWtlX3F1ZXVlIHRvIHN0b3AgdGhlIFRYIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIFRVTlNFVElGRiBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxMTozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVjNWYxMGY2ODFlMjg1NjlhNDdhYjhhMWQzNTI5ZTQxNzZhNGFlOThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCA0IDExOjM5OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcbmluZGV4IDRkNzA4N2Y3MjdiZTVlLi41OTkyNjQ4MjVkZDIxNiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxuQEAgLTIwNiw2ICYjNDM7MjA2LDIzIEBAIGVuYWJsZSBpcyB0cnVlIHdlIGVuYWJsZSBpdCwgb3RoZXJ3aXNlIHdlIGRpc2FibGUgaXQ6OlxuICAgICAgIHJldHVybiBpb2N0bChmZCwgVFVOU0VUUVVFVUUsICh2b2lkICopXHUwMDI2aWZyKTtcbiAgIH1cbiBcbiYjNDM7My40IHFkaXNjIGJhY2twcmVzc3VyZVxuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO1xuJiM0MztTdGFydGluZyB3aXRoIExpbnV4IDcuMiwgSUZGX0JBQ0tQUkVTU1VSRSBjYW4gYmUgc2V0IHRvIGVuYWJsZSBxZGlzY1xuJiM0MztiYWNrcHJlc3N1cmUuIFdpdGhvdXQgaXQsIFRYIGRyb3BzIG9jY3VyIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzXG4mIzQzO2Z1bGwuIFdpdGggaXQsIHRoZSBrZXJuZWwgc3RvcHMgdGhlIFRYIHF1ZXVlIGluc3RlYWQsIGxldHRpbmcgdGhlIHFkaXNjXG4mIzQzO2hvbGQgcGFja2V0cy4gRHJvcHMgb25seSBvY2N1ciBhcyBhIHJhcmUgcmFjZS4gVGhpcyBjYW4gYmVuZWZpdCBwcm90b2NvbHNcbiYjNDM7bGlrZSBUQ1AgdGhhdCByZWFjdCB0byBkcm9wcy4gQmFja3ByZXNzdXJlIHJlcXVpcmVzIGEgcWRpc2MgdG8gYmVcbiYjNDM7YXR0YWNoZWQgYW5kIGhhcyBubyBlZmZlY3Qgd2l0aCBub3F1ZXVlLlxuJiM0MztcbiYjNDM7VGhlIFRVTi9UQVAgcmluZyBidWZmZXIgc2l6ZSBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvXG4mIzQzO2Z1cnRoZXIgc2hpZnQgYnVmZmVyaW5nIGludG8gdGhlIHFkaXNjIGFuZCByZWR1Y2UgYnVmZmVyYmxvYXQsIGJ1dCBjb21lc1xuJiM0MzthdCBwb3NzaWJsZSBwZXJmb3JtYW5jZSBjb3N0LlxuJiM0MztcbiYjNDM7V2hlbiBydW5uaW5nIG11bHRpcGxlIG5ldHdvcmsgc3RyZWFtcyBpbiBwYXJhbGxlbCwgdGhlIGZsYWcgbWF5IHJlZHVjZVxuJiM0MztwZXJmb3JtYW5jZSBkdWUgdG8gdGhlIGV4dHJhIG92ZXJoZWFkIG9mIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtLlxuJiM0MztcbiBVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25cbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5pbmRleCBmZmJlNmYxM2ZiMWZhMi4uM2JmOGE3M2EwODE2MmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdHVuLmNcbkBAIC05OCw3ICYjNDM7OTgsOCBAQCBzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICNkZWZpbmUgVFVOX0ZBU1lOQ1x0SUZGX0FUVEFDSF9RVUVVRVxuIFxuICNkZWZpbmUgVFVOX0ZFQVRVUkVTIChJRkZfTk9fUEkgfCBJRkZfT05FX1FVRVVFIHwgSUZGX1ZORVRfSERSIHwgXFxcbi1cdFx0ICAgICAgSUZGX01VTFRJX1FVRVVFIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUylcbiYjNDM7XHRcdCAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MgfCBcXFxuJiM0MztcdFx0ICAgICAgSUZGX0JBQ0tQUkVTU1VSRSlcbiBcbiAjZGVmaW5lIEdPT0RDT1BZX0xFTiAxMjhcbiBcbkBAIC0xMDc3LDcgJiM0MzsxMDc4LDggQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4gXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZywgc2tiKTtcbi1cdGlmICghcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKCh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpID09IC1FTk9TUEMpIHtcbiBcdFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XG4gXHRcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xuQEAgLTIxNTEsOCAmIzQzOzIxNTMsMTIgQEAgc3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4gc3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuIFx0XHRcdCAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKVxuIHtcbi1cdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUodHVuLVx1MDAzZWRldixcbi1cdFx0XHRcdFx0XHR0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCk7XG4mIzQzO1x0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuJiM0MztcbiYjNDM7XHRpZiAoISh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi1cdTAwM2VkZXYsIHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiBcbiBcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi9cbiBcdHNtcF9tYigpO1xuQEAgLTI4OTMsOCAmIzQzOzI4OTksMTkgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbiBcdC8qIE1ha2Ugc3VyZSBwZXJzaXN0ZW50IGRldmljZXMgZG8gbm90IGdldCBzdHVjayBpblxuIFx0ICogeG9mZiBzdGF0ZS5cbiBcdCAqL1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVx1MDAzZWRldikpXG4tXHRcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyh0dW4tXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSkge1xuJiM0MztcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHR1bi1cdTAwM2VudW1xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB0dW5fZmlsZSAqaV90ZmlsZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlfdGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuJiM0MztcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aV90ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuJiM0MztcdFx0XHRzcGluX2xvY2soXHUwMDI2aV90ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuJiM0MztcdFx0XHRuZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi1cdTAwM2VkZXYsIGlfdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuJiM0MztcdFx0XHRpX3RmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aV90ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpX3RmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0c3Ryc2NweShpZnItXHUwMDNlaWZyX25hbWUsIHR1bi1cdTAwM2VkZXYtXHUwMDNlbmFtZSk7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbmluZGV4IDc5ZDUzYzdhMWViZGM1Li43M2E3NzE0MTMxNWM3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5AQCAtNjksNiAmIzQzOzY5LDcgQEBcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXHQweDAwMjBcbiAvKiBVc2VkIGluIFRVTlNFVElGRiB0byBicmluZyB1cCB0dW4vdGFwIHdpdGhvdXQgY2FycmllciAqL1xuICNkZWZpbmUgSUZGX05PX0NBUlJJRVJcdDB4MDA0MFxuJiM0MzsjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkVcdDB4MDA4MFxuICNkZWZpbmUgSUZGX05PX1BJXHQweDEwMDBcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXG4gI2RlZmluZSBJRkZfT05FX1FVRVVFXHQweDIwMDBcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbmluZGV4IDJlYzA3ZGUxZDczYmU0Li45N2I2NzBmNWJjMGEzNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5AQCAtNjcsNiAmIzQzOzY3LDcgQEBcbiAjZGVmaW5lIElGRl9UQVBcdFx0MHgwMDAyXG4gI2RlZmluZSBJRkZfTkFQSVx0MHgwMDEwXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1x0MHgwMDIwXG4mIzQzOyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDExOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9zZXRfaWZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdHVuX25ldF94bWl0IGFuZCBfX3R1bl93YWtlX3F1ZXVlIHRvIHN0b3AgdGhlIFRYIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIFRVTlNFVElGRiBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWM1ZjEwZjY4MWUyODU2OWE0N2FiOGExZDM1MjllNDE3NmE0YWU5OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDQgMTE6Mzk6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0CmluZGV4IDRkNzA4N2Y3MjdiZTVlLi41OTkyNjQ4MjVkZDIxNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3QKQEAgLTIwNiw2ICYjNDM7MjA2LDIzIEBAIGVuYWJsZSBpcyB0cnVlIHdlIGVuYWJsZSBpdCwgb3RoZXJ3aXNlIHdlIGRpc2FibGUgaXQ6OgogICAgICAgcmV0dXJuIGlvY3RsKGZkLCBUVU5TRVRRVUVVRSwgKHZvaWQgKikmYW1wO2lmcik7CiAgIH0KIAomIzQzOzMuNCBxZGlzYyBiYWNrcHJlc3N1cmUKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7U3RhcnRpbmcgd2l0aCBMaW51eCA3LjIsIElGRl9CQUNLUFJFU1NVUkUgY2FuIGJlIHNldCB0byBlbmFibGUgcWRpc2MKJiM0MztiYWNrcHJlc3N1cmUuIFdpdGhvdXQgaXQsIFRYIGRyb3BzIG9jY3VyIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzCiYjNDM7ZnVsbC4gV2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyB0aGUgVFggcXVldWUgaW5zdGVhZCwgbGV0dGluZyB0aGUgcWRpc2MKJiM0Mztob2xkIHBhY2tldHMuIERyb3BzIG9ubHkgb2NjdXIgYXMgYSByYXJlIHJhY2UuIFRoaXMgY2FuIGJlbmVmaXQgcHJvdG9jb2xzCiYjNDM7bGlrZSBUQ1AgdGhhdCByZWFjdCB0byBkcm9wcy4gQmFja3ByZXNzdXJlIHJlcXVpcmVzIGEgcWRpc2MgdG8gYmUKJiM0MzthdHRhY2hlZCBhbmQgaGFzIG5vIGVmZmVjdCB3aXRoIG5vcXVldWUuCiYjNDM7CiYjNDM7VGhlIFRVTi9UQVAgcmluZyBidWZmZXIgc2l6ZSBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvCiYjNDM7ZnVydGhlciBzaGlmdCBidWZmZXJpbmcgaW50byB0aGUgcWRpc2MgYW5kIHJlZHVjZSBidWZmZXJibG9hdCwgYnV0IGNvbWVzCiYjNDM7YXQgcG9zc2libGUgcGVyZm9ybWFuY2UgY29zdC4KJiM0MzsKJiM0MztXaGVuIHJ1bm5pbmcgbXVsdGlwbGUgbmV0d29yayBzdHJlYW1zIGluIHBhcmFsbGVsLCB0aGUgZmxhZyBtYXkgcmVkdWNlCiYjNDM7cGVyZm9ybWFuY2UgZHVlIHRvIHRoZSBleHRyYSBvdmVyaGVhZCBvZiB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbS4KJiM0MzsKIFVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggZmZiZTZmMTNmYjFmYTIuLjNiZjhhNzNhMDgxNjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtOTgsNyAmIzQzOzk4LDggQEAgc3RhdGljIHZvaWQgdHVuX2RlZmF1bHRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICNkZWZpbmUgVFVOX0ZBU1lOQwlJRkZfQVRUQUNIX1FVRVVFCiAKICNkZWZpbmUgVFVOX0ZFQVRVUkVTIChJRkZfTk9fUEkgfCBJRkZfT05FX1FVRVVFIHwgSUZGX1ZORVRfSERSIHwgXAotCQkgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTKQomIzQzOwkJICAgICAgSUZGX01VTFRJX1FVRVVFIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUyB8IFwKJiM0MzsJCSAgICAgIElGRl9CQUNLUFJFU1NVUkUpCiAKICNkZWZpbmUgR09PRENPUFlfTEVOIDEyOAogCkBAIC0xMDc3LDcgJiM0MzsxMDc4LDggQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiAJc3Bpbl9sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcucHJvZHVjZXJfbG9jayk7CiAJcmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcsIHNrYik7Ci0JaWYgKCFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSAmYW1wOyZhbXA7CiYjNDM7CWlmICgodHVuLSZndDtmbGFncyAmYW1wOyBJRkZfQkFDS1BSRVNTVVJFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgJmFtcDsmYW1wOwogCSAgICBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZykgPT0gLUVOT1NQQykgewogCQluZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTsKIAkJLyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovCkBAIC0yMTUxLDggJiM0MzsyMTUzLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLAogc3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLAogCQkJICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpCiB7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tJmd0O2RldiwKLQkJCQkJCXRmaWxlLSZndDtxdWV1ZV9pbmRleCk7CiYjNDM7CXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKJiM0MzsKJiM0MzsJaWYgKCEodHVuLSZndDtmbGFncyAmYW1wOyBJRkZfQkFDS1BSRVNTVVJFKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tJmd0O2RldiwgdGZpbGUtJmd0O3F1ZXVlX2luZGV4KTsKIAogCS8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi8KIAlzbXBfbWIoKTsKQEAgLTI4OTMsOCAmIzQzOzI4OTksMTkgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcikKIAkvKiBNYWtlIHN1cmUgcGVyc2lzdGVudCBkZXZpY2VzIGRvIG5vdCBnZXQgc3R1Y2sgaW4KIAkgKiB4b2ZmIHN0YXRlLgogCSAqLwotCWlmIChuZXRpZl9ydW5uaW5nKHR1bi0mZ3Q7ZGV2KSkKLQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHR1bi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcodHVuLSZndDtkZXYpKSB7CiYjNDM7CQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHR1bi0mZ3Q7bnVtcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB0dW5fZmlsZSAqaV90ZmlsZTsKJiM0MzsKJiM0MzsJCQlpX3RmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tJmd0O3RmaWxlc1tpXSk7CiYjNDM7CQkJc3Bpbl9sb2NrX2JoKCZhbXA7aV90ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0MzsJCQlzcGluX2xvY2soJmFtcDtpX3RmaWxlLSZndDt0eF9yaW5nLnByb2R1Y2VyX2xvY2spOwomIzQzOwkJCW5ldGlmX3dha2Vfc3VicXVldWUodHVuLSZndDtkZXYsIGlfdGZpbGUtJmd0O3F1ZXVlX2luZGV4KTsKJiM0MzsJCQlpX3RmaWxlLSZndDtjb25zX2NudCA9IDA7CiYjNDM7CQkJc3Bpbl91bmxvY2soJmFtcDtpX3RmaWxlLSZndDt0eF9yaW5nLnByb2R1Y2VyX2xvY2spOwomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7aV90ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0MzsJCX0KJiM0MzsJfQogCiAJc3Ryc2NweShpZnItJmd0O2lmcl9uYW1lLCB0dW4tJmd0O2Rldi0mZ3Q7bmFtZSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmgKaW5kZXggNzlkNTNjN2ExZWJkYzUuLjczYTc3MTQxMzE1YzdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCkBAIC02OSw2ICYjNDM7NjksNyBAQAogI2RlZmluZSBJRkZfTkFQSV9GUkFHUwkweDAwMjAKIC8qIFVzZWQgaW4gVFVOU0VUSUZGIHRvIGJyaW5nIHVwIHR1bi90YXAgd2l0aG91dCBjYXJyaWVyICovCiAjZGVmaW5lIElGRl9OT19DQVJSSUVSCTB4MDA0MAomIzQzOyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRQkweDAwODAKICNkZWZpbmUgSUZGX05PX1BJCTB4MTAwMAogLyogVGhpcyBmbGFnIGhhcyBubyByZWFsIGVmZmVjdCAqLwogI2RlZmluZSBJRkZfT05FX1FVRVVFCTB4MjAwMApkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCmluZGV4IDJlYzA3ZGUxZDczYmU0Li45N2I2NzBmNWJjMGEzNSAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaApAQCAtNjcsNiAmIzQzOzY3LDcgQEAKICNkZWZpbmUgSUZGX1RBUAkJMHgwMDAyCiAjZGVmaW5lIElGRl9OQVBJCTB4MDAxMAogI2RlZmluZSBJRkZfTkFQSV9GUkFHUwkweDAwMjAKJiM0MzsjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkUJMHgwMDgwCiAjZGVmaW5lIElGRl9OT19QSQkweDEwMDAKIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi8KICNkZWZpbmUgSUZGX09ORV9RVUVVRQkweDIwMDAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTE6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFRVTi9UQVAgUGF0Y2gqKgoKQWxyaWdodCwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhpdHRpbmcgbXkgZGVzaywgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgY29yZSBUVU4vVEFQIGluZnJhc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgdG8gYGRyaXZlcnMvbmV0L3R1bi5jYCwgdGhlIGRvY3VtZW50YXRpb24gaW4gYHR1bnRhcC5yc3RgLCBhbmQgdGhlIHVzZXJzcGFjZSBpbnRlcmZhY2UgaGVhZGVyIGBpZl90dW4uaGAuIEltbWVkaWF0ZWx5LCBteSBzcGlkZXktc2Vuc2UgdGluZ2xlczsgYW55IG1vZGlmaWNhdGlvbiB0byB0aG9zZSBmaWxlcyBoYXMgdGhlIHBvdGVudGlhbCBmb3Igc2lnbmlmaWNhbnQgaW1wYWN0LiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYElGRl9CQUNLUFJFU1NVUkVgIGZsYWcuIFRoaXMgc3VnZ2VzdHMgYSBtb2RpZmljYXRpb24gdG8gaG93IFRVTi9UQVAgaW50ZXJmYWNlcyBoYW5kbGUgZmxvdyBjb250cm9sIG9yIGNvbmdlc3Rpb24uIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzIGluIGB0dW5fbmV0X3htaXRgLCBgX190dW5fd2FrZV9xdWV1ZWAsIGFuZCBgdHVuX3NldF9pZmZgLiBGdW5jdGlvbmFsaXR5IGFuZCByZWFjaGFiaWxpdHkgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgbmV0LW5ldyBmZWF0dXJlLCBvciBhbiBvcHRpbWl6YXRpb24gb2YgZXhpc3RpbmcgYmVoYXZpb3IuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7dmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbmV3IGZlYXR1cmUgaXMgY29udHJvbGxlZCBhdCBidWlsZCB0aW1lLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAsIHRvIGZpbmQgdGhlIGNvbmZpZyBvcHRpb25zIHRoYXQgZW5hYmxlIHRoaXMgZmVhdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHR1cm5zIHVwIGluIHRoZSBidWlsZCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTE6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfTkVUX1RFQU0pICYjNDM7PSB0ZWFtL1xuZHJpdmVycy9uZXQvTWFrZWZpbGU6MzI6b2JqLSQoQ09ORklHX1RVTikgJiM0Mzs9IHR1bi5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0zMy1vYmotJChDT05GSUdfVEFQKSAmIzQzOz0gdGFwLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9NDE9bWx4NV9jb3JlLSQoQ09ORklHX1BDSV9IWVBFUlZfSU5URVJGQUNFKSAmIzQzOz0gZW4vaHZfdmhjYV9zdGF0cy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU6NDI6bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfRVNXSVRDSCkgICAgICYjNDM7PSBsYWcvbXAubyBsYWcvcG9ydF9zZWwubyBsaWIvZ2VuZXZlLm8gbGliL3BvcnRfdHVuLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS00My1cdFx0XHRcdFx0ZW5fcmVwLm8gZW4vcmVwL2JvbmQubyBlbi9tb2RfaGRyLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9NDU9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfQ0xTX0FDVCkgICAgICYjNDM7PSBlbl90Yy5vIGVuL3JlcC90Yy5vIGVuL3JlcC9uZWlnaC5vIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU6NDY6XHRcdFx0XHRcdGxpYi9mc19jaGFpbnMubyBlbi90Y190dW4ubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTQ3LVx0XHRcdFx0XHRlc3cvaW5kaXJfdGFibGUubyBlbi90Y190dW5fZW5jYXAubyBcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT01Mz1tbHg1X2NvcmUtJChDT05GSUdfTUxYNV9DTFNfQUNUKSAgICAgJiM0Mzs9IGVuL3RjL2FjdC9hY3QubyBlbi90Yy9hY3QvZHJvcC5vIGVuL3RjL2FjdC90cmFwLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS01NC1cdFx0XHRcdFx0ZW4vdGMvYWN0L2FjY2VwdC5vIGVuL3RjL2FjdC9tYXJrLm8gZW4vdGMvYWN0L2dvdG8ubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjU1Olx0XHRcdFx0XHRlbi90Yy9hY3QvdHVuLm8gZW4vdGMvYWN0L2NzdW0ubyBlbi90Yy9hY3QvcGVkaXQubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTU2LVx0XHRcdFx0XHRlbi90Yy9hY3Qvdmxhbi5vIGVuL3RjL2FjdC92bGFuX21hbmdsZS5vIGVuL3RjL2FjdC9tcGxzLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jPTEwNDU9bmZwX3R1bm5lbF9sb29rdXBfb2ZmbG9hZGVkX21hY3Moc3RydWN0IG5mcF9hcHAgKmFwcCwgY29uc3QgdTggKm1hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTEwNDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jOjEwNDk6XHRyZXR1cm4gcmhhc2h0YWJsZV9sb29rdXBfZmFzdChcdTAwMjZwcml2LVx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcywgbWFjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMDUwLVx0XHRcdFx0ICAgICAgb2ZmbG9hZGVkX21hY3NfcGFyYW1zKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jPTEwNzc9bmZwX3R1bm5lbF9hZGRfc2hhcmVkX21hYyhzdHJ1Y3QgbmZwX2FwcCAqYXBwLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTEyNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTEyODpcdFx0aWYgKHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXHUwMDI2cHJpdi1cdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTExMjktXHRcdFx0XHRcdCAgIFx1MDAyNmVudHJ5LVx1MDAzZWh0X25vZGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMTUwLWVycl9yZW1vdmVfaGFzaDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTE1MTpcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cHJpdi1cdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsIFx1MDAyNmVudHJ5LVx1MDAzZWh0X25vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTExNTItXHRcdFx0ICAgICAgIG9mZmxvYWRlZF9tYWNzX3BhcmFtcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xMTYzPW5mcF90dW5uZWxfZGVsX3NoYXJlZF9tYWMoc3RydWN0IG5mcF9hcHAgKmFwcCwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTEyMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jOjEyMjg6XHRXQVJOX09OX09OQ0Uocmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZwcml2LVx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTIyOS1cdFx0XHRcdFx0ICAgIFx1MDAyNmVudHJ5LVx1MDAzZWh0X25vZGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xNTA3PWludCBuZnBfdHVubmVsX2NvbmZpZ19zdGFydChzdHJ1Y3QgbmZwX2FwcCAqYXBwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTUxMi1cdC8qIEluaXRpYWxpc2Ugcmhhc2ggZm9yIE1BQyBvZmZsb2FkIHRyYWNraW5nLiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxNTEzOlx0ZXJyID0gcmhhc2h0YWJsZV9pbml0KFx1MDAyNnByaXYtXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTE0LVx0XHRcdCAgICAgIFx1MDAyNm9mZmxvYWRlZF9tYWNzX3BhcmFtcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTMwLVx0aWYgKGVycikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxNTMxOlx0XHRyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1MzItXHRcdFx0XHRcdCAgICBuZnBfY2hlY2tfcmhhc2h0YWJsZV9lbXB0eSwgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xNTM5PXZvaWQgbmZwX3R1bm5lbF9jb25maWdfc3RvcChzdHJ1Y3QgbmZwX2FwcCAqYXBwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTU1OC1cdC8qIERlc3Ryb3kgcmhhc2guIEVudHJpZXMgc2hvdWxkIGJlIGNsZWFuZWQgb24gbmV0ZGV2IG5vdGlmaWVyIHVucmVnLiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxNTU5Olx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTYwLVx0XHRcdFx0ICAgIG5mcF9jaGVja19yaGFzaHRhYmxlX2VtcHR5LCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxMTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTY5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVFVOIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBgQ09ORklHX1RVTmAsIHRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgbGlrZWx5IHN1c3BlY3RzIOKAkyB0aGUgaGVhcnQgb2YgdGhlIFRVTiBkcml2ZXI6IGBkcml2ZXJzL25ldC90dW4uY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGFueSBmdW5jdGlvbnMgdGhhdCBtaWdodCBoYXZlIGJlZW4gdHdlYWtlZC4gRnJvbSBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgYHR1bl9uZXRfeG1pdGAsIGBfX3R1bl93YWtlX3F1ZXVlYCwgYW5kIGB0dW5fc2V0X2lmZmAgYXJlIHRoZSBvbmVzIHRvIGZvY3VzIG9uLiAKCkhtbSwgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZsb2F0aW5nIGFyb3VuZCB0aGF0IGNvdWxkIGltcGFjdCB0aGVzZSBmdW5jdGlvbnM/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSYjMzk7cyBtb3JlIHRvIGNvbnNpZGVyIGhlcmUuIFJpZ2h0LCB0aGUgY29kZSBpcyB1c2luZyBgSUZGX0JBQ0tQUkVTU1VSRWAgd2l0aGluIGB0dW5fbmV0X3htaXRgLCBgX190dW5fd2FrZV9xdWV1ZWAsIGFuZCBgdHVuX3NldF9pZmZgLCB0aGF04oCZcyB0aGUgY3J1Y2lhbCBwaWVjZSB0byB0cmFjayBkb3duLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIGFyZSBnYXRpbmcgdGhlIHVzZSBvciBiZWhhdmlvciBvZiB0aGVzZSBrZXkgZnVuY3Rpb25zIGJhc2VkIG9uIHNwZWNpZmljIGNvbXBpbGUtdGltZSBmbGFncy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbnVhbmNlIG9mdGVuIGxpZXMgaW4gdGhpcyB0eXBlIG9mIGRyaXZlciBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgSUZGX0JBQ0tQUkVTU1VSRWAgaXMgbm90IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3V0LCBhbmQgc2VlIGlmIGl0IGlzIHVzZWQgYWNjb3JkaW5nIHRvIGl0cyBvcmlnaW5hbCBpbnRlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTE6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX25ldF94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MTAwMT1zdGF0aWMgdW5zaWduZWQgaW50IHJ1bl9lYnBmX2ZpbHRlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEwMTMtLyogTmV0IGRldmljZSBzdGFydCB4bWl0ICovXG5kcml2ZXJzL25ldC90dW4uYzoxMDE0OnN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3R1bi5jLTEwMTUte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEyMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjIwLVx0Lm5kb19zdG9wXHRcdD0gdHVuX25ldF9jbG9zZSxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyMjE6XHQubmRvX3N0YXJ0X3htaXRcdFx0PSB0dW5fbmV0X3htaXQsXG5kcml2ZXJzL25ldC90dW4uYy0xMjIyLVx0Lm5kb19maXhfZmVhdHVyZXNcdD0gdHVuX25ldF9maXhfZmVhdHVyZXMsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTMwMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRhcF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEzMDQtXHQubmRvX3N0b3BcdFx0PSB0dW5fbmV0X2Nsb3NlLFxuZHJpdmVycy9uZXQvdHVuLmM6MTMwNTpcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IHR1bl9uZXRfeG1pdCxcbmRyaXZlcnMvbmV0L3R1bi5jLTEzMDYtXHQubmRvX2ZpeF9mZWF0dXJlc1x0PSB0dW5fbmV0X2ZpeF9mZWF0dXJlcyxcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yMTUzPXN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMTYyLVxuZHJpdmVycy9uZXQvdHVuLmM6MjE2MzpcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi9cbmRyaXZlcnMvbmV0L3R1bi5jLTIxNjQtXHRzbXBfbWIoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxMTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDUzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUVU4gRHJpdmVyIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIHRoYXQgdGhleSBhcmVuJiMzOTt0IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aCBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcy4gVGhhdCYjMzk7cyBnb29kLCBsZXNzIHRvIHdvcnJ5IGFib3V0IGluIHRlcm1zIG9mIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBUaGUgY29uZmlnIGlzIGRlZmluaXRlbHkgc2V0IHRvIGBUVU5gLgoKSSYjMzk7bSBmb2N1c2VkIG9uIGB0dW5fbmV0X3htaXRgLCBgX190dW5fd2FrZV9xdWV1ZWAsIGFuZCBgdHVuX3NldF9pZmZgLiBMZXQmIzM5O3Mgc2VlLi4uIFdhaXQgYSBtaW51dGUsIGB0dW5fbmV0X3htaXRgIOKAkyB0aGF0JiMzOTtzIGEga2V5IG9uZSEgSXQmIzM5O3MgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIHZlcnkgbGlrZWx5IGEgaG90LXBhdGggZnVuY3Rpb24uIEhpZ2ggcGVyZm9ybWFuY2UsIHJpZ2h0IGluIHRoZSBuZXR3b3JrIGRhdGEgcGF0aC4gYF9fdHVuX3dha2VfcXVldWVgLi4uIHllYWgsIHRoYXQgY291bGQgYWxzbyBiZSBwZXJmb3JtYW5jZSBjcml0aWNhbCwgZGVwZW5kaW5nIG9uIGhvdyBvZnRlbiBpdCYjMzk7cyBnZXR0aW5nIGNhbGxlZC4gSXQgbWlnaHQgYmUgaW4gYSBidXN5IGxvb3Agc2l0dWF0aW9uLiBCdXQgYHR1bl9zZXRfaWZmYCwgbm9wZSwgdGhhdCYjMzk7cyBhbiBpb2N0bCBoYW5kbGVyLiBJdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlLCBjb21wYXJlZCB0byB0aGUgb3RoZXIgdHdvLgoKU28sIHNpbmNlIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYSBwZXJmb3JtYW5jZSBpc3N1ZSwgSSYjMzk7bSBnb2luZyB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgX190dW5fd2FrZV9xdWV1ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBmcmVxdWVudGx5IGl0IGlzIGdldHRpbmcgY2FsbGVkLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IGlmIGl0IGlzIGEgaG90LXBhdGggZnVuY3Rpb24gd2l0aG91dCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDExOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdHVuX3dha2VfcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0xMDE0PXN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMDg0LVx0XHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcbmRyaXZlcnMvbmV0L3R1bi5jOjEwODU6XHRcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xuZHJpdmVycy9uZXQvdHVuLmMtMTA4Ni1cdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yMDY4PXN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxNTItLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG5kcml2ZXJzL25ldC90dW4uYzoyMTUzOnN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTIxNTQtXHRcdFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjE3NT1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxODEtXHRpZiAocHRyKVxuZHJpdmVycy9uZXQvdHVuLmM6MjE4MjpcdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTIxODMtXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MzgyOT12b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzg0NC1cdGlmICh0dW4pXG5kcml2ZXJzL25ldC90dW4uYzozODQ1Olx0XHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM4NDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTE6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM2OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgQm90dGxlbmVjayBpbiB0aGUgVFVOIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaXNzdWVzIHdpdGhpbiB0aGUgVFVOIGRyaXZlci4gTXkgY3VycmVudCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgYSBib3R0bGVuZWNrIG9yIGFyZWEgZm9yIG9wdGltaXphdGlvbiBhcm91bmQgYHR1bl93YWtlX3F1ZXVlYCwgYXMgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgdHVuX3JpbmdfY29uc3VtZWAgYW5kLCBjcml0aWNhbGx5LCBmcm9tIGl0c2VsZi4gYHR1bl9yaW5nX2NvbnN1bWVgIGlzIGNhbGxlZCBkdXJpbmcgcmVhZCBvcGVyYXRpb25zLCB3aGljaCBJIGtub3cgaXMgYSBob3QgcGF0aCBvbiBhbnkgbmV0d29yayBpbnRlcmZhY2UuIFRoaXMgbWFrZXMgYHR1bl93YWtlX3F1ZXVlYCBhbmQgdGhlIGZ1bmN0aW9uIGl0IGNhbGxzLCB0aGUgcGxhY2UgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBHaXZlbiB0aGVzZSBjb25uZWN0aW9ucywgYHR1bl9zZXRfaWZmYCBpcyBsaWtlbHkgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbi4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIGFuIGBpb2N0bGAgb3BlcmF0aW9uIHNpbmNlIHRoaXMgaXMgd2hlcmUgdGhpbmdzIHdpbGwgbGlrZWx5IGhhdmUgdGhlIGJpZ2dlc3QgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fc2V0X2lmZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTI3NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdHVuX2F0dHJfZ3JvdXAgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjc2Ny1cbmRyaXZlcnMvbmV0L3R1bi5jOjI3Njg6c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbmRyaXZlcnMvbmV0L3R1bi5jLTI3Njkte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTMxMjc9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMxNzQtXG5kcml2ZXJzL25ldC90dW4uYzozMTc1Olx0XHRyZXQgPSB0dW5fc2V0X2lmZihuZXQsIGZpbGUsIFx1MDAyNmlmcik7XG5kcml2ZXJzL25ldC90dW4uYy0zMTc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxMTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHR1bl9zZXRfaWZmYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgdHVuX3NldF9pZmZgICppcyogY2FsbGVkIGZyb20gYF9fdHVuX2Nocl9pb2N0bGAsIGFuZCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgaXQmIzM5O3MgZGVmaW5pdGVseSBub3QgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBUaGF0IG11Y2ggaXMgY2xlYXIuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlIHRoYXQgd2FzIG1vZGlmaWVkLiBPa2F5LCBhY2NvcmRpbmcgdG8gdGhlIGRpZmYsIGl0JiMzOTtzOiBgdHVuX25ldF94bWl0YCwgYF9fdHVuX3dha2VfcXVldWVgLCBhbmQgYHR1bl9zZXRfaWZmYC4gU28sIGl0IGxvb2tzIGxpa2UgYHR1bl9zZXRfaWZmYCBpcyBpbmRlZWQgdGhlIGJlc3QgZm9jdXMgZm9yIHRoaXMgcGFydGljdWxhciBpbnZlc3RpZ2F0aW9uLgoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGhvdyBgSUZGX0JBQ0tQUkVTU1VSRWAgY29tZXMgaW50byBwbGF5LiBSaWdodCwgaXQmIzM5O3MgZGVmaW5lZCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oYCBhcyBgMHgwMDgwYC4gQW5kIGl0JiMzOTtzIGFkZGVkIHRvIGBUVU5fRkVBVFVSRVNgIHdpdGhpbiBgZHJpdmVycy9uZXQvdHVuLmNgLiBUaGUga2V5IHNlZW1zIHRvIGJlIHRoYXQgYHR1bl9zZXRfaWZmYCBjaGVja3MgYHR1bi0mZ3Q7ZmxhZ3NgIGFuZCBzZXRzIGl0IGFjY29yZGluZyB0byB0aGUgYGlmci0mZ3Q7aWZyX2ZsYWdzYC4gSGFuZyBvbi4uLiByZWFkaW5nIG92ZXIgdGhhdCBibG9jayBvZiBjb2RlLi4uIGB0dW5fc2V0X2lmZmAgYWN0dWFsbHkgZG9lczoKYGBgYwoJaWYgKGlmci0mZ3Q7aWZyX2ZsYWdzICZhbXA7IElGRl9CQUNLUFJFU1NVUkUpCgkJdHVuLSZndDtmbGFncyB8PSBJRkZfQkFDS1BSRVNTVVJFOwpgYGAKV2FpdCBhIHNlY29uZCwgdGhlIGRpZmYgSSBzYXcgKmRpZG4mIzM5O3QqIGluY2x1ZGUgYHR1bl9zZXRfaWZmYCBzZXR0aW5nIGBJRkZfQkFDS1BSRVNTVVJFYC4gVGhhdCYjMzk7cyBzdHJhbmdlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBgdHVuX3NldF9pZmZgIGluIGBkcml2ZXJzL25ldC90dW4uY2AgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdC4gU29tZXRoaW5nIGZlZWxzIG9mZiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg1MDpcdFxuMjg1MTpcdFx0XHRpZiAoKmlmci1cdTAwM2VpZnJfbmFtZSlcbjI4NTI6XHRcdFx0XHRuYW1lID0gaWZyLVx1MDAzZWlmcl9uYW1lO1xuMjg1MzpcdFxuMjg1NDpcdFx0XHRkZXYgPSBhbGxvY19uZXRkZXZfbXFzKHNpemVvZihzdHJ1Y3QgdHVuX3N0cnVjdCksIG5hbWUsXG4yODU1Olx0XHRcdFx0XHQgICAgICAgTkVUX05BTUVfVU5LTk9XTiwgdHVuX3NldHVwLCBxdWV1ZXMsXG4yODU2Olx0XHRcdFx0XHQgICAgICAgcXVldWVzKTtcbjI4NTc6XHRcbjI4NTg6XHRcdFx0aWYgKCFkZXYpXG4yODU5Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yODYwOlx0XG4yODYxOlx0XHRcdGRldl9uZXRfc2V0KGRldiwgbmV0KTtcbjI4NjI6XHRcdFx0ZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMgPSBcdTAwMjZ0dW5fbGlua19vcHM7XG4yODYzOlx0XHRcdGRldi1cdTAwM2VpZmluZGV4ID0gdGZpbGUtXHUwMDNlaWZpbmRleDtcbjI4NjQ6XHRcdFx0ZGV2LVx1MDAzZXN5c2ZzX2dyb3Vwc1swXSA9IFx1MDAyNnR1bl9hdHRyX2dyb3VwO1xuMjg2NTpcdFxuMjg2NjpcdFx0XHR0dW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuMjg2NzpcdFx0XHR0dW4tXHUwMDNlZGV2ID0gZGV2O1xuMjg2ODpcdFx0XHR0dW4tXHUwMDNlZmxhZ3MgPSBmbGFncztcbjI4Njk6XHRcdFx0dHVuLVx1MDAzZXR4Zmx0LmNvdW50ID0gMDtcbjI4NzA6XHRcdFx0dHVuLVx1MDAzZXZuZXRfaGRyX3N6ID0gc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcik7XG4yODcxOlx0XG4yODcyOlx0XHRcdHR1bi1cdTAwM2VhbGlnbiA9IE5FVF9TS0JfUEFEO1xuMjg3MzpcdFx0XHR0dW4tXHUwMDNlZmlsdGVyX2F0dGFjaGVkID0gZmFsc2U7XG4yODc0Olx0XHRcdHR1bi1cdTAwM2VzbmRidWYgPSB0ZmlsZS1cdTAwM2Vzb2NrZXQuc2stXHUwMDNlc2tfc25kYnVmO1xuMjg3NTpcdFx0XHR0dW4tXHUwMDNlcnhfYmF0Y2hlZCA9IDA7XG4yODc2Olx0XHRcdFJDVV9JTklUX1BPSU5URVIodHVuLVx1MDAzZXN0ZWVyaW5nX3Byb2csIE5VTEwpO1xuMjg3NzpcdFxuMjg3ODpcdFx0XHR0dW4tXHUwMDNlaWZyID0gaWZyO1xuMjg3OTpcdFx0XHR0dW4tXHUwMDNlZmlsZSA9IGZpbGU7XG4yODgwOlx0XG4yODgxOlx0XHRcdHR1bl9uZXRfaW5pdGlhbGl6ZShkZXYpO1xuMjg4MjpcdFxuMjg4MzpcdFx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UodHVuLVx1MDAzZWRldik7XG4yODg0Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjI4ODU6XHRcdFx0XHRmcmVlX25ldGRldihkZXYpO1xuMjg4NjpcdFx0XHRcdHJldHVybiBlcnI7XG4yODg3Olx0XHRcdH1cbjI4ODg6XHRcdFx0LyogZnJlZV9uZXRkZXYoKSB3b24mIzM5O3QgY2hlY2sgcmVmY250LCB0byBhdm9pZCByYWNlXG4yODg5Olx0XHRcdCAqIHdpdGggZGV2X3B1dCgpIHdlIG5lZWQgcHVibGlzaCB0dW4gYWZ0ZXIgcmVnaXN0cmF0aW9uLlxuMjg5MDpcdFx0XHQgKi9cbjI4OTE6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRmaWxlLVx1MDAzZXR1biwgdHVuKTtcbjI4OTI6XHRcdH1cbjI4OTM6XHRcbjI4OTQ6XHRcdGlmIChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfTk9fQ0FSUklFUilcbjI4OTU6XHRcdFx0bmV0aWZfY2Fycmllcl9vZmYodHVuLVx1MDAzZWRldik7XG4yODk2Olx0XHRlbHNlXG4yODk3Olx0XHRcdG5ldGlmX2NhcnJpZXJfb24odHVuLVx1MDAzZWRldik7XG4yODk4Olx0XG4yODk5Olx0XHQvKiBNYWtlIHN1cmUgcGVyc2lzdGVudCBkZXZpY2VzIGRvIG5vdCBnZXQgc3R1Y2sgaW5cbjI5MDA6XHRcdCAqIHhvZmYgc3RhdGUuXG4yOTAxOlx0XHQgKi9cbjI5MDI6XHRcdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cdTAwM2VkZXYpKSB7XG4yOTAzOlx0XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0dW4tXHUwMDNlbnVtcXVldWVzOyBpJiM0MzsmIzQzOykge1xuMjkwNDpcdFx0XHRcdHN0cnVjdCB0dW5fZmlsZSAqaV90ZmlsZTtcbjI5MDU6XHRcbjI5MDY6XHRcdFx0XHRpX3RmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW2ldKTtcbjI5MDc6XHRcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aV90ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuMjkwODpcdFx0XHRcdHNwaW5fbG9jayhcdTAwMjZpX3RmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4yOTA5Olx0XHRcdFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXHUwMDNlZGV2LCBpX3RmaWxlLVx1MDAzZXF1ZXVlX2luZGV4KTtcbjI5MTA6XHRcdFx0XHRpX3RmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbjI5MTE6XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpX3RmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4yOTEyOlx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aV90ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuMjkxMzpcdFx0XHR9XG4yOTE0Olx0XHR9XG4yOTE1Olx0XG4yOTE2Olx0XHRzdHJzY3B5KGlmci1cdTAwM2VpZnJfbmFtZSwgdHVuLVx1MDAzZWRldi1cdTAwM2VuYW1lKTtcbjI5MTc6XHRcdHJldHVybiAwO1xuMjkxODpcdH1cbjI5MTk6XHRcbjI5MjA6XHRzdGF0aWMgdm9pZCB0dW5fZ2V0X2lmZihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbjI5MjE6XHR7XG4yOTIyOlx0XHRzdHJzY3B5KGlmci1cdTAwM2VpZnJfbmFtZSwgdHVuLVx1MDAzZWRldi1cdTAwM2VuYW1lKTtcbjI5MjM6XHRcbjI5MjQ6XHRcdGlmci1cdTAwM2VpZnJfZmxhZ3MgPSB0dW5fZmxhZ3ModHVuKTtcbjI5MjU6XHRcbjI5MjY6XHR9XG4yOTI3Olx0XG4yOTI4Olx0I2RlZmluZSBQTEFJTl9HU08gKE5FVElGX0ZfR1NPX1VEUF9MNCB8IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KVxuMjkyOTpcdFxuMjkzMDpcdC8qIFRoaXMgaXMgbGlrZSBhIGN1dC1kb3duIGV0aHRvb2wgb3BzLCBleGNlcHQgZG9uZSB2aWEgdHVuIGZkIHNvIG5vXG4yOTMxOlx0ICogcHJpdnMgcmVxdWlyZWQuICovXG4yOTMyOlx0c3RhdGljIGludCBzZXRfb2ZmbG9hZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCB1bnNpZ25lZCBsb25nIGFyZylcbjI5MzM6XHR7XG4yOTM0Olx0XHRuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyA9IDA7XG4yOTM1Olx0XG4yOTM2Olx0XHRpZiAoYXJnIFx1MDAyNiBUVU5fRl9DU1VNKSB7XG4yOTM3Olx0XHRcdGZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTtcbjI5Mzg6XHRcdFx0YXJnIFx1MDAyNj0gflRVTl9GX0NTVU07XG4yOTM5Olx0XG4yOTQwOlx0XHRcdGlmIChhcmcgXHUwMDI2IChUVU5fRl9UU080fFRVTl9GX1RTTzYpKSB7XG4yOTQxOlx0XHRcdFx0aWYgKGFyZyBcdTAwMjYgVFVOX0ZfVFNPX0VDTikge1xuMjk0MjpcdFx0XHRcdFx0ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU09fRUNOO1xuMjk0MzpcdFx0XHRcdFx0YXJnIFx1MDAyNj0gflRVTl9GX1RTT19FQ047XG4yOTQ0Olx0XHRcdFx0fVxuMjk0NTpcdFx0XHRcdGlmIChhcmcgXHUwMDI2IFRVTl9GX1RTTzQpXG4yOTQ2Olx0XHRcdFx0XHRmZWF0dXJlcyB8PSBORVRJRl9GX1RTTztcbjI5NDc6XHRcdFx0XHRpZiAoYXJnIFx1MDAyNiBUVU5fRl9UU082KVxuMjk0ODpcdFx0XHRcdFx0ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082O1xuMjk0OTpcdFx0XHRcdGFyZyBcdTAwMjY9IH4oVFVOX0ZfVFNPNHxUVU5fRl9UU082KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTE6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFR1bm5lbCBJbnRlcmZhY2UgRmxhZyBBc3NpZ25tZW50KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHR1bi0mZ3Q7ZmxhZ3MgPSBmbGFncztgIHNwZWNpZmljYWxseSB3aGVyZSB0aGF0IGBmbGFnc2AgdmFsdWUgY29tZXMgZnJvbSBpbiB0aGUgY29udGV4dCBvZiB0aGUgdHVubmVsIGRldmljZSBzZXR1cC4gVGhlIGZvY3VzIGlzIG9uIGhvdyB0aG9zZSBmbGFncyBhcmUgdWx0aW1hdGVseSBkZXJpdmVkIGZyb20gYGlmci0mZ3Q7aWZyX2ZsYWdzYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIGZsYWdzIGFyZSBiZWluZyBjb3BpZWQsIGFsdGVyZWQsIG9yIGV2ZW4gbWFza2VkIGR1cmluZyB0aGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcywgd2hpY2ggaXMgaGFuZGxlZCBpbiB0aGUgYHR1bl9zZXRfaWZmYCBmdW5jdGlvbi4KCkkgd2FudCB0byB0cmFjayBwcmVjaXNlbHkgd2hhdCBzZXR0aW5ncyBhcmUgYWN0dWFsbHkgbWFraW5nIGl0IG9udG8gdGhlIHR1bm5lbCBpbnRlcmZhY2UuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJpdHdpc2UgbWFuaXB1bGF0aW9ucyBoYXBwZW5pbmc/IEFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cz8gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgbW9kaWZpY2F0aW9ucyByZWxhdGl2ZSB0byB0aGUgaW5pdGlhbCB1c2VyLXNwZWNpZmllZCBpbnRlcmZhY2UgZmxhZ3Mg4oCTIGhvdyBhcmUgdGhleSBiZWluZyB0cmFuc2xhdGVkLCBvciBpZiBhbnkgc3RhbmRhcmQgZmxhZ3MgYXJlIGdldHRpbmcgaW1wbGljaXRseSBhZGRlZCBvciByZW1vdmVkPyBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbXBsZXRlIHRyYW5zZm9ybWF0aW9uIHByb2Nlc3MgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIHRoZSB0dW5uZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDExOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzY4Olx0c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbjI3Njk6XHR7XG4yNzcwOlx0XHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuMjc3MTpcdFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuMjc3MjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjI3NzM6XHRcdGludCBlcnI7XG4yNzc0Olx0XG4yNzc1Olx0XHRpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQpXG4yNzc2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjc3NzpcdFxuMjc3ODpcdFx0aWYgKChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfTkFQSV9GUkFHUykpIHtcbjI3Nzk6XHRcdFx0aWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKVxuMjc4MDpcdFx0XHRcdHJldHVybiAtRVBFUk07XG4yNzgxOlx0XG4yNzgyOlx0XHRcdGlmICghKGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9OQVBJKSB8fFxuMjc4MzpcdFx0XHQgICAgKGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IFRVTl9UWVBFX01BU0spICE9IElGRl9UQVApXG4yNzg0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNzg1Olx0XHR9XG4yNzg2Olx0XG4yNzg3Olx0XHRkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIGlmci1cdTAwM2VpZnJfbmFtZSk7XG4yNzg4Olx0XHRpZiAoZGV2KSB7XG4yNzg5Olx0XHRcdGlmIChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfVFVOX0VYQ0wpXG4yNzkwOlx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjI3OTE6XHRcdFx0aWYgKChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfVFVOKSBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW5ldGRldl9vcHMgPT0gXHUwMDI2dHVuX25ldGRldl9vcHMpXG4yNzkyOlx0XHRcdFx0dHVuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbjI3OTM6XHRcdFx0ZWxzZSBpZiAoKGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9UQVApIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbmV0ZGV2X29wcyA9PSBcdTAwMjZ0YXBfbmV0ZGV2X29wcylcbjI3OTQ6XHRcdFx0XHR0dW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuMjc5NTpcdFx0XHRlbHNlXG4yNzk2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNzk3Olx0XG4yNzk4Olx0XHRcdGlmICghIShpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfTVVMVElfUVVFVUUpICE9XG4yNzk5Olx0XHRcdCAgICAhISh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9NVUxUSV9RVUVVRSkpXG4yODAwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yODAxOlx0XG4yODAyOlx0XHRcdGlmICh0dW5fbm90X2NhcGFibGUodHVuKSlcbjI4MDM6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMjgwNDpcdFx0XHRlcnIgPSBzZWN1cml0eV90dW5fZGV2X29wZW4odHVuLVx1MDAzZXNlY3VyaXR5KTtcbjI4MDU6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI4MDY6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjgwNzpcdFxuMjgwODpcdFx0XHRlcnIgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSwgaWZyLVx1MDAzZWlmcl9mbGFncyBcdTAwMjYgSUZGX05PRklMVEVSLFxuMjgwOTpcdFx0XHRcdFx0IGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9OQVBJLFxuMjgxMDpcdFx0XHRcdFx0IGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9OQVBJX0ZSQUdTLCB0cnVlKTtcbjI4MTE6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI4MTI6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjgxMzpcdFxuMjgxNDpcdFx0XHRpZiAodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTVVMVElfUVVFVUUgXHUwMDI2XHUwMDI2XG4yODE1Olx0XHRcdCAgICAodHVuLVx1MDAzZW51bXF1ZXVlcyAmIzQzOyB0dW4tXHUwMDNlbnVtZGlzYWJsZWQgXHUwMDNlIDEpKSB7XG4yODE2Olx0XHRcdFx0LyogT25lIG9yIG1vcmUgcXVldWUgaGFzIGFscmVhZHkgYmVlbiBhdHRhY2hlZCwgbm8gbmVlZFxuMjgxNzpcdFx0XHRcdCAqIHRvIGluaXRpYWxpemUgdGhlIGRldmljZSBhZ2Fpbi5cbjI4MTg6XHRcdFx0XHQgKi9cbjI4MTk6XHRcdFx0XHRuZXRkZXZfc3RhdGVfY2hhbmdlKGRldik7XG4yODIwOlx0XHRcdFx0cmV0dXJuIDA7XG4yODIxOlx0XHRcdH1cbjI4MjI6XHRcbjI4MjM6XHRcdFx0dHVuLVx1MDAzZWZsYWdzID0gKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgflRVTl9GRUFUVVJFUykgfFxuMjgyNDpcdFx0XHRcdCAgICAgIChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBUVU5fRkVBVFVSRVMpO1xuMjgyNTpcdFxuMjgyNjpcdFx0XHRuZXRkZXZfc3RhdGVfY2hhbmdlKGRldik7XG4yODI3Olx0XHR9IGVsc2Uge1xuMjgyODpcdFx0XHRjaGFyICpuYW1lO1xuMjgyOTpcdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzID0gMDtcbjI4MzA6XHRcdFx0aW50IHF1ZXVlcyA9IGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9NVUxUSV9RVUVVRSA/XG4yODMxOlx0XHRcdFx0ICAgICBNQVhfVEFQX1FVRVVFUyA6IDE7XG4yODMyOlx0XG4yODMzOlx0XHRcdGlmICghbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXG4yODM0Olx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjI4MzU6XHRcdFx0ZXJyID0gc2VjdXJpdHlfdHVuX2Rldl9jcmVhdGUoKTtcbjI4MzY6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI4Mzc6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjgzODpcdFxuMjgzOTpcdFx0XHQvKiBTZXQgZGV2IHR5cGUgKi9cbjI4NDA6XHRcdFx0aWYgKGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9UVU4pIHtcbjI4NDE6XHRcdFx0XHQvKiBUVU4gZGV2aWNlICovXG4yODQyOlx0XHRcdFx0ZmxhZ3MgfD0gSUZGX1RVTjtcbjI4NDM6XHRcdFx0XHRuYW1lID0gXCYjMzQ7dHVuJWRcJiMzNDs7XG4yODQ0Olx0XHRcdH0gZWxzZSBpZiAoaWZyLVx1MDAzZWlmcl9mbGFncyBcdTAwMjYgSUZGX1RBUCkge1xuMjg0NTpcdFx0XHRcdC8qIFRBUCBkZXZpY2UgKi9cbjI4NDY6XHRcdFx0XHRmbGFncyB8PSBJRkZfVEFQO1xuMjg0NzpcdFx0XHRcdG5hbWUgPSBcJiMzNDt0YXAlZFwmIzM0OztcbjI4NDg6XHRcdFx0fSBlbHNlXG4yODQ5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yODUwOlx0XG4yODUxOlx0XHRcdGlmICgqaWZyLVx1MDAzZWlmcl9uYW1lKVxuMjg1MjpcdFx0XHRcdG5hbWUgPSBpZnItXHUwMDNlaWZyX25hbWU7XG4yODUzOlx0XG4yODU0Olx0XHRcdGRldiA9IGFsbG9jX25ldGRldl9tcXMoc2l6ZW9mKHN0cnVjdCB0dW5fc3RydWN0KSwgbmFtZSxcbjI4NTU6XHRcdFx0XHRcdCAgICAgICBORVRfTkFNRV9VTktOT1dOLCB0dW5fc2V0dXAsIHF1ZXVlcyxcbjI4NTY6XHRcdFx0XHRcdCAgICAgICBxdWV1ZXMpO1xuMjg1NzpcdFxuMjg1ODpcdFx0XHRpZiAoIWRldilcbjI4NTk6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjI4NjA6XHRcbjI4NjE6XHRcdFx0ZGV2X25ldF9zZXQoZGV2LCBuZXQpO1xuMjg2MjpcdFx0XHRkZXYtXHUwMDNlcnRubF9saW5rX29wcyA9IFx1MDAyNnR1bl9saW5rX29wcztcbjI4NjM6XHRcdFx0ZGV2LVx1MDAzZWlmaW5kZXggPSB0ZmlsZS1cdTAwM2VpZmluZGV4O1xuMjg2NDpcdFx0XHRkZXYtXHUwMDNlc3lzZnNfZ3JvdXBzWzBdID0gXHUwMDI2dHVuX2F0dHJfZ3JvdXA7XG4yODY1Olx0XG4yODY2Olx0XHRcdHR1biA9IG5ldGRldl9wcml2KGRldik7XG4yODY3Olx0XHRcdHR1bi1cdTAwM2VkZXYgPSBkZXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDExOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTIzCgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDQ0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVFVOL1RBUCBCYWNrcHJlc3N1cmUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBsaW5lLCBgdHVuLSZndDtmbGFncyA9ICh0dW4tJmd0O2ZsYWdzICZhbXA7IH5UVU5fRkVBVFVSRVMpIHwgKGlmci0mZ3Q7aWZyX2ZsYWdzICZhbXA7IFRVTl9GRUFUVVJFUyk7YCBhbmQgdGhlIGluY2x1c2lvbiBvZiBgSUZGX0JBQ0tQUkVTU1VSRWAgaW50byBgVFVOX0ZFQVRVUkVTYCBpcyBrZXkuIFNvLCBgdHVuX3NldF9pZmZgIGhhbmRsZXMgdGhlIHNldHRpbmcgb2YgdGhpcyBmbGFnLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBiYWNrcHJlc3N1cmUgZnVuY3Rpb25hbGl0eS4KClRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyB0aGUgVFVOIGRldmljZSBoYW5kbGVzIGEgZnVsbCByaW5nIGJ1ZmZlci4gSW5zdGVhZCBvZiBwYWNrZXQgZHJvcHMsIGl0IGludHJvZHVjZXMgYmFja3ByZXNzdXJlIHZpYSB0aGUgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnLCBzdG9wcGluZyB0aGUgVFggcXVldWUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBmdXp6IHRoaXMuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIGB0dW5fbmV0X3htaXRgLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBiYWNrcHJlc3N1cmUgbG9naWMgaXMgKmV4ZWN1dGVkKi4gSG93ZXZlciwgdGhhdCBmdW5jdGlvbiBpcyBpbiB0aGUgaG90IHBhdGgsIHNvIEkgc2hvdWxkIGF2b2lkIGl0LiBgdHVuX3NldF9pZmZgLCBiZWluZyBhbiBgaW9jdGxgIGhhbmRsZXIsIGlzIGEgbXVjaCBiZXR0ZXIgdGFyZ2V0IGZvciBTeXprYWxsZXImIzM5O3MgZnV6emluZyBjYXBhYmlsaXRpZXMuIEl0JiMzOTtzIHRoZSBwb2ludCBvZiAqc2V0dGluZyogdGhlIGZsYWcsIGEgY2xlYW5lciBlbnRyeSBwb2ludC4KCkkgYWxzbyBjb25zaWRlcmVkIGBfX3R1bl93YWtlX3F1ZXVlYCwgYnV0IHRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYHR1bl9yaW5nX2NvbnN1bWVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGB0dW5fZG9fcmVhZGAsIHNvIHRoYXQmIzM5O3MgYWxzbyBpbiBhIGhvdCBwYXRoLiBUaGVyZWZvcmUsIEkmIzM5O20gc3RpY2tpbmcgd2l0aCBgdHVuX3NldF9pZmZgLiBUaGF0JiMzOTtzIHRoZSBiZXN0IGZvY3VzIHN5bWJvbC4KCk5vdywgY29uZmlnIGRlcGVuZGVuY2llcy4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGBDT05GSUdfVFVOYCBpcyB0aGUgb25seSByZXF1aXJlbWVudCwgYXMgYGRyaXZlcnMvbmV0L3R1bi5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfVFVOYCBpcyBzZXQuIE5vIG90aGVyIGNvbmZpZ3MgYXJlIG5lZWRlZC4gVGhlIGhlYWRlciBzeW5jIGluIGB0b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhgIGlzIGp1c3QgdGhhdCDigJMgYSBoZWFkZXIgc3luYzsgbm8gbG9naWMgaXMgcmVhbGx5IHRoZXJlLgoKT2theSwgbGV0JiMzOTtzIHN1bW1hcml6ZSBteSBmaW5kaW5nczoKCiogICBXb3J0aEZ1enppbmc6IGB0cnVlYAoqICAgRm9jdXNTeW1ib2xzOiBgWyYjMzQ7dHVuX3NldF9pZmYmIzM0O11gCiogICBFbmFibGVDb25maWdzOiBgWyYjMzQ7VFVOJiMzNDtdYAoqICAgUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIGB0dW5fbmV0X3htaXRgIGFuZCBgX190dW5fd2FrZV9xdWV1ZWAgdG8gc3RvcCB0aGUgVFggcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyBwYWNrZXRzIHdoZW4gdGhlIHJpbmcgYnVmZmVyIGlzIGZ1bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUgVFVOU0VUSUZGIGlvY3RsLiYjMzQ7CgpJIHRoaW5rIHRoYXQgY292ZXJzIGl0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTE6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9zZXRfaWZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdHVuX25ldF94bWl0IGFuZCBfX3R1bl93YWtlX3F1ZXVlIHRvIHN0b3AgdGhlIFRYIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIFRVTlNFVElGRiBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX3NldF9pZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBJRkZfQkFDS1BSRVNTVVJFIGZsYWcgZm9yIFRVTi9UQVAgZGV2aWNlcywgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiB0dW5fbmV0X3htaXQgYW5kIF9fdHVuX3dha2VfcXVldWUgdG8gc3RvcCB0aGUgVFggcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyBwYWNrZXRzIHdoZW4gdGhlIHJpbmcgYnVmZmVyIGlzIGZ1bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUgVFVOU0VUSUZGIGlvY3RsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDRUMTE6Mzk6NDQuMDMwMDEwMTEyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1MDM2MjEyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX3NldF9pZmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIHR1bl9uZXRfeG1pdCBhbmQgX190dW5fd2FrZV9xdWV1ZSB0byBzdG9wIHRoZSBUWCBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBUVU5TRVRJRkYgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjM5OjQ0LjAzMDAxOTAyMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ4NDc3NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWM1ZjEwZjY4MWUyODU2OWE0N2FiOGExZDM1MjllNDE3NmE0YWU5OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCA0IDExOjM5OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcXG5pbmRleCA0ZDcwODdmNzI3YmU1ZS4uNTk5MjY0ODI1ZGQyMTYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxcbkBAIC0yMDYsNiArMjA2LDIzIEBAIGVuYWJsZSBpcyB0cnVlIHdlIGVuYWJsZSBpdCwgb3RoZXJ3aXNlIHdlIGRpc2FibGUgaXQ6OlxcbiAgICAgICByZXR1cm4gaW9jdGwoZmQsIFRVTlNFVFFVRVVFLCAodm9pZCAqKVxcdTAwMjZpZnIpO1xcbiAgIH1cXG4gXFxuKzMuNCBxZGlzYyBiYWNrcHJlc3N1cmVcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitcXG4rU3RhcnRpbmcgd2l0aCBMaW51eCA3LjIsIElGRl9CQUNLUFJFU1NVUkUgY2FuIGJlIHNldCB0byBlbmFibGUgcWRpc2NcXG4rYmFja3ByZXNzdXJlLiBXaXRob3V0IGl0LCBUWCBkcm9wcyBvY2N1ciB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpc1xcbitmdWxsLiBXaXRoIGl0LCB0aGUga2VybmVsIHN0b3BzIHRoZSBUWCBxdWV1ZSBpbnN0ZWFkLCBsZXR0aW5nIHRoZSBxZGlzY1xcbitob2xkIHBhY2tldHMuIERyb3BzIG9ubHkgb2NjdXIgYXMgYSByYXJlIHJhY2UuIFRoaXMgY2FuIGJlbmVmaXQgcHJvdG9jb2xzXFxuK2xpa2UgVENQIHRoYXQgcmVhY3QgdG8gZHJvcHMuIEJhY2twcmVzc3VyZSByZXF1aXJlcyBhIHFkaXNjIHRvIGJlXFxuK2F0dGFjaGVkIGFuZCBoYXMgbm8gZWZmZWN0IHdpdGggbm9xdWV1ZS5cXG4rXFxuK1RoZSBUVU4vVEFQIHJpbmcgYnVmZmVyIHNpemUgY2FuIGJlIHJlZHVjZWQgYWxvbmdzaWRlIHRoaXMgZmxhZyB0b1xcbitmdXJ0aGVyIHNoaWZ0IGJ1ZmZlcmluZyBpbnRvIHRoZSBxZGlzYyBhbmQgcmVkdWNlIGJ1ZmZlcmJsb2F0LCBidXQgY29tZXNcXG4rYXQgcG9zc2libGUgcGVyZm9ybWFuY2UgY29zdC5cXG4rXFxuK1doZW4gcnVubmluZyBtdWx0aXBsZSBuZXR3b3JrIHN0cmVhbXMgaW4gcGFyYWxsZWwsIHRoZSBmbGFnIG1heSByZWR1Y2VcXG4rcGVyZm9ybWFuY2UgZHVlIHRvIHRoZSBleHRyYSBvdmVyaGVhZCBvZiB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbS5cXG4rXFxuIFVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvblxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmNcXG5pbmRleCBmZmJlNmYxM2ZiMWZhMi4uM2JmOGE3M2EwODE2MmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvdHVuLmNcXG4rKysgYi9kcml2ZXJzL25ldC90dW4uY1xcbkBAIC05OCw3ICs5OCw4IEBAIHN0YXRpYyB2b2lkIHR1bl9kZWZhdWx0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICNkZWZpbmUgVFVOX0ZBU1lOQ1xcdElGRl9BVFRBQ0hfUVVFVUVcXG4gXFxuICNkZWZpbmUgVFVOX0ZFQVRVUkVTIChJRkZfTk9fUEkgfCBJRkZfT05FX1FVRVVFIHwgSUZGX1ZORVRfSERSIHwgXFxcXFxcbi1cXHRcXHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTKVxcbitcXHRcXHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXFxcXFxcbitcXHRcXHQgICAgICBJRkZfQkFDS1BSRVNTVVJFKVxcbiBcXG4gI2RlZmluZSBHT09EQ09QWV9MRU4gMTI4XFxuIFxcbkBAIC0xMDc3LDcgKzEwNzgsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiBcXHRzcGluX2xvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xcbiBcXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLCBza2IpO1xcbi1cXHRpZiAoIXFkaXNjX3R4cV9oYXNfbm9fcXVldWUocXVldWUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmICgodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcpID09IC1FTk9TUEMpIHtcXG4gXFx0XFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XFxuIFxcdFxcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xcbkBAIC0yMTUxLDggKzIxNTMsMTIgQEAgc3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuIHN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXFxuIHtcXG4tXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0dGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4rXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbitcXG4rXFx0aWYgKCEodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi1cXHUwMDNlZGV2LCB0ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbiBcXG4gXFx0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xcbiBcXHRzbXBfbWIoKTtcXG5AQCAtMjg5Myw4ICsyODk5LDE5IEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXFxuIFxcdC8qIE1ha2Ugc3VyZSBwZXJzaXN0ZW50IGRldmljZXMgZG8gbm90IGdldCBzdHVjayBpblxcbiBcXHQgKiB4b2ZmIHN0YXRlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVxcdTAwM2VkZXYpKVxcbi1cXHRcXHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXModHVuLVxcdTAwM2VkZXYpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyh0dW4tXFx1MDAzZWRldikpIHtcXG4rXFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0dW4tXFx1MDAzZW51bXF1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB0dW5fZmlsZSAqaV90ZmlsZTtcXG4rXFxuK1xcdFxcdFxcdGlfdGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2ldKTtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpX3RmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbitcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlfdGZpbGUtXFx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XFxuK1xcdFxcdFxcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVxcdTAwM2VkZXYsIGlfdGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4rXFx0XFx0XFx0aV90ZmlsZS1cXHUwMDNlY29uc19jbnQgPSAwO1xcbitcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aV90ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlfdGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0c3Ryc2NweShpZnItXFx1MDAzZWlmcl9uYW1lLCB0dW4tXFx1MDAzZWRldi1cXHUwMDNlbmFtZSk7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcXG5pbmRleCA3OWQ1M2M3YTFlYmRjNS4uNzNhNzcxNDEzMTVjN2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuQEAgLTY5LDYgKzY5LDcgQEBcXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1xcdDB4MDAyMFxcbiAvKiBVc2VkIGluIFRVTlNFVElGRiB0byBicmluZyB1cCB0dW4vdGFwIHdpdGhvdXQgY2FycmllciAqL1xcbiAjZGVmaW5lIElGRl9OT19DQVJSSUVSXFx0MHgwMDQwXFxuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVxcdDB4MDA4MFxcbiAjZGVmaW5lIElGRl9OT19QSVxcdDB4MTAwMFxcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXFxuICNkZWZpbmUgSUZGX09ORV9RVUVVRVxcdDB4MjAwMFxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcXG5pbmRleCAyZWMwN2RlMWQ3M2JlNC4uOTdiNjcwZjViYzBhMzUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuQEAgLTY3LDYgKzY3LDcgQEBcXG4gI2RlZmluZSBJRkZfVEFQXFx0XFx0MHgwMDAyXFxuICNkZWZpbmUgSUZGX05BUElcXHQweDAwMTBcXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1xcdDB4MDAyMFxcbisjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkVcXHQweDAwODBcXG4gI2RlZmluZSBJRkZfTk9fUElcXHQweDEwMDBcXG4gLyogVGhpcyBmbGFnIGhhcyBubyByZWFsIGVmZmVjdCAqL1xcbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcXHQweDIwMDBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTE6Mzk6NDQuMzc5MjM2MTc5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE1NDM4NDk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fc2V0X2lmZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdHVuX25ldF94bWl0IGFuZCBfX3R1bl93YWtlX3F1ZXVlIHRvIHN0b3AgdGhlIFRYIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIFRVTlNFVElGRiBpb2N0bC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YzVmMTBmNjgxZTI4NTY5YTQ3YWI4YTFkMzUyOWU0MTc2YTRhZTk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgNCAxMTozOTo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcbmluZGV4IDRkNzA4N2Y3MjdiZTVlLi41OTkyNjQ4MjVkZDIxNiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxuQEAgLTIwNiw2ICsyMDYsMjMgQEAgZW5hYmxlIGlzIHRydWUgd2UgZW5hYmxlIGl0LCBvdGhlcndpc2Ugd2UgZGlzYWJsZSBpdDo6XG4gICAgICAgcmV0dXJuIGlvY3RsKGZkLCBUVU5TRVRRVUVVRSwgKHZvaWQgKilcdTAwMjZpZnIpO1xuICAgfVxuIFxuKzMuNCBxZGlzYyBiYWNrcHJlc3N1cmVcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rU3RhcnRpbmcgd2l0aCBMaW51eCA3LjIsIElGRl9CQUNLUFJFU1NVUkUgY2FuIGJlIHNldCB0byBlbmFibGUgcWRpc2NcbitiYWNrcHJlc3N1cmUuIFdpdGhvdXQgaXQsIFRYIGRyb3BzIG9jY3VyIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzXG4rZnVsbC4gV2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyB0aGUgVFggcXVldWUgaW5zdGVhZCwgbGV0dGluZyB0aGUgcWRpc2Ncbitob2xkIHBhY2tldHMuIERyb3BzIG9ubHkgb2NjdXIgYXMgYSByYXJlIHJhY2UuIFRoaXMgY2FuIGJlbmVmaXQgcHJvdG9jb2xzXG4rbGlrZSBUQ1AgdGhhdCByZWFjdCB0byBkcm9wcy4gQmFja3ByZXNzdXJlIHJlcXVpcmVzIGEgcWRpc2MgdG8gYmVcbithdHRhY2hlZCBhbmQgaGFzIG5vIGVmZmVjdCB3aXRoIG5vcXVldWUuXG4rXG4rVGhlIFRVTi9UQVAgcmluZyBidWZmZXIgc2l6ZSBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvXG4rZnVydGhlciBzaGlmdCBidWZmZXJpbmcgaW50byB0aGUgcWRpc2MgYW5kIHJlZHVjZSBidWZmZXJibG9hdCwgYnV0IGNvbWVzXG4rYXQgcG9zc2libGUgcGVyZm9ybWFuY2UgY29zdC5cbitcbitXaGVuIHJ1bm5pbmcgbXVsdGlwbGUgbmV0d29yayBzdHJlYW1zIGluIHBhcmFsbGVsLCB0aGUgZmxhZyBtYXkgcmVkdWNlXG4rcGVyZm9ybWFuY2UgZHVlIHRvIHRoZSBleHRyYSBvdmVyaGVhZCBvZiB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbS5cbitcbiBVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25cbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5pbmRleCBmZmJlNmYxM2ZiMWZhMi4uM2JmOGE3M2EwODE2MmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xuKysrIGIvZHJpdmVycy9uZXQvdHVuLmNcbkBAIC05OCw3ICs5OCw4IEBAIHN0YXRpYyB2b2lkIHR1bl9kZWZhdWx0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gI2RlZmluZSBUVU5fRkFTWU5DXHRJRkZfQVRUQUNIX1FVRVVFXG4gXG4gI2RlZmluZSBUVU5fRkVBVFVSRVMgKElGRl9OT19QSSB8IElGRl9PTkVfUVVFVUUgfCBJRkZfVk5FVF9IRFIgfCBcXFxuLVx0XHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTKVxuK1x0XHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXFxcbitcdFx0ICAgICAgSUZGX0JBQ0tQUkVTU1VSRSlcbiBcbiAjZGVmaW5lIEdPT0RDT1BZX0xFTiAxMjhcbiBcbkBAIC0xMDc3LDcgKzEwNzgsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbiBcdHJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLCBza2IpO1xuLVx0aWYgKCFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSBcdTAwMjZcdTAwMjZcbitcdGlmICgodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfQkFDS1BSRVNTVVJFKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpID09IC1FTk9TUEMpIHtcbiBcdFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XG4gXHRcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xuQEAgLTIxNTEsOCArMjE1MywxMiBAQCBzdGF0aWMgc3NpemVfdCB0dW5fcHV0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbiBzdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4gXHRcdFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXG4ge1xuLVx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4KTtcbitcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbitcbitcdGlmICghKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkpXG4rXHRcdHJldHVybjtcbitcbitcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUodHVuLVx1MDAzZWRldiwgdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuIFxuIFx0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xuIFx0c21wX21iKCk7XG5AQCAtMjg5Myw4ICsyODk5LDE5IEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXG4gXHQvKiBNYWtlIHN1cmUgcGVyc2lzdGVudCBkZXZpY2VzIGRvIG5vdCBnZXQgc3R1Y2sgaW5cbiBcdCAqIHhvZmYgc3RhdGUuXG4gXHQgKi9cbi1cdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cdTAwM2VkZXYpKVxuLVx0XHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXModHVuLVx1MDAzZWRldik7XG4rXHRpZiAobmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSkge1xuK1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSsrKSB7XG4rXHRcdFx0c3RydWN0IHR1bl9maWxlICppX3RmaWxlO1xuK1xuK1x0XHRcdGlfdGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuK1x0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZpX3RmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4rXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmlfdGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcdFx0XHRuZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi1cdTAwM2VkZXYsIGlfdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuK1x0XHRcdGlfdGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlfdGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpX3RmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4rXHRcdH1cbitcdH1cbiBcbiBcdHN0cnNjcHkoaWZyLVx1MDAzZWlmcl9uYW1lLCB0dW4tXHUwMDNlZGV2LVx1MDAzZW5hbWUpO1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5pbmRleCA3OWQ1M2M3YTFlYmRjNS4uNzNhNzcxNDEzMTVjN2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuQEAgLTY5LDYgKzY5LDcgQEBcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXHQweDAwMjBcbiAvKiBVc2VkIGluIFRVTlNFVElGRiB0byBicmluZyB1cCB0dW4vdGFwIHdpdGhvdXQgY2FycmllciAqL1xuICNkZWZpbmUgSUZGX05PX0NBUlJJRVJcdDB4MDA0MFxuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuaW5kZXggMmVjMDdkZTFkNzNiZTQuLjk3YjY3MGY1YmMwYTM1IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbkBAIC02Nyw2ICs2Nyw3IEBAXG4gI2RlZmluZSBJRkZfVEFQXHRcdDB4MDAwMlxuICNkZWZpbmUgSUZGX05BUElcdDB4MDAxMFxuICNkZWZpbmUgSUZGX05BUElfRlJBR1NcdDB4MDAyMFxuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTE6Mzk6NDQuMzc5MjM3ODQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4NTYzMjA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBUVU4vVEFQIFBhdGNoKipcblxuQWxyaWdodCwgc28gd2UndmUgZ290IGEgcGF0Y2ggaGl0dGluZyBteSBkZXNrLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIHRvdWNoaW5nIGNvcmUgVFVOL1RBUCBpbmZyYXN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIHRvIGBkcml2ZXJzL25ldC90dW4uY2AsIHRoZSBkb2N1bWVudGF0aW9uIGluIGB0dW50YXAucnN0YCwgYW5kIHRoZSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGhlYWRlciBgaWZfdHVuLmhgLiBJbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIHRpbmdsZXM7IGFueSBtb2RpZmljYXRpb24gdG8gdGhvc2UgZmlsZXMgaGFzIHRoZSBwb3RlbnRpYWwgZm9yIHNpZ25pZmljYW50IGltcGFjdC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGBJRkZfQkFDS1BSRVNTVVJFYCBmbGFnLiBUaGlzIHN1Z2dlc3RzIGEgbW9kaWZpY2F0aW9uIHRvIGhvdyBUVU4vVEFQIGludGVyZmFjZXMgaGFuZGxlIGZsb3cgY29udHJvbCBvciBjb25nZXN0aW9uLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzIGluIGB0dW5fbmV0X3htaXRgLCBgX190dW5fd2FrZV9xdWV1ZWAsIGFuZCBgdHVuX3NldF9pZmZgLiBGdW5jdGlvbmFsaXR5IGFuZCByZWFjaGFiaWxpdHkgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgbmV0LW5ldyBmZWF0dXJlLCBvciBhbiBvcHRpbWl6YXRpb24gb2YgZXhpc3RpbmcgYmVoYXZpb3IuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkndmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbmV3IGZlYXR1cmUgaXMgY29udHJvbGxlZCBhdCBidWlsZCB0aW1lLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCwgdG8gZmluZCB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhpcyBmZWF0dXJlLiBMZXQncyBzZWUgd2hhdCB0dXJucyB1cCBpbiB0aGUgYnVpbGQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzg5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTE6Mzk6NDguNzY0ODcyNTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkyMzU2MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1blxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX05FVF9URUFNKSArPSB0ZWFtL1xcbmRyaXZlcnMvbmV0L01ha2VmaWxlOjMyOm9iai0kKENPTkZJR19UVU4pICs9IHR1bi5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX1RBUCkgKz0gdGFwLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT00MT1tbHg1X2NvcmUtJChDT05GSUdfUENJX0hZUEVSVl9JTlRFUkZBQ0UpICs9IGVuL2h2X3ZoY2Ffc3RhdHMub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZTo0MjptbHg1X2NvcmUtJChDT05GSUdfTUxYNV9FU1dJVENIKSAgICAgKz0gbGFnL21wLm8gbGFnL3BvcnRfc2VsLm8gbGliL2dlbmV2ZS5vIGxpYi9wb3J0X3R1bi5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNDMtXFx0XFx0XFx0XFx0XFx0ZW5fcmVwLm8gZW4vcmVwL2JvbmQubyBlbi9tb2RfaGRyLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTQ1PW1seDVfY29yZS0kKENPTkZJR19NTFg1X0NMU19BQ1QpICAgICArPSBlbl90Yy5vIGVuL3JlcC90Yy5vIGVuL3JlcC9uZWlnaC5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU6NDY6XFx0XFx0XFx0XFx0XFx0bGliL2ZzX2NoYWlucy5vIGVuL3RjX3R1bi5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNDctXFx0XFx0XFx0XFx0XFx0ZXN3L2luZGlyX3RhYmxlLm8gZW4vdGNfdHVuX2VuY2FwLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTUzPW1seDVfY29yZS0kKENPTkZJR19NTFg1X0NMU19BQ1QpICAgICArPSBlbi90Yy9hY3QvYWN0Lm8gZW4vdGMvYWN0L2Ryb3AubyBlbi90Yy9hY3QvdHJhcC5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNTQtXFx0XFx0XFx0XFx0XFx0ZW4vdGMvYWN0L2FjY2VwdC5vIGVuL3RjL2FjdC9tYXJrLm8gZW4vdGMvYWN0L2dvdG8ubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjU1OlxcdFxcdFxcdFxcdFxcdGVuL3RjL2FjdC90dW4ubyBlbi90Yy9hY3QvY3N1bS5vIGVuL3RjL2FjdC9wZWRpdC5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNTYtXFx0XFx0XFx0XFx0XFx0ZW4vdGMvYWN0L3ZsYW4ubyBlbi90Yy9hY3Qvdmxhbl9tYW5nbGUubyBlbi90Yy9hY3QvbXBscy5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTA0NT1uZnBfdHVubmVsX2xvb2t1cF9vZmZsb2FkZWRfbWFjcyhzdHJ1Y3QgbmZwX2FwcCAqYXBwLCBjb25zdCB1OCAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMDQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTA0OTpcXHRyZXR1cm4gcmhhc2h0YWJsZV9sb29rdXBfZmFzdChcXHUwMDI2cHJpdi1cXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLCBtYWMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMDUwLVxcdFxcdFxcdFxcdCAgICAgIG9mZmxvYWRlZF9tYWNzX3BhcmFtcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jPTEwNzc9bmZwX3R1bm5lbF9hZGRfc2hhcmVkX21hYyhzdHJ1Y3QgbmZwX2FwcCAqYXBwLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTEyODpcXHRcXHRpZiAocmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcXHUwMDI2cHJpdi1cXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTEyOS1cXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZW50cnktXFx1MDAzZWh0X25vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTExNTAtZXJyX3JlbW92ZV9oYXNoOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTE1MTpcXHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZwcml2LVxcdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsIFxcdTAwMjZlbnRyeS1cXHUwMDNlaHRfbm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTExNTItXFx0XFx0XFx0ICAgICAgIG9mZmxvYWRlZF9tYWNzX3BhcmFtcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jPTExNjM9bmZwX3R1bm5lbF9kZWxfc2hhcmVkX21hYyhzdHJ1Y3QgbmZwX2FwcCAqYXBwLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMjI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTIyODpcXHRXQVJOX09OX09OQ0Uocmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2cHJpdi1cXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTIyOS1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmVudHJ5LVxcdTAwM2VodF9ub2RlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xNTA3PWludCBuZnBfdHVubmVsX2NvbmZpZ19zdGFydChzdHJ1Y3QgbmZwX2FwcCAqYXBwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTEyLVxcdC8qIEluaXRpYWxpc2Ugcmhhc2ggZm9yIE1BQyBvZmZsb2FkIHRyYWNraW5nLiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTUxMzpcXHRlcnIgPSByaGFzaHRhYmxlX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1MTQtXFx0XFx0XFx0ICAgICAgXFx1MDAyNm9mZmxvYWRlZF9tYWNzX3BhcmFtcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1MzAtXFx0aWYgKGVycikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTUzMTpcXHRcXHRyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3koXFx1MDAyNnByaXYtXFx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1MzItXFx0XFx0XFx0XFx0XFx0ICAgIG5mcF9jaGVja19yaGFzaHRhYmxlX2VtcHR5LCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTUzOT12b2lkIG5mcF90dW5uZWxfY29uZmlnX3N0b3Aoc3RydWN0IG5mcF9hcHAgKmFwcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTU1OC1cXHQvKiBEZXN0cm95IHJoYXNoLiBFbnRyaWVzIHNob3VsZCBiZSBjbGVhbmVkIG9uIG5ldGRldiBub3RpZmllciB1bnJlZy4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jOjE1NTk6XFx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTYwLVxcdFxcdFxcdFxcdCAgICBuZnBfY2hlY2tfcmhhc2h0YWJsZV9lbXB0eSwgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjM5OjQ5LjA1NzIzODQwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjI3MTg4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUVU4gRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBjb25maWd1cmF0aW9uIGhlcmUgaXMgYENPTkZJR19UVU5gLCB0aGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBsaWtlbHkgc3VzcGVjdHMg4oCTIHRoZSBoZWFydCBvZiB0aGUgVFVOIGRyaXZlcjogYGRyaXZlcnMvbmV0L3R1bi5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gYW55IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiB0d2Vha2VkLiBGcm9tIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSBgdHVuX25ldF94bWl0YCwgYF9fdHVuX3dha2VfcXVldWVgLCBhbmQgYHR1bl9zZXRfaWZmYCBhcmUgdGhlIG9uZXMgdG8gZm9jdXMgb24uIFxuXG5IbW0sIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmbG9hdGluZyBhcm91bmQgdGhhdCBjb3VsZCBpbXBhY3QgdGhlc2UgZnVuY3Rpb25zPyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUncyBtb3JlIHRvIGNvbnNpZGVyIGhlcmUuIFJpZ2h0LCB0aGUgY29kZSBpcyB1c2luZyBgSUZGX0JBQ0tQUkVTU1VSRWAgd2l0aGluIGB0dW5fbmV0X3htaXRgLCBgX190dW5fd2FrZV9xdWV1ZWAsIGFuZCBgdHVuX3NldF9pZmZgLCB0aGF04oCZcyB0aGUgY3J1Y2lhbCBwaWVjZSB0byB0cmFjayBkb3duLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIGFyZSBnYXRpbmcgdGhlIHVzZSBvciBiZWhhdmlvciBvZiB0aGVzZSBrZXkgZnVuY3Rpb25zIGJhc2VkIG9uIHNwZWNpZmljIGNvbXBpbGUtdGltZSBmbGFncy4gVGhhdCdzIHdoZXJlIHRoZSBudWFuY2Ugb2Z0ZW4gbGllcyBpbiB0aGlzIHR5cGUgb2YgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYElGRl9CQUNLUFJFU1NVUkVgIGlzIG5vdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG91dCwgYW5kIHNlZSBpZiBpdCBpcyB1c2VkIGFjY29yZGluZyB0byBpdHMgb3JpZ2luYWwgaW50ZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTY5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjM5OjUzLjkxOTk1OTEyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU4MTI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fbmV0X3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MTAwMT1zdGF0aWMgdW5zaWduZWQgaW50IHJ1bl9lYnBmX2ZpbHRlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTAxMy0vKiBOZXQgZGV2aWNlIHN0YXJ0IHhtaXQgKi9cXG5kcml2ZXJzL25ldC90dW4uYzoxMDE0OnN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy0xMDE1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEyMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyMjAtXFx0Lm5kb19zdG9wXFx0XFx0PSB0dW5fbmV0X2Nsb3NlLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyMjE6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSB0dW5fbmV0X3htaXQsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTIyMi1cXHQubmRvX2ZpeF9mZWF0dXJlc1xcdD0gdHVuX25ldF9maXhfZmVhdHVyZXMsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMzAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGFwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMzA0LVxcdC5uZG9fc3RvcFxcdFxcdD0gdHVuX25ldF9jbG9zZSxcXG5kcml2ZXJzL25ldC90dW4uYzoxMzA1OlxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gdHVuX25ldF94bWl0LFxcbmRyaXZlcnMvbmV0L3R1bi5jLTEzMDYtXFx0Lm5kb19maXhfZmVhdHVyZXNcXHQ9IHR1bl9uZXRfZml4X2ZlYXR1cmVzLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjE1Mz1zdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMTYyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIxNjM6XFx0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIxNjQtXFx0c21wX21iKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjM5OjUzLjk3OTU1MDQ1MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzA2NTY2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRVTiBEcml2ZXIgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIHRoYXQgdGhleSBhcmVuJ3QgY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzLiBUaGF0J3MgZ29vZCwgbGVzcyB0byB3b3JyeSBhYm91dCBpbiB0ZXJtcyBvZiBidWlsZCBjb25maWd1cmF0aW9ucy4gVGhlIGNvbmZpZyBpcyBkZWZpbml0ZWx5IHNldCB0byBgVFVOYC5cblxuSSdtIGZvY3VzZWQgb24gYHR1bl9uZXRfeG1pdGAsIGBfX3R1bl93YWtlX3F1ZXVlYCwgYW5kIGB0dW5fc2V0X2lmZmAuIExldCdzIHNlZS4uLiBXYWl0IGEgbWludXRlLCBgdHVuX25ldF94bWl0YCDigJMgdGhhdCdzIGEga2V5IG9uZSEgSXQncyB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiwgc28gaXQncyB2ZXJ5IGxpa2VseSBhIGhvdC1wYXRoIGZ1bmN0aW9uLiBIaWdoIHBlcmZvcm1hbmNlLCByaWdodCBpbiB0aGUgbmV0d29yayBkYXRhIHBhdGguIGBfX3R1bl93YWtlX3F1ZXVlYC4uLiB5ZWFoLCB0aGF0IGNvdWxkIGFsc28gYmUgcGVyZm9ybWFuY2UgY3JpdGljYWwsIGRlcGVuZGluZyBvbiBob3cgb2Z0ZW4gaXQncyBnZXR0aW5nIGNhbGxlZC4gSXQgbWlnaHQgYmUgaW4gYSBidXN5IGxvb3Agc2l0dWF0aW9uLiBCdXQgYHR1bl9zZXRfaWZmYCwgbm9wZSwgdGhhdCdzIGFuIGlvY3RsIGhhbmRsZXIuIEl0J3Mgbm90IGdvaW5nIHRvIGJlIHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSwgY29tcGFyZWQgdG8gdGhlIG90aGVyIHR3by5cblxuU28sIHNpbmNlIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhIHBlcmZvcm1hbmNlIGlzc3VlLCBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9fdHVuX3dha2VfcXVldWVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZnJlcXVlbnRseSBpdCBpcyBnZXR0aW5nIGNhbGxlZCwgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8ga25vdyBpZiBpdCBpcyBhIGhvdC1wYXRoIGZ1bmN0aW9uIHdpdGhvdXQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxMTozOTo1OC41MTAyMDkzMjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3NDIyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX190dW5fd2FrZV9xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0xMDE0PXN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEwODQtXFx0XFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XFxuZHJpdmVycy9uZXQvdHVuLmM6MTA4NTpcXHRcXHQvKiBQYWlyZWQgd2l0aCBzbXBfbWIoKSBpbiBfX3R1bl93YWtlX3F1ZXVlKCkgKi9cXG5kcml2ZXJzL25ldC90dW4uYy0xMDg2LVxcdFxcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0yMDY4PXN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjE1Mi0vKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi9cXG5kcml2ZXJzL25ldC90dW4uYzoyMTUzOnN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG5kcml2ZXJzL25ldC90dW4uYy0yMTU0LVxcdFxcdFxcdCAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjE3NT1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjE4MS1cXHRpZiAocHRyKVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIxODI6XFx0XFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTtcXG5kcml2ZXJzL25ldC90dW4uYy0yMTgzLVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzgyOT12b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zODQ0LVxcdGlmICh0dW4pXFxuZHJpdmVycy9uZXQvdHVuLmM6Mzg0NTpcXHRcXHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTtcXG5kcml2ZXJzL25ldC90dW4uYy0zODQ2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxMTozOTo1OC41NzA5NTkxODRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM0ODAxNDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEJvdHRsZW5lY2sgaW4gdGhlIFRVTiBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpc3N1ZXMgd2l0aGluIHRoZSBUVU4gZHJpdmVyLiBNeSBjdXJyZW50IGh5cG90aGVzaXMgaXMgdGhhdCB0aGVyZSBtaWdodCBiZSBhIGJvdHRsZW5lY2sgb3IgYXJlYSBmb3Igb3B0aW1pemF0aW9uIGFyb3VuZCBgdHVuX3dha2VfcXVldWVgLCBhcyBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYHR1bl9yaW5nX2NvbnN1bWVgIGFuZCwgY3JpdGljYWxseSwgZnJvbSBpdHNlbGYuIGB0dW5fcmluZ19jb25zdW1lYCBpcyBjYWxsZWQgZHVyaW5nIHJlYWQgb3BlcmF0aW9ucywgd2hpY2ggSSBrbm93IGlzIGEgaG90IHBhdGggb24gYW55IG5ldHdvcmsgaW50ZXJmYWNlLiBUaGlzIG1ha2VzIGB0dW5fd2FrZV9xdWV1ZWAgYW5kIHRoZSBmdW5jdGlvbiBpdCBjYWxscywgdGhlIHBsYWNlIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gR2l2ZW4gdGhlc2UgY29ubmVjdGlvbnMsIGB0dW5fc2V0X2lmZmAgaXMgbGlrZWx5IGEgZ29vZCBzeW1ib2wgdG8gY29uY2VudHJhdGUgb24uIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgYW4gYGlvY3RsYCBvcGVyYXRpb24gc2luY2UgdGhpcyBpcyB3aGVyZSB0aGluZ3Mgd2lsbCBsaWtlbHkgaGF2ZSB0aGUgYmlnZ2VzdCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxMTo0MDowMS44MDU3NjI1OTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDYxMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9zZXRfaWZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTI3NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdHVuX2F0dHJfZ3JvdXAgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yNzY3LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI3Njg6c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG5kcml2ZXJzL25ldC90dW4uYy0yNzY5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTMxMjc9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzE3NC1cXG5kcml2ZXJzL25ldC90dW4uYzozMTc1OlxcdFxcdHJldCA9IHR1bl9zZXRfaWZmKG5ldCwgZmlsZSwgXFx1MDAyNmlmcik7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzE3Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTE6NDA6MDEuODY1ODI5MzE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTk1MjIxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdHVuX3NldF9pZmZgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHR1bl9zZXRfaWZmYCAqaXMqIGNhbGxlZCBmcm9tIGBfX3R1bl9jaHJfaW9jdGxgLCBhbmQgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGl0J3MgZGVmaW5pdGVseSBub3QgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBUaGF0IG11Y2ggaXMgY2xlYXIuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZSB0aGF0IHdhcyBtb2RpZmllZC4gT2theSwgYWNjb3JkaW5nIHRvIHRoZSBkaWZmLCBpdCdzOiBgdHVuX25ldF94bWl0YCwgYF9fdHVuX3dha2VfcXVldWVgLCBhbmQgYHR1bl9zZXRfaWZmYC4gU28sIGl0IGxvb2tzIGxpa2UgYHR1bl9zZXRfaWZmYCBpcyBpbmRlZWQgdGhlIGJlc3QgZm9jdXMgZm9yIHRoaXMgcGFydGljdWxhciBpbnZlc3RpZ2F0aW9uLlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgaG93IGBJRkZfQkFDS1BSRVNTVVJFYCBjb21lcyBpbnRvIHBsYXkuIFJpZ2h0LCBpdCdzIGRlZmluZWQgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaGAgYXMgYDB4MDA4MGAuIEFuZCBpdCdzIGFkZGVkIHRvIGBUVU5fRkVBVFVSRVNgIHdpdGhpbiBgZHJpdmVycy9uZXQvdHVuLmNgLiBUaGUga2V5IHNlZW1zIHRvIGJlIHRoYXQgYHR1bl9zZXRfaWZmYCBjaGVja3MgYHR1bi1cdTAwM2VmbGFnc2AgYW5kIHNldHMgaXQgYWNjb3JkaW5nIHRvIHRoZSBgaWZyLVx1MDAzZWlmcl9mbGFnc2AuIEhhbmcgb24uLi4gcmVhZGluZyBvdmVyIHRoYXQgYmxvY2sgb2YgY29kZS4uLiBgdHVuX3NldF9pZmZgIGFjdHVhbGx5IGRvZXM6XG5gYGBjXG5cdGlmIChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfQkFDS1BSRVNTVVJFKVxuXHRcdHR1bi1cdTAwM2VmbGFncyB8PSBJRkZfQkFDS1BSRVNTVVJFO1xuYGBgXG5XYWl0IGEgc2Vjb25kLCB0aGUgZGlmZiBJIHNhdyAqZGlkbid0KiBpbmNsdWRlIGB0dW5fc2V0X2lmZmAgc2V0dGluZyBgSUZGX0JBQ0tQUkVTU1VSRWAuIFRoYXQncyBzdHJhbmdlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBgdHVuX3NldF9pZmZgIGluIGBkcml2ZXJzL25ldC90dW4uY2AgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdC4gU29tZXRoaW5nIGZlZWxzIG9mZiBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjQwOjA3LjA4NTM1MzY3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4NTA6XFx0XFxuMjg1MTpcXHRcXHRcXHRpZiAoKmlmci1cXHUwMDNlaWZyX25hbWUpXFxuMjg1MjpcXHRcXHRcXHRcXHRuYW1lID0gaWZyLVxcdTAwM2VpZnJfbmFtZTtcXG4yODUzOlxcdFxcbjI4NTQ6XFx0XFx0XFx0ZGV2ID0gYWxsb2NfbmV0ZGV2X21xcyhzaXplb2Yoc3RydWN0IHR1bl9zdHJ1Y3QpLCBuYW1lLFxcbjI4NTU6XFx0XFx0XFx0XFx0XFx0ICAgICAgIE5FVF9OQU1FX1VOS05PV04sIHR1bl9zZXR1cCwgcXVldWVzLFxcbjI4NTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHF1ZXVlcyk7XFxuMjg1NzpcXHRcXG4yODU4OlxcdFxcdFxcdGlmICghZGV2KVxcbjI4NTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjg2MDpcXHRcXG4yODYxOlxcdFxcdFxcdGRldl9uZXRfc2V0KGRldiwgbmV0KTtcXG4yODYyOlxcdFxcdFxcdGRldi1cXHUwMDNlcnRubF9saW5rX29wcyA9IFxcdTAwMjZ0dW5fbGlua19vcHM7XFxuMjg2MzpcXHRcXHRcXHRkZXYtXFx1MDAzZWlmaW5kZXggPSB0ZmlsZS1cXHUwMDNlaWZpbmRleDtcXG4yODY0OlxcdFxcdFxcdGRldi1cXHUwMDNlc3lzZnNfZ3JvdXBzWzBdID0gXFx1MDAyNnR1bl9hdHRyX2dyb3VwO1xcbjI4NjU6XFx0XFxuMjg2NjpcXHRcXHRcXHR0dW4gPSBuZXRkZXZfcHJpdihkZXYpO1xcbjI4Njc6XFx0XFx0XFx0dHVuLVxcdTAwM2VkZXYgPSBkZXY7XFxuMjg2ODpcXHRcXHRcXHR0dW4tXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuMjg2OTpcXHRcXHRcXHR0dW4tXFx1MDAzZXR4Zmx0LmNvdW50ID0gMDtcXG4yODcwOlxcdFxcdFxcdHR1bi1cXHUwMDNldm5ldF9oZHJfc3ogPSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKTtcXG4yODcxOlxcdFxcbjI4NzI6XFx0XFx0XFx0dHVuLVxcdTAwM2VhbGlnbiA9IE5FVF9TS0JfUEFEO1xcbjI4NzM6XFx0XFx0XFx0dHVuLVxcdTAwM2VmaWx0ZXJfYXR0YWNoZWQgPSBmYWxzZTtcXG4yODc0OlxcdFxcdFxcdHR1bi1cXHUwMDNlc25kYnVmID0gdGZpbGUtXFx1MDAzZXNvY2tldC5zay1cXHUwMDNlc2tfc25kYnVmO1xcbjI4NzU6XFx0XFx0XFx0dHVuLVxcdTAwM2VyeF9iYXRjaGVkID0gMDtcXG4yODc2OlxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIodHVuLVxcdTAwM2VzdGVlcmluZ19wcm9nLCBOVUxMKTtcXG4yODc3OlxcdFxcbjI4Nzg6XFx0XFx0XFx0dHVuLVxcdTAwM2VpZnIgPSBpZnI7XFxuMjg3OTpcXHRcXHRcXHR0dW4tXFx1MDAzZWZpbGUgPSBmaWxlO1xcbjI4ODA6XFx0XFxuMjg4MTpcXHRcXHRcXHR0dW5fbmV0X2luaXRpYWxpemUoZGV2KTtcXG4yODgyOlxcdFxcbjI4ODM6XFx0XFx0XFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi1cXHUwMDNlZGV2KTtcXG4yODg0OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMjg4NTpcXHRcXHRcXHRcXHRmcmVlX25ldGRldihkZXYpO1xcbjI4ODY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yODg3OlxcdFxcdFxcdH1cXG4yODg4OlxcdFxcdFxcdC8qIGZyZWVfbmV0ZGV2KCkgd29uJ3QgY2hlY2sgcmVmY250LCB0byBhdm9pZCByYWNlXFxuMjg4OTpcXHRcXHRcXHQgKiB3aXRoIGRldl9wdXQoKSB3ZSBuZWVkIHB1Ymxpc2ggdHVuIGFmdGVyIHJlZ2lzdHJhdGlvbi5cXG4yODkwOlxcdFxcdFxcdCAqL1xcbjI4OTE6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRmaWxlLVxcdTAwM2V0dW4sIHR1bik7XFxuMjg5MjpcXHRcXHR9XFxuMjg5MzpcXHRcXG4yODk0OlxcdFxcdGlmIChpZnItXFx1MDAzZWlmcl9mbGFncyBcXHUwMDI2IElGRl9OT19DQVJSSUVSKVxcbjI4OTU6XFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYodHVuLVxcdTAwM2VkZXYpO1xcbjI4OTY6XFx0XFx0ZWxzZVxcbjI4OTc6XFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbih0dW4tXFx1MDAzZWRldik7XFxuMjg5ODpcXHRcXG4yODk5OlxcdFxcdC8qIE1ha2Ugc3VyZSBwZXJzaXN0ZW50IGRldmljZXMgZG8gbm90IGdldCBzdHVjayBpblxcbjI5MDA6XFx0XFx0ICogeG9mZiBzdGF0ZS5cXG4yOTAxOlxcdFxcdCAqL1xcbjI5MDI6XFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVxcdTAwM2VkZXYpKSB7XFxuMjkwMzpcXHRcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHR1bi1cXHUwMDNlbnVtcXVldWVzOyBpKyspIHtcXG4yOTA0OlxcdFxcdFxcdFxcdHN0cnVjdCB0dW5fZmlsZSAqaV90ZmlsZTtcXG4yOTA1OlxcdFxcbjI5MDY6XFx0XFx0XFx0XFx0aV90ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbaV0pO1xcbjI5MDc6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpX3RmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbjI5MDg6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpX3RmaWxlLVxcdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xcbjI5MDk6XFx0XFx0XFx0XFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXFx1MDAzZWRldiwgaV90ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbjI5MTA6XFx0XFx0XFx0XFx0aV90ZmlsZS1cXHUwMDNlY29uc19jbnQgPSAwO1xcbjI5MTE6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlfdGZpbGUtXFx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XFxuMjkxMjpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aV90ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4yOTEzOlxcdFxcdFxcdH1cXG4yOTE0OlxcdFxcdH1cXG4yOTE1OlxcdFxcbjI5MTY6XFx0XFx0c3Ryc2NweShpZnItXFx1MDAzZWlmcl9uYW1lLCB0dW4tXFx1MDAzZWRldi1cXHUwMDNlbmFtZSk7XFxuMjkxNzpcXHRcXHRyZXR1cm4gMDtcXG4yOTE4OlxcdH1cXG4yOTE5OlxcdFxcbjI5MjA6XFx0c3RhdGljIHZvaWQgdHVuX2dldF9pZmYoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGlmcmVxICppZnIpXFxuMjkyMTpcXHR7XFxuMjkyMjpcXHRcXHRzdHJzY3B5KGlmci1cXHUwMDNlaWZyX25hbWUsIHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lKTtcXG4yOTIzOlxcdFxcbjI5MjQ6XFx0XFx0aWZyLVxcdTAwM2VpZnJfZmxhZ3MgPSB0dW5fZmxhZ3ModHVuKTtcXG4yOTI1OlxcdFxcbjI5MjY6XFx0fVxcbjI5Mjc6XFx0XFxuMjkyODpcXHQjZGVmaW5lIFBMQUlOX0dTTyAoTkVUSUZfRl9HU09fVURQX0w0IHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpXFxuMjkyOTpcXHRcXG4yOTMwOlxcdC8qIFRoaXMgaXMgbGlrZSBhIGN1dC1kb3duIGV0aHRvb2wgb3BzLCBleGNlcHQgZG9uZSB2aWEgdHVuIGZkIHNvIG5vXFxuMjkzMTpcXHQgKiBwcml2cyByZXF1aXJlZC4gKi9cXG4yOTMyOlxcdHN0YXRpYyBpbnQgc2V0X29mZmxvYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgdW5zaWduZWQgbG9uZyBhcmcpXFxuMjkzMzpcXHR7XFxuMjkzNDpcXHRcXHRuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyA9IDA7XFxuMjkzNTpcXHRcXG4yOTM2OlxcdFxcdGlmIChhcmcgXFx1MDAyNiBUVU5fRl9DU1VNKSB7XFxuMjkzNzpcXHRcXHRcXHRmZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07XFxuMjkzODpcXHRcXHRcXHRhcmcgXFx1MDAyNj0gflRVTl9GX0NTVU07XFxuMjkzOTpcXHRcXG4yOTQwOlxcdFxcdFxcdGlmIChhcmcgXFx1MDAyNiAoVFVOX0ZfVFNPNHxUVU5fRl9UU082KSkge1xcbjI5NDE6XFx0XFx0XFx0XFx0aWYgKGFyZyBcXHUwMDI2IFRVTl9GX1RTT19FQ04pIHtcXG4yOTQyOlxcdFxcdFxcdFxcdFxcdGZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPX0VDTjtcXG4yOTQzOlxcdFxcdFxcdFxcdFxcdGFyZyBcXHUwMDI2PSB+VFVOX0ZfVFNPX0VDTjtcXG4yOTQ0OlxcdFxcdFxcdFxcdH1cXG4yOTQ1OlxcdFxcdFxcdFxcdGlmIChhcmcgXFx1MDAyNiBUVU5fRl9UU080KVxcbjI5NDY6XFx0XFx0XFx0XFx0XFx0ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087XFxuMjk0NzpcXHRcXHRcXHRcXHRpZiAoYXJnIFxcdTAwMjYgVFVOX0ZfVFNPNilcXG4yOTQ4OlxcdFxcdFxcdFxcdFxcdGZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjtcXG4yOTQ5OlxcdFxcdFxcdFxcdGFyZyBcXHUwMDI2PSB+KFRVTl9GX1RTTzR8VFVOX0ZfVFNPNik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjQwOjA3LjA4NTU3MzQxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc3NDI5MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFR1bm5lbCBJbnRlcmZhY2UgRmxhZyBBc3NpZ25tZW50KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGB0dW4tXHUwMDNlZmxhZ3MgPSBmbGFncztgIHNwZWNpZmljYWxseSB3aGVyZSB0aGF0IGBmbGFnc2AgdmFsdWUgY29tZXMgZnJvbSBpbiB0aGUgY29udGV4dCBvZiB0aGUgdHVubmVsIGRldmljZSBzZXR1cC4gVGhlIGZvY3VzIGlzIG9uIGhvdyB0aG9zZSBmbGFncyBhcmUgdWx0aW1hdGVseSBkZXJpdmVkIGZyb20gYGlmci1cdTAwM2VpZnJfZmxhZ3NgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlc2UgZmxhZ3MgYXJlIGJlaW5nIGNvcGllZCwgYWx0ZXJlZCwgb3IgZXZlbiBtYXNrZWQgZHVyaW5nIHRoZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBwcm9jZXNzLCB3aGljaCBpcyBoYW5kbGVkIGluIHRoZSBgdHVuX3NldF9pZmZgIGZ1bmN0aW9uLlxuXG5JIHdhbnQgdG8gdHJhY2sgcHJlY2lzZWx5IHdoYXQgc2V0dGluZ3MgYXJlIGFjdHVhbGx5IG1ha2luZyBpdCBvbnRvIHRoZSB0dW5uZWwgaW50ZXJmYWNlLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBiaXR3aXNlIG1hbmlwdWxhdGlvbnMgaGFwcGVuaW5nPyBBbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHM/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgbW9kaWZpY2F0aW9ucyByZWxhdGl2ZSB0byB0aGUgaW5pdGlhbCB1c2VyLXNwZWNpZmllZCBpbnRlcmZhY2UgZmxhZ3Mg4oCTIGhvdyBhcmUgdGhleSBiZWluZyB0cmFuc2xhdGVkLCBvciBpZiBhbnkgc3RhbmRhcmQgZmxhZ3MgYXJlIGdldHRpbmcgaW1wbGljaXRseSBhZGRlZCBvciByZW1vdmVkPyBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbXBsZXRlIHRyYW5zZm9ybWF0aW9uIHByb2Nlc3MgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIHRoZSB0dW5uZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxMTo0MDoxMC41NjMwMDU0NzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NjgsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzY4OlxcdHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXFxuMjc2OTpcXHR7XFxuMjc3MDpcXHRcXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xcbjI3NzE6XFx0XFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4yNzcyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuMjc3MzpcXHRcXHRpbnQgZXJyO1xcbjI3NzQ6XFx0XFxuMjc3NTpcXHRcXHRpZiAodGZpbGUtXFx1MDAzZWRldGFjaGVkKVxcbjI3NzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjc3NzpcXHRcXG4yNzc4OlxcdFxcdGlmICgoaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTkFQSV9GUkFHUykpIHtcXG4yNzc5OlxcdFxcdFxcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcXG4yNzgwOlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMjc4MTpcXHRcXG4yNzgyOlxcdFxcdFxcdGlmICghKGlmci1cXHUwMDNlaWZyX2ZsYWdzIFxcdTAwMjYgSUZGX05BUEkpIHx8XFxuMjc4MzpcXHRcXHRcXHQgICAgKGlmci1cXHUwMDNlaWZyX2ZsYWdzIFxcdTAwMjYgVFVOX1RZUEVfTUFTSykgIT0gSUZGX1RBUClcXG4yNzg0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI3ODU6XFx0XFx0fVxcbjI3ODY6XFx0XFxuMjc4NzpcXHRcXHRkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIGlmci1cXHUwMDNlaWZyX25hbWUpO1xcbjI3ODg6XFx0XFx0aWYgKGRldikge1xcbjI3ODk6XFx0XFx0XFx0aWYgKGlmci1cXHUwMDNlaWZyX2ZsYWdzIFxcdTAwMjYgSUZGX1RVTl9FWENMKVxcbjI3OTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yNzkxOlxcdFxcdFxcdGlmICgoaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfVFVOKSBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZW5ldGRldl9vcHMgPT0gXFx1MDAyNnR1bl9uZXRkZXZfb3BzKVxcbjI3OTI6XFx0XFx0XFx0XFx0dHVuID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4yNzkzOlxcdFxcdFxcdGVsc2UgaWYgKChpZnItXFx1MDAzZWlmcl9mbGFncyBcXHUwMDI2IElGRl9UQVApIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9PSBcXHUwMDI2dGFwX25ldGRldl9vcHMpXFxuMjc5NDpcXHRcXHRcXHRcXHR0dW4gPSBuZXRkZXZfcHJpdihkZXYpO1xcbjI3OTU6XFx0XFx0XFx0ZWxzZVxcbjI3OTY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjc5NzpcXHRcXG4yNzk4OlxcdFxcdFxcdGlmICghIShpZnItXFx1MDAzZWlmcl9mbGFncyBcXHUwMDI2IElGRl9NVUxUSV9RVUVVRSkgIT1cXG4yNzk5OlxcdFxcdFxcdCAgICAhISh0dW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX01VTFRJX1FVRVVFKSlcXG4yODAwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI4MDE6XFx0XFxuMjgwMjpcXHRcXHRcXHRpZiAodHVuX25vdF9jYXBhYmxlKHR1bikpXFxuMjgwMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjI4MDQ6XFx0XFx0XFx0ZXJyID0gc2VjdXJpdHlfdHVuX2Rldl9vcGVuKHR1bi1cXHUwMDNlc2VjdXJpdHkpO1xcbjI4MDU6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMjgwNjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI4MDc6XFx0XFxuMjgwODpcXHRcXHRcXHRlcnIgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSwgaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTk9GSUxURVIsXFxuMjgwOTpcXHRcXHRcXHRcXHRcXHQgaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTkFQSSxcXG4yODEwOlxcdFxcdFxcdFxcdFxcdCBpZnItXFx1MDAzZWlmcl9mbGFncyBcXHUwMDI2IElGRl9OQVBJX0ZSQUdTLCB0cnVlKTtcXG4yODExOlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI4MTI6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yODEzOlxcdFxcbjI4MTQ6XFx0XFx0XFx0aWYgKHR1bi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTVVMVElfUVVFVUUgXFx1MDAyNlxcdTAwMjZcXG4yODE1OlxcdFxcdFxcdCAgICAodHVuLVxcdTAwM2VudW1xdWV1ZXMgKyB0dW4tXFx1MDAzZW51bWRpc2FibGVkIFxcdTAwM2UgMSkpIHtcXG4yODE2OlxcdFxcdFxcdFxcdC8qIE9uZSBvciBtb3JlIHF1ZXVlIGhhcyBhbHJlYWR5IGJlZW4gYXR0YWNoZWQsIG5vIG5lZWRcXG4yODE3OlxcdFxcdFxcdFxcdCAqIHRvIGluaXRpYWxpemUgdGhlIGRldmljZSBhZ2Fpbi5cXG4yODE4OlxcdFxcdFxcdFxcdCAqL1xcbjI4MTk6XFx0XFx0XFx0XFx0bmV0ZGV2X3N0YXRlX2NoYW5nZShkZXYpO1xcbjI4MjA6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgyMTpcXHRcXHRcXHR9XFxuMjgyMjpcXHRcXG4yODIzOlxcdFxcdFxcdHR1bi1cXHUwMDNlZmxhZ3MgPSAodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5UVU5fRkVBVFVSRVMpIHxcXG4yODI0OlxcdFxcdFxcdFxcdCAgICAgIChpZnItXFx1MDAzZWlmcl9mbGFncyBcXHUwMDI2IFRVTl9GRUFUVVJFUyk7XFxuMjgyNTpcXHRcXG4yODI2OlxcdFxcdFxcdG5ldGRldl9zdGF0ZV9jaGFuZ2UoZGV2KTtcXG4yODI3OlxcdFxcdH0gZWxzZSB7XFxuMjgyODpcXHRcXHRcXHRjaGFyICpuYW1lO1xcbjI4Mjk6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IDA7XFxuMjgzMDpcXHRcXHRcXHRpbnQgcXVldWVzID0gaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTVVMVElfUVVFVUUgP1xcbjI4MzE6XFx0XFx0XFx0XFx0ICAgICBNQVhfVEFQX1FVRVVFUyA6IDE7XFxuMjgzMjpcXHRcXG4yODMzOlxcdFxcdFxcdGlmICghbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxcbjI4MzQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4yODM1OlxcdFxcdFxcdGVyciA9IHNlY3VyaXR5X3R1bl9kZXZfY3JlYXRlKCk7XFxuMjgzNjpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4yODM3OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjgzODpcXHRcXG4yODM5OlxcdFxcdFxcdC8qIFNldCBkZXYgdHlwZSAqL1xcbjI4NDA6XFx0XFx0XFx0aWYgKGlmci1cXHUwMDNlaWZyX2ZsYWdzIFxcdTAwMjYgSUZGX1RVTikge1xcbjI4NDE6XFx0XFx0XFx0XFx0LyogVFVOIGRldmljZSAqL1xcbjI4NDI6XFx0XFx0XFx0XFx0ZmxhZ3MgfD0gSUZGX1RVTjtcXG4yODQzOlxcdFxcdFxcdFxcdG5hbWUgPSBcXFwidHVuJWRcXFwiO1xcbjI4NDQ6XFx0XFx0XFx0fSBlbHNlIGlmIChpZnItXFx1MDAzZWlmcl9mbGFncyBcXHUwMDI2IElGRl9UQVApIHtcXG4yODQ1OlxcdFxcdFxcdFxcdC8qIFRBUCBkZXZpY2UgKi9cXG4yODQ2OlxcdFxcdFxcdFxcdGZsYWdzIHw9IElGRl9UQVA7XFxuMjg0NzpcXHRcXHRcXHRcXHRuYW1lID0gXFxcInRhcCVkXFxcIjtcXG4yODQ4OlxcdFxcdFxcdH0gZWxzZVxcbjI4NDk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjg1MDpcXHRcXG4yODUxOlxcdFxcdFxcdGlmICgqaWZyLVxcdTAwM2VpZnJfbmFtZSlcXG4yODUyOlxcdFxcdFxcdFxcdG5hbWUgPSBpZnItXFx1MDAzZWlmcl9uYW1lO1xcbjI4NTM6XFx0XFxuMjg1NDpcXHRcXHRcXHRkZXYgPSBhbGxvY19uZXRkZXZfbXFzKHNpemVvZihzdHJ1Y3QgdHVuX3N0cnVjdCksIG5hbWUsXFxuMjg1NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgTkVUX05BTUVfVU5LTk9XTiwgdHVuX3NldHVwLCBxdWV1ZXMsXFxuMjg1NjpcXHRcXHRcXHRcXHRcXHQgICAgICAgcXVldWVzKTtcXG4yODU3OlxcdFxcbjI4NTg6XFx0XFx0XFx0aWYgKCFkZXYpXFxuMjg1OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yODYwOlxcdFxcbjI4NjE6XFx0XFx0XFx0ZGV2X25ldF9zZXQoZGV2LCBuZXQpO1xcbjI4NjI6XFx0XFx0XFx0ZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzID0gXFx1MDAyNnR1bl9saW5rX29wcztcXG4yODYzOlxcdFxcdFxcdGRldi1cXHUwMDNlaWZpbmRleCA9IHRmaWxlLVxcdTAwM2VpZmluZGV4O1xcbjI4NjQ6XFx0XFx0XFx0ZGV2LVxcdTAwM2VzeXNmc19ncm91cHNbMF0gPSBcXHUwMDI2dHVuX2F0dHJfZ3JvdXA7XFxuMjg2NTpcXHRcXG4yODY2OlxcdFxcdFxcdHR1biA9IG5ldGRldl9wcml2KGRldik7XFxuMjg2NzpcXHRcXHRcXHR0dW4tXFx1MDAzZWRldiA9IGRldjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTE6NDA6MTAuNTYzMTk4OTQ5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNzc4NTMyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRVTi9UQVAgQmFja3ByZXNzdXJlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGxpbmUsIGB0dW4tXHUwMDNlZmxhZ3MgPSAodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiB+VFVOX0ZFQVRVUkVTKSB8IChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBUVU5fRkVBVFVSRVMpO2AgYW5kIHRoZSBpbmNsdXNpb24gb2YgYElGRl9CQUNLUFJFU1NVUkVgIGludG8gYFRVTl9GRUFUVVJFU2AgaXMga2V5LiBTbywgYHR1bl9zZXRfaWZmYCBoYW5kbGVzIHRoZSBzZXR0aW5nIG9mIHRoaXMgZmxhZywgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgYmFja3ByZXNzdXJlIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyB0aGUgVFVOIGRldmljZSBoYW5kbGVzIGEgZnVsbCByaW5nIGJ1ZmZlci4gSW5zdGVhZCBvZiBwYWNrZXQgZHJvcHMsIGl0IGludHJvZHVjZXMgYmFja3ByZXNzdXJlIHZpYSB0aGUgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnLCBzdG9wcGluZyB0aGUgVFggcXVldWUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBmdXp6IHRoaXMuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgYHR1bl9uZXRfeG1pdGAsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgYmFja3ByZXNzdXJlIGxvZ2ljIGlzICpleGVjdXRlZCouIEhvd2V2ZXIsIHRoYXQgZnVuY3Rpb24gaXMgaW4gdGhlIGhvdCBwYXRoLCBzbyBJIHNob3VsZCBhdm9pZCBpdC4gYHR1bl9zZXRfaWZmYCwgYmVpbmcgYW4gYGlvY3RsYCBoYW5kbGVyLCBpcyBhIG11Y2ggYmV0dGVyIHRhcmdldCBmb3IgU3l6a2FsbGVyJ3MgZnV6emluZyBjYXBhYmlsaXRpZXMuIEl0J3MgdGhlIHBvaW50IG9mICpzZXR0aW5nKiB0aGUgZmxhZywgYSBjbGVhbmVyIGVudHJ5IHBvaW50LlxuXG5JIGFsc28gY29uc2lkZXJlZCBgX190dW5fd2FrZV9xdWV1ZWAsIGJ1dCB0aGF0J3MgY2FsbGVkIGZyb20gYHR1bl9yaW5nX2NvbnN1bWVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGB0dW5fZG9fcmVhZGAsIHNvIHRoYXQncyBhbHNvIGluIGEgaG90IHBhdGguIFRoZXJlZm9yZSwgSSdtIHN0aWNraW5nIHdpdGggYHR1bl9zZXRfaWZmYC4gVGhhdCdzIHRoZSBiZXN0IGZvY3VzIHN5bWJvbC5cblxuTm93LCBjb25maWcgZGVwZW5kZW5jaWVzLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgYENPTkZJR19UVU5gIGlzIHRoZSBvbmx5IHJlcXVpcmVtZW50LCBhcyBgZHJpdmVycy9uZXQvdHVuLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19UVU5gIGlzIHNldC4gTm8gb3RoZXIgY29uZmlncyBhcmUgbmVlZGVkLiBUaGUgaGVhZGVyIHN5bmMgaW4gYHRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaGAgaXMganVzdCB0aGF0IOKAkyBhIGhlYWRlciBzeW5jOyBubyBsb2dpYyBpcyByZWFsbHkgdGhlcmUuXG5cbk9rYXksIGxldCdzIHN1bW1hcml6ZSBteSBmaW5kaW5nczpcblxuKiAgIFdvcnRoRnV6emluZzogYHRydWVgXG4qICAgRm9jdXNTeW1ib2xzOiBgW1widHVuX3NldF9pZmZcIl1gXG4qICAgRW5hYmxlQ29uZmlnczogYFtcIlRVTlwiXWBcbiogICBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgYHR1bl9uZXRfeG1pdGAgYW5kIGBfX3R1bl93YWtlX3F1ZXVlYCB0byBzdG9wIHRoZSBUWCBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBUVU5TRVRJRkYgaW9jdGwuXCJcblxuSSB0aGluayB0aGF0IGNvdmVycyBpdC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTIzLCJPdXRwdXRUb2tlbnMiOjEwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjQwOjE4Ljg0MTA1NDQyOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjU1OTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX3NldF9pZmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIHR1bl9uZXRfeG1pdCBhbmQgX190dW5fd2FrZV9xdWV1ZSB0byBzdG9wIHRoZSBUWCBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBUVU5TRVRJRkYgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX3NldF9pZmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIHR1bl9uZXRfeG1pdCBhbmQgX190dW5fd2FrZV9xdWV1ZSB0byBzdG9wIHRoZSBUWCBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBUVU5TRVRJRkYgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowct86r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-04 11:29:45 +0000 UTC FinishedAt: 2026-07-04 11:40:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d6456743424721a837e1509b912f362caaeecd97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d6456743424721a837e1509b912f362caaeecd97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TUN" ], "series_id": "01ccfb70-4d44-4a49-a66d-5bdd6cc763bc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tun_set_iff" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDExOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9zZXRfaWZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdHVuX25ldF94bWl0IGFuZCBfX3R1bl93YWtlX3F1ZXVlIHRvIHN0b3AgdGhlIFRYIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIFRVTlNFVElGRiBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxMTozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVjNWYxMGY2ODFlMjg1NjlhNDdhYjhhMWQzNTI5ZTQxNzZhNGFlOThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCA0IDExOjM5OjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcbmluZGV4IDRkNzA4N2Y3MjdiZTVlLi41OTkyNjQ4MjVkZDIxNiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxuQEAgLTIwNiw2ICYjNDM7MjA2LDIzIEBAIGVuYWJsZSBpcyB0cnVlIHdlIGVuYWJsZSBpdCwgb3RoZXJ3aXNlIHdlIGRpc2FibGUgaXQ6OlxuICAgICAgIHJldHVybiBpb2N0bChmZCwgVFVOU0VUUVVFVUUsICh2b2lkICopXHUwMDI2aWZyKTtcbiAgIH1cbiBcbiYjNDM7My40IHFkaXNjIGJhY2twcmVzc3VyZVxuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO1xuJiM0MztTdGFydGluZyB3aXRoIExpbnV4IDcuMiwgSUZGX0JBQ0tQUkVTU1VSRSBjYW4gYmUgc2V0IHRvIGVuYWJsZSBxZGlzY1xuJiM0MztiYWNrcHJlc3N1cmUuIFdpdGhvdXQgaXQsIFRYIGRyb3BzIG9jY3VyIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzXG4mIzQzO2Z1bGwuIFdpdGggaXQsIHRoZSBrZXJuZWwgc3RvcHMgdGhlIFRYIHF1ZXVlIGluc3RlYWQsIGxldHRpbmcgdGhlIHFkaXNjXG4mIzQzO2hvbGQgcGFja2V0cy4gRHJvcHMgb25seSBvY2N1ciBhcyBhIHJhcmUgcmFjZS4gVGhpcyBjYW4gYmVuZWZpdCBwcm90b2NvbHNcbiYjNDM7bGlrZSBUQ1AgdGhhdCByZWFjdCB0byBkcm9wcy4gQmFja3ByZXNzdXJlIHJlcXVpcmVzIGEgcWRpc2MgdG8gYmVcbiYjNDM7YXR0YWNoZWQgYW5kIGhhcyBubyBlZmZlY3Qgd2l0aCBub3F1ZXVlLlxuJiM0MztcbiYjNDM7VGhlIFRVTi9UQVAgcmluZyBidWZmZXIgc2l6ZSBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvXG4mIzQzO2Z1cnRoZXIgc2hpZnQgYnVmZmVyaW5nIGludG8gdGhlIHFkaXNjIGFuZCByZWR1Y2UgYnVmZmVyYmxvYXQsIGJ1dCBjb21lc1xuJiM0MzthdCBwb3NzaWJsZSBwZXJmb3JtYW5jZSBjb3N0LlxuJiM0MztcbiYjNDM7V2hlbiBydW5uaW5nIG11bHRpcGxlIG5ldHdvcmsgc3RyZWFtcyBpbiBwYXJhbGxlbCwgdGhlIGZsYWcgbWF5IHJlZHVjZVxuJiM0MztwZXJmb3JtYW5jZSBkdWUgdG8gdGhlIGV4dHJhIG92ZXJoZWFkIG9mIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtLlxuJiM0MztcbiBVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25cbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5pbmRleCBmZmJlNmYxM2ZiMWZhMi4uM2JmOGE3M2EwODE2MmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdHVuLmNcbkBAIC05OCw3ICYjNDM7OTgsOCBAQCBzdGF0aWMgdm9pZCB0dW5fZGVmYXVsdF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICNkZWZpbmUgVFVOX0ZBU1lOQ1x0SUZGX0FUVEFDSF9RVUVVRVxuIFxuICNkZWZpbmUgVFVOX0ZFQVRVUkVTIChJRkZfTk9fUEkgfCBJRkZfT05FX1FVRVVFIHwgSUZGX1ZORVRfSERSIHwgXFxcbi1cdFx0ICAgICAgSUZGX01VTFRJX1FVRVVFIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUylcbiYjNDM7XHRcdCAgICAgIElGRl9NVUxUSV9RVUVVRSB8IElGRl9OQVBJIHwgSUZGX05BUElfRlJBR1MgfCBcXFxuJiM0MztcdFx0ICAgICAgSUZGX0JBQ0tQUkVTU1VSRSlcbiBcbiAjZGVmaW5lIEdPT0RDT1BZX0xFTiAxMjhcbiBcbkBAIC0xMDc3LDcgJiM0MzsxMDc4LDggQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4gXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZywgc2tiKTtcbi1cdGlmICghcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKCh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpID09IC1FTk9TUEMpIHtcbiBcdFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XG4gXHRcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xuQEAgLTIxNTEsOCAmIzQzOzIxNTMsMTIgQEAgc3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4gc3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuIFx0XHRcdCAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKVxuIHtcbi1cdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUodHVuLVx1MDAzZWRldixcbi1cdFx0XHRcdFx0XHR0ZmlsZS1cdTAwM2VxdWV1ZV9pbmRleCk7XG4mIzQzO1x0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuJiM0MztcbiYjNDM7XHRpZiAoISh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi1cdTAwM2VkZXYsIHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4KTtcbiBcbiBcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi9cbiBcdHNtcF9tYigpO1xuQEAgLTI4OTMsOCAmIzQzOzI4OTksMTkgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbiBcdC8qIE1ha2Ugc3VyZSBwZXJzaXN0ZW50IGRldmljZXMgZG8gbm90IGdldCBzdHVjayBpblxuIFx0ICogeG9mZiBzdGF0ZS5cbiBcdCAqL1xuLVx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVx1MDAzZWRldikpXG4tXHRcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyh0dW4tXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSkge1xuJiM0MztcdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHR1bi1cdTAwM2VudW1xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB0dW5fZmlsZSAqaV90ZmlsZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlfdGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuJiM0MztcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aV90ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuJiM0MztcdFx0XHRzcGluX2xvY2soXHUwMDI2aV90ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuJiM0MztcdFx0XHRuZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi1cdTAwM2VkZXYsIGlfdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuJiM0MztcdFx0XHRpX3RmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aV90ZmlsZS1cdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpX3RmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0c3Ryc2NweShpZnItXHUwMDNlaWZyX25hbWUsIHR1bi1cdTAwM2VkZXYtXHUwMDNlbmFtZSk7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbmluZGV4IDc5ZDUzYzdhMWViZGM1Li43M2E3NzE0MTMxNWM3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5AQCAtNjksNiAmIzQzOzY5LDcgQEBcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXHQweDAwMjBcbiAvKiBVc2VkIGluIFRVTlNFVElGRiB0byBicmluZyB1cCB0dW4vdGFwIHdpdGhvdXQgY2FycmllciAqL1xuICNkZWZpbmUgSUZGX05PX0NBUlJJRVJcdDB4MDA0MFxuJiM0MzsjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkVcdDB4MDA4MFxuICNkZWZpbmUgSUZGX05PX1BJXHQweDEwMDBcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXG4gI2RlZmluZSBJRkZfT05FX1FVRVVFXHQweDIwMDBcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbmluZGV4IDJlYzA3ZGUxZDczYmU0Li45N2I2NzBmNWJjMGEzNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5AQCAtNjcsNiAmIzQzOzY3LDcgQEBcbiAjZGVmaW5lIElGRl9UQVBcdFx0MHgwMDAyXG4gI2RlZmluZSBJRkZfTkFQSVx0MHgwMDEwXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1x0MHgwMDIwXG4mIzQzOyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDExOjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9zZXRfaWZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdHVuX25ldF94bWl0IGFuZCBfX3R1bl93YWtlX3F1ZXVlIHRvIHN0b3AgdGhlIFRYIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIFRVTlNFVElGRiBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWM1ZjEwZjY4MWUyODU2OWE0N2FiOGExZDM1MjllNDE3NmE0YWU5OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDQgMTE6Mzk6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0CmluZGV4IDRkNzA4N2Y3MjdiZTVlLi41OTkyNjQ4MjVkZDIxNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3QKQEAgLTIwNiw2ICYjNDM7MjA2LDIzIEBAIGVuYWJsZSBpcyB0cnVlIHdlIGVuYWJsZSBpdCwgb3RoZXJ3aXNlIHdlIGRpc2FibGUgaXQ6OgogICAgICAgcmV0dXJuIGlvY3RsKGZkLCBUVU5TRVRRVUVVRSwgKHZvaWQgKikmYW1wO2lmcik7CiAgIH0KIAomIzQzOzMuNCBxZGlzYyBiYWNrcHJlc3N1cmUKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7U3RhcnRpbmcgd2l0aCBMaW51eCA3LjIsIElGRl9CQUNLUFJFU1NVUkUgY2FuIGJlIHNldCB0byBlbmFibGUgcWRpc2MKJiM0MztiYWNrcHJlc3N1cmUuIFdpdGhvdXQgaXQsIFRYIGRyb3BzIG9jY3VyIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzCiYjNDM7ZnVsbC4gV2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyB0aGUgVFggcXVldWUgaW5zdGVhZCwgbGV0dGluZyB0aGUgcWRpc2MKJiM0Mztob2xkIHBhY2tldHMuIERyb3BzIG9ubHkgb2NjdXIgYXMgYSByYXJlIHJhY2UuIFRoaXMgY2FuIGJlbmVmaXQgcHJvdG9jb2xzCiYjNDM7bGlrZSBUQ1AgdGhhdCByZWFjdCB0byBkcm9wcy4gQmFja3ByZXNzdXJlIHJlcXVpcmVzIGEgcWRpc2MgdG8gYmUKJiM0MzthdHRhY2hlZCBhbmQgaGFzIG5vIGVmZmVjdCB3aXRoIG5vcXVldWUuCiYjNDM7CiYjNDM7VGhlIFRVTi9UQVAgcmluZyBidWZmZXIgc2l6ZSBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvCiYjNDM7ZnVydGhlciBzaGlmdCBidWZmZXJpbmcgaW50byB0aGUgcWRpc2MgYW5kIHJlZHVjZSBidWZmZXJibG9hdCwgYnV0IGNvbWVzCiYjNDM7YXQgcG9zc2libGUgcGVyZm9ybWFuY2UgY29zdC4KJiM0MzsKJiM0MztXaGVuIHJ1bm5pbmcgbXVsdGlwbGUgbmV0d29yayBzdHJlYW1zIGluIHBhcmFsbGVsLCB0aGUgZmxhZyBtYXkgcmVkdWNlCiYjNDM7cGVyZm9ybWFuY2UgZHVlIHRvIHRoZSBleHRyYSBvdmVyaGVhZCBvZiB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbS4KJiM0MzsKIFVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggZmZiZTZmMTNmYjFmYTIuLjNiZjhhNzNhMDgxNjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtOTgsNyAmIzQzOzk4LDggQEAgc3RhdGljIHZvaWQgdHVuX2RlZmF1bHRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICNkZWZpbmUgVFVOX0ZBU1lOQwlJRkZfQVRUQUNIX1FVRVVFCiAKICNkZWZpbmUgVFVOX0ZFQVRVUkVTIChJRkZfTk9fUEkgfCBJRkZfT05FX1FVRVVFIHwgSUZGX1ZORVRfSERSIHwgXAotCQkgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTKQomIzQzOwkJICAgICAgSUZGX01VTFRJX1FVRVVFIHwgSUZGX05BUEkgfCBJRkZfTkFQSV9GUkFHUyB8IFwKJiM0MzsJCSAgICAgIElGRl9CQUNLUFJFU1NVUkUpCiAKICNkZWZpbmUgR09PRENPUFlfTEVOIDEyOAogCkBAIC0xMDc3LDcgJiM0MzsxMDc4LDggQEAgc3RhdGljIG5ldGRldl90eF90IHR1bl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiAJc3Bpbl9sb2NrKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcucHJvZHVjZXJfbG9jayk7CiAJcmV0ID0gX19wdHJfcmluZ19wcm9kdWNlKCZhbXA7dGZpbGUtJmd0O3R4X3JpbmcsIHNrYik7Ci0JaWYgKCFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSAmYW1wOyZhbXA7CiYjNDM7CWlmICgodHVuLSZndDtmbGFncyAmYW1wOyBJRkZfQkFDS1BSRVNTVVJFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgJmFtcDsmYW1wOwogCSAgICBfX3B0cl9yaW5nX2NoZWNrX3Byb2R1Y2UoJmFtcDt0ZmlsZS0mZ3Q7dHhfcmluZykgPT0gLUVOT1NQQykgewogCQluZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTsKIAkJLyogUGFpcmVkIHdpdGggc21wX21iKCkgaW4gX190dW5fd2FrZV9xdWV1ZSgpICovCkBAIC0yMTUxLDggJiM0MzsyMTUzLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLAogc3RhdGljIHZvaWQgX190dW5fd2FrZV9xdWV1ZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLAogCQkJICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpCiB7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tJmd0O2RldiwKLQkJCQkJCXRmaWxlLSZndDtxdWV1ZV9pbmRleCk7CiYjNDM7CXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKJiM0MzsKJiM0MzsJaWYgKCEodHVuLSZndDtmbGFncyAmYW1wOyBJRkZfQkFDS1BSRVNTVVJFKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tJmd0O2RldiwgdGZpbGUtJmd0O3F1ZXVlX2luZGV4KTsKIAogCS8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi8KIAlzbXBfbWIoKTsKQEAgLTI4OTMsOCAmIzQzOzI4OTksMTkgQEAgc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcikKIAkvKiBNYWtlIHN1cmUgcGVyc2lzdGVudCBkZXZpY2VzIGRvIG5vdCBnZXQgc3R1Y2sgaW4KIAkgKiB4b2ZmIHN0YXRlLgogCSAqLwotCWlmIChuZXRpZl9ydW5uaW5nKHR1bi0mZ3Q7ZGV2KSkKLQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHR1bi0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcodHVuLSZndDtkZXYpKSB7CiYjNDM7CQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHR1bi0mZ3Q7bnVtcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB0dW5fZmlsZSAqaV90ZmlsZTsKJiM0MzsKJiM0MzsJCQlpX3RmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tJmd0O3RmaWxlc1tpXSk7CiYjNDM7CQkJc3Bpbl9sb2NrX2JoKCZhbXA7aV90ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0MzsJCQlzcGluX2xvY2soJmFtcDtpX3RmaWxlLSZndDt0eF9yaW5nLnByb2R1Y2VyX2xvY2spOwomIzQzOwkJCW5ldGlmX3dha2Vfc3VicXVldWUodHVuLSZndDtkZXYsIGlfdGZpbGUtJmd0O3F1ZXVlX2luZGV4KTsKJiM0MzsJCQlpX3RmaWxlLSZndDtjb25zX2NudCA9IDA7CiYjNDM7CQkJc3Bpbl91bmxvY2soJmFtcDtpX3RmaWxlLSZndDt0eF9yaW5nLnByb2R1Y2VyX2xvY2spOwomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7aV90ZmlsZS0mZ3Q7dHhfcmluZy5jb25zdW1lcl9sb2NrKTsKJiM0MzsJCX0KJiM0MzsJfQogCiAJc3Ryc2NweShpZnItJmd0O2lmcl9uYW1lLCB0dW4tJmd0O2Rldi0mZ3Q7bmFtZSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmgKaW5kZXggNzlkNTNjN2ExZWJkYzUuLjczYTc3MTQxMzE1YzdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCkBAIC02OSw2ICYjNDM7NjksNyBAQAogI2RlZmluZSBJRkZfTkFQSV9GUkFHUwkweDAwMjAKIC8qIFVzZWQgaW4gVFVOU0VUSUZGIHRvIGJyaW5nIHVwIHR1bi90YXAgd2l0aG91dCBjYXJyaWVyICovCiAjZGVmaW5lIElGRl9OT19DQVJSSUVSCTB4MDA0MAomIzQzOyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRQkweDAwODAKICNkZWZpbmUgSUZGX05PX1BJCTB4MTAwMAogLyogVGhpcyBmbGFnIGhhcyBubyByZWFsIGVmZmVjdCAqLwogI2RlZmluZSBJRkZfT05FX1FVRVVFCTB4MjAwMApkaWZmIC0tZ2l0IGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCmluZGV4IDJlYzA3ZGUxZDczYmU0Li45N2I2NzBmNWJjMGEzNSAxMDA2NDQKLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaApAQCAtNjcsNiAmIzQzOzY3LDcgQEAKICNkZWZpbmUgSUZGX1RBUAkJMHgwMDAyCiAjZGVmaW5lIElGRl9OQVBJCTB4MDAxMAogI2RlZmluZSBJRkZfTkFQSV9GUkFHUwkweDAwMjAKJiM0MzsjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkUJMHgwMDgwCiAjZGVmaW5lIElGRl9OT19QSQkweDEwMDAKIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi8KICNkZWZpbmUgSUZGX09ORV9RVUVVRQkweDIwMDAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTE6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4OQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFRVTi9UQVAgUGF0Y2gqKgoKQWxyaWdodCwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhpdHRpbmcgbXkgZGVzaywgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgY29yZSBUVU4vVEFQIGluZnJhc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgdG8gYGRyaXZlcnMvbmV0L3R1bi5jYCwgdGhlIGRvY3VtZW50YXRpb24gaW4gYHR1bnRhcC5yc3RgLCBhbmQgdGhlIHVzZXJzcGFjZSBpbnRlcmZhY2UgaGVhZGVyIGBpZl90dW4uaGAuIEltbWVkaWF0ZWx5LCBteSBzcGlkZXktc2Vuc2UgdGluZ2xlczsgYW55IG1vZGlmaWNhdGlvbiB0byB0aG9zZSBmaWxlcyBoYXMgdGhlIHBvdGVudGlhbCBmb3Igc2lnbmlmaWNhbnQgaW1wYWN0LiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYElGRl9CQUNLUFJFU1NVUkVgIGZsYWcuIFRoaXMgc3VnZ2VzdHMgYSBtb2RpZmljYXRpb24gdG8gaG93IFRVTi9UQVAgaW50ZXJmYWNlcyBoYW5kbGUgZmxvdyBjb250cm9sIG9yIGNvbmdlc3Rpb24uIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzIGluIGB0dW5fbmV0X3htaXRgLCBgX190dW5fd2FrZV9xdWV1ZWAsIGFuZCBgdHVuX3NldF9pZmZgLiBGdW5jdGlvbmFsaXR5IGFuZCByZWFjaGFiaWxpdHkgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgbmV0LW5ldyBmZWF0dXJlLCBvciBhbiBvcHRpbWl6YXRpb24gb2YgZXhpc3RpbmcgYmVoYXZpb3IuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7dmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbmV3IGZlYXR1cmUgaXMgY29udHJvbGxlZCBhdCBidWlsZCB0aW1lLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAsIHRvIGZpbmQgdGhlIGNvbmZpZyBvcHRpb25zIHRoYXQgZW5hYmxlIHRoaXMgZmVhdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHR1cm5zIHVwIGluIHRoZSBidWlsZCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTE6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfTkVUX1RFQU0pICYjNDM7PSB0ZWFtL1xuZHJpdmVycy9uZXQvTWFrZWZpbGU6MzI6b2JqLSQoQ09ORklHX1RVTikgJiM0Mzs9IHR1bi5vXG5kcml2ZXJzL25ldC9NYWtlZmlsZS0zMy1vYmotJChDT05GSUdfVEFQKSAmIzQzOz0gdGFwLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9NDE9bWx4NV9jb3JlLSQoQ09ORklHX1BDSV9IWVBFUlZfSU5URVJGQUNFKSAmIzQzOz0gZW4vaHZfdmhjYV9zdGF0cy5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU6NDI6bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfRVNXSVRDSCkgICAgICYjNDM7PSBsYWcvbXAubyBsYWcvcG9ydF9zZWwubyBsaWIvZ2VuZXZlLm8gbGliL3BvcnRfdHVuLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS00My1cdFx0XHRcdFx0ZW5fcmVwLm8gZW4vcmVwL2JvbmQubyBlbi9tb2RfaGRyLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU9NDU9bWx4NV9jb3JlLSQoQ09ORklHX01MWDVfQ0xTX0FDVCkgICAgICYjNDM7PSBlbl90Yy5vIGVuL3JlcC90Yy5vIGVuL3JlcC9uZWlnaC5vIFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU6NDY6XHRcdFx0XHRcdGxpYi9mc19jaGFpbnMubyBlbi90Y190dW4ubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTQ3LVx0XHRcdFx0XHRlc3cvaW5kaXJfdGFibGUubyBlbi90Y190dW5fZW5jYXAubyBcXFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT01Mz1tbHg1X2NvcmUtJChDT05GSUdfTUxYNV9DTFNfQUNUKSAgICAgJiM0Mzs9IGVuL3RjL2FjdC9hY3QubyBlbi90Yy9hY3QvZHJvcC5vIGVuL3RjL2FjdC90cmFwLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZS01NC1cdFx0XHRcdFx0ZW4vdGMvYWN0L2FjY2VwdC5vIGVuL3RjL2FjdC9tYXJrLm8gZW4vdGMvYWN0L2dvdG8ubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjU1Olx0XHRcdFx0XHRlbi90Yy9hY3QvdHVuLm8gZW4vdGMvYWN0L2NzdW0ubyBlbi90Yy9hY3QvcGVkaXQubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlLTU2LVx0XHRcdFx0XHRlbi90Yy9hY3Qvdmxhbi5vIGVuL3RjL2FjdC92bGFuX21hbmdsZS5vIGVuL3RjL2FjdC9tcGxzLm8gXFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jPTEwNDU9bmZwX3R1bm5lbF9sb29rdXBfb2ZmbG9hZGVkX21hY3Moc3RydWN0IG5mcF9hcHAgKmFwcCwgY29uc3QgdTggKm1hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTEwNDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jOjEwNDk6XHRyZXR1cm4gcmhhc2h0YWJsZV9sb29rdXBfZmFzdChcdTAwMjZwcml2LVx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcywgbWFjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMDUwLVx0XHRcdFx0ICAgICAgb2ZmbG9hZGVkX21hY3NfcGFyYW1zKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jPTEwNzc9bmZwX3R1bm5lbF9hZGRfc2hhcmVkX21hYyhzdHJ1Y3QgbmZwX2FwcCAqYXBwLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTEyNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTEyODpcdFx0aWYgKHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXHUwMDI2cHJpdi1cdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTExMjktXHRcdFx0XHRcdCAgIFx1MDAyNmVudHJ5LVx1MDAzZWh0X25vZGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMTUwLWVycl9yZW1vdmVfaGFzaDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTE1MTpcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cHJpdi1cdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsIFx1MDAyNmVudHJ5LVx1MDAzZWh0X25vZGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTExNTItXHRcdFx0ICAgICAgIG9mZmxvYWRlZF9tYWNzX3BhcmFtcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xMTYzPW5mcF90dW5uZWxfZGVsX3NoYXJlZF9tYWMoc3RydWN0IG5mcF9hcHAgKmFwcCwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTEyMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jOjEyMjg6XHRXQVJOX09OX09OQ0Uocmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZwcml2LVx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTIyOS1cdFx0XHRcdFx0ICAgIFx1MDAyNmVudHJ5LVx1MDAzZWh0X25vZGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xNTA3PWludCBuZnBfdHVubmVsX2NvbmZpZ19zdGFydChzdHJ1Y3QgbmZwX2FwcCAqYXBwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTUxMi1cdC8qIEluaXRpYWxpc2Ugcmhhc2ggZm9yIE1BQyBvZmZsb2FkIHRyYWNraW5nLiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxNTEzOlx0ZXJyID0gcmhhc2h0YWJsZV9pbml0KFx1MDAyNnByaXYtXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTE0LVx0XHRcdCAgICAgIFx1MDAyNm9mZmxvYWRlZF9tYWNzX3BhcmFtcyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTMwLVx0aWYgKGVycikge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxNTMxOlx0XHRyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1MzItXHRcdFx0XHRcdCAgICBuZnBfY2hlY2tfcmhhc2h0YWJsZV9lbXB0eSwgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xNTM5PXZvaWQgbmZwX3R1bm5lbF9jb25maWdfc3RvcChzdHJ1Y3QgbmZwX2FwcCAqYXBwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTU1OC1cdC8qIERlc3Ryb3kgcmhhc2guIEVudHJpZXMgc2hvdWxkIGJlIGNsZWFuZWQgb24gbmV0ZGV2IG5vdGlmaWVyIHVucmVnLiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYzoxNTU5Olx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTYwLVx0XHRcdFx0ICAgIG5mcF9jaGVja19yaGFzaHRhYmxlX2VtcHR5LCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxMTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTY5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVFVOIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBgQ09ORklHX1RVTmAsIHRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgbGlrZWx5IHN1c3BlY3RzIOKAkyB0aGUgaGVhcnQgb2YgdGhlIFRVTiBkcml2ZXI6IGBkcml2ZXJzL25ldC90dW4uY2AuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGFueSBmdW5jdGlvbnMgdGhhdCBtaWdodCBoYXZlIGJlZW4gdHdlYWtlZC4gRnJvbSBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgYHR1bl9uZXRfeG1pdGAsIGBfX3R1bl93YWtlX3F1ZXVlYCwgYW5kIGB0dW5fc2V0X2lmZmAgYXJlIHRoZSBvbmVzIHRvIGZvY3VzIG9uLiAKCkhtbSwgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZsb2F0aW5nIGFyb3VuZCB0aGF0IGNvdWxkIGltcGFjdCB0aGVzZSBmdW5jdGlvbnM/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSYjMzk7cyBtb3JlIHRvIGNvbnNpZGVyIGhlcmUuIFJpZ2h0LCB0aGUgY29kZSBpcyB1c2luZyBgSUZGX0JBQ0tQUkVTU1VSRWAgd2l0aGluIGB0dW5fbmV0X3htaXRgLCBgX190dW5fd2FrZV9xdWV1ZWAsIGFuZCBgdHVuX3NldF9pZmZgLCB0aGF04oCZcyB0aGUgY3J1Y2lhbCBwaWVjZSB0byB0cmFjayBkb3duLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIGFyZSBnYXRpbmcgdGhlIHVzZSBvciBiZWhhdmlvciBvZiB0aGVzZSBrZXkgZnVuY3Rpb25zIGJhc2VkIG9uIHNwZWNpZmljIGNvbXBpbGUtdGltZSBmbGFncy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbnVhbmNlIG9mdGVuIGxpZXMgaW4gdGhpcyB0eXBlIG9mIGRyaXZlciBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgSUZGX0JBQ0tQUkVTU1VSRWAgaXMgbm90IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3V0LCBhbmQgc2VlIGlmIGl0IGlzIHVzZWQgYWNjb3JkaW5nIHRvIGl0cyBvcmlnaW5hbCBpbnRlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTE6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHVuX25ldF94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmM9MTAwMT1zdGF0aWMgdW5zaWduZWQgaW50IHJ1bl9lYnBmX2ZpbHRlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEwMTMtLyogTmV0IGRldmljZSBzdGFydCB4bWl0ICovXG5kcml2ZXJzL25ldC90dW4uYzoxMDE0OnN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3R1bi5jLTEwMTUte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTEyMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMjIwLVx0Lm5kb19zdG9wXHRcdD0gdHVuX25ldF9jbG9zZSxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyMjE6XHQubmRvX3N0YXJ0X3htaXRcdFx0PSB0dW5fbmV0X3htaXQsXG5kcml2ZXJzL25ldC90dW4uYy0xMjIyLVx0Lm5kb19maXhfZmVhdHVyZXNcdD0gdHVuX25ldF9maXhfZmVhdHVyZXMsXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTMwMD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRhcF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTEzMDQtXHQubmRvX3N0b3BcdFx0PSB0dW5fbmV0X2Nsb3NlLFxuZHJpdmVycy9uZXQvdHVuLmM6MTMwNTpcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IHR1bl9uZXRfeG1pdCxcbmRyaXZlcnMvbmV0L3R1bi5jLTEzMDYtXHQubmRvX2ZpeF9mZWF0dXJlc1x0PSB0dW5fbmV0X2ZpeF9mZWF0dXJlcyxcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yMTUzPXN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0yMTYyLVxuZHJpdmVycy9uZXQvdHVuLmM6MjE2MzpcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4gdHVuX25ldF94bWl0KCkgKi9cbmRyaXZlcnMvbmV0L3R1bi5jLTIxNjQtXHRzbXBfbWIoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxMTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDUzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUVU4gRHJpdmVyIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIHRoYXQgdGhleSBhcmVuJiMzOTt0IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aCBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcy4gVGhhdCYjMzk7cyBnb29kLCBsZXNzIHRvIHdvcnJ5IGFib3V0IGluIHRlcm1zIG9mIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBUaGUgY29uZmlnIGlzIGRlZmluaXRlbHkgc2V0IHRvIGBUVU5gLgoKSSYjMzk7bSBmb2N1c2VkIG9uIGB0dW5fbmV0X3htaXRgLCBgX190dW5fd2FrZV9xdWV1ZWAsIGFuZCBgdHVuX3NldF9pZmZgLiBMZXQmIzM5O3Mgc2VlLi4uIFdhaXQgYSBtaW51dGUsIGB0dW5fbmV0X3htaXRgIOKAkyB0aGF0JiMzOTtzIGEga2V5IG9uZSEgSXQmIzM5O3MgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIHZlcnkgbGlrZWx5IGEgaG90LXBhdGggZnVuY3Rpb24uIEhpZ2ggcGVyZm9ybWFuY2UsIHJpZ2h0IGluIHRoZSBuZXR3b3JrIGRhdGEgcGF0aC4gYF9fdHVuX3dha2VfcXVldWVgLi4uIHllYWgsIHRoYXQgY291bGQgYWxzbyBiZSBwZXJmb3JtYW5jZSBjcml0aWNhbCwgZGVwZW5kaW5nIG9uIGhvdyBvZnRlbiBpdCYjMzk7cyBnZXR0aW5nIGNhbGxlZC4gSXQgbWlnaHQgYmUgaW4gYSBidXN5IGxvb3Agc2l0dWF0aW9uLiBCdXQgYHR1bl9zZXRfaWZmYCwgbm9wZSwgdGhhdCYjMzk7cyBhbiBpb2N0bCBoYW5kbGVyLiBJdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlLCBjb21wYXJlZCB0byB0aGUgb3RoZXIgdHdvLgoKU28sIHNpbmNlIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYSBwZXJmb3JtYW5jZSBpc3N1ZSwgSSYjMzk7bSBnb2luZyB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgX190dW5fd2FrZV9xdWV1ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBmcmVxdWVudGx5IGl0IGlzIGdldHRpbmcgY2FsbGVkLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IGlmIGl0IGlzIGEgaG90LXBhdGggZnVuY3Rpb24gd2l0aG91dCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDExOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdHVuX3dha2VfcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90dW4uYz0xMDE0PXN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC90dW4uYy0xMDg0LVx0XHRuZXRpZl90eF9zdG9wX3F1ZXVlKHF1ZXVlKTtcbmRyaXZlcnMvbmV0L3R1bi5jOjEwODU6XHRcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xuZHJpdmVycy9uZXQvdHVuLmMtMTA4Ni1cdFx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbi0tXG5kcml2ZXJzL25ldC90dW4uYz0yMDY4PXN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxNTItLyogQ2FsbGVycyBtdXN0IGhvbGQgcmluZy5jb25zdW1lcl9sb2NrICovXG5kcml2ZXJzL25ldC90dW4uYzoyMTUzOnN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbmRyaXZlcnMvbmV0L3R1bi5jLTIxNTQtXHRcdFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MjE3NT1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTIxODEtXHRpZiAocHRyKVxuZHJpdmVycy9uZXQvdHVuLmM6MjE4MjpcdFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTIxODMtXG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MzgyOT12b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMzg0NC1cdGlmICh0dW4pXG5kcml2ZXJzL25ldC90dW4uYzozODQ1Olx0XHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTtcbmRyaXZlcnMvbmV0L3R1bi5jLTM4NDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTE6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM2OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgQm90dGxlbmVjayBpbiB0aGUgVFVOIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaXNzdWVzIHdpdGhpbiB0aGUgVFVOIGRyaXZlci4gTXkgY3VycmVudCBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgYSBib3R0bGVuZWNrIG9yIGFyZWEgZm9yIG9wdGltaXphdGlvbiBhcm91bmQgYHR1bl93YWtlX3F1ZXVlYCwgYXMgaXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgdHVuX3JpbmdfY29uc3VtZWAgYW5kLCBjcml0aWNhbGx5LCBmcm9tIGl0c2VsZi4gYHR1bl9yaW5nX2NvbnN1bWVgIGlzIGNhbGxlZCBkdXJpbmcgcmVhZCBvcGVyYXRpb25zLCB3aGljaCBJIGtub3cgaXMgYSBob3QgcGF0aCBvbiBhbnkgbmV0d29yayBpbnRlcmZhY2UuIFRoaXMgbWFrZXMgYHR1bl93YWtlX3F1ZXVlYCBhbmQgdGhlIGZ1bmN0aW9uIGl0IGNhbGxzLCB0aGUgcGxhY2UgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBHaXZlbiB0aGVzZSBjb25uZWN0aW9ucywgYHR1bl9zZXRfaWZmYCBpcyBsaWtlbHkgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbi4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIGFuIGBpb2N0bGAgb3BlcmF0aW9uIHNpbmNlIHRoaXMgaXMgd2hlcmUgdGhpbmdzIHdpbGwgbGlrZWx5IGhhdmUgdGhlIGJpZ2dlc3QgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dW5fc2V0X2lmZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jPTI3NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdHVuX2F0dHJfZ3JvdXAgPSB7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMjc2Ny1cbmRyaXZlcnMvbmV0L3R1bi5jOjI3Njg6c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbmRyaXZlcnMvbmV0L3R1bi5jLTI3Njkte1xuLS1cbmRyaXZlcnMvbmV0L3R1bi5jPTMxMjc9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvbmV0L3R1bi5jLTMxNzQtXG5kcml2ZXJzL25ldC90dW4uYzozMTc1Olx0XHRyZXQgPSB0dW5fc2V0X2lmZihuZXQsIGZpbGUsIFx1MDAyNmlmcik7XG5kcml2ZXJzL25ldC90dW4uYy0zMTc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxMTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODY0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHR1bl9zZXRfaWZmYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgdHVuX3NldF9pZmZgICppcyogY2FsbGVkIGZyb20gYF9fdHVuX2Nocl9pb2N0bGAsIGFuZCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgaXQmIzM5O3MgZGVmaW5pdGVseSBub3QgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBUaGF0IG11Y2ggaXMgY2xlYXIuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlIHRoYXQgd2FzIG1vZGlmaWVkLiBPa2F5LCBhY2NvcmRpbmcgdG8gdGhlIGRpZmYsIGl0JiMzOTtzOiBgdHVuX25ldF94bWl0YCwgYF9fdHVuX3dha2VfcXVldWVgLCBhbmQgYHR1bl9zZXRfaWZmYC4gU28sIGl0IGxvb2tzIGxpa2UgYHR1bl9zZXRfaWZmYCBpcyBpbmRlZWQgdGhlIGJlc3QgZm9jdXMgZm9yIHRoaXMgcGFydGljdWxhciBpbnZlc3RpZ2F0aW9uLgoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGhvdyBgSUZGX0JBQ0tQUkVTU1VSRWAgY29tZXMgaW50byBwbGF5LiBSaWdodCwgaXQmIzM5O3MgZGVmaW5lZCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oYCBhcyBgMHgwMDgwYC4gQW5kIGl0JiMzOTtzIGFkZGVkIHRvIGBUVU5fRkVBVFVSRVNgIHdpdGhpbiBgZHJpdmVycy9uZXQvdHVuLmNgLiBUaGUga2V5IHNlZW1zIHRvIGJlIHRoYXQgYHR1bl9zZXRfaWZmYCBjaGVja3MgYHR1bi0mZ3Q7ZmxhZ3NgIGFuZCBzZXRzIGl0IGFjY29yZGluZyB0byB0aGUgYGlmci0mZ3Q7aWZyX2ZsYWdzYC4gSGFuZyBvbi4uLiByZWFkaW5nIG92ZXIgdGhhdCBibG9jayBvZiBjb2RlLi4uIGB0dW5fc2V0X2lmZmAgYWN0dWFsbHkgZG9lczoKYGBgYwoJaWYgKGlmci0mZ3Q7aWZyX2ZsYWdzICZhbXA7IElGRl9CQUNLUFJFU1NVUkUpCgkJdHVuLSZndDtmbGFncyB8PSBJRkZfQkFDS1BSRVNTVVJFOwpgYGAKV2FpdCBhIHNlY29uZCwgdGhlIGRpZmYgSSBzYXcgKmRpZG4mIzM5O3QqIGluY2x1ZGUgYHR1bl9zZXRfaWZmYCBzZXR0aW5nIGBJRkZfQkFDS1BSRVNTVVJFYC4gVGhhdCYjMzk7cyBzdHJhbmdlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBgdHVuX3NldF9pZmZgIGluIGBkcml2ZXJzL25ldC90dW4uY2AgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdC4gU29tZXRoaW5nIGZlZWxzIG9mZiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3R1bi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjg1MDpcdFxuMjg1MTpcdFx0XHRpZiAoKmlmci1cdTAwM2VpZnJfbmFtZSlcbjI4NTI6XHRcdFx0XHRuYW1lID0gaWZyLVx1MDAzZWlmcl9uYW1lO1xuMjg1MzpcdFxuMjg1NDpcdFx0XHRkZXYgPSBhbGxvY19uZXRkZXZfbXFzKHNpemVvZihzdHJ1Y3QgdHVuX3N0cnVjdCksIG5hbWUsXG4yODU1Olx0XHRcdFx0XHQgICAgICAgTkVUX05BTUVfVU5LTk9XTiwgdHVuX3NldHVwLCBxdWV1ZXMsXG4yODU2Olx0XHRcdFx0XHQgICAgICAgcXVldWVzKTtcbjI4NTc6XHRcbjI4NTg6XHRcdFx0aWYgKCFkZXYpXG4yODU5Olx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yODYwOlx0XG4yODYxOlx0XHRcdGRldl9uZXRfc2V0KGRldiwgbmV0KTtcbjI4NjI6XHRcdFx0ZGV2LVx1MDAzZXJ0bmxfbGlua19vcHMgPSBcdTAwMjZ0dW5fbGlua19vcHM7XG4yODYzOlx0XHRcdGRldi1cdTAwM2VpZmluZGV4ID0gdGZpbGUtXHUwMDNlaWZpbmRleDtcbjI4NjQ6XHRcdFx0ZGV2LVx1MDAzZXN5c2ZzX2dyb3Vwc1swXSA9IFx1MDAyNnR1bl9hdHRyX2dyb3VwO1xuMjg2NTpcdFxuMjg2NjpcdFx0XHR0dW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuMjg2NzpcdFx0XHR0dW4tXHUwMDNlZGV2ID0gZGV2O1xuMjg2ODpcdFx0XHR0dW4tXHUwMDNlZmxhZ3MgPSBmbGFncztcbjI4Njk6XHRcdFx0dHVuLVx1MDAzZXR4Zmx0LmNvdW50ID0gMDtcbjI4NzA6XHRcdFx0dHVuLVx1MDAzZXZuZXRfaGRyX3N6ID0gc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcik7XG4yODcxOlx0XG4yODcyOlx0XHRcdHR1bi1cdTAwM2VhbGlnbiA9IE5FVF9TS0JfUEFEO1xuMjg3MzpcdFx0XHR0dW4tXHUwMDNlZmlsdGVyX2F0dGFjaGVkID0gZmFsc2U7XG4yODc0Olx0XHRcdHR1bi1cdTAwM2VzbmRidWYgPSB0ZmlsZS1cdTAwM2Vzb2NrZXQuc2stXHUwMDNlc2tfc25kYnVmO1xuMjg3NTpcdFx0XHR0dW4tXHUwMDNlcnhfYmF0Y2hlZCA9IDA7XG4yODc2Olx0XHRcdFJDVV9JTklUX1BPSU5URVIodHVuLVx1MDAzZXN0ZWVyaW5nX3Byb2csIE5VTEwpO1xuMjg3NzpcdFxuMjg3ODpcdFx0XHR0dW4tXHUwMDNlaWZyID0gaWZyO1xuMjg3OTpcdFx0XHR0dW4tXHUwMDNlZmlsZSA9IGZpbGU7XG4yODgwOlx0XG4yODgxOlx0XHRcdHR1bl9uZXRfaW5pdGlhbGl6ZShkZXYpO1xuMjg4MjpcdFxuMjg4MzpcdFx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UodHVuLVx1MDAzZWRldik7XG4yODg0Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjI4ODU6XHRcdFx0XHRmcmVlX25ldGRldihkZXYpO1xuMjg4NjpcdFx0XHRcdHJldHVybiBlcnI7XG4yODg3Olx0XHRcdH1cbjI4ODg6XHRcdFx0LyogZnJlZV9uZXRkZXYoKSB3b24mIzM5O3QgY2hlY2sgcmVmY250LCB0byBhdm9pZCByYWNlXG4yODg5Olx0XHRcdCAqIHdpdGggZGV2X3B1dCgpIHdlIG5lZWQgcHVibGlzaCB0dW4gYWZ0ZXIgcmVnaXN0cmF0aW9uLlxuMjg5MDpcdFx0XHQgKi9cbjI4OTE6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRmaWxlLVx1MDAzZXR1biwgdHVuKTtcbjI4OTI6XHRcdH1cbjI4OTM6XHRcbjI4OTQ6XHRcdGlmIChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfTk9fQ0FSUklFUilcbjI4OTU6XHRcdFx0bmV0aWZfY2Fycmllcl9vZmYodHVuLVx1MDAzZWRldik7XG4yODk2Olx0XHRlbHNlXG4yODk3Olx0XHRcdG5ldGlmX2NhcnJpZXJfb24odHVuLVx1MDAzZWRldik7XG4yODk4Olx0XG4yODk5Olx0XHQvKiBNYWtlIHN1cmUgcGVyc2lzdGVudCBkZXZpY2VzIGRvIG5vdCBnZXQgc3R1Y2sgaW5cbjI5MDA6XHRcdCAqIHhvZmYgc3RhdGUuXG4yOTAxOlx0XHQgKi9cbjI5MDI6XHRcdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cdTAwM2VkZXYpKSB7XG4yOTAzOlx0XHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyB0dW4tXHUwMDNlbnVtcXVldWVzOyBpJiM0MzsmIzQzOykge1xuMjkwNDpcdFx0XHRcdHN0cnVjdCB0dW5fZmlsZSAqaV90ZmlsZTtcbjI5MDU6XHRcbjI5MDY6XHRcdFx0XHRpX3RmaWxlID0gcnRubF9kZXJlZmVyZW5jZSh0dW4tXHUwMDNldGZpbGVzW2ldKTtcbjI5MDc6XHRcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aV90ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuMjkwODpcdFx0XHRcdHNwaW5fbG9jayhcdTAwMjZpX3RmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4yOTA5Olx0XHRcdFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXHUwMDNlZGV2LCBpX3RmaWxlLVx1MDAzZXF1ZXVlX2luZGV4KTtcbjI5MTA6XHRcdFx0XHRpX3RmaWxlLVx1MDAzZWNvbnNfY250ID0gMDtcbjI5MTE6XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpX3RmaWxlLVx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XG4yOTEyOlx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aV90ZmlsZS1cdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xuMjkxMzpcdFx0XHR9XG4yOTE0Olx0XHR9XG4yOTE1Olx0XG4yOTE2Olx0XHRzdHJzY3B5KGlmci1cdTAwM2VpZnJfbmFtZSwgdHVuLVx1MDAzZWRldi1cdTAwM2VuYW1lKTtcbjI5MTc6XHRcdHJldHVybiAwO1xuMjkxODpcdH1cbjI5MTk6XHRcbjI5MjA6XHRzdGF0aWMgdm9pZCB0dW5fZ2V0X2lmZihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbjI5MjE6XHR7XG4yOTIyOlx0XHRzdHJzY3B5KGlmci1cdTAwM2VpZnJfbmFtZSwgdHVuLVx1MDAzZWRldi1cdTAwM2VuYW1lKTtcbjI5MjM6XHRcbjI5MjQ6XHRcdGlmci1cdTAwM2VpZnJfZmxhZ3MgPSB0dW5fZmxhZ3ModHVuKTtcbjI5MjU6XHRcbjI5MjY6XHR9XG4yOTI3Olx0XG4yOTI4Olx0I2RlZmluZSBQTEFJTl9HU08gKE5FVElGX0ZfR1NPX1VEUF9MNCB8IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KVxuMjkyOTpcdFxuMjkzMDpcdC8qIFRoaXMgaXMgbGlrZSBhIGN1dC1kb3duIGV0aHRvb2wgb3BzLCBleGNlcHQgZG9uZSB2aWEgdHVuIGZkIHNvIG5vXG4yOTMxOlx0ICogcHJpdnMgcmVxdWlyZWQuICovXG4yOTMyOlx0c3RhdGljIGludCBzZXRfb2ZmbG9hZChzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCB1bnNpZ25lZCBsb25nIGFyZylcbjI5MzM6XHR7XG4yOTM0Olx0XHRuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyA9IDA7XG4yOTM1Olx0XG4yOTM2Olx0XHRpZiAoYXJnIFx1MDAyNiBUVU5fRl9DU1VNKSB7XG4yOTM3Olx0XHRcdGZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTtcbjI5Mzg6XHRcdFx0YXJnIFx1MDAyNj0gflRVTl9GX0NTVU07XG4yOTM5Olx0XG4yOTQwOlx0XHRcdGlmIChhcmcgXHUwMDI2IChUVU5fRl9UU080fFRVTl9GX1RTTzYpKSB7XG4yOTQxOlx0XHRcdFx0aWYgKGFyZyBcdTAwMjYgVFVOX0ZfVFNPX0VDTikge1xuMjk0MjpcdFx0XHRcdFx0ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU09fRUNOO1xuMjk0MzpcdFx0XHRcdFx0YXJnIFx1MDAyNj0gflRVTl9GX1RTT19FQ047XG4yOTQ0Olx0XHRcdFx0fVxuMjk0NTpcdFx0XHRcdGlmIChhcmcgXHUwMDI2IFRVTl9GX1RTTzQpXG4yOTQ2Olx0XHRcdFx0XHRmZWF0dXJlcyB8PSBORVRJRl9GX1RTTztcbjI5NDc6XHRcdFx0XHRpZiAoYXJnIFx1MDAyNiBUVU5fRl9UU082KVxuMjk0ODpcdFx0XHRcdFx0ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082O1xuMjk0OTpcdFx0XHRcdGFyZyBcdTAwMjY9IH4oVFVOX0ZfVFNPNHxUVU5fRl9UU082KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTE6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIFR1bm5lbCBJbnRlcmZhY2UgRmxhZyBBc3NpZ25tZW50KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHR1bi0mZ3Q7ZmxhZ3MgPSBmbGFncztgIHNwZWNpZmljYWxseSB3aGVyZSB0aGF0IGBmbGFnc2AgdmFsdWUgY29tZXMgZnJvbSBpbiB0aGUgY29udGV4dCBvZiB0aGUgdHVubmVsIGRldmljZSBzZXR1cC4gVGhlIGZvY3VzIGlzIG9uIGhvdyB0aG9zZSBmbGFncyBhcmUgdWx0aW1hdGVseSBkZXJpdmVkIGZyb20gYGlmci0mZ3Q7aWZyX2ZsYWdzYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIGZsYWdzIGFyZSBiZWluZyBjb3BpZWQsIGFsdGVyZWQsIG9yIGV2ZW4gbWFza2VkIGR1cmluZyB0aGUgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcywgd2hpY2ggaXMgaGFuZGxlZCBpbiB0aGUgYHR1bl9zZXRfaWZmYCBmdW5jdGlvbi4KCkkgd2FudCB0byB0cmFjayBwcmVjaXNlbHkgd2hhdCBzZXR0aW5ncyBhcmUgYWN0dWFsbHkgbWFraW5nIGl0IG9udG8gdGhlIHR1bm5lbCBpbnRlcmZhY2UuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJpdHdpc2UgbWFuaXB1bGF0aW9ucyBoYXBwZW5pbmc/IEFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cz8gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgbW9kaWZpY2F0aW9ucyByZWxhdGl2ZSB0byB0aGUgaW5pdGlhbCB1c2VyLXNwZWNpZmllZCBpbnRlcmZhY2UgZmxhZ3Mg4oCTIGhvdyBhcmUgdGhleSBiZWluZyB0cmFuc2xhdGVkLCBvciBpZiBhbnkgc3RhbmRhcmQgZmxhZ3MgYXJlIGdldHRpbmcgaW1wbGljaXRseSBhZGRlZCBvciByZW1vdmVkPyBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbXBsZXRlIHRyYW5zZm9ybWF0aW9uIHByb2Nlc3MgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIHRoZSB0dW5uZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDExOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdHVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzY4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzY4Olx0c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcbjI3Njk6XHR7XG4yNzcwOlx0XHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xuMjc3MTpcdFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuMjc3MjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjI3NzM6XHRcdGludCBlcnI7XG4yNzc0Olx0XG4yNzc1Olx0XHRpZiAodGZpbGUtXHUwMDNlZGV0YWNoZWQpXG4yNzc2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjc3NzpcdFxuMjc3ODpcdFx0aWYgKChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfTkFQSV9GUkFHUykpIHtcbjI3Nzk6XHRcdFx0aWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKVxuMjc4MDpcdFx0XHRcdHJldHVybiAtRVBFUk07XG4yNzgxOlx0XG4yNzgyOlx0XHRcdGlmICghKGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9OQVBJKSB8fFxuMjc4MzpcdFx0XHQgICAgKGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IFRVTl9UWVBFX01BU0spICE9IElGRl9UQVApXG4yNzg0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNzg1Olx0XHR9XG4yNzg2Olx0XG4yNzg3Olx0XHRkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIGlmci1cdTAwM2VpZnJfbmFtZSk7XG4yNzg4Olx0XHRpZiAoZGV2KSB7XG4yNzg5Olx0XHRcdGlmIChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfVFVOX0VYQ0wpXG4yNzkwOlx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbjI3OTE6XHRcdFx0aWYgKChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfVFVOKSBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZW5ldGRldl9vcHMgPT0gXHUwMDI2dHVuX25ldGRldl9vcHMpXG4yNzkyOlx0XHRcdFx0dHVuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbjI3OTM6XHRcdFx0ZWxzZSBpZiAoKGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9UQVApIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlbmV0ZGV2X29wcyA9PSBcdTAwMjZ0YXBfbmV0ZGV2X29wcylcbjI3OTQ6XHRcdFx0XHR0dW4gPSBuZXRkZXZfcHJpdihkZXYpO1xuMjc5NTpcdFx0XHRlbHNlXG4yNzk2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNzk3Olx0XG4yNzk4Olx0XHRcdGlmICghIShpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfTVVMVElfUVVFVUUpICE9XG4yNzk5Olx0XHRcdCAgICAhISh0dW4tXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9NVUxUSV9RVUVVRSkpXG4yODAwOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yODAxOlx0XG4yODAyOlx0XHRcdGlmICh0dW5fbm90X2NhcGFibGUodHVuKSlcbjI4MDM6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMjgwNDpcdFx0XHRlcnIgPSBzZWN1cml0eV90dW5fZGV2X29wZW4odHVuLVx1MDAzZXNlY3VyaXR5KTtcbjI4MDU6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI4MDY6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjgwNzpcdFxuMjgwODpcdFx0XHRlcnIgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSwgaWZyLVx1MDAzZWlmcl9mbGFncyBcdTAwMjYgSUZGX05PRklMVEVSLFxuMjgwOTpcdFx0XHRcdFx0IGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9OQVBJLFxuMjgxMDpcdFx0XHRcdFx0IGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9OQVBJX0ZSQUdTLCB0cnVlKTtcbjI4MTE6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI4MTI6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjgxMzpcdFxuMjgxNDpcdFx0XHRpZiAodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfTVVMVElfUVVFVUUgXHUwMDI2XHUwMDI2XG4yODE1Olx0XHRcdCAgICAodHVuLVx1MDAzZW51bXF1ZXVlcyAmIzQzOyB0dW4tXHUwMDNlbnVtZGlzYWJsZWQgXHUwMDNlIDEpKSB7XG4yODE2Olx0XHRcdFx0LyogT25lIG9yIG1vcmUgcXVldWUgaGFzIGFscmVhZHkgYmVlbiBhdHRhY2hlZCwgbm8gbmVlZFxuMjgxNzpcdFx0XHRcdCAqIHRvIGluaXRpYWxpemUgdGhlIGRldmljZSBhZ2Fpbi5cbjI4MTg6XHRcdFx0XHQgKi9cbjI4MTk6XHRcdFx0XHRuZXRkZXZfc3RhdGVfY2hhbmdlKGRldik7XG4yODIwOlx0XHRcdFx0cmV0dXJuIDA7XG4yODIxOlx0XHRcdH1cbjI4MjI6XHRcbjI4MjM6XHRcdFx0dHVuLVx1MDAzZWZsYWdzID0gKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgflRVTl9GRUFUVVJFUykgfFxuMjgyNDpcdFx0XHRcdCAgICAgIChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBUVU5fRkVBVFVSRVMpO1xuMjgyNTpcdFxuMjgyNjpcdFx0XHRuZXRkZXZfc3RhdGVfY2hhbmdlKGRldik7XG4yODI3Olx0XHR9IGVsc2Uge1xuMjgyODpcdFx0XHRjaGFyICpuYW1lO1xuMjgyOTpcdFx0XHR1bnNpZ25lZCBsb25nIGZsYWdzID0gMDtcbjI4MzA6XHRcdFx0aW50IHF1ZXVlcyA9IGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9NVUxUSV9RVUVVRSA/XG4yODMxOlx0XHRcdFx0ICAgICBNQVhfVEFQX1FVRVVFUyA6IDE7XG4yODMyOlx0XG4yODMzOlx0XHRcdGlmICghbnNfY2FwYWJsZShuZXQtXHUwMDNldXNlcl9ucywgQ0FQX05FVF9BRE1JTikpXG4yODM0Olx0XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjI4MzU6XHRcdFx0ZXJyID0gc2VjdXJpdHlfdHVuX2Rldl9jcmVhdGUoKTtcbjI4MzY6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI4Mzc6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjgzODpcdFxuMjgzOTpcdFx0XHQvKiBTZXQgZGV2IHR5cGUgKi9cbjI4NDA6XHRcdFx0aWYgKGlmci1cdTAwM2VpZnJfZmxhZ3MgXHUwMDI2IElGRl9UVU4pIHtcbjI4NDE6XHRcdFx0XHQvKiBUVU4gZGV2aWNlICovXG4yODQyOlx0XHRcdFx0ZmxhZ3MgfD0gSUZGX1RVTjtcbjI4NDM6XHRcdFx0XHRuYW1lID0gXCYjMzQ7dHVuJWRcJiMzNDs7XG4yODQ0Olx0XHRcdH0gZWxzZSBpZiAoaWZyLVx1MDAzZWlmcl9mbGFncyBcdTAwMjYgSUZGX1RBUCkge1xuMjg0NTpcdFx0XHRcdC8qIFRBUCBkZXZpY2UgKi9cbjI4NDY6XHRcdFx0XHRmbGFncyB8PSBJRkZfVEFQO1xuMjg0NzpcdFx0XHRcdG5hbWUgPSBcJiMzNDt0YXAlZFwmIzM0OztcbjI4NDg6XHRcdFx0fSBlbHNlXG4yODQ5Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yODUwOlx0XG4yODUxOlx0XHRcdGlmICgqaWZyLVx1MDAzZWlmcl9uYW1lKVxuMjg1MjpcdFx0XHRcdG5hbWUgPSBpZnItXHUwMDNlaWZyX25hbWU7XG4yODUzOlx0XG4yODU0Olx0XHRcdGRldiA9IGFsbG9jX25ldGRldl9tcXMoc2l6ZW9mKHN0cnVjdCB0dW5fc3RydWN0KSwgbmFtZSxcbjI4NTU6XHRcdFx0XHRcdCAgICAgICBORVRfTkFNRV9VTktOT1dOLCB0dW5fc2V0dXAsIHF1ZXVlcyxcbjI4NTY6XHRcdFx0XHRcdCAgICAgICBxdWV1ZXMpO1xuMjg1NzpcdFxuMjg1ODpcdFx0XHRpZiAoIWRldilcbjI4NTk6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjI4NjA6XHRcbjI4NjE6XHRcdFx0ZGV2X25ldF9zZXQoZGV2LCBuZXQpO1xuMjg2MjpcdFx0XHRkZXYtXHUwMDNlcnRubF9saW5rX29wcyA9IFx1MDAyNnR1bl9saW5rX29wcztcbjI4NjM6XHRcdFx0ZGV2LVx1MDAzZWlmaW5kZXggPSB0ZmlsZS1cdTAwM2VpZmluZGV4O1xuMjg2NDpcdFx0XHRkZXYtXHUwMDNlc3lzZnNfZ3JvdXBzWzBdID0gXHUwMDI2dHVuX2F0dHJfZ3JvdXA7XG4yODY1Olx0XG4yODY2Olx0XHRcdHR1biA9IG5ldGRldl9wcml2KGRldik7XG4yODY3Olx0XHRcdHR1bi1cdTAwM2VkZXYgPSBkZXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDExOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTIzCgkJCQkJCQlvdXRwdXQ6IDEwOAoJCQkJCQkJdGhvdWdodHM6IDQ0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVFVOL1RBUCBCYWNrcHJlc3N1cmUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBsaW5lLCBgdHVuLSZndDtmbGFncyA9ICh0dW4tJmd0O2ZsYWdzICZhbXA7IH5UVU5fRkVBVFVSRVMpIHwgKGlmci0mZ3Q7aWZyX2ZsYWdzICZhbXA7IFRVTl9GRUFUVVJFUyk7YCBhbmQgdGhlIGluY2x1c2lvbiBvZiBgSUZGX0JBQ0tQUkVTU1VSRWAgaW50byBgVFVOX0ZFQVRVUkVTYCBpcyBrZXkuIFNvLCBgdHVuX3NldF9pZmZgIGhhbmRsZXMgdGhlIHNldHRpbmcgb2YgdGhpcyBmbGFnLCB3aGljaCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBiYWNrcHJlc3N1cmUgZnVuY3Rpb25hbGl0eS4KClRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyB0aGUgVFVOIGRldmljZSBoYW5kbGVzIGEgZnVsbCByaW5nIGJ1ZmZlci4gSW5zdGVhZCBvZiBwYWNrZXQgZHJvcHMsIGl0IGludHJvZHVjZXMgYmFja3ByZXNzdXJlIHZpYSB0aGUgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnLCBzdG9wcGluZyB0aGUgVFggcXVldWUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBmdXp6IHRoaXMuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIGB0dW5fbmV0X3htaXRgLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBiYWNrcHJlc3N1cmUgbG9naWMgaXMgKmV4ZWN1dGVkKi4gSG93ZXZlciwgdGhhdCBmdW5jdGlvbiBpcyBpbiB0aGUgaG90IHBhdGgsIHNvIEkgc2hvdWxkIGF2b2lkIGl0LiBgdHVuX3NldF9pZmZgLCBiZWluZyBhbiBgaW9jdGxgIGhhbmRsZXIsIGlzIGEgbXVjaCBiZXR0ZXIgdGFyZ2V0IGZvciBTeXprYWxsZXImIzM5O3MgZnV6emluZyBjYXBhYmlsaXRpZXMuIEl0JiMzOTtzIHRoZSBwb2ludCBvZiAqc2V0dGluZyogdGhlIGZsYWcsIGEgY2xlYW5lciBlbnRyeSBwb2ludC4KCkkgYWxzbyBjb25zaWRlcmVkIGBfX3R1bl93YWtlX3F1ZXVlYCwgYnV0IHRoYXQmIzM5O3MgY2FsbGVkIGZyb20gYHR1bl9yaW5nX2NvbnN1bWVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGB0dW5fZG9fcmVhZGAsIHNvIHRoYXQmIzM5O3MgYWxzbyBpbiBhIGhvdCBwYXRoLiBUaGVyZWZvcmUsIEkmIzM5O20gc3RpY2tpbmcgd2l0aCBgdHVuX3NldF9pZmZgLiBUaGF0JiMzOTtzIHRoZSBiZXN0IGZvY3VzIHN5bWJvbC4KCk5vdywgY29uZmlnIGRlcGVuZGVuY2llcy4gRnJvbSB3aGF0IEkgY2FuIHRlbGwsIGBDT05GSUdfVFVOYCBpcyB0aGUgb25seSByZXF1aXJlbWVudCwgYXMgYGRyaXZlcnMvbmV0L3R1bi5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfVFVOYCBpcyBzZXQuIE5vIG90aGVyIGNvbmZpZ3MgYXJlIG5lZWRlZC4gVGhlIGhlYWRlciBzeW5jIGluIGB0b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhgIGlzIGp1c3QgdGhhdCDigJMgYSBoZWFkZXIgc3luYzsgbm8gbG9naWMgaXMgcmVhbGx5IHRoZXJlLgoKT2theSwgbGV0JiMzOTtzIHN1bW1hcml6ZSBteSBmaW5kaW5nczoKCiogICBXb3J0aEZ1enppbmc6IGB0cnVlYAoqICAgRm9jdXNTeW1ib2xzOiBgWyYjMzQ7dHVuX3NldF9pZmYmIzM0O11gCiogICBFbmFibGVDb25maWdzOiBgWyYjMzQ7VFVOJiMzNDtdYAoqICAgUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIGB0dW5fbmV0X3htaXRgIGFuZCBgX190dW5fd2FrZV9xdWV1ZWAgdG8gc3RvcCB0aGUgVFggcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyBwYWNrZXRzIHdoZW4gdGhlIHJpbmcgYnVmZmVyIGlzIGZ1bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUgVFVOU0VUSUZGIGlvY3RsLiYjMzQ7CgpJIHRoaW5rIHRoYXQgY292ZXJzIGl0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTE6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RVTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R1bl9zZXRfaWZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdHVuX25ldF94bWl0IGFuZCBfX3R1bl93YWtlX3F1ZXVlIHRvIHN0b3AgdGhlIFRYIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIFRVTlNFVElGRiBpb2N0bC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHVuX3NldF9pZmYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBJRkZfQkFDS1BSRVNTVVJFIGZsYWcgZm9yIFRVTi9UQVAgZGV2aWNlcywgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiB0dW5fbmV0X3htaXQgYW5kIF9fdHVuX3dha2VfcXVldWUgdG8gc3RvcCB0aGUgVFggcXVldWUgaW5zdGVhZCBvZiBkcm9wcGluZyBwYWNrZXRzIHdoZW4gdGhlIHJpbmcgYnVmZmVyIGlzIGZ1bGwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSB0aGUgVFVOU0VUSUZGIGlvY3RsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDRUMTE6Mzk6NDQuMDMwMDEwMTEyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1MDM2MjEyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX3NldF9pZmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIHR1bl9uZXRfeG1pdCBhbmQgX190dW5fd2FrZV9xdWV1ZSB0byBzdG9wIHRoZSBUWCBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBUVU5TRVRJRkYgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjM5OjQ0LjAzMDAxOTAyMVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ4NDc3NDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWM1ZjEwZjY4MWUyODU2OWE0N2FiOGExZDM1MjllNDE3NmE0YWU5OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCA0IDExOjM5OjQzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcXG5pbmRleCA0ZDcwODdmNzI3YmU1ZS4uNTk5MjY0ODI1ZGQyMTYgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxcbkBAIC0yMDYsNiArMjA2LDIzIEBAIGVuYWJsZSBpcyB0cnVlIHdlIGVuYWJsZSBpdCwgb3RoZXJ3aXNlIHdlIGRpc2FibGUgaXQ6OlxcbiAgICAgICByZXR1cm4gaW9jdGwoZmQsIFRVTlNFVFFVRVVFLCAodm9pZCAqKVxcdTAwMjZpZnIpO1xcbiAgIH1cXG4gXFxuKzMuNCBxZGlzYyBiYWNrcHJlc3N1cmVcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitcXG4rU3RhcnRpbmcgd2l0aCBMaW51eCA3LjIsIElGRl9CQUNLUFJFU1NVUkUgY2FuIGJlIHNldCB0byBlbmFibGUgcWRpc2NcXG4rYmFja3ByZXNzdXJlLiBXaXRob3V0IGl0LCBUWCBkcm9wcyBvY2N1ciB3aGVuIHRoZSBpbnRlcm5hbCByaW5nIGJ1ZmZlciBpc1xcbitmdWxsLiBXaXRoIGl0LCB0aGUga2VybmVsIHN0b3BzIHRoZSBUWCBxdWV1ZSBpbnN0ZWFkLCBsZXR0aW5nIHRoZSBxZGlzY1xcbitob2xkIHBhY2tldHMuIERyb3BzIG9ubHkgb2NjdXIgYXMgYSByYXJlIHJhY2UuIFRoaXMgY2FuIGJlbmVmaXQgcHJvdG9jb2xzXFxuK2xpa2UgVENQIHRoYXQgcmVhY3QgdG8gZHJvcHMuIEJhY2twcmVzc3VyZSByZXF1aXJlcyBhIHFkaXNjIHRvIGJlXFxuK2F0dGFjaGVkIGFuZCBoYXMgbm8gZWZmZWN0IHdpdGggbm9xdWV1ZS5cXG4rXFxuK1RoZSBUVU4vVEFQIHJpbmcgYnVmZmVyIHNpemUgY2FuIGJlIHJlZHVjZWQgYWxvbmdzaWRlIHRoaXMgZmxhZyB0b1xcbitmdXJ0aGVyIHNoaWZ0IGJ1ZmZlcmluZyBpbnRvIHRoZSBxZGlzYyBhbmQgcmVkdWNlIGJ1ZmZlcmJsb2F0LCBidXQgY29tZXNcXG4rYXQgcG9zc2libGUgcGVyZm9ybWFuY2UgY29zdC5cXG4rXFxuK1doZW4gcnVubmluZyBtdWx0aXBsZSBuZXR3b3JrIHN0cmVhbXMgaW4gcGFyYWxsZWwsIHRoZSBmbGFnIG1heSByZWR1Y2VcXG4rcGVyZm9ybWFuY2UgZHVlIHRvIHRoZSBleHRyYSBvdmVyaGVhZCBvZiB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbS5cXG4rXFxuIFVuaXZlcnNhbCBUVU4vVEFQIGRldmljZSBkcml2ZXIgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvblxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmNcXG5pbmRleCBmZmJlNmYxM2ZiMWZhMi4uM2JmOGE3M2EwODE2MmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvdHVuLmNcXG4rKysgYi9kcml2ZXJzL25ldC90dW4uY1xcbkBAIC05OCw3ICs5OCw4IEBAIHN0YXRpYyB2b2lkIHR1bl9kZWZhdWx0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuICNkZWZpbmUgVFVOX0ZBU1lOQ1xcdElGRl9BVFRBQ0hfUVVFVUVcXG4gXFxuICNkZWZpbmUgVFVOX0ZFQVRVUkVTIChJRkZfTk9fUEkgfCBJRkZfT05FX1FVRVVFIHwgSUZGX1ZORVRfSERSIHwgXFxcXFxcbi1cXHRcXHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTKVxcbitcXHRcXHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXFxcXFxcbitcXHRcXHQgICAgICBJRkZfQkFDS1BSRVNTVVJFKVxcbiBcXG4gI2RlZmluZSBHT09EQ09QWV9MRU4gMTI4XFxuIFxcbkBAIC0xMDc3LDcgKzEwNzgsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiBcXHRzcGluX2xvY2soXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xcbiBcXHRyZXQgPSBfX3B0cl9yaW5nX3Byb2R1Y2UoXFx1MDAyNnRmaWxlLVxcdTAwM2V0eF9yaW5nLCBza2IpO1xcbi1cXHRpZiAoIXFkaXNjX3R4cV9oYXNfbm9fcXVldWUocXVldWUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmICgodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIF9fcHRyX3JpbmdfY2hlY2tfcHJvZHVjZShcXHUwMDI2dGZpbGUtXFx1MDAzZXR4X3JpbmcpID09IC1FTk9TUEMpIHtcXG4gXFx0XFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XFxuIFxcdFxcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xcbkBAIC0yMTUxLDggKzIxNTMsMTIgQEAgc3RhdGljIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuIHN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXFxuIHtcXG4tXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0dGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4rXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbitcXG4rXFx0aWYgKCEodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9CQUNLUFJFU1NVUkUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHR1bi1cXHUwMDNlZGV2LCB0ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbiBcXG4gXFx0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xcbiBcXHRzbXBfbWIoKTtcXG5AQCAtMjg5Myw4ICsyODk5LDE5IEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXFxuIFxcdC8qIE1ha2Ugc3VyZSBwZXJzaXN0ZW50IGRldmljZXMgZG8gbm90IGdldCBzdHVjayBpblxcbiBcXHQgKiB4b2ZmIHN0YXRlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVxcdTAwM2VkZXYpKVxcbi1cXHRcXHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXModHVuLVxcdTAwM2VkZXYpO1xcbitcXHRpZiAobmV0aWZfcnVubmluZyh0dW4tXFx1MDAzZWRldikpIHtcXG4rXFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB0dW4tXFx1MDAzZW51bXF1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB0dW5fZmlsZSAqaV90ZmlsZTtcXG4rXFxuK1xcdFxcdFxcdGlfdGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cXHUwMDNldGZpbGVzW2ldKTtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpX3RmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbitcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlfdGZpbGUtXFx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XFxuK1xcdFxcdFxcdG5ldGlmX3dha2Vfc3VicXVldWUodHVuLVxcdTAwM2VkZXYsIGlfdGZpbGUtXFx1MDAzZXF1ZXVlX2luZGV4KTtcXG4rXFx0XFx0XFx0aV90ZmlsZS1cXHUwMDNlY29uc19jbnQgPSAwO1xcbitcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aV90ZmlsZS1cXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlfdGZpbGUtXFx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0c3Ryc2NweShpZnItXFx1MDAzZWlmcl9uYW1lLCB0dW4tXFx1MDAzZWRldi1cXHUwMDNlbmFtZSk7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcXG5pbmRleCA3OWQ1M2M3YTFlYmRjNS4uNzNhNzcxNDEzMTVjN2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuQEAgLTY5LDYgKzY5LDcgQEBcXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1xcdDB4MDAyMFxcbiAvKiBVc2VkIGluIFRVTlNFVElGRiB0byBicmluZyB1cCB0dW4vdGFwIHdpdGhvdXQgY2FycmllciAqL1xcbiAjZGVmaW5lIElGRl9OT19DQVJSSUVSXFx0MHgwMDQwXFxuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVxcdDB4MDA4MFxcbiAjZGVmaW5lIElGRl9OT19QSVxcdDB4MTAwMFxcbiAvKiBUaGlzIGZsYWcgaGFzIG5vIHJlYWwgZWZmZWN0ICovXFxuICNkZWZpbmUgSUZGX09ORV9RVUVVRVxcdDB4MjAwMFxcbmRpZmYgLS1naXQgYS90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmggYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcXG5pbmRleCAyZWMwN2RlMWQ3M2JlNC4uOTdiNjcwZjViYzBhMzUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuKysrIGIvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXFxuQEAgLTY3LDYgKzY3LDcgQEBcXG4gI2RlZmluZSBJRkZfVEFQXFx0XFx0MHgwMDAyXFxuICNkZWZpbmUgSUZGX05BUElcXHQweDAwMTBcXG4gI2RlZmluZSBJRkZfTkFQSV9GUkFHU1xcdDB4MDAyMFxcbisjZGVmaW5lIElGRl9CQUNLUFJFU1NVUkVcXHQweDAwODBcXG4gI2RlZmluZSBJRkZfTk9fUElcXHQweDEwMDBcXG4gLyogVGhpcyBmbGFnIGhhcyBubyByZWFsIGVmZmVjdCAqL1xcbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcXHQweDIwMDBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTE6Mzk6NDQuMzc5MjM2MTc5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE1NDM4NDk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUVU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0dW5fc2V0X2lmZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgdHVuX25ldF94bWl0IGFuZCBfX3R1bl93YWtlX3F1ZXVlIHRvIHN0b3AgdGhlIFRYIHF1ZXVlIGluc3RlYWQgb2YgZHJvcHBpbmcgcGFja2V0cyB3aGVuIHRoZSByaW5nIGJ1ZmZlciBpcyBmdWxsLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgdGhlIFRVTlNFVElGRiBpb2N0bC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1YzVmMTBmNjgxZTI4NTY5YTQ3YWI4YTFkMzUyOWU0MTc2YTRhZTk4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgNCAxMTozOTo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC5yc3RcbmluZGV4IDRkNzA4N2Y3MjdiZTVlLi41OTkyNjQ4MjVkZDIxNiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdHVudGFwLnJzdFxuQEAgLTIwNiw2ICsyMDYsMjMgQEAgZW5hYmxlIGlzIHRydWUgd2UgZW5hYmxlIGl0LCBvdGhlcndpc2Ugd2UgZGlzYWJsZSBpdDo6XG4gICAgICAgcmV0dXJuIGlvY3RsKGZkLCBUVU5TRVRRVUVVRSwgKHZvaWQgKilcdTAwMjZpZnIpO1xuICAgfVxuIFxuKzMuNCBxZGlzYyBiYWNrcHJlc3N1cmVcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rU3RhcnRpbmcgd2l0aCBMaW51eCA3LjIsIElGRl9CQUNLUFJFU1NVUkUgY2FuIGJlIHNldCB0byBlbmFibGUgcWRpc2NcbitiYWNrcHJlc3N1cmUuIFdpdGhvdXQgaXQsIFRYIGRyb3BzIG9jY3VyIHdoZW4gdGhlIGludGVybmFsIHJpbmcgYnVmZmVyIGlzXG4rZnVsbC4gV2l0aCBpdCwgdGhlIGtlcm5lbCBzdG9wcyB0aGUgVFggcXVldWUgaW5zdGVhZCwgbGV0dGluZyB0aGUgcWRpc2Ncbitob2xkIHBhY2tldHMuIERyb3BzIG9ubHkgb2NjdXIgYXMgYSByYXJlIHJhY2UuIFRoaXMgY2FuIGJlbmVmaXQgcHJvdG9jb2xzXG4rbGlrZSBUQ1AgdGhhdCByZWFjdCB0byBkcm9wcy4gQmFja3ByZXNzdXJlIHJlcXVpcmVzIGEgcWRpc2MgdG8gYmVcbithdHRhY2hlZCBhbmQgaGFzIG5vIGVmZmVjdCB3aXRoIG5vcXVldWUuXG4rXG4rVGhlIFRVTi9UQVAgcmluZyBidWZmZXIgc2l6ZSBjYW4gYmUgcmVkdWNlZCBhbG9uZ3NpZGUgdGhpcyBmbGFnIHRvXG4rZnVydGhlciBzaGlmdCBidWZmZXJpbmcgaW50byB0aGUgcWRpc2MgYW5kIHJlZHVjZSBidWZmZXJibG9hdCwgYnV0IGNvbWVzXG4rYXQgcG9zc2libGUgcGVyZm9ybWFuY2UgY29zdC5cbitcbitXaGVuIHJ1bm5pbmcgbXVsdGlwbGUgbmV0d29yayBzdHJlYW1zIGluIHBhcmFsbGVsLCB0aGUgZmxhZyBtYXkgcmVkdWNlXG4rcGVyZm9ybWFuY2UgZHVlIHRvIHRoZSBleHRyYSBvdmVyaGVhZCBvZiB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbS5cbitcbiBVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25cbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jXG5pbmRleCBmZmJlNmYxM2ZiMWZhMi4uM2JmOGE3M2EwODE2MmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC90dW4uY1xuKysrIGIvZHJpdmVycy9uZXQvdHVuLmNcbkBAIC05OCw3ICs5OCw4IEBAIHN0YXRpYyB2b2lkIHR1bl9kZWZhdWx0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gI2RlZmluZSBUVU5fRkFTWU5DXHRJRkZfQVRUQUNIX1FVRVVFXG4gXG4gI2RlZmluZSBUVU5fRkVBVFVSRVMgKElGRl9OT19QSSB8IElGRl9PTkVfUVVFVUUgfCBJRkZfVk5FVF9IRFIgfCBcXFxuLVx0XHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTKVxuK1x0XHQgICAgICBJRkZfTVVMVElfUVVFVUUgfCBJRkZfTkFQSSB8IElGRl9OQVBJX0ZSQUdTIHwgXFxcbitcdFx0ICAgICAgSUZGX0JBQ0tQUkVTU1VSRSlcbiBcbiAjZGVmaW5lIEdPT0RDT1BZX0xFTiAxMjhcbiBcbkBAIC0xMDc3LDcgKzEwNzgsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRzcGluX2xvY2soXHUwMDI2dGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbiBcdHJldCA9IF9fcHRyX3JpbmdfcHJvZHVjZShcdTAwMjZ0ZmlsZS1cdTAwM2V0eF9yaW5nLCBza2IpO1xuLVx0aWYgKCFxZGlzY190eHFfaGFzX25vX3F1ZXVlKHF1ZXVlKSBcdTAwMjZcdTAwMjZcbitcdGlmICgodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfQkFDS1BSRVNTVVJFKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcWRpc2NfdHhxX2hhc19ub19xdWV1ZShxdWV1ZSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgX19wdHJfcmluZ19jaGVja19wcm9kdWNlKFx1MDAyNnRmaWxlLVx1MDAzZXR4X3JpbmcpID09IC1FTk9TUEMpIHtcbiBcdFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XG4gXHRcdC8qIFBhaXJlZCB3aXRoIHNtcF9tYigpIGluIF9fdHVuX3dha2VfcXVldWUoKSAqL1xuQEAgLTIxNTEsOCArMjE1MywxMiBAQCBzdGF0aWMgc3NpemVfdCB0dW5fcHV0X3VzZXIoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcbiBzdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXG4gXHRcdFx0ICAgICBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlLCBpbnQgY29uc3VtZWQpXG4ge1xuLVx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh0dW4tXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdHRmaWxlLVx1MDAzZXF1ZXVlX2luZGV4KTtcbitcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbitcbitcdGlmICghKHR1bi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX0JBQ0tQUkVTU1VSRSkpXG4rXHRcdHJldHVybjtcbitcbitcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUodHVuLVx1MDAzZWRldiwgdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuIFxuIFx0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xuIFx0c21wX21iKCk7XG5AQCAtMjg5Myw4ICsyODk5LDE5IEBAIHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXG4gXHQvKiBNYWtlIHN1cmUgcGVyc2lzdGVudCBkZXZpY2VzIGRvIG5vdCBnZXQgc3R1Y2sgaW5cbiBcdCAqIHhvZmYgc3RhdGUuXG4gXHQgKi9cbi1cdGlmIChuZXRpZl9ydW5uaW5nKHR1bi1cdTAwM2VkZXYpKVxuLVx0XHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXModHVuLVx1MDAzZWRldik7XG4rXHRpZiAobmV0aWZfcnVubmluZyh0dW4tXHUwMDNlZGV2KSkge1xuK1x0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdHVuLVx1MDAzZW51bXF1ZXVlczsgaSsrKSB7XG4rXHRcdFx0c3RydWN0IHR1bl9maWxlICppX3RmaWxlO1xuK1xuK1x0XHRcdGlfdGZpbGUgPSBydG5sX2RlcmVmZXJlbmNlKHR1bi1cdTAwM2V0ZmlsZXNbaV0pO1xuK1x0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZpX3RmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4rXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmlfdGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcdFx0XHRuZXRpZl93YWtlX3N1YnF1ZXVlKHR1bi1cdTAwM2VkZXYsIGlfdGZpbGUtXHUwMDNlcXVldWVfaW5kZXgpO1xuK1x0XHRcdGlfdGZpbGUtXHUwMDNlY29uc19jbnQgPSAwO1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlfdGZpbGUtXHUwMDNldHhfcmluZy5wcm9kdWNlcl9sb2NrKTtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpX3RmaWxlLVx1MDAzZXR4X3JpbmcuY29uc3VtZXJfbG9jayk7XG4rXHRcdH1cbitcdH1cbiBcbiBcdHN0cnNjcHkoaWZyLVx1MDAzZWlmcl9uYW1lLCB0dW4tXHUwMDNlZGV2LVx1MDAzZW5hbWUpO1xuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG5pbmRleCA3OWQ1M2M3YTFlYmRjNS4uNzNhNzcxNDEzMTVjN2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuQEAgLTY5LDYgKzY5LDcgQEBcbiAjZGVmaW5lIElGRl9OQVBJX0ZSQUdTXHQweDAwMjBcbiAvKiBVc2VkIGluIFRVTlNFVElGRiB0byBicmluZyB1cCB0dW4vdGFwIHdpdGhvdXQgY2FycmllciAqL1xuICNkZWZpbmUgSUZGX05PX0NBUlJJRVJcdDB4MDA0MFxuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaCBiL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaFxuaW5kZXggMmVjMDdkZTFkNzNiZTQuLjk3YjY3MGY1YmMwYTM1IDEwMDY0NFxuLS0tIGEvdG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bi5oXG4rKysgYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVuLmhcbkBAIC02Nyw2ICs2Nyw3IEBAXG4gI2RlZmluZSBJRkZfVEFQXHRcdDB4MDAwMlxuICNkZWZpbmUgSUZGX05BUElcdDB4MDAxMFxuICNkZWZpbmUgSUZGX05BUElfRlJBR1NcdDB4MDAyMFxuKyNkZWZpbmUgSUZGX0JBQ0tQUkVTU1VSRVx0MHgwMDgwXG4gI2RlZmluZSBJRkZfTk9fUElcdDB4MTAwMFxuIC8qIFRoaXMgZmxhZyBoYXMgbm8gcmVhbCBlZmZlY3QgKi9cbiAjZGVmaW5lIElGRl9PTkVfUVVFVUVcdDB4MjAwMFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTE6Mzk6NDQuMzc5MjM3ODQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4NTYzMjA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBUVU4vVEFQIFBhdGNoKipcblxuQWxyaWdodCwgc28gd2UndmUgZ290IGEgcGF0Y2ggaGl0dGluZyBteSBkZXNrLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIHRvdWNoaW5nIGNvcmUgVFVOL1RBUCBpbmZyYXN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIHRvIGBkcml2ZXJzL25ldC90dW4uY2AsIHRoZSBkb2N1bWVudGF0aW9uIGluIGB0dW50YXAucnN0YCwgYW5kIHRoZSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGhlYWRlciBgaWZfdHVuLmhgLiBJbW1lZGlhdGVseSwgbXkgc3BpZGV5LXNlbnNlIHRpbmdsZXM7IGFueSBtb2RpZmljYXRpb24gdG8gdGhvc2UgZmlsZXMgaGFzIHRoZSBwb3RlbnRpYWwgZm9yIHNpZ25pZmljYW50IGltcGFjdC4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGBJRkZfQkFDS1BSRVNTVVJFYCBmbGFnLiBUaGlzIHN1Z2dlc3RzIGEgbW9kaWZpY2F0aW9uIHRvIGhvdyBUVU4vVEFQIGludGVyZmFjZXMgaGFuZGxlIGZsb3cgY29udHJvbCBvciBjb25nZXN0aW9uLiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzIGluIGB0dW5fbmV0X3htaXRgLCBgX190dW5fd2FrZV9xdWV1ZWAsIGFuZCBgdHVuX3NldF9pZmZgLiBGdW5jdGlvbmFsaXR5IGFuZCByZWFjaGFiaWxpdHkgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgbmV0LW5ldyBmZWF0dXJlLCBvciBhbiBvcHRpbWl6YXRpb24gb2YgZXhpc3RpbmcgYmVoYXZpb3IuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkndmUgZ290IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbmV3IGZlYXR1cmUgaXMgY29udHJvbGxlZCBhdCBidWlsZCB0aW1lLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCwgdG8gZmluZCB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhpcyBmZWF0dXJlLiBMZXQncyBzZWUgd2hhdCB0dXJucyB1cCBpbiB0aGUgYnVpbGQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzg5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTE6Mzk6NDguNzY0ODcyNTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkyMzU2MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1blxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvTWFrZWZpbGU9MzE9b2JqLSQoQ09ORklHX05FVF9URUFNKSArPSB0ZWFtL1xcbmRyaXZlcnMvbmV0L01ha2VmaWxlOjMyOm9iai0kKENPTkZJR19UVU4pICs9IHR1bi5vXFxuZHJpdmVycy9uZXQvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX1RBUCkgKz0gdGFwLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZT00MT1tbHg1X2NvcmUtJChDT05GSUdfUENJX0hZUEVSVl9JTlRFUkZBQ0UpICs9IGVuL2h2X3ZoY2Ffc3RhdHMub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9NYWtlZmlsZTo0MjptbHg1X2NvcmUtJChDT05GSUdfTUxYNV9FU1dJVENIKSAgICAgKz0gbGFnL21wLm8gbGFnL3BvcnRfc2VsLm8gbGliL2dlbmV2ZS5vIGxpYi9wb3J0X3R1bi5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNDMtXFx0XFx0XFx0XFx0XFx0ZW5fcmVwLm8gZW4vcmVwL2JvbmQubyBlbi9tb2RfaGRyLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTQ1PW1seDVfY29yZS0kKENPTkZJR19NTFg1X0NMU19BQ1QpICAgICArPSBlbl90Yy5vIGVuL3JlcC90Yy5vIGVuL3JlcC9uZWlnaC5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGU6NDY6XFx0XFx0XFx0XFx0XFx0bGliL2ZzX2NoYWlucy5vIGVuL3RjX3R1bi5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNDctXFx0XFx0XFx0XFx0XFx0ZXN3L2luZGlyX3RhYmxlLm8gZW4vdGNfdHVuX2VuY2FwLm8gXFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlPTUzPW1seDVfY29yZS0kKENPTkZJR19NTFg1X0NMU19BQ1QpICAgICArPSBlbi90Yy9hY3QvYWN0Lm8gZW4vdGMvYWN0L2Ryb3AubyBlbi90Yy9hY3QvdHJhcC5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNTQtXFx0XFx0XFx0XFx0XFx0ZW4vdGMvYWN0L2FjY2VwdC5vIGVuL3RjL2FjdC9tYXJrLm8gZW4vdGMvYWN0L2dvdG8ubyBcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL01ha2VmaWxlOjU1OlxcdFxcdFxcdFxcdFxcdGVuL3RjL2FjdC90dW4ubyBlbi90Yy9hY3QvY3N1bS5vIGVuL3RjL2FjdC9wZWRpdC5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvTWFrZWZpbGUtNTYtXFx0XFx0XFx0XFx0XFx0ZW4vdGMvYWN0L3ZsYW4ubyBlbi90Yy9hY3Qvdmxhbl9tYW5nbGUubyBlbi90Yy9hY3QvbXBscy5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTA0NT1uZnBfdHVubmVsX2xvb2t1cF9vZmZsb2FkZWRfbWFjcyhzdHJ1Y3QgbmZwX2FwcCAqYXBwLCBjb25zdCB1OCAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMDQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTA0OTpcXHRyZXR1cm4gcmhhc2h0YWJsZV9sb29rdXBfZmFzdChcXHUwMDI2cHJpdi1cXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLCBtYWMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMDUwLVxcdFxcdFxcdFxcdCAgICAgIG9mZmxvYWRlZF9tYWNzX3BhcmFtcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jPTEwNzc9bmZwX3R1bm5lbF9hZGRfc2hhcmVkX21hYyhzdHJ1Y3QgbmZwX2FwcCAqYXBwLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTEyODpcXHRcXHRpZiAocmhhc2h0YWJsZV9pbnNlcnRfZmFzdChcXHUwMDI2cHJpdi1cXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTEyOS1cXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2ZW50cnktXFx1MDAzZWh0X25vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTExNTAtZXJyX3JlbW92ZV9oYXNoOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTE1MTpcXHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZwcml2LVxcdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsIFxcdTAwMjZlbnRyeS1cXHUwMDNlaHRfbm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTExNTItXFx0XFx0XFx0ICAgICAgIG9mZmxvYWRlZF9tYWNzX3BhcmFtcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jPTExNjM9bmZwX3R1bm5lbF9kZWxfc2hhcmVkX21hYyhzdHJ1Y3QgbmZwX2FwcCAqYXBwLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xMjI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTIyODpcXHRXQVJOX09OX09OQ0Uocmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2cHJpdi1cXHUwMDNldHVuLm9mZmxvYWRlZF9tYWNzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTIyOS1cXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmVudHJ5LVxcdTAwM2VodF9ub2RlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYz0xNTA3PWludCBuZnBfdHVubmVsX2NvbmZpZ19zdGFydChzdHJ1Y3QgbmZwX2FwcCAqYXBwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTEyLVxcdC8qIEluaXRpYWxpc2Ugcmhhc2ggZm9yIE1BQyBvZmZsb2FkIHRyYWNraW5nLiAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTUxMzpcXHRlcnIgPSByaGFzaHRhYmxlX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1MTQtXFx0XFx0XFx0ICAgICAgXFx1MDAyNm9mZmxvYWRlZF9tYWNzX3BhcmFtcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1MzAtXFx0aWYgKGVycikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM6MTUzMTpcXHRcXHRyaGFzaHRhYmxlX2ZyZWVfYW5kX2Rlc3Ryb3koXFx1MDAyNnByaXYtXFx1MDAzZXR1bi5vZmZsb2FkZWRfbWFjcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jLTE1MzItXFx0XFx0XFx0XFx0XFx0ICAgIG5mcF9jaGVja19yaGFzaHRhYmxlX2VtcHR5LCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmM9MTUzOT12b2lkIG5mcF90dW5uZWxfY29uZmlnX3N0b3Aoc3RydWN0IG5mcF9hcHAgKmFwcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9uZnAvZmxvd2VyL3R1bm5lbF9jb25mLmMtMTU1OC1cXHQvKiBEZXN0cm95IHJoYXNoLiBFbnRyaWVzIHNob3VsZCBiZSBjbGVhbmVkIG9uIG5ldGRldiBub3RpZmllciB1bnJlZy4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvbmZwL2Zsb3dlci90dW5uZWxfY29uZi5jOjE1NTk6XFx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2V0dW4ub2ZmbG9hZGVkX21hY3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL25mcC9mbG93ZXIvdHVubmVsX2NvbmYuYy0xNTYwLVxcdFxcdFxcdFxcdCAgICBuZnBfY2hlY2tfcmhhc2h0YWJsZV9lbXB0eSwgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjM5OjQ5LjA1NzIzODQwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjI3MTg4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUVU4gRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBjb25maWd1cmF0aW9uIGhlcmUgaXMgYENPTkZJR19UVU5gLCB0aGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBsaWtlbHkgc3VzcGVjdHMg4oCTIHRoZSBoZWFydCBvZiB0aGUgVFVOIGRyaXZlcjogYGRyaXZlcnMvbmV0L3R1bi5jYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gYW55IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiB0d2Vha2VkLiBGcm9tIGEgcXVpY2sgc2NhbiwgaXQgbG9va3MgbGlrZSBgdHVuX25ldF94bWl0YCwgYF9fdHVuX3dha2VfcXVldWVgLCBhbmQgYHR1bl9zZXRfaWZmYCBhcmUgdGhlIG9uZXMgdG8gZm9jdXMgb24uIFxuXG5IbW0sIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmbG9hdGluZyBhcm91bmQgdGhhdCBjb3VsZCBpbXBhY3QgdGhlc2UgZnVuY3Rpb25zPyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUncyBtb3JlIHRvIGNvbnNpZGVyIGhlcmUuIFJpZ2h0LCB0aGUgY29kZSBpcyB1c2luZyBgSUZGX0JBQ0tQUkVTU1VSRWAgd2l0aGluIGB0dW5fbmV0X3htaXRgLCBgX190dW5fd2FrZV9xdWV1ZWAsIGFuZCBgdHVuX3NldF9pZmZgLCB0aGF04oCZcyB0aGUgY3J1Y2lhbCBwaWVjZSB0byB0cmFjayBkb3duLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIGFyZSBnYXRpbmcgdGhlIHVzZSBvciBiZWhhdmlvciBvZiB0aGVzZSBrZXkgZnVuY3Rpb25zIGJhc2VkIG9uIHNwZWNpZmljIGNvbXBpbGUtdGltZSBmbGFncy4gVGhhdCdzIHdoZXJlIHRoZSBudWFuY2Ugb2Z0ZW4gbGllcyBpbiB0aGlzIHR5cGUgb2YgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYElGRl9CQUNLUFJFU1NVUkVgIGlzIG5vdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIG91dCwgYW5kIHNlZSBpZiBpdCBpcyB1c2VkIGFjY29yZGluZyB0byBpdHMgb3JpZ2luYWwgaW50ZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTY5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjM5OjUzLjkxOTk1OTEyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU4MTI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0dW5fbmV0X3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdHVuLmM9MTAwMT1zdGF0aWMgdW5zaWduZWQgaW50IHJ1bl9lYnBmX2ZpbHRlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMTAxMy0vKiBOZXQgZGV2aWNlIHN0YXJ0IHhtaXQgKi9cXG5kcml2ZXJzL25ldC90dW4uYzoxMDE0OnN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC90dW4uYy0xMDE1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTEyMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEyMjAtXFx0Lm5kb19zdG9wXFx0XFx0PSB0dW5fbmV0X2Nsb3NlLFxcbmRyaXZlcnMvbmV0L3R1bi5jOjEyMjE6XFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSB0dW5fbmV0X3htaXQsXFxuZHJpdmVycy9uZXQvdHVuLmMtMTIyMi1cXHQubmRvX2ZpeF9mZWF0dXJlc1xcdD0gdHVuX25ldF9maXhfZmVhdHVyZXMsXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0xMzAwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGFwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMzA0LVxcdC5uZG9fc3RvcFxcdFxcdD0gdHVuX25ldF9jbG9zZSxcXG5kcml2ZXJzL25ldC90dW4uYzoxMzA1OlxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gdHVuX25ldF94bWl0LFxcbmRyaXZlcnMvbmV0L3R1bi5jLTEzMDYtXFx0Lm5kb19maXhfZmVhdHVyZXNcXHQ9IHR1bl9uZXRfZml4X2ZlYXR1cmVzLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjE1Mz1zdGF0aWMgdm9pZCBfX3R1bl93YWtlX3F1ZXVlKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yMTYyLVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIxNjM6XFx0LyogUGFpcmVkIHdpdGggc21wX21iX19hZnRlcl9hdG9taWMoKSBpbiB0dW5fbmV0X3htaXQoKSAqL1xcbmRyaXZlcnMvbmV0L3R1bi5jLTIxNjQtXFx0c21wX21iKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjM5OjUzLjk3OTU1MDQ1MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzA2NTY2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRVTiBEcml2ZXIgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIHRoYXQgdGhleSBhcmVuJ3QgY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzLiBUaGF0J3MgZ29vZCwgbGVzcyB0byB3b3JyeSBhYm91dCBpbiB0ZXJtcyBvZiBidWlsZCBjb25maWd1cmF0aW9ucy4gVGhlIGNvbmZpZyBpcyBkZWZpbml0ZWx5IHNldCB0byBgVFVOYC5cblxuSSdtIGZvY3VzZWQgb24gYHR1bl9uZXRfeG1pdGAsIGBfX3R1bl93YWtlX3F1ZXVlYCwgYW5kIGB0dW5fc2V0X2lmZmAuIExldCdzIHNlZS4uLiBXYWl0IGEgbWludXRlLCBgdHVuX25ldF94bWl0YCDigJMgdGhhdCdzIGEga2V5IG9uZSEgSXQncyB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiwgc28gaXQncyB2ZXJ5IGxpa2VseSBhIGhvdC1wYXRoIGZ1bmN0aW9uLiBIaWdoIHBlcmZvcm1hbmNlLCByaWdodCBpbiB0aGUgbmV0d29yayBkYXRhIHBhdGguIGBfX3R1bl93YWtlX3F1ZXVlYC4uLiB5ZWFoLCB0aGF0IGNvdWxkIGFsc28gYmUgcGVyZm9ybWFuY2UgY3JpdGljYWwsIGRlcGVuZGluZyBvbiBob3cgb2Z0ZW4gaXQncyBnZXR0aW5nIGNhbGxlZC4gSXQgbWlnaHQgYmUgaW4gYSBidXN5IGxvb3Agc2l0dWF0aW9uLiBCdXQgYHR1bl9zZXRfaWZmYCwgbm9wZSwgdGhhdCdzIGFuIGlvY3RsIGhhbmRsZXIuIEl0J3Mgbm90IGdvaW5nIHRvIGJlIHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSwgY29tcGFyZWQgdG8gdGhlIG90aGVyIHR3by5cblxuU28sIHNpbmNlIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhIHBlcmZvcm1hbmNlIGlzc3VlLCBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYF9fdHVuX3dha2VfcXVldWVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZnJlcXVlbnRseSBpdCBpcyBnZXR0aW5nIGNhbGxlZCwgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8ga25vdyBpZiBpdCBpcyBhIGhvdC1wYXRoIGZ1bmN0aW9uIHdpdGhvdXQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxMTozOTo1OC41MTAyMDkzMjZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3NDIyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX190dW5fd2FrZV9xdWV1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90dW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90dW4uYz0xMDE0PXN0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jLTEwODQtXFx0XFx0bmV0aWZfdHhfc3RvcF9xdWV1ZShxdWV1ZSk7XFxuZHJpdmVycy9uZXQvdHVuLmM6MTA4NTpcXHRcXHQvKiBQYWlyZWQgd2l0aCBzbXBfbWIoKSBpbiBfX3R1bl93YWtlX3F1ZXVlKCkgKi9cXG5kcml2ZXJzL25ldC90dW4uYy0xMDg2LVxcdFxcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYz0yMDY4PXN0YXRpYyBzc2l6ZV90IHR1bl9wdXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjE1Mi0vKiBDYWxsZXJzIG11c3QgaG9sZCByaW5nLmNvbnN1bWVyX2xvY2sgKi9cXG5kcml2ZXJzL25ldC90dW4uYzoyMTUzOnN0YXRpYyB2b2lkIF9fdHVuX3dha2VfcXVldWUoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bixcXG5kcml2ZXJzL25ldC90dW4uYy0yMTU0LVxcdFxcdFxcdCAgICAgc3RydWN0IHR1bl9maWxlICp0ZmlsZSwgaW50IGNvbnN1bWVkKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MjE3NT1zdGF0aWMgdm9pZCAqdHVuX3JpbmdfY29uc3VtZShzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMjE4MS1cXHRpZiAocHRyKVxcbmRyaXZlcnMvbmV0L3R1bi5jOjIxODI6XFx0XFx0X190dW5fd2FrZV9xdWV1ZSh0dW4sIHRmaWxlLCAxKTtcXG5kcml2ZXJzL25ldC90dW4uYy0yMTgzLVxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MzgyOT12b2lkIHR1bl93YWtlX3F1ZXVlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY29uc3VtZWQpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0zODQ0LVxcdGlmICh0dW4pXFxuZHJpdmVycy9uZXQvdHVuLmM6Mzg0NTpcXHRcXHRfX3R1bl93YWtlX3F1ZXVlKHR1biwgdGZpbGUsIGNvbnN1bWVkKTtcXG5kcml2ZXJzL25ldC90dW4uYy0zODQ2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxMTozOTo1OC41NzA5NTkxODRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjM0ODAxNDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEJvdHRsZW5lY2sgaW4gdGhlIFRVTiBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpc3N1ZXMgd2l0aGluIHRoZSBUVU4gZHJpdmVyLiBNeSBjdXJyZW50IGh5cG90aGVzaXMgaXMgdGhhdCB0aGVyZSBtaWdodCBiZSBhIGJvdHRsZW5lY2sgb3IgYXJlYSBmb3Igb3B0aW1pemF0aW9uIGFyb3VuZCBgdHVuX3dha2VfcXVldWVgLCBhcyBpdCdzIGNhbGxlZCBmcm9tIGJvdGggYHR1bl9yaW5nX2NvbnN1bWVgIGFuZCwgY3JpdGljYWxseSwgZnJvbSBpdHNlbGYuIGB0dW5fcmluZ19jb25zdW1lYCBpcyBjYWxsZWQgZHVyaW5nIHJlYWQgb3BlcmF0aW9ucywgd2hpY2ggSSBrbm93IGlzIGEgaG90IHBhdGggb24gYW55IG5ldHdvcmsgaW50ZXJmYWNlLiBUaGlzIG1ha2VzIGB0dW5fd2FrZV9xdWV1ZWAgYW5kIHRoZSBmdW5jdGlvbiBpdCBjYWxscywgdGhlIHBsYWNlIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gR2l2ZW4gdGhlc2UgY29ubmVjdGlvbnMsIGB0dW5fc2V0X2lmZmAgaXMgbGlrZWx5IGEgZ29vZCBzeW1ib2wgdG8gY29uY2VudHJhdGUgb24uIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgYW4gYGlvY3RsYCBvcGVyYXRpb24gc2luY2UgdGhpcyBpcyB3aGVyZSB0aGluZ3Mgd2lsbCBsaWtlbHkgaGF2ZSB0aGUgYmlnZ2VzdCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxMTo0MDowMS44MDU3NjI1OTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDYxMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9zZXRfaWZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3R1bi5jPTI3NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdHVuX2F0dHJfZ3JvdXAgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0yNzY3LVxcbmRyaXZlcnMvbmV0L3R1bi5jOjI3Njg6c3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcilcXG5kcml2ZXJzL25ldC90dW4uYy0yNzY5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3R1bi5jPTMxMjc9c3RhdGljIGxvbmcgX190dW5fY2hyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmMtMzE3NC1cXG5kcml2ZXJzL25ldC90dW4uYzozMTc1OlxcdFxcdHJldCA9IHR1bl9zZXRfaWZmKG5ldCwgZmlsZSwgXFx1MDAyNmlmcik7XFxuZHJpdmVycy9uZXQvdHVuLmMtMzE3Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTE6NDA6MDEuODY1ODI5MzE1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTk1MjIxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdHVuX3NldF9pZmZgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHR1bl9zZXRfaWZmYCAqaXMqIGNhbGxlZCBmcm9tIGBfX3R1bl9jaHJfaW9jdGxgLCBhbmQgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGl0J3MgZGVmaW5pdGVseSBub3QgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBUaGF0IG11Y2ggaXMgY2xlYXIuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZSB0aGF0IHdhcyBtb2RpZmllZC4gT2theSwgYWNjb3JkaW5nIHRvIHRoZSBkaWZmLCBpdCdzOiBgdHVuX25ldF94bWl0YCwgYF9fdHVuX3dha2VfcXVldWVgLCBhbmQgYHR1bl9zZXRfaWZmYC4gU28sIGl0IGxvb2tzIGxpa2UgYHR1bl9zZXRfaWZmYCBpcyBpbmRlZWQgdGhlIGJlc3QgZm9jdXMgZm9yIHRoaXMgcGFydGljdWxhciBpbnZlc3RpZ2F0aW9uLlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgaG93IGBJRkZfQkFDS1BSRVNTVVJFYCBjb21lcyBpbnRvIHBsYXkuIFJpZ2h0LCBpdCdzIGRlZmluZWQgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaGAgYXMgYDB4MDA4MGAuIEFuZCBpdCdzIGFkZGVkIHRvIGBUVU5fRkVBVFVSRVNgIHdpdGhpbiBgZHJpdmVycy9uZXQvdHVuLmNgLiBUaGUga2V5IHNlZW1zIHRvIGJlIHRoYXQgYHR1bl9zZXRfaWZmYCBjaGVja3MgYHR1bi1cdTAwM2VmbGFnc2AgYW5kIHNldHMgaXQgYWNjb3JkaW5nIHRvIHRoZSBgaWZyLVx1MDAzZWlmcl9mbGFnc2AuIEhhbmcgb24uLi4gcmVhZGluZyBvdmVyIHRoYXQgYmxvY2sgb2YgY29kZS4uLiBgdHVuX3NldF9pZmZgIGFjdHVhbGx5IGRvZXM6XG5gYGBjXG5cdGlmIChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBJRkZfQkFDS1BSRVNTVVJFKVxuXHRcdHR1bi1cdTAwM2VmbGFncyB8PSBJRkZfQkFDS1BSRVNTVVJFO1xuYGBgXG5XYWl0IGEgc2Vjb25kLCB0aGUgZGlmZiBJIHNhdyAqZGlkbid0KiBpbmNsdWRlIGB0dW5fc2V0X2lmZmAgc2V0dGluZyBgSUZGX0JBQ0tQUkVTU1VSRWAuIFRoYXQncyBzdHJhbmdlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBgdHVuX3NldF9pZmZgIGluIGBkcml2ZXJzL25ldC90dW4uY2AgYW5kIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgY29ycmVjdC4gU29tZXRoaW5nIGZlZWxzIG9mZiBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODY0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjQwOjA3LjA4NTM1MzY3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdHVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI4NTA6XFx0XFxuMjg1MTpcXHRcXHRcXHRpZiAoKmlmci1cXHUwMDNlaWZyX25hbWUpXFxuMjg1MjpcXHRcXHRcXHRcXHRuYW1lID0gaWZyLVxcdTAwM2VpZnJfbmFtZTtcXG4yODUzOlxcdFxcbjI4NTQ6XFx0XFx0XFx0ZGV2ID0gYWxsb2NfbmV0ZGV2X21xcyhzaXplb2Yoc3RydWN0IHR1bl9zdHJ1Y3QpLCBuYW1lLFxcbjI4NTU6XFx0XFx0XFx0XFx0XFx0ICAgICAgIE5FVF9OQU1FX1VOS05PV04sIHR1bl9zZXR1cCwgcXVldWVzLFxcbjI4NTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHF1ZXVlcyk7XFxuMjg1NzpcXHRcXG4yODU4OlxcdFxcdFxcdGlmICghZGV2KVxcbjI4NTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjg2MDpcXHRcXG4yODYxOlxcdFxcdFxcdGRldl9uZXRfc2V0KGRldiwgbmV0KTtcXG4yODYyOlxcdFxcdFxcdGRldi1cXHUwMDNlcnRubF9saW5rX29wcyA9IFxcdTAwMjZ0dW5fbGlua19vcHM7XFxuMjg2MzpcXHRcXHRcXHRkZXYtXFx1MDAzZWlmaW5kZXggPSB0ZmlsZS1cXHUwMDNlaWZpbmRleDtcXG4yODY0OlxcdFxcdFxcdGRldi1cXHUwMDNlc3lzZnNfZ3JvdXBzWzBdID0gXFx1MDAyNnR1bl9hdHRyX2dyb3VwO1xcbjI4NjU6XFx0XFxuMjg2NjpcXHRcXHRcXHR0dW4gPSBuZXRkZXZfcHJpdihkZXYpO1xcbjI4Njc6XFx0XFx0XFx0dHVuLVxcdTAwM2VkZXYgPSBkZXY7XFxuMjg2ODpcXHRcXHRcXHR0dW4tXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuMjg2OTpcXHRcXHRcXHR0dW4tXFx1MDAzZXR4Zmx0LmNvdW50ID0gMDtcXG4yODcwOlxcdFxcdFxcdHR1bi1cXHUwMDNldm5ldF9oZHJfc3ogPSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKTtcXG4yODcxOlxcdFxcbjI4NzI6XFx0XFx0XFx0dHVuLVxcdTAwM2VhbGlnbiA9IE5FVF9TS0JfUEFEO1xcbjI4NzM6XFx0XFx0XFx0dHVuLVxcdTAwM2VmaWx0ZXJfYXR0YWNoZWQgPSBmYWxzZTtcXG4yODc0OlxcdFxcdFxcdHR1bi1cXHUwMDNlc25kYnVmID0gdGZpbGUtXFx1MDAzZXNvY2tldC5zay1cXHUwMDNlc2tfc25kYnVmO1xcbjI4NzU6XFx0XFx0XFx0dHVuLVxcdTAwM2VyeF9iYXRjaGVkID0gMDtcXG4yODc2OlxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIodHVuLVxcdTAwM2VzdGVlcmluZ19wcm9nLCBOVUxMKTtcXG4yODc3OlxcdFxcbjI4Nzg6XFx0XFx0XFx0dHVuLVxcdTAwM2VpZnIgPSBpZnI7XFxuMjg3OTpcXHRcXHRcXHR0dW4tXFx1MDAzZWZpbGUgPSBmaWxlO1xcbjI4ODA6XFx0XFxuMjg4MTpcXHRcXHRcXHR0dW5fbmV0X2luaXRpYWxpemUoZGV2KTtcXG4yODgyOlxcdFxcbjI4ODM6XFx0XFx0XFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi1cXHUwMDNlZGV2KTtcXG4yODg0OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMjg4NTpcXHRcXHRcXHRcXHRmcmVlX25ldGRldihkZXYpO1xcbjI4ODY6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yODg3OlxcdFxcdFxcdH1cXG4yODg4OlxcdFxcdFxcdC8qIGZyZWVfbmV0ZGV2KCkgd29uJ3QgY2hlY2sgcmVmY250LCB0byBhdm9pZCByYWNlXFxuMjg4OTpcXHRcXHRcXHQgKiB3aXRoIGRldl9wdXQoKSB3ZSBuZWVkIHB1Ymxpc2ggdHVuIGFmdGVyIHJlZ2lzdHJhdGlvbi5cXG4yODkwOlxcdFxcdFxcdCAqL1xcbjI4OTE6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRmaWxlLVxcdTAwM2V0dW4sIHR1bik7XFxuMjg5MjpcXHRcXHR9XFxuMjg5MzpcXHRcXG4yODk0OlxcdFxcdGlmIChpZnItXFx1MDAzZWlmcl9mbGFncyBcXHUwMDI2IElGRl9OT19DQVJSSUVSKVxcbjI4OTU6XFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYodHVuLVxcdTAwM2VkZXYpO1xcbjI4OTY6XFx0XFx0ZWxzZVxcbjI4OTc6XFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbih0dW4tXFx1MDAzZWRldik7XFxuMjg5ODpcXHRcXG4yODk5OlxcdFxcdC8qIE1ha2Ugc3VyZSBwZXJzaXN0ZW50IGRldmljZXMgZG8gbm90IGdldCBzdHVjayBpblxcbjI5MDA6XFx0XFx0ICogeG9mZiBzdGF0ZS5cXG4yOTAxOlxcdFxcdCAqL1xcbjI5MDI6XFx0XFx0aWYgKG5ldGlmX3J1bm5pbmcodHVuLVxcdTAwM2VkZXYpKSB7XFxuMjkwMzpcXHRcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHR1bi1cXHUwMDNlbnVtcXVldWVzOyBpKyspIHtcXG4yOTA0OlxcdFxcdFxcdFxcdHN0cnVjdCB0dW5fZmlsZSAqaV90ZmlsZTtcXG4yOTA1OlxcdFxcbjI5MDY6XFx0XFx0XFx0XFx0aV90ZmlsZSA9IHJ0bmxfZGVyZWZlcmVuY2UodHVuLVxcdTAwM2V0ZmlsZXNbaV0pO1xcbjI5MDc6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpX3RmaWxlLVxcdTAwM2V0eF9yaW5nLmNvbnN1bWVyX2xvY2spO1xcbjI5MDg6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpX3RmaWxlLVxcdTAwM2V0eF9yaW5nLnByb2R1Y2VyX2xvY2spO1xcbjI5MDk6XFx0XFx0XFx0XFx0bmV0aWZfd2FrZV9zdWJxdWV1ZSh0dW4tXFx1MDAzZWRldiwgaV90ZmlsZS1cXHUwMDNlcXVldWVfaW5kZXgpO1xcbjI5MTA6XFx0XFx0XFx0XFx0aV90ZmlsZS1cXHUwMDNlY29uc19jbnQgPSAwO1xcbjI5MTE6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlfdGZpbGUtXFx1MDAzZXR4X3JpbmcucHJvZHVjZXJfbG9jayk7XFxuMjkxMjpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aV90ZmlsZS1cXHUwMDNldHhfcmluZy5jb25zdW1lcl9sb2NrKTtcXG4yOTEzOlxcdFxcdFxcdH1cXG4yOTE0OlxcdFxcdH1cXG4yOTE1OlxcdFxcbjI5MTY6XFx0XFx0c3Ryc2NweShpZnItXFx1MDAzZWlmcl9uYW1lLCB0dW4tXFx1MDAzZWRldi1cXHUwMDNlbmFtZSk7XFxuMjkxNzpcXHRcXHRyZXR1cm4gMDtcXG4yOTE4OlxcdH1cXG4yOTE5OlxcdFxcbjI5MjA6XFx0c3RhdGljIHZvaWQgdHVuX2dldF9pZmYoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGlmcmVxICppZnIpXFxuMjkyMTpcXHR7XFxuMjkyMjpcXHRcXHRzdHJzY3B5KGlmci1cXHUwMDNlaWZyX25hbWUsIHR1bi1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lKTtcXG4yOTIzOlxcdFxcbjI5MjQ6XFx0XFx0aWZyLVxcdTAwM2VpZnJfZmxhZ3MgPSB0dW5fZmxhZ3ModHVuKTtcXG4yOTI1OlxcdFxcbjI5MjY6XFx0fVxcbjI5Mjc6XFx0XFxuMjkyODpcXHQjZGVmaW5lIFBMQUlOX0dTTyAoTkVUSUZfRl9HU09fVURQX0w0IHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpXFxuMjkyOTpcXHRcXG4yOTMwOlxcdC8qIFRoaXMgaXMgbGlrZSBhIGN1dC1kb3duIGV0aHRvb2wgb3BzLCBleGNlcHQgZG9uZSB2aWEgdHVuIGZkIHNvIG5vXFxuMjkzMTpcXHQgKiBwcml2cyByZXF1aXJlZC4gKi9cXG4yOTMyOlxcdHN0YXRpYyBpbnQgc2V0X29mZmxvYWQoc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgdW5zaWduZWQgbG9uZyBhcmcpXFxuMjkzMzpcXHR7XFxuMjkzNDpcXHRcXHRuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyA9IDA7XFxuMjkzNTpcXHRcXG4yOTM2OlxcdFxcdGlmIChhcmcgXFx1MDAyNiBUVU5fRl9DU1VNKSB7XFxuMjkzNzpcXHRcXHRcXHRmZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07XFxuMjkzODpcXHRcXHRcXHRhcmcgXFx1MDAyNj0gflRVTl9GX0NTVU07XFxuMjkzOTpcXHRcXG4yOTQwOlxcdFxcdFxcdGlmIChhcmcgXFx1MDAyNiAoVFVOX0ZfVFNPNHxUVU5fRl9UU082KSkge1xcbjI5NDE6XFx0XFx0XFx0XFx0aWYgKGFyZyBcXHUwMDI2IFRVTl9GX1RTT19FQ04pIHtcXG4yOTQyOlxcdFxcdFxcdFxcdFxcdGZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPX0VDTjtcXG4yOTQzOlxcdFxcdFxcdFxcdFxcdGFyZyBcXHUwMDI2PSB+VFVOX0ZfVFNPX0VDTjtcXG4yOTQ0OlxcdFxcdFxcdFxcdH1cXG4yOTQ1OlxcdFxcdFxcdFxcdGlmIChhcmcgXFx1MDAyNiBUVU5fRl9UU080KVxcbjI5NDY6XFx0XFx0XFx0XFx0XFx0ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087XFxuMjk0NzpcXHRcXHRcXHRcXHRpZiAoYXJnIFxcdTAwMjYgVFVOX0ZfVFNPNilcXG4yOTQ4OlxcdFxcdFxcdFxcdFxcdGZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjtcXG4yOTQ5OlxcdFxcdFxcdFxcdGFyZyBcXHUwMDI2PSB+KFRVTl9GX1RTTzR8VFVOX0ZfVFNPNik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjQwOjA3LjA4NTU3MzQxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc3NDI5MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFR1bm5lbCBJbnRlcmZhY2UgRmxhZyBBc3NpZ25tZW50KipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGB0dW4tXHUwMDNlZmxhZ3MgPSBmbGFncztgIHNwZWNpZmljYWxseSB3aGVyZSB0aGF0IGBmbGFnc2AgdmFsdWUgY29tZXMgZnJvbSBpbiB0aGUgY29udGV4dCBvZiB0aGUgdHVubmVsIGRldmljZSBzZXR1cC4gVGhlIGZvY3VzIGlzIG9uIGhvdyB0aG9zZSBmbGFncyBhcmUgdWx0aW1hdGVseSBkZXJpdmVkIGZyb20gYGlmci1cdTAwM2VpZnJfZmxhZ3NgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlc2UgZmxhZ3MgYXJlIGJlaW5nIGNvcGllZCwgYWx0ZXJlZCwgb3IgZXZlbiBtYXNrZWQgZHVyaW5nIHRoZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBwcm9jZXNzLCB3aGljaCBpcyBoYW5kbGVkIGluIHRoZSBgdHVuX3NldF9pZmZgIGZ1bmN0aW9uLlxuXG5JIHdhbnQgdG8gdHJhY2sgcHJlY2lzZWx5IHdoYXQgc2V0dGluZ3MgYXJlIGFjdHVhbGx5IG1ha2luZyBpdCBvbnRvIHRoZSB0dW5uZWwgaW50ZXJmYWNlLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBiaXR3aXNlIG1hbmlwdWxhdGlvbnMgaGFwcGVuaW5nPyBBbnkgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHM/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgbW9kaWZpY2F0aW9ucyByZWxhdGl2ZSB0byB0aGUgaW5pdGlhbCB1c2VyLXNwZWNpZmllZCBpbnRlcmZhY2UgZmxhZ3Mg4oCTIGhvdyBhcmUgdGhleSBiZWluZyB0cmFuc2xhdGVkLCBvciBpZiBhbnkgc3RhbmRhcmQgZmxhZ3MgYXJlIGdldHRpbmcgaW1wbGljaXRseSBhZGRlZCBvciByZW1vdmVkPyBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbXBsZXRlIHRyYW5zZm9ybWF0aW9uIHByb2Nlc3MgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGJlaGF2aW9yIG9mIHRoZSB0dW5uZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTE1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxMTo0MDoxMC41NjMwMDU0NzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3R1bi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NjgsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzY4OlxcdHN0YXRpYyBpbnQgdHVuX3NldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpXFxuMjc2OTpcXHR7XFxuMjc3MDpcXHRcXHRzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuO1xcbjI3NzE6XFx0XFx0c3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4yNzcyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuMjc3MzpcXHRcXHRpbnQgZXJyO1xcbjI3NzQ6XFx0XFxuMjc3NTpcXHRcXHRpZiAodGZpbGUtXFx1MDAzZWRldGFjaGVkKVxcbjI3NzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjc3NzpcXHRcXG4yNzc4OlxcdFxcdGlmICgoaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTkFQSV9GUkFHUykpIHtcXG4yNzc5OlxcdFxcdFxcdGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSlcXG4yNzgwOlxcdFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMjc4MTpcXHRcXG4yNzgyOlxcdFxcdFxcdGlmICghKGlmci1cXHUwMDNlaWZyX2ZsYWdzIFxcdTAwMjYgSUZGX05BUEkpIHx8XFxuMjc4MzpcXHRcXHRcXHQgICAgKGlmci1cXHUwMDNlaWZyX2ZsYWdzIFxcdTAwMjYgVFVOX1RZUEVfTUFTSykgIT0gSUZGX1RBUClcXG4yNzg0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI3ODU6XFx0XFx0fVxcbjI3ODY6XFx0XFxuMjc4NzpcXHRcXHRkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIGlmci1cXHUwMDNlaWZyX25hbWUpO1xcbjI3ODg6XFx0XFx0aWYgKGRldikge1xcbjI3ODk6XFx0XFx0XFx0aWYgKGlmci1cXHUwMDNlaWZyX2ZsYWdzIFxcdTAwMjYgSUZGX1RVTl9FWENMKVxcbjI3OTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4yNzkxOlxcdFxcdFxcdGlmICgoaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfVFVOKSBcXHUwMDI2XFx1MDAyNiBkZXYtXFx1MDAzZW5ldGRldl9vcHMgPT0gXFx1MDAyNnR1bl9uZXRkZXZfb3BzKVxcbjI3OTI6XFx0XFx0XFx0XFx0dHVuID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4yNzkzOlxcdFxcdFxcdGVsc2UgaWYgKChpZnItXFx1MDAzZWlmcl9mbGFncyBcXHUwMDI2IElGRl9UQVApIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9PSBcXHUwMDI2dGFwX25ldGRldl9vcHMpXFxuMjc5NDpcXHRcXHRcXHRcXHR0dW4gPSBuZXRkZXZfcHJpdihkZXYpO1xcbjI3OTU6XFx0XFx0XFx0ZWxzZVxcbjI3OTY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjc5NzpcXHRcXG4yNzk4OlxcdFxcdFxcdGlmICghIShpZnItXFx1MDAzZWlmcl9mbGFncyBcXHUwMDI2IElGRl9NVUxUSV9RVUVVRSkgIT1cXG4yNzk5OlxcdFxcdFxcdCAgICAhISh0dW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX01VTFRJX1FVRVVFKSlcXG4yODAwOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI4MDE6XFx0XFxuMjgwMjpcXHRcXHRcXHRpZiAodHVuX25vdF9jYXBhYmxlKHR1bikpXFxuMjgwMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjI4MDQ6XFx0XFx0XFx0ZXJyID0gc2VjdXJpdHlfdHVuX2Rldl9vcGVuKHR1bi1cXHUwMDNlc2VjdXJpdHkpO1xcbjI4MDU6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMjgwNjpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI4MDc6XFx0XFxuMjgwODpcXHRcXHRcXHRlcnIgPSB0dW5fYXR0YWNoKHR1biwgZmlsZSwgaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTk9GSUxURVIsXFxuMjgwOTpcXHRcXHRcXHRcXHRcXHQgaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTkFQSSxcXG4yODEwOlxcdFxcdFxcdFxcdFxcdCBpZnItXFx1MDAzZWlmcl9mbGFncyBcXHUwMDI2IElGRl9OQVBJX0ZSQUdTLCB0cnVlKTtcXG4yODExOlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI4MTI6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yODEzOlxcdFxcbjI4MTQ6XFx0XFx0XFx0aWYgKHR1bi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfTVVMVElfUVVFVUUgXFx1MDAyNlxcdTAwMjZcXG4yODE1OlxcdFxcdFxcdCAgICAodHVuLVxcdTAwM2VudW1xdWV1ZXMgKyB0dW4tXFx1MDAzZW51bWRpc2FibGVkIFxcdTAwM2UgMSkpIHtcXG4yODE2OlxcdFxcdFxcdFxcdC8qIE9uZSBvciBtb3JlIHF1ZXVlIGhhcyBhbHJlYWR5IGJlZW4gYXR0YWNoZWQsIG5vIG5lZWRcXG4yODE3OlxcdFxcdFxcdFxcdCAqIHRvIGluaXRpYWxpemUgdGhlIGRldmljZSBhZ2Fpbi5cXG4yODE4OlxcdFxcdFxcdFxcdCAqL1xcbjI4MTk6XFx0XFx0XFx0XFx0bmV0ZGV2X3N0YXRlX2NoYW5nZShkZXYpO1xcbjI4MjA6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjgyMTpcXHRcXHRcXHR9XFxuMjgyMjpcXHRcXG4yODIzOlxcdFxcdFxcdHR1bi1cXHUwMDNlZmxhZ3MgPSAodHVuLVxcdTAwM2VmbGFncyBcXHUwMDI2IH5UVU5fRkVBVFVSRVMpIHxcXG4yODI0OlxcdFxcdFxcdFxcdCAgICAgIChpZnItXFx1MDAzZWlmcl9mbGFncyBcXHUwMDI2IFRVTl9GRUFUVVJFUyk7XFxuMjgyNTpcXHRcXG4yODI2OlxcdFxcdFxcdG5ldGRldl9zdGF0ZV9jaGFuZ2UoZGV2KTtcXG4yODI3OlxcdFxcdH0gZWxzZSB7XFxuMjgyODpcXHRcXHRcXHRjaGFyICpuYW1lO1xcbjI4Mjk6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncyA9IDA7XFxuMjgzMDpcXHRcXHRcXHRpbnQgcXVldWVzID0gaWZyLVxcdTAwM2VpZnJfZmxhZ3MgXFx1MDAyNiBJRkZfTVVMVElfUVVFVUUgP1xcbjI4MzE6XFx0XFx0XFx0XFx0ICAgICBNQVhfVEFQX1FVRVVFUyA6IDE7XFxuMjgzMjpcXHRcXG4yODMzOlxcdFxcdFxcdGlmICghbnNfY2FwYWJsZShuZXQtXFx1MDAzZXVzZXJfbnMsIENBUF9ORVRfQURNSU4pKVxcbjI4MzQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4yODM1OlxcdFxcdFxcdGVyciA9IHNlY3VyaXR5X3R1bl9kZXZfY3JlYXRlKCk7XFxuMjgzNjpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4yODM3OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMjgzODpcXHRcXG4yODM5OlxcdFxcdFxcdC8qIFNldCBkZXYgdHlwZSAqL1xcbjI4NDA6XFx0XFx0XFx0aWYgKGlmci1cXHUwMDNlaWZyX2ZsYWdzIFxcdTAwMjYgSUZGX1RVTikge1xcbjI4NDE6XFx0XFx0XFx0XFx0LyogVFVOIGRldmljZSAqL1xcbjI4NDI6XFx0XFx0XFx0XFx0ZmxhZ3MgfD0gSUZGX1RVTjtcXG4yODQzOlxcdFxcdFxcdFxcdG5hbWUgPSBcXFwidHVuJWRcXFwiO1xcbjI4NDQ6XFx0XFx0XFx0fSBlbHNlIGlmIChpZnItXFx1MDAzZWlmcl9mbGFncyBcXHUwMDI2IElGRl9UQVApIHtcXG4yODQ1OlxcdFxcdFxcdFxcdC8qIFRBUCBkZXZpY2UgKi9cXG4yODQ2OlxcdFxcdFxcdFxcdGZsYWdzIHw9IElGRl9UQVA7XFxuMjg0NzpcXHRcXHRcXHRcXHRuYW1lID0gXFxcInRhcCVkXFxcIjtcXG4yODQ4OlxcdFxcdFxcdH0gZWxzZVxcbjI4NDk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjg1MDpcXHRcXG4yODUxOlxcdFxcdFxcdGlmICgqaWZyLVxcdTAwM2VpZnJfbmFtZSlcXG4yODUyOlxcdFxcdFxcdFxcdG5hbWUgPSBpZnItXFx1MDAzZWlmcl9uYW1lO1xcbjI4NTM6XFx0XFxuMjg1NDpcXHRcXHRcXHRkZXYgPSBhbGxvY19uZXRkZXZfbXFzKHNpemVvZihzdHJ1Y3QgdHVuX3N0cnVjdCksIG5hbWUsXFxuMjg1NTpcXHRcXHRcXHRcXHRcXHQgICAgICAgTkVUX05BTUVfVU5LTk9XTiwgdHVuX3NldHVwLCBxdWV1ZXMsXFxuMjg1NjpcXHRcXHRcXHRcXHRcXHQgICAgICAgcXVldWVzKTtcXG4yODU3OlxcdFxcbjI4NTg6XFx0XFx0XFx0aWYgKCFkZXYpXFxuMjg1OTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yODYwOlxcdFxcbjI4NjE6XFx0XFx0XFx0ZGV2X25ldF9zZXQoZGV2LCBuZXQpO1xcbjI4NjI6XFx0XFx0XFx0ZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzID0gXFx1MDAyNnR1bl9saW5rX29wcztcXG4yODYzOlxcdFxcdFxcdGRldi1cXHUwMDNlaWZpbmRleCA9IHRmaWxlLVxcdTAwM2VpZmluZGV4O1xcbjI4NjQ6XFx0XFx0XFx0ZGV2LVxcdTAwM2VzeXNmc19ncm91cHNbMF0gPSBcXHUwMDI2dHVuX2F0dHJfZ3JvdXA7XFxuMjg2NTpcXHRcXG4yODY2OlxcdFxcdFxcdHR1biA9IG5ldGRldl9wcml2KGRldik7XFxuMjg2NzpcXHRcXHRcXHR0dW4tXFx1MDAzZWRldiA9IGRldjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTE6NDA6MTAuNTYzMTk4OTQ5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNzc4NTMyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRVTi9UQVAgQmFja3ByZXNzdXJlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IGxpbmUsIGB0dW4tXHUwMDNlZmxhZ3MgPSAodHVuLVx1MDAzZWZsYWdzIFx1MDAyNiB+VFVOX0ZFQVRVUkVTKSB8IChpZnItXHUwMDNlaWZyX2ZsYWdzIFx1MDAyNiBUVU5fRkVBVFVSRVMpO2AgYW5kIHRoZSBpbmNsdXNpb24gb2YgYElGRl9CQUNLUFJFU1NVUkVgIGludG8gYFRVTl9GRUFUVVJFU2AgaXMga2V5LiBTbywgYHR1bl9zZXRfaWZmYCBoYW5kbGVzIHRoZSBzZXR0aW5nIG9mIHRoaXMgZmxhZywgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgYmFja3ByZXNzdXJlIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyB0aGUgVFVOIGRldmljZSBoYW5kbGVzIGEgZnVsbCByaW5nIGJ1ZmZlci4gSW5zdGVhZCBvZiBwYWNrZXQgZHJvcHMsIGl0IGludHJvZHVjZXMgYmFja3ByZXNzdXJlIHZpYSB0aGUgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnLCBzdG9wcGluZyB0aGUgVFggcXVldWUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBmdXp6IHRoaXMuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgYHR1bl9uZXRfeG1pdGAsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgYmFja3ByZXNzdXJlIGxvZ2ljIGlzICpleGVjdXRlZCouIEhvd2V2ZXIsIHRoYXQgZnVuY3Rpb24gaXMgaW4gdGhlIGhvdCBwYXRoLCBzbyBJIHNob3VsZCBhdm9pZCBpdC4gYHR1bl9zZXRfaWZmYCwgYmVpbmcgYW4gYGlvY3RsYCBoYW5kbGVyLCBpcyBhIG11Y2ggYmV0dGVyIHRhcmdldCBmb3IgU3l6a2FsbGVyJ3MgZnV6emluZyBjYXBhYmlsaXRpZXMuIEl0J3MgdGhlIHBvaW50IG9mICpzZXR0aW5nKiB0aGUgZmxhZywgYSBjbGVhbmVyIGVudHJ5IHBvaW50LlxuXG5JIGFsc28gY29uc2lkZXJlZCBgX190dW5fd2FrZV9xdWV1ZWAsIGJ1dCB0aGF0J3MgY2FsbGVkIGZyb20gYHR1bl9yaW5nX2NvbnN1bWVgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGB0dW5fZG9fcmVhZGAsIHNvIHRoYXQncyBhbHNvIGluIGEgaG90IHBhdGguIFRoZXJlZm9yZSwgSSdtIHN0aWNraW5nIHdpdGggYHR1bl9zZXRfaWZmYC4gVGhhdCdzIHRoZSBiZXN0IGZvY3VzIHN5bWJvbC5cblxuTm93LCBjb25maWcgZGVwZW5kZW5jaWVzLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgYENPTkZJR19UVU5gIGlzIHRoZSBvbmx5IHJlcXVpcmVtZW50LCBhcyBgZHJpdmVycy9uZXQvdHVuLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19UVU5gIGlzIHNldC4gTm8gb3RoZXIgY29uZmlncyBhcmUgbmVlZGVkLiBUaGUgaGVhZGVyIHN5bmMgaW4gYHRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9pZl90dW4uaGAgaXMganVzdCB0aGF0IOKAkyBhIGhlYWRlciBzeW5jOyBubyBsb2dpYyBpcyByZWFsbHkgdGhlcmUuXG5cbk9rYXksIGxldCdzIHN1bW1hcml6ZSBteSBmaW5kaW5nczpcblxuKiAgIFdvcnRoRnV6emluZzogYHRydWVgXG4qICAgRm9jdXNTeW1ib2xzOiBgW1widHVuX3NldF9pZmZcIl1gXG4qICAgRW5hYmxlQ29uZmlnczogYFtcIlRVTlwiXWBcbiogICBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgSUZGX0JBQ0tQUkVTU1VSRSBmbGFnIGZvciBUVU4vVEFQIGRldmljZXMsIG1vZGlmeWluZyB0aGUgYmVoYXZpb3Igb2YgYHR1bl9uZXRfeG1pdGAgYW5kIGBfX3R1bl93YWtlX3F1ZXVlYCB0byBzdG9wIHRoZSBUWCBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBUVU5TRVRJRkYgaW9jdGwuXCJcblxuSSB0aGluayB0aGF0IGNvdmVycyBpdC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTIzLCJPdXRwdXRUb2tlbnMiOjEwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDExOjQwOjE4Ljg0MTA1NDQyOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjU1OTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX3NldF9pZmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIHR1bl9uZXRfeG1pdCBhbmQgX190dW5fd2FrZV9xdWV1ZSB0byBzdG9wIHRoZSBUWCBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBUVU5TRVRJRkYgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHVuX3NldF9pZmZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IElGRl9CQUNLUFJFU1NVUkUgZmxhZyBmb3IgVFVOL1RBUCBkZXZpY2VzLCBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIHR1bl9uZXRfeG1pdCBhbmQgX190dW5fd2FrZV9xdWV1ZSB0byBzdG9wIHRoZSBUWCBxdWV1ZSBpbnN0ZWFkIG9mIGRyb3BwaW5nIHBhY2tldHMgd2hlbiB0aGUgcmluZyBidWZmZXIgaXMgZnVsbC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHRoZSBUVU5TRVRJRkYgaW9jdGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowct86r[1] Phase: Succeeded StartedAt: 2026-07-04 11:40:31 +0000 UTC FinishedAt: 2026-07-04 11:40:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-04 11:40:31 +0000 UTC FinishedAt: 2026-07-04 11:40:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2] Phase: Succeeded StartedAt: 2026-07-04 11:40:31 +0000 UTC FinishedAt: 2026-07-04 15:47:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-04 11:40:31 +0000 UTC FinishedAt: 2026-07-04 15:47:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-04 11:40:31 +0000 UTC FinishedAt: 2026-07-04 11:40:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-04 11:40:31 +0000 UTC FinishedAt: 2026-07-04 11:40:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowct86r/series-workflowct86r-convert-artifact-1437839401/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-04 11:40:41 +0000 UTC FinishedAt: 2026-07-04 12:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-04 11:40:41 +0000 UTC FinishedAt: 2026-07-04 12:07:17 +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:*7c2acd51-26d9-4e12-89f2-7b38b8380fc8,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-workflowct86r/series-workflowct86r-convert-artifact-1437839401/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": "2fdf45ee-fc4b-40c4-98ca-589b6a6b7415", "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-workflowct86r/series-workflowct86r-build-action-1319770247/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-04 11:40:41 +0000 UTC FinishedAt: 2026-07-04 12:07:07 +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:*7c2acd51-26d9-4e12-89f2-7b38b8380fc8,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-workflowct86r/series-workflowct86r-convert-artifact-1437839401/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": "2fdf45ee-fc4b-40c4-98ca-589b6a6b7415", "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-workflowct86r/series-workflowct86r-build-action-1319770247/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-04 12:07:17 +0000 UTC FinishedAt: 2026-07-04 12:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-04 12:07:17 +0000 UTC FinishedAt: 2026-07-04 12:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-04 12:07:17 +0000 UTC FinishedAt: 2026-07-04 12:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-04 12:07:17 +0000 UTC FinishedAt: 2026-07-04 12:07:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowct86r/series-workflowct86r-convert-artifact-1055395772/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-04 12:07:51 +0000 UTC FinishedAt: 2026-07-04 12:10:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-04 12:07:51 +0000 UTC FinishedAt: 2026-07-04 12:09:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2fdf45ee-fc4b-40c4-98ca-589b6a6b7415,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-workflowct86r/series-workflowct86r-build-action-1319770247/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-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-04 12:10:06 +0000 UTC FinishedAt: 2026-07-04 12:10:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-04 12:10:06 +0000 UTC FinishedAt: 2026-07-04 12:10:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-04 12:10:06 +0000 UTC FinishedAt: 2026-07-04 12:36:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-04 12:10:06 +0000 UTC FinishedAt: 2026-07-04 12:36:54 +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:*7c2acd51-26d9-4e12-89f2-7b38b8380fc8,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-workflowct86r/series-workflowct86r-convert-artifact-1055395772/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": "cb3cd2ef-ad4e-4aad-83ae-1f7c9c4371b0", "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-workflowct86r/series-workflowct86r-build-action-249289240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-04 12:10:06 +0000 UTC FinishedAt: 2026-07-04 12:36:44 +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:*7c2acd51-26d9-4e12-89f2-7b38b8380fc8,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-workflowct86r/series-workflowct86r-convert-artifact-1055395772/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": "cb3cd2ef-ad4e-4aad-83ae-1f7c9c4371b0", "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-workflowct86r/series-workflowct86r-build-action-249289240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-04 12:36:54 +0000 UTC FinishedAt: 2026-07-04 12:36:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-04 12:36:54 +0000 UTC FinishedAt: 2026-07-04 12:36:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-04 12:36:54 +0000 UTC FinishedAt: 2026-07-04 12:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-04 12:36:54 +0000 UTC FinishedAt: 2026-07-04 12:38:56 +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:*cb3cd2ef-ad4e-4aad-83ae-1f7c9c4371b0,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-workflowct86r/series-workflowct86r-build-action-249289240/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-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-04 12:39:06 +0000 UTC FinishedAt: 2026-07-04 15:47:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-04 12:39:06 +0000 UTC FinishedAt: 2026-07-04 15:47:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"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:*2fdf45ee-fc4b-40c4-98ca-589b6a6b7415,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb3cd2ef-ad4e-4aad-83ae-1f7c9c4371b0,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-workflowct86r/series-workflowct86r-build-action-1319770247/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-workflowct86r/series-workflowct86r-build-action-249289240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-04 12:39:06 +0000 UTC FinishedAt: 2026-07-04 12:40:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-04 12:39:06 +0000 UTC FinishedAt: 2026-07-04 12:39:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"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-workflowct86r/series-workflowct86r-convert-artifact-3740244101/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-04 12:39:06 +0000 UTC FinishedAt: 2026-07-04 12:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-04 12:39:06 +0000 UTC FinishedAt: 2026-07-04 12:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-04 12:39:06 +0000 UTC FinishedAt: 2026-07-04 12:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-04 12:40:15 +0000 UTC FinishedAt: 2026-07-04 15:47:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowct86r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tun_set_iff"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d6456743424721a837e1509b912f362caaeecd97","config_name":"upstream-apparmor-kasan.config","enable_configs":["TUN"],"series_id":"01ccfb70-4d44-4a49-a66d-5bdd6cc763bc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-04 12:40:15 +0000 UTC FinishedAt: 2026-07-04 15:47:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2fdf45ee-fc4b-40c4-98ca-589b6a6b7415,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb3cd2ef-ad4e-4aad-83ae-1f7c9c4371b0,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-workflowct86r/series-workflowct86r-build-action-1319770247/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-workflowct86r/series-workflowct86r-build-action-249289240/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-workflowct86r/series-workflowct86r-convert-artifact-3740244101/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,}