Name: series-workflowtlhjm Phase: Succeeded StartedAt: 2026-07-22 14:38:11 +0000 UTC FinishedAt: 2026-07-22 17:35:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[0] Phase: Succeeded StartedAt: 2026-07-22 14:38:11 +0000 UTC FinishedAt: 2026-07-22 14:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 14:38:11 +0000 UTC FinishedAt: 2026-07-22 14:56:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a4ffc59238be84dd1c26bf1c001543e832674fc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HYPERV", "HYPERV_NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a4ffc59238be84dd1c26bf1c001543e832674fc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HYPERV", "HYPERV_NET" ], "series_id": "a63a2468-8286-4d90-a95e-5c8577522acb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vmbus_establish_gpadl_caller_decrypted", "vmbus_establish_gpadl_and_decrypt", "netvsc_alloc_buf_pages", "netvsc_free_buf_pages", "netvsc_init_buf", "__vmbus_establish_gpadl" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hZUEVSViYjMzQ7LAogICAgJiMzNDtIWVBFUlZfTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQmIzM0OywKICAgICYjMzQ7dm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0JiMzNDssCiAgICAmIzM0O25ldHZzY19hbGxvY19idWZfcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0dnNjX2ZyZWVfYnVmX3BhZ2VzJiMzNDssCiAgICAmIzM0O25ldHZzY19pbml0X2J1ZiYjMzQ7LAogICAgJiMzNDtfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSHlwZXItViBuZXR3b3JrIGRyaXZlciAobmV0dnNjKSBhbmQgVk1CdXMgY2hhbm5lbCBjb2RlIHRvIG1hbmFnZSB0aGUgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2YgR1BBREwgYnVmZmVycywgcGFydGljdWxhcmx5IGZvciBDb25maWRlbnRpYWwgVk1zLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gYWxsb2NhdGUvZnJlZSBidWZmZXJzIGFuZCBlc3RhYmxpc2ggR1BBRExzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNGI1ZmQ4Njk3MWYyMjA2MWMwOWM4OGRiNWVjZjc1OWViMjJjYmQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTQ6NTQ6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9jaGFubmVsLmMgYi9kcml2ZXJzL2h2L2NoYW5uZWwuY1xuaW5kZXggNjgyMWYyMjUyNDhiMTkuLjAxNjYzNjdhNGRmMzc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9odi9jaGFubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaHYvY2hhbm5lbC5jXG5AQCAtNDI2LDcgJiM0Mzs0MjYsMTMgQEAgc3RhdGljIHZvaWQgdm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8oc3RydWN0IHZtYnVzX2NoYW5uZWxfbXNnaW5mbyAqbXNnaW5mbylcbiB9XG4gXG4gLypcbi0gKiBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbCAtIEVzdGFibGlzaCBhIEdQQURMIGZvciBhIGJ1ZmZlciBvciByaW5nYnVmZmVyXG4mIzQzOyAqIF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsIC0gRXN0YWJsaXNoIGEgR1BBREwgZm9yIGEgYnVmZmVyIG9yIHJpbmdidWZmZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gb25seSBoYW5kbGVzIHRoZSBHUEFETCBoYW5kc2hha2Ugd2l0aCB0aGUgaG9zdC4gIFRoZSBjYWxsZXJcbiYjNDM7ICogaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgQGtidWZmZXIgaXMgaW4gdGhlIGVuY3J5cHRpb24gc3RhdGUgdGhlXG4mIzQzOyAqIGhvc3QgZXhwZWN0cyAoaG9zdC12aXNpYmxlIC8gXCYjMzQ7ZGVjcnlwdGVkXCYjMzQ7IGZvciBjb25maWRlbnRpYWwgVk1zKTsgdGhpc1xuJiM0MzsgKiBmdW5jdGlvbiBuZXZlciBjYWxscyBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9yIHNldF9tZW1vcnlfZW5jcnlwdGVkKCkuXG4mIzQzOyAqIEl0IGFsc28gbGVhdmVzIGdwYWRsLVx1MDAzZWRlY3J5cHRlZCB1bnRvdWNoZWQsIHNvIHRoZSBjYWxsZXIgbXVzdCBzZXQgaXQuXG4gICpcbiAgKiBAY2hhbm5lbDogYSBjaGFubmVsXG4gICogQHR5cGU6IHRoZSB0eXBlIG9mIHRoZSBjb3JyZXNwb25kaW5nIEdQQURMLCBvbmx5IG1lYW5pbmdmdWwgZm9yIHRoZSBndWVzdC5cbkBAIC00MzQsNyAmIzQzOzQ0MCw3IEBAIHN0YXRpYyB2b2lkIHZtYnVzX2ZyZWVfY2hhbm5lbF9tc2dpbmZvKHN0cnVjdCB2bWJ1c19jaGFubmVsX21zZ2luZm8gKm1zZ2luZm8pXG4gICogQHNpemU6IHBhZ2Utc2l6ZSBtdWx0aXBsZVxuICAqIEBzZW5kX29mZnNldDogdGhlIG9mZnNldCAoaW4gYnl0ZXMpIHdoZXJlIHRoZSBzZW5kIHJpbmcgYnVmZmVyIHN0YXJ0cyxcbiAgKiAgICAgICAgICAgICAgc2hvdWxkIGJlIDAgZm9yIEJVRkZFUiB0eXBlIGdwYWRsXG4tICogQGdwYWRsX2hhbmRsZTogc29tZSBmdW5reSB0aGluZ1xuJiM0MzsgKiBAZ3BhZGw6IG91dCBwYXJhbWV0ZXIgcmVjZWl2aW5nIHRoZSBlc3RhYmxpc2hlZCBHUEFETCBoYW5kbGUvYnVmZmVyL3NpemVcbiAgKi9cbiBzdGF0aWMgaW50IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxuIFx0XHRcdFx0ICAgZW51bSBodl9ncGFkbF90eXBlIHR5cGUsIHZvaWQgKmtidWZmZXIsXG5AQCAtNDU0LDMwICYjNDM7NDYwLDggQEAgc3RhdGljIGludCBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiBcdFx0KGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnZtYnVzX2Nvbm5lY3Rpb24ubmV4dF9ncGFkbF9oYW5kbGUpIC0gMSk7XG4gXG4gXHRyZXQgPSBjcmVhdGVfZ3BhZGxfaGVhZGVyKHR5cGUsIGtidWZmZXIsIHNpemUsIHNlbmRfb2Zmc2V0LCBcdTAwMjZtc2dpbmZvKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Z3BhZGwtXHUwMDNlZGVjcnlwdGVkID0gZmFsc2U7XG4mIzQzO1x0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdGdwYWRsLVx1MDAzZWRlY3J5cHRlZCA9ICEoKGNoYW5uZWwtXHUwMDNlY29fZXh0ZXJuYWxfbWVtb3J5IFx1MDAyNlx1MDAyNiB0eXBlID09IEhWX0dQQURMX0JVRkZFUikgfHxcbi1cdFx0KGNoYW5uZWwtXHUwMDNlY29fcmluZ19idWZmZXIgXHUwMDI2XHUwMDI2IHR5cGUgPT0gSFZfR1BBRExfUklORykpO1xuLVx0aWYgKGdwYWRsLVx1MDAzZWRlY3J5cHRlZCkge1xuLVx0XHQvKlxuLVx0XHQgKiBUaGUgXCYjMzQ7ZGVjcnlwdGVkXCYjMzQ7IGZsYWcgYmVpbmcgdHJ1ZSBhc3N1bWVzIHRoYXQgc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBzdWNjZWVkcy5cbi1cdFx0ICogQnV0IGlmIGl0IGZhaWxzLCB0aGUgZW5jcnlwdGlvbiBzdGF0ZSBvZiB0aGUgbWVtb3J5IGlzIHVua25vd24uIEluIHRoYXQgY2FzZSxcbi1cdFx0ICogbGVhdmUgXCYjMzQ7ZGVjcnlwdGVkXCYjMzQ7IGFzIHRydWUgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgbGVha2VkIGluc3RlYWQgb2YgZ29pbmcgYmFja1xuLVx0XHQgKiBvbiB0aGUgZnJlZSBsaXN0LlxuLVx0XHQgKi9cbi1cdFx0cmV0ID0gc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpa2J1ZmZlcixcbi1cdFx0XHRcdFx0UEZOX1VQKHNpemUpKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGRldl93YXJuKFx1MDAyNmNoYW5uZWwtXHUwMDNlZGV2aWNlX29iai1cdTAwM2VkZXZpY2UsXG4tXHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gc2V0IGhvc3QgdmlzaWJpbGl0eSBmb3IgbmV3IEdQQURMICVkLlxcblwmIzM0Oyxcbi1cdFx0XHRcdHJldCk7XG4tXHRcdFx0dm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8obXNnaW5mbyk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fVxuLVx0fVxuIFxuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNm1zZ2luZm8tXHUwMDNld2FpdGV2ZW50KTtcbiBcdG1zZ2luZm8tXHUwMDNld2FpdGluZ19jaGFubmVsID0gY2hhbm5lbDtcbkBAIC01NTMsMTkgJiM0Mzs1MzcsNDcgQEAgc3RhdGljIGludCBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dm1idXNfY29ubmVjdGlvbi5jaGFubmVsbXNnX2xvY2ssIGZsYWdzKTtcbiBcbiBcdHZtYnVzX2ZyZWVfY2hhbm5lbF9tc2dpbmZvKG1zZ2luZm8pO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiBcbi1cdGlmIChyZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogSWYgc2V0X21lbW9yeV9lbmNyeXB0ZWQoKSBmYWlscywgdGhlIGRlY3J5cHRlZCBmbGFnIGlzXG4tXHRcdCAqIGxlZnQgYXMgdHJ1ZSBzbyB0aGUgbWVtb3J5IGlzIGxlYWtlZCBpbnN0ZWFkIG9mIGJlaW5nXG4tXHRcdCAqIHB1dCBiYWNrIG9uIHRoZSBmcmVlIGxpc3QuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZ3BhZGwtXHUwMDNlZGVjcnlwdGVkKSB7XG4tXHRcdFx0aWYgKCFzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZylrYnVmZmVyLCBQRk5fVVAoc2l6ZSkpKVxuLVx0XHRcdFx0Z3BhZGwtXHUwMDNlZGVjcnlwdGVkID0gZmFsc2U7XG4mIzQzOy8qXG4mIzQzOyAqIHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdCAtIE1hbmFnZSB0aGUgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2ZcbiYjNDM7ICogQGtidWZmZXIgYXJvdW5kIGEgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoKSBjYWxsLlxuJiM0MzsgKlxuJiM0MzsgKiBEZWNyeXB0cyBAa2J1ZmZlciAobWFraW5nIGl0IGhvc3QtdmlzaWJsZSkgdW5sZXNzIHRoZSBjaGFubmVsIHdhcyBjcmVhdGVkXG4mIzQzOyAqIHdpdGggY29uZmlkZW50aWFsIG1lbW9yeSBmb3IgQHR5cGUsIHRoZW4gZXN0YWJsaXNoZXMgdGhlIEdQQURMLiAgT25cbiYjNDM7ICogZXN0YWJsaXNoIGZhaWx1cmUgdGhlIGJ1ZmZlciBpcyByZS1lbmNyeXB0ZWQgc28gdGhlIGNhbGxlciBjYW4gZnJlZSBpdC5cbiYjNDM7ICpcbiYjNDM7ICogU2V0cyBncGFkbC1cdTAwM2VkZWNyeXB0ZWQ7IHNlZSB0aGUgY29tbWVudCBvbiBzdHJ1Y3Qgdm1idXNfZ3BhZGw6OmRlY3J5cHRlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxuJiM0MztcdFx0XHRcdFx0ICAgICBlbnVtIGh2X2dwYWRsX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdm9pZCAqa2J1ZmZlciwgdTMyIHNpemUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUzMiBzZW5kX29mZnNldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbClcbiYjNDM7e1xuJiM0MztcdGJvb2wgZGVjcnlwdCA9ICEoKGNoYW5uZWwtXHUwMDNlY29fZXh0ZXJuYWxfbWVtb3J5IFx1MDAyNlx1MDAyNiB0eXBlID09IEhWX0dQQURMX0JVRkZFUikgfHxcbiYjNDM7XHRcdFx0IChjaGFubmVsLVx1MDAzZWNvX3JpbmdfYnVmZmVyIFx1MDAyNlx1MDAyNiB0eXBlID09IEhWX0dQQURMX1JJTkcpKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoZGVjcnlwdCkge1xuJiM0MztcdFx0cmV0ID0gc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpa2J1ZmZlciwgUEZOX1VQKHNpemUpKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oXHUwMDI2Y2hhbm5lbC1cdTAwM2VkZXZpY2Vfb2JqLVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHNldCBob3N0IHZpc2liaWxpdHkgZm9yIG5ldyBHUEFETCAlZC5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IHJldCk7XG4mIzQzO1x0XHRcdC8qIEVuY3J5cHRpb24gc3RhdGUgdW5rbm93bjsgc2lnbmFsIGNhbGxlciB0byBsZWFrLiAqL1xuJiM0MztcdFx0XHRncGFkbC1cdTAwM2VkZWNyeXB0ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0Z3BhZGwtXHUwMDNlZGVjcnlwdGVkID0gZGVjcnlwdDtcbiYjNDM7XHRyZXQgPSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChjaGFubmVsLCB0eXBlLCBrYnVmZmVyLCBzaXplLCBzZW5kX29mZnNldCxcbiYjNDM7XHRcdFx0XHQgICAgICBncGFkbCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwMjZcdTAwMjYgZGVjcnlwdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSkpXG4mIzQzO1x0XHRncGFkbC1cdTAwM2VkZWNyeXB0ZWQgPSBmYWxzZTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTU4MCwxMSAmIzQzOzU5Miw0MCBAQCBzdGF0aWMgaW50IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxuIGludCB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsIHZvaWQgKmtidWZmZXIsXG4gXHRcdFx0ICB1MzIgc2l6ZSwgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbClcbiB7XG4tXHRyZXR1cm4gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoY2hhbm5lbCwgSFZfR1BBRExfQlVGRkVSLCBrYnVmZmVyLCBzaXplLFxuLVx0XHRcdFx0ICAgICAgIDBVLCBncGFkbCk7XG4mIzQzO1x0cmV0dXJuIHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChjaGFubmVsLCBIVl9HUEFETF9CVUZGRVIsXG4mIzQzO1x0XHRcdFx0XHRcdCBrYnVmZmVyLCBzaXplLCAwVSwgZ3BhZGwpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19lc3RhYmxpc2hfZ3BhZGwpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCAtIEVzdGFibGlzaCBhIEdQQURMIGZvciBhIGJ1ZmZlclxuJiM0MzsgKiB3aG9zZSBlbmNyeXB0aW9uIHN0YXRlIGlzIG1hbmFnZWQgYnkgdGhlIGNhbGxlci5cbiYjNDM7ICpcbiYjNDM7ICogQGNoYW5uZWw6IGEgY2hhbm5lbFxuJiM0MzsgKiBAa2J1ZmZlcjogYSBidWZmZXIgdGhhdCB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IHRyYW5zaXRpb25lZCB0byBob3N0LXZpc2libGVcbiYjNDM7ICogICAgICAgICAgIChkZWNyeXB0ZWQpIHZpYSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9yIGFuIGVxdWl2YWxlbnQgbWVjaGFuaXNtLlxuJiM0MzsgKiBAc2l6ZTogcGFnZS1zaXplIG11bHRpcGxlXG4mIzQzOyAqIEBncGFkbDogb3V0IHBhcmFtZXRlciByZWNlaXZpbmcgdGhlIGVzdGFibGlzaGVkIEdQQURMXG4mIzQzOyAqXG4mIzQzOyAqIFVubGlrZSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjYWxsXG4mIzQzOyAqIHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgb24gQGtidWZmZXIsIGFuZCB0aGUgbWF0Y2hpbmcgdm1idXNfdGVhcmRvd25fZ3BhZGwoKVxuJiM0MzsgKiBjYWxsIHdpbGwgbm90IGNhbGwgc2V0X21lbW9yeV9lbmNyeXB0ZWQoKSBvbiBpdC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGVcbiYjNDM7ICogZm9yIHRoZSBmdWxsIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mIEBrYnVmZmVyOyBvbiByZXR1cm4gZ3BhZGwtXHUwMDNlZGVjcnlwdGVkXG4mIzQzOyAqIGlzIHNldCB0byBmYWxzZSB0byByZWNvcmQgdGhhdCB2bWJ1cyBkb2VzIG5vdCBvd24gdGhlIGVuY3J5cHRpb24gc3RhdGUuXG4mIzQzOyAqL1xuJiM0MztpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4mIzQzO1x0XHRcdFx0XHQgICB2b2lkICprYnVmZmVyLCB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoY2hhbm5lbCwgSFZfR1BBRExfQlVGRkVSLCBrYnVmZmVyLFxuJiM0MztcdFx0XHRcdFx0ICBzaXplLCAwVSwgZ3BhZGwpO1xuJiM0MztcbiYjNDM7XHQvKiBDYWxsZXIgb3ducyBAa2J1ZmZlciYjMzk7cyBlbmNyeXB0aW9uOyB0ZWFyZG93biBtdXN0IG5vdCB0b3VjaCBpdC4gKi9cbiYjNDM7XHRncGFkbC1cdTAwM2VkZWNyeXB0ZWQgPSBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkKTtcbiYjNDM7XG4gLyoqXG4gICogcmVxdWVzdF9hcnJfaW5pdCAtIEFsbG9jYXRlcyBtZW1vcnkgZm9yIHRoZSByZXF1ZXN0b3IgYXJyYXkuIEVhY2ggc2xvdFxuICAqIGtlZXBzIHRyYWNrIG9mIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBhcnJheS4gSW5pdGlhbGx5LCBlYWNoXG5AQCAtNjg1LDExICYjNDM7NzI2LDExIEBAIHN0YXRpYyBpbnQgX192bWJ1c19vcGVuKHN0cnVjdCB2bWJ1c19jaGFubmVsICpuZXdjaGFubmVsLFxuIFx0LyogRXN0YWJsaXNoIHRoZSBncGFkbCBmb3IgdGhlIHJpbmcgYnVmZmVyICovXG4gXHRuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUuZ3BhZGxfaGFuZGxlID0gMDtcbiBcbi1cdGVyciA9IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKG5ld2NoYW5uZWwsIEhWX0dQQURMX1JJTkcsXG4tXHRcdFx0XHQgICAgICBwYWdlX2FkZHJlc3MobmV3Y2hhbm5lbC1cdTAwM2VyaW5nYnVmZmVyX3BhZ2UpLFxuLVx0XHRcdFx0ICAgICAgKHNlbmRfcGFnZXMgJiM0MzsgcmVjdl9wYWdlcykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHQgICAgICBuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfc2VuZF9vZmZzZXQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHQgICAgICBcdTAwMjZuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUpO1xuJiM0MztcdGVyciA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChuZXdjaGFubmVsLCBIVl9HUEFETF9SSU5HLFxuJiM0MztcdFx0XHRcdFx0XHRwYWdlX2FkZHJlc3MobmV3Y2hhbm5lbC1cdTAwM2VyaW5nYnVmZmVyX3BhZ2UpLFxuJiM0MztcdFx0XHRcdFx0XHQoc2VuZF9wYWdlcyAmIzQzOyByZWN2X3BhZ2VzKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiYjNDM7XHRcdFx0XHRcdFx0bmV3Y2hhbm5lbC1cdTAwM2VyaW5nYnVmZmVyX3NlbmRfb2Zmc2V0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuJiM0MztcdFx0XHRcdFx0XHRcdTAwMjZuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcl9jbGVhbl9yaW5nO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmggYi9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXG5pbmRleCA3Mzk3YzY5M2Y5ODRhZi4uYjBjNGNiMGY3YTRjZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXG5AQCAtMjIwLDYgJiM0MzsyMjAsOCBAQCBzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0O1xuIFxuIGV4dGVybiB1MzIgbmV0dnNjX3JpbmdfYnl0ZXM7XG4gXG4mIzQzO2ludCBuZXR2c2Nfd29ya3F1ZXVlX2luaXQodm9pZCk7XG4mIzQzO3ZvaWQgbmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KHZvaWQpO1xuIHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXR2c2NfZGV2aWNlX2FkZChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXR2c2NfZGV2aWNlX2luZm8gKmluZm8pO1xuIGludCBuZXR2c2NfYWxsb2NfcmVjdl9jb21wX3Jpbmcoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsIHUzMiBxX2lkeCk7XG5AQCAtMTE0Nyw2ICYjNDM7MTE0OSwxNiBAQCBzdHJ1Y3QgbmV0dnNjX2NoYW5uZWwge1xuIFx0c3RydWN0IG5ldHZzY19zdGF0c19yeCByeF9zdGF0cztcbiB9O1xuIFxuJiM0MzsvKiBBIHBoeXNpY2FsbHktY29udGlndW91cyBjaHVuayBvZiBuZXR2c2MgYnVmZmVyLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgY2h1bmsgbGlzdCBpcyBwcmVzZXJ2ZWQgc28gZWFjaCBjaHVuayBjYW4gYmUgaW5kaXZpZHVhbGx5IGZyZWVkIGF0XG4mIzQzOyAqIHRlYXJkb3duLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IG5ldHZzY19idWZfY2h1bmsge1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmRlcjtcbiYjNDM7fTtcbiYjNDM7XG4gLyogUGVyIG5ldHZzYyBkZXZpY2UgKi9cbiBzdHJ1Y3QgbmV0dnNjX2RldmljZSB7XG4gXHR1MzIgbnZzcF92ZXJzaW9uO1xuQEAgLTExNTgsNiAmIzQzOzExNzAsOCBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSB7XG4gXHQvKiBSZWNlaXZlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdXMgYnV0IG1hbmFnZXMgYnkgTmV0VlNQICovXG4gXHR2b2lkICpyZWN2X2J1ZjtcbiBcdHUzMiByZWN2X2J1Zl9zaXplOyAvKiBhbGxvY2F0ZWQgYnl0ZXMgKi9cbiYjNDM7XHRzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqcmVjdl9idWZfY2h1bmtzO1xuJiM0MztcdHUzMiByZWN2X2J1Zl9jaHVua19jbnQ7XG4gXHRzdHJ1Y3Qgdm1idXNfZ3BhZGwgcmVjdl9idWZfZ3BhZGxfaGFuZGxlO1xuIFx0dTMyIHJlY3Zfc2VjdGlvbl9jbnQ7XG4gXHR1MzIgcmVjdl9zZWN0aW9uX3NpemU7XG5AQCAtMTE2Niw2ICYjNDM7MTE4MCw4IEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHtcbiBcdC8qIFNlbmQgYnVmZmVyIGFsbG9jYXRlZCBieSB1cyAqL1xuIFx0dm9pZCAqc2VuZF9idWY7XG4gXHR1MzIgc2VuZF9idWZfc2l6ZTtcbiYjNDM7XHRzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqc2VuZF9idWZfY2h1bmtzO1xuJiM0MztcdHUzMiBzZW5kX2J1Zl9jaHVua19jbnQ7XG4gXHRzdHJ1Y3Qgdm1idXNfZ3BhZGwgc2VuZF9idWZfZ3BhZGxfaGFuZGxlO1xuIFx0dTMyIHNlbmRfc2VjdGlvbl9jbnQ7XG4gXHR1MzIgc2VuZF9zZWN0aW9uX3NpemU7XG5AQCAtMTE5Myw3ICYjNDM7MTIwOSw3IEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHtcbiBcbiBcdHN0cnVjdCBuZXR2c2NfY2hhbm5lbCBjaGFuX3RhYmxlW1ZSU1NfQ0hBTk5FTF9NQVhdO1xuIFxuLVx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiYjNDM7XHRzdHJ1Y3QgcmN1X3dvcmsgcndvcms7XG4gfTtcbiBcbiAvKiBOZGlzSW5pdGlhbGl6ZSBtZXNzYWdlICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jIGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXG5pbmRleCA1OWU5NTM0MWY5YjFlNS4uMjUwNWQxMGUyMjAxMDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xuQEAgLTE0LDYgJiM0MzsxNCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbkBAIC0yOCw2ICYjNDM7MzAsOCBAQFxuICNpbmNsdWRlIFwmIzM0O2h5cGVydl9uZXQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O25ldHZzY190cmFjZS5oXCYjMzQ7XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0dnNjX3dxO1xuJiM0MztcbiAvKlxuICAqIFN3aXRjaCB0aGUgZGF0YSBwYXRoIGZyb20gdGhlIHN5bnRoZXRpYyBpbnRlcmZhY2UgdG8gdGhlIFZGXG4gICogaW50ZXJmYWNlLlxuQEAgLTEyNSw0MCAmIzQzOzEyOSwxNjMgQEAgc3RhdGljIHZvaWQgbmV0dnNjX3N1YmNoYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRydG5sX3VubG9jaygpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IG5ldHZzY19kZXZpY2UgKmFsbG9jX25ldF9kZXZpY2Uodm9pZClcbiYjNDM7LypcbiYjNDM7ICogbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzIC0gcmVsZWFzZSBhIG5ldHZzYyBzZW5kL3JlY2VpdmUgYnVmZmVyLlxuJiM0MzsgKlxuJiM0MzsgKiBAYWRkcjogYnVmZmVyIGFkZHJlc3MsIG9yIE5VTEwgaWYgbm9uZSB3YXMgYWxsb2NhdGVkIChlLmcuIGNsZWFudXAgZnJvbSBhXG4mIzQzOyAqICAgICAgICBmYWlsZWQgYWxsb2NhdGlvbilcbiYjNDM7ICogQGNodW5rczogY2h1bmtzIGFycmF5IGZyb20gbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcygpLCBvciBOVUxMXG4mIzQzOyAqIEBjaHVua19jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBjaHVua3NcbiYjNDM7ICpcbiYjNDM7ICogV2hlbiBAY2h1bmtzIGlzIE5VTEwgdGhlIGJ1ZmZlciBpcyBhIHBsYWluIHZ6YWxsb2MoKSBhbGxvY2F0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBPdGhlcndpc2UgdGVhciBkb3duIHRoZSB2bWFwLCBhbmQgZm9yIGVhY2ggY2h1bmsgcmUtZW5jcnlwdCBhbmQgZnJlZVxuJiM0MzsgKiB0aGUgdW5kZXJseWluZyBwYWdlcy4gQW55IGNodW5rIHRoYXQgY2Fubm90IGJlIHJlLWVuY3J5cHRlZCBpcyBsZWFrZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBuZXR2c2NfZnJlZV9idWZfcGFnZXModm9pZCAqYWRkcixcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICpjaHVua3MsXG4mIzQzO1x0XHRcdFx0ICB1MzIgY2h1bmtfY250KVxuIHtcbi1cdHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlO1xuJiM0MztcdHUzMiBpO1xuIFxuLVx0bmV0X2RldmljZSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBuZXR2c2NfZGV2aWNlKTtcbi1cdGlmICghbmV0X2RldmljZSlcbiYjNDM7XHRpZiAoIWNodW5rcykge1xuJiM0MztcdFx0dmZyZWUoYWRkcik7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2dW5tYXAoYWRkcik7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNodW5rX2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgdmFkZHIgPVxuJiM0MztcdFx0XHQodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoY2h1bmtzW2ldLnBhZ2UpO1xuJiM0MztcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gY2h1bmtzW2ldLm9yZGVyO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZXRfbWVtb3J5X2VuY3J5cHRlZCh2YWRkciwgMVUgXHUwMDNjXHUwMDNjIG9yZGVyKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZXMoY2h1bmtzW2ldLnBhZ2UsIG9yZGVyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGt2ZnJlZShjaHVua3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzIC0gYWxsb2NhdGUgYSB2aXJ0dWFsbHktY29udGlndW91cywgaG9zdC12aXNpYmxlXG4mIzQzOyAqIGJ1ZmZlciBmb3IgdGhlIG5ldHZzYyBzZW5kL3JlY2VpdmUgYXJlYS5cbiYjNDM7ICpcbiYjNDM7ICogQG5vZGU6IE5VTUEgbm9kZSBoaW50IChOVU1BX05PX05PREUgZm9yIGFueSBub2RlKVxuJiM0MzsgKiBAc2l6ZTogcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGluIGJ5dGVzIChyb3VuZGVkIHVwIHRvIFBBR0VfU0laRSlcbiYjNDM7ICogQGNodW5rc19vdXQ6IG9uIHN1Y2Nlc3MsIHNldCB0byB0aGUgYXJyYXkgb2YgdW5kZXJseWluZyBjaHVua3NcbiYjNDM7ICogQGNodW5rX2NudF9vdXQ6IG9uIHN1Y2Nlc3MsIHNldCB0byB0aGUgbnVtYmVyIG9mIGNodW5rc1xuJiM0MzsgKlxuJiM0MzsgKiBBbGxvY2F0ZXMgdGhlIGJ1ZmZlciBhcyBhIHNlcmllcyBvZiBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgY2h1bmtzLFxuJiM0MzsgKiBzdGFydGluZyBhdCBNQVhfUEFHRV9PUkRFUiBhbmQgZmFsbGluZyBiYWNrIHRvIHNtYWxsZXIgb3JkZXJzIG9uXG4mIzQzOyAqIGFsbG9jYXRpb24gZmFpbHVyZS4gRWFjaCBjaHVuayBpcyB0cmFuc2l0aW9uZWQgdG8gaG9zdC12aXNpYmxlIHZpYVxuJiM0MzsgKiBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9uIGl0cyBkaXJlY3QtbWFwIGFkZHJlc3MsIHRoZW4gYWxsIGNodW5rcyBhcmVcbiYjNDM7ICogY29tYmluZWQgaW50byBhIHZpcnR1YWxseS1jb250aWd1b3VzIHJhbmdlIHZpYSB2bWFwKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdGhlIHZtYXAoKWVkIHZpcnR1YWwgYWRkcmVzcywgb3IgTlVMTCBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgKm5ldHZzY19hbGxvY19idWZfcGFnZXMoaW50IG5vZGUsIHUzMiBzaXplLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqKmNodW5rc19vdXQsXG4mIzQzO1x0XHRcdFx0ICAgIHUzMiAqY2h1bmtfY250X291dClcbiYjNDM7e1xuJiM0MztcdHUzMiBucl9wYWdlcyA9IFBGTl9VUChzaXplKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqY2h1bmtzID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb3JkZXI7XG4mIzQzO1x0dTMyIGNodW5rX2NudCA9IDA7XG4mIzQzO1x0dTMyIHBhZ2VfaWR4ID0gMDtcbiYjNDM7XHR1MzIgcmVtYWluaW5nID0gbnJfcGFnZXM7XG4mIzQzO1x0dm9pZCAqYWRkcjtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQqY2h1bmtzX291dCA9IE5VTEw7XG4mIzQzO1x0KmNodW5rX2NudF9vdXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5yX3BhZ2VzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2bmV0X2RldmljZS1cdTAwM2V3YWl0X2RyYWluKTtcbi1cdG5ldF9kZXZpY2UtXHUwMDNlZGVzdHJveSA9IGZhbHNlO1xuLVx0bmV0X2RldmljZS1cdTAwM2V0eF9kaXNhYmxlID0gdHJ1ZTtcbiYjNDM7XHQvKiBXb3JzdCBjYXNlOiBldmVyeSBjaHVuayBpcyBhIHNpbmdsZSBwYWdlLiAqL1xuJiM0MztcdGNodW5rcyA9IGt2bWFsbG9jX2FycmF5KG5yX3BhZ2VzLCBzaXplb2YoKmNodW5rcyksXG4mIzQzO1x0XHRcdFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuJiM0MztcdGlmICghY2h1bmtzKVxuJiM0MztcdFx0Z290byBlcnI7XG4gXG4tXHRuZXRfZGV2aWNlLVx1MDAzZW1heF9wa3QgPSBSTkRJU19NQVhfUEtUX0RFRkFVTFQ7XG4tXHRuZXRfZGV2aWNlLVx1MDAzZXBrdF9hbGlnbiA9IFJORElTX1BLVF9BTElHTl9ERUZBVUxUO1xuJiM0MztcdHBhZ2VzID0ga3ZtYWxsb2NfYXJyYXkobnJfcGFnZXMsIHNpemVvZigqcGFnZXMpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBhZ2VzKVxuJiM0MztcdFx0Z290byBlcnI7XG4gXG4tXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2bmV0X2RldmljZS1cdTAwM2VjaGFubmVsX2luaXRfd2FpdCk7XG4tXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc3ViY2hhbl9vcGVuKTtcbi1cdElOSVRfV09SSyhcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXN1YmNoYW5fd29yaywgbmV0dnNjX3N1YmNoYW5fd29yayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBAb3JkZXIgbW9ub3RvbmljYWxseSBkZWNyZWFzZXMgYWNyb3NzIGl0ZXJhdGlvbnNcbiYjNDM7XHQgKlxuJiM0MztcdCAqIFVzZSBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOIHRvIGF2b2lkIE9PTS1raWxsaW5nLCBidXQgdHJ5XG4mIzQzO1x0ICogaGFyZGVyIGF0IG9yZGVyIDAgc2luY2UgdGhhdCBpcyB0aGUgZmluYWwgZmFsbGJhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0b3JkZXIgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIE1BWF9QQUdFX09SREVSLCBpbG9nMihucl9wYWdlcykpO1xuJiM0MztcdHdoaWxlIChyZW1haW5pbmcpIHtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdFx0Z2ZwX3QgZ2ZwO1xuJiM0MztcbiYjNDM7XHRcdG9yZGVyID0gbWluX3QodW5zaWduZWQgaW50LCBvcmRlciwgaWxvZzIocmVtYWluaW5nKSk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICg7Oykge1xuJiM0MztcdFx0XHRnZnAgPSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTztcbiYjNDM7XHRcdFx0aWYgKG9yZGVyKVxuJiM0MztcdFx0XHRcdGdmcCB8PSBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOO1xuJiM0MztcdFx0XHRwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIG9yZGVyKTtcbiYjNDM7XHRcdFx0aWYgKHBhZ2UpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGlmICghb3JkZXIpXG4mIzQzO1x0XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHRcdG9yZGVyLS07XG4mIzQzO1x0XHR9XG4gXG4tXHRyZXR1cm4gbmV0X2RldmljZTtcbiYjNDM7XHRcdHJldCA9IHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKSxcbiYjNDM7XHRcdFx0XHRcdCAgIDFVIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgZmFpbGVkOyB0aGUgcGFnZSBzdGF0ZSBpc1xuJiM0MztcdFx0XHQgKiB1bmtub3duIHNvIGl0IG11c3QgYmUgbGVha2VkIHJhdGhlciB0aGFuIGZyZWVkLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0Y2h1bmtzW2NodW5rX2NudF0ucGFnZSA9IHBhZ2U7XG4mIzQzO1x0XHRjaHVua3NbY2h1bmtfY250XS5vcmRlciA9IG9yZGVyO1xuJiM0MztcdFx0Y2h1bmtfY250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoMVUgXHUwMDNjXHUwMDNjIG9yZGVyKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdHBhZ2VzW3BhZ2VfaWR4JiM0MzsmIzQzO10gPSBwYWdlICYjNDM7IGk7XG4mIzQzO1xuJiM0MztcdFx0cmVtYWluaW5nIC09IDFVIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFkZHIgPSB2bWFwKHBhZ2VzLCBucl9wYWdlcywgVk1fTUFQLCBwZ3Byb3RfZGVjcnlwdGVkKFBBR0VfS0VSTkVMKSk7XG4mIzQzO1x0aWYgKCFhZGRyKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGt2ZnJlZShwYWdlcyk7XG4mIzQzO1x0KmNodW5rc19vdXQgPSBjaHVua3M7XG4mIzQzO1x0KmNodW5rX2NudF9vdXQgPSBjaHVua19jbnQ7XG4mIzQzO1x0cmV0dXJuIGFkZHI7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0a3ZmcmVlKHBhZ2VzKTtcbiYjNDM7XHRuZXR2c2NfZnJlZV9idWZfcGFnZXMoTlVMTCwgY2h1bmtzLCBjaHVua19jbnQpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuJiM0MztzdGF0aWMgdm9pZCBfX2ZyZWVfbmV0dnNjX2RldmljZShzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbnZkZXYpXG4ge1xuLVx0c3RydWN0IG5ldHZzY19kZXZpY2UgKm52ZGV2XG4tXHRcdD0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBuZXR2c2NfZGV2aWNlLCByY3UpO1xuIFx0aW50IGk7XG4gXG4gXHRrZnJlZShudmRldi1cdTAwM2VleHRlbnNpb24pO1xuIFxuLVx0aWYgKCFudmRldi1cdTAwM2VyZWN2X2J1Zl9ncGFkbF9oYW5kbGUuZGVjcnlwdGVkKVxuLVx0XHR2ZnJlZShudmRldi1cdTAwM2VyZWN2X2J1Zik7XG4tXHRpZiAoIW52ZGV2LVx1MDAzZXNlbmRfYnVmX2dwYWRsX2hhbmRsZS5kZWNyeXB0ZWQpXG4tXHRcdHZmcmVlKG52ZGV2LVx1MDAzZXNlbmRfYnVmKTtcbiYjNDM7XHRuZXR2c2NfZnJlZV9idWZfcGFnZXMobnZkZXYtXHUwMDNlcmVjdl9idWYsIG52ZGV2LVx1MDAzZXJlY3ZfYnVmX2NodW5rcyxcbiYjNDM7XHRcdFx0ICAgICAgbnZkZXYtXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcbiYjNDM7XHRuZXR2c2NfZnJlZV9idWZfcGFnZXMobnZkZXYtXHUwMDNlc2VuZF9idWYsIG52ZGV2LVx1MDAzZXNlbmRfYnVmX2NodW5rcyxcbiYjNDM7XHRcdFx0ICAgICAgbnZkZXYtXHUwMDNlc2VuZF9idWZfY2h1bmtfY250KTtcbiBcdGJpdG1hcF9mcmVlKG52ZGV2LVx1MDAzZXNlbmRfc2VjdGlvbl9tYXApO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVlJTU19DSEFOTkVMX01BWDsgaSYjNDM7JiM0MzspIHtcbkBAIC0xNzAsOSAmIzQzOzI5Nyw1NiBAQCBzdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIFx0a2ZyZWUobnZkZXYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByY3Vfd29yayAqcndvcmsgPSB0b19yY3Vfd29yayh3KTtcbiYjNDM7XG4mIzQzO1x0X19mcmVlX25ldHZzY19kZXZpY2UoY29udGFpbmVyX29mKHJ3b3JrLCBzdHJ1Y3QgbmV0dnNjX2RldmljZSwgcndvcmspKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG5ldHZzY193b3JrcXVldWVfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0bmV0dnNjX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O2h2X25ldHZzY1wmIzM0OywgV1FfVU5CT1VORCwgMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuZXR2c2Nfd3EgPyAwIDogLUVOT01FTTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3kodm9pZClcbiYjNDM7e1xuJiM0MztcdHJjdV9iYXJyaWVyKCk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUobmV0dnNjX3dxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBuZXR2c2NfZGV2aWNlICphbGxvY19uZXRfZGV2aWNlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZTtcbiYjNDM7XG4mIzQzO1x0bmV0X2RldmljZSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBuZXR2c2NfZGV2aWNlKTtcbiYjNDM7XHRpZiAoIW5ldF9kZXZpY2UpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXdhaXRfZHJhaW4pO1xuJiM0MztcdG5ldF9kZXZpY2UtXHUwMDNlZGVzdHJveSA9IGZhbHNlO1xuJiM0MztcdG5ldF9kZXZpY2UtXHUwMDNldHhfZGlzYWJsZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdG5ldF9kZXZpY2UtXHUwMDNlbWF4X3BrdCA9IFJORElTX01BWF9QS1RfREVGQVVMVDtcbiYjNDM7XHRuZXRfZGV2aWNlLVx1MDAzZXBrdF9hbGlnbiA9IFJORElTX1BLVF9BTElHTl9ERUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2bmV0X2RldmljZS1cdTAwM2VjaGFubmVsX2luaXRfd2FpdCk7XG4mIzQzO1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXN1YmNoYW5fb3Blbik7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc3ViY2hhbl93b3JrLCBuZXR2c2Nfc3ViY2hhbl93b3JrKTtcbiYjNDM7XHRJTklUX1JDVV9XT1JLKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcndvcmssIGZyZWVfbmV0dnNjX2RldmljZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuZXRfZGV2aWNlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGZyZWVfbmV0dnNjX2RldmljZV9yY3Uoc3RydWN0IG5ldHZzY19kZXZpY2UgKm52ZGV2KVxuIHtcbi1cdGNhbGxfcmN1KFx1MDAyNm52ZGV2LVx1MDAzZXJjdSwgZnJlZV9uZXR2c2NfZGV2aWNlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERlZmVyIHRoZSBhY3R1YWwgZnJlZSB0byBwcm9jZXNzIGNvbnRleHQ6IHZ1bm1hcCgpIGFuZFxuJiM0MztcdCAqIHNldF9tZW1vcnlfZW5jcnlwdGVkKCkgY2Fubm90IHJ1biBmcm9tIFJDVSBzb2Z0aXJxIGNvbnRleHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cXVldWVfcmN1X3dvcmsobmV0dnNjX3dxLCBcdTAwMjZudmRldi1cdTAwM2Vyd29yayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5ldHZzY19yZXZva2VfcmVjdl9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuQEAgLTM1MSw3ICYjNDM7NTI1LDIwIEBAIHN0YXRpYyBpbnQgbmV0dnNjX2luaXRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcbiBcdFx0YnVmX3NpemUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGJ1Zl9zaXplLFxuIFx0XHRcdFx0IE5FVFZTQ19SRUNFSVZFX0JVRkZFUl9TSVpFX0xFR0FDWSk7XG4gXG4tXHRuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmID0gdnphbGxvYyhidWZfc2l6ZSk7XG4mIzQzO1x0aWYgKGRldmljZS1cdTAwM2VjaGFubmVsLVx1MDAzZWNvX2V4dGVybmFsX21lbW9yeSkge1xuJiM0MztcdFx0LyogQ29uZmlkZW50aWFsIFZNIEJ1cyBsZWF2ZXMgYnVmZmVyIGVuY3J5cHRlZCAqL1xuJiM0MztcdFx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua3MgPSBOVUxMO1xuJiM0MztcdFx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua19jbnQgPSAwO1xuJiM0MztcdFx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBPdGhlcndpc2UsIGFsbG9jYXRlIGRlY3J5cHRlZCBidWZmZXIgKi9cbiYjNDM7XHRcdG5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYgPVxuJiM0MztcdFx0XHRuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGNwdV90b19ub2RlKGRldmljZS1cdTAwM2VjaGFubmVsLVx1MDAzZXRhcmdldF9jcHUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGJ1Zl9zaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKCFuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmKSB7XG4gXHRcdG5ldGRldl9lcnIobmRldixcbiBcdFx0XHQgICBcJiMzNDt1bmFibGUgdG8gYWxsb2NhdGUgcmVjZWl2ZSBidWZmZXIgb2Ygc2l6ZSAldVxcblwmIzM0OyxcbkBAIC0zNjcsOSAmIzQzOzU1NCwxMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHQgKiBjaGFubmVsLiAgTm90ZTogVGhpcyBjYWxsIHVzZXMgdGhlIHZtYnVzIGNvbm5lY3Rpb24gcmF0aGVyXG4gXHQgKiB0aGFuIHRoZSBjaGFubmVsIHRvIGVzdGFibGlzaCB0aGUgZ3BhZGwgaGFuZGxlLlxuIFx0ICovXG4tXHRyZXQgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoZGV2aWNlLVx1MDAzZWNoYW5uZWwsIG5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYsXG4tXHRcdFx0XHQgICAgYnVmX3NpemUsXG4tXHRcdFx0XHQgICAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9ncGFkbF9oYW5kbGUpO1xuJiM0MztcdHJldCA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkKGRldmljZS1cdTAwM2VjaGFubmVsLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIG5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgYnVmX3NpemUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9ncGFkbF9oYW5kbGUpO1xuIFx0aWYgKHJldCAhPSAwKSB7XG4gXHRcdG5ldGRldl9lcnIobmRldixcbiBcdFx0XHRcJiMzNDt1bmFibGUgdG8gZXN0YWJsaXNoIHJlY2VpdmUgYnVmZmVyJiMzOTtzIGdwYWRsXFxuXCYjMzQ7KTtcbkBAIC00NTcsNyAmIzQzOzY0NSwxOSBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRidWZfc2l6ZSA9IGRldmljZV9pbmZvLVx1MDAzZXNlbmRfc2VjdGlvbnMgKiBkZXZpY2VfaW5mby1cdTAwM2VzZW5kX3NlY3Rpb25fc2l6ZTtcbiBcdGJ1Zl9zaXplID0gcm91bmRfdXAoYnVmX3NpemUsIFBBR0VfU0laRSk7XG4gXG4tXHRuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmID0gdnphbGxvYyhidWZfc2l6ZSk7XG4mIzQzO1x0aWYgKGRldmljZS1cdTAwM2VjaGFubmVsLVx1MDAzZWNvX2V4dGVybmFsX21lbW9yeSkge1xuJiM0MztcdFx0LyogQ29uZmlkZW50aWFsIFZNIEJ1cyBsZWF2ZXMgYnVmZmVyIGVuY3J5cHRlZCAqL1xuJiM0MztcdFx0bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zl9jaHVua3MgPSBOVUxMO1xuJiM0MztcdFx0bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zl9jaHVua19jbnQgPSAwO1xuJiM0MztcdFx0bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBPdGhlcndpc2UsIGFsbG9jYXRlIGRlY3J5cHRlZCBidWZmZXIgKi9cbiYjNDM7XHRcdG5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYgPVxuJiM0MztcdFx0XHRuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGNwdV90b19ub2RlKGRldmljZS1cdTAwM2VjaGFubmVsLVx1MDAzZXRhcmdldF9jcHUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGJ1Zl9zaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfY2h1bmtfY250KTtcbiYjNDM7XHR9XG4gXHRpZiAoIW5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYpIHtcbiBcdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDt1bmFibGUgdG8gYWxsb2NhdGUgc2VuZCBidWZmZXIgb2Ygc2l6ZSAldVxcblwmIzM0OyxcbiBcdFx0XHQgICBidWZfc2l6ZSk7XG5AQCAtNDcwLDkgJiM0Mzs2NzAsMTAgQEAgc3RhdGljIGludCBuZXR2c2NfaW5pdF9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuIFx0ICogY2hhbm5lbC4gIE5vdGU6IFRoaXMgY2FsbCB1c2VzIHRoZSB2bWJ1cyBjb25uZWN0aW9uIHJhdGhlclxuIFx0ICogdGhhbiB0aGUgY2hhbm5lbCB0byBlc3RhYmxpc2ggdGhlIGdwYWRsIGhhbmRsZS5cbiBcdCAqL1xuLVx0cmV0ID0gdm1idXNfZXN0YWJsaXNoX2dwYWRsKGRldmljZS1cdTAwM2VjaGFubmVsLCBuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmLFxuLVx0XHRcdFx0ICAgIGJ1Zl9zaXplLFxuLVx0XHRcdFx0ICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlKTtcbiYjNDM7XHRyZXQgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZChkZXZpY2UtXHUwMDNlY2hhbm5lbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGJ1Zl9zaXplLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlKTtcbiBcdGlmIChyZXQgIT0gMCkge1xuIFx0XHRuZXRkZXZfZXJyKG5kZXYsXG4gXHRcdFx0ICAgXCYjMzQ7dW5hYmxlIHRvIGVzdGFibGlzaCBzZW5kIGJ1ZmZlciYjMzk7cyBncGFkbFxcblwmIzM0Oyk7XG5AQCAtMTg2Myw3ICYjNDM7MjA2NCwxMSBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2bmV0X2RldmljZS1cdTAwM2VjaGFuX3RhYmxlWzBdLm5hcGkpO1xuIFxuIGNsZWFudXAyOlxuLVx0ZnJlZV9uZXR2c2NfZGV2aWNlKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmN1KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIG5ldF9kZXZpY2Ugd2FzIG5ldmVyIHB1Ymxpc2hlZCwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gd2FpdCBmb3IgYW5cbiYjNDM7XHQgKiBSQ1UgZ3JhY2UgcGVyaW9kIC0tIGNhbGwgdGhlIGZyZWUgcm91dGluZSBzeW5jaHJvbm91c2x5LlxuJiM0MztcdCAqL1xuJiM0MztcdF9fZnJlZV9uZXR2c2NfZGV2aWNlKG5ldF9kZXZpY2UpO1xuIFxuIFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcbmluZGV4IGVlNWFiNWNlYjJiZTJkLi4xZDQzYzczZmQ3M2YxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcbkBAIC0yODY3LDEyICYjNDM7Mjg2NywxNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbmV0dnNjX2Rydl9leGl0KHZvaWQpXG4ge1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2bmV0dnNjX25ldGRldl9ub3RpZmllcik7XG4gXHR2bWJ1c19kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZuZXR2c2NfZHJ2KTtcbiYjNDM7XHRuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3koKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2luaXQgbmV0dnNjX2Rydl9pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRyZXQgPSBuZXR2c2Nfd29ya3F1ZXVlX2luaXQoKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4gXHRpZiAocmluZ19zaXplIFx1MDAzYyBSSU5HX1NJWkVfTUlOKSB7XG4gXHRcdHJpbmdfc2l6ZSA9IFJJTkdfU0laRV9NSU47XG4gXHRcdHByX2luZm8oXCYjMzQ7SW5jcmVhc2VkIHJpbmdfc2l6ZSB0byAldSAobWluIGFsbG93ZWQpXFxuXCYjMzQ7LFxuQEAgLTI4OTAsNiAmIzQzOzI4OTUsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXR2c2NfZHJ2X2luaXQodm9pZClcbiBcbiBlcnJfdm1idXNfcmVnOlxuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2bmV0dnNjX25ldGRldl9ub3RpZmllcik7XG4mIzQzO1x0bmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oIGIvaW5jbHVkZS9saW51eC9oeXBlcnYuaFxuaW5kZXggOTY0ZjFiZTgxNTBjNTkuLjljNmIxYjc3OTRiNDhlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9oeXBlcnYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9oeXBlcnYuaFxuQEAgLTc4MSw2ICYjNDM7NzgxLDEyIEBAIHN0cnVjdCB2bWJ1c19ncGFkbCB7XG4gXHR1MzIgZ3BhZGxfaGFuZGxlO1xuIFx0dTMyIHNpemU7XG4gXHR2b2lkICpidWZmZXI7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbmx5IHVzZWQgaWYgdGhlIHZtYnVzIGxheWVyIG93bnMgdGhlIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mXG4mIzQzO1x0ICogQGJ1ZmZlci5cbiYjNDM7XHQgKiBJbmRpY2F0ZXMgQGJ1ZmZlciBtdXN0IGJlIHJlLWVuY3J5cHRlZCBhdCB0ZWFyZG93biBvciB0aGF0IGl0XG4mIzQzO1x0ICogbXVzdCBiZSBsZWFrZWQgYmVjYXVzZSByZS1lbmNyeXB0aW9uIGZhaWxlZC5cbiYjNDM7XHQgKi9cbiBcdGJvb2wgZGVjcnlwdGVkO1xuIH07XG4gXG5AQCAtMTIwNSw2ICYjNDM7MTIxMSwxMSBAQCBleHRlcm4gaW50IHZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiBcdFx0XHRcdCAgICAgIHUzMiBzaXplLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbCk7XG4gXG4mIzQzO2V4dGVybiBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgdm9pZCAqa2J1ZmZlcixcbiYjNDM7XHRcdFx0XHRcdFx0ICB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgdm1idXNfZ3BhZGwgKmdwYWRsKTtcbiYjNDM7XG4gZXh0ZXJuIGludCB2bWJ1c190ZWFyZG93bl9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hZUEVSViYjMzQ7LAogICAgJiMzNDtIWVBFUlZfTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQmIzM0OywKICAgICYjMzQ7dm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0JiMzNDssCiAgICAmIzM0O25ldHZzY19hbGxvY19idWZfcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0dnNjX2ZyZWVfYnVmX3BhZ2VzJiMzNDssCiAgICAmIzM0O25ldHZzY19pbml0X2J1ZiYjMzQ7LAogICAgJiMzNDtfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSHlwZXItViBuZXR3b3JrIGRyaXZlciAobmV0dnNjKSBhbmQgVk1CdXMgY2hhbm5lbCBjb2RlIHRvIG1hbmFnZSB0aGUgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2YgR1BBREwgYnVmZmVycywgcGFydGljdWxhcmx5IGZvciBDb25maWRlbnRpYWwgVk1zLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gYWxsb2NhdGUvZnJlZSBidWZmZXJzIGFuZCBlc3RhYmxpc2ggR1BBRExzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA0YjVmZDg2OTcxZjIyMDYxYzA5Yzg4ZGI1ZWNmNzU5ZWIyMmNiZDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyMiAxNDo1NDowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvY2hhbm5lbC5jIGIvZHJpdmVycy9odi9jaGFubmVsLmMKaW5kZXggNjgyMWYyMjUyNDhiMTkuLjAxNjYzNjdhNGRmMzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h2L2NoYW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2h2L2NoYW5uZWwuYwpAQCAtNDI2LDcgJiM0Mzs0MjYsMTMgQEAgc3RhdGljIHZvaWQgdm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8oc3RydWN0IHZtYnVzX2NoYW5uZWxfbXNnaW5mbyAqbXNnaW5mbykKIH0KIAogLyoKLSAqIF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsIC0gRXN0YWJsaXNoIGEgR1BBREwgZm9yIGEgYnVmZmVyIG9yIHJpbmdidWZmZXIKJiM0MzsgKiBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbCAtIEVzdGFibGlzaCBhIEdQQURMIGZvciBhIGJ1ZmZlciBvciByaW5nYnVmZmVyLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBvbmx5IGhhbmRsZXMgdGhlIEdQQURMIGhhbmRzaGFrZSB3aXRoIHRoZSBob3N0LiAgVGhlIGNhbGxlcgomIzQzOyAqIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IEBrYnVmZmVyIGlzIGluIHRoZSBlbmNyeXB0aW9uIHN0YXRlIHRoZQomIzQzOyAqIGhvc3QgZXhwZWN0cyAoaG9zdC12aXNpYmxlIC8gJiMzNDtkZWNyeXB0ZWQmIzM0OyBmb3IgY29uZmlkZW50aWFsIFZNcyk7IHRoaXMKJiM0MzsgKiBmdW5jdGlvbiBuZXZlciBjYWxscyBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9yIHNldF9tZW1vcnlfZW5jcnlwdGVkKCkuCiYjNDM7ICogSXQgYWxzbyBsZWF2ZXMgZ3BhZGwtJmd0O2RlY3J5cHRlZCB1bnRvdWNoZWQsIHNvIHRoZSBjYWxsZXIgbXVzdCBzZXQgaXQuCiAgKgogICogQGNoYW5uZWw6IGEgY2hhbm5lbAogICogQHR5cGU6IHRoZSB0eXBlIG9mIHRoZSBjb3JyZXNwb25kaW5nIEdQQURMLCBvbmx5IG1lYW5pbmdmdWwgZm9yIHRoZSBndWVzdC4KQEAgLTQzNCw3ICYjNDM7NDQwLDcgQEAgc3RhdGljIHZvaWQgdm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8oc3RydWN0IHZtYnVzX2NoYW5uZWxfbXNnaW5mbyAqbXNnaW5mbykKICAqIEBzaXplOiBwYWdlLXNpemUgbXVsdGlwbGUKICAqIEBzZW5kX29mZnNldDogdGhlIG9mZnNldCAoaW4gYnl0ZXMpIHdoZXJlIHRoZSBzZW5kIHJpbmcgYnVmZmVyIHN0YXJ0cywKICAqICAgICAgICAgICAgICBzaG91bGQgYmUgMCBmb3IgQlVGRkVSIHR5cGUgZ3BhZGwKLSAqIEBncGFkbF9oYW5kbGU6IHNvbWUgZnVua3kgdGhpbmcKJiM0MzsgKiBAZ3BhZGw6IG91dCBwYXJhbWV0ZXIgcmVjZWl2aW5nIHRoZSBlc3RhYmxpc2hlZCBHUEFETCBoYW5kbGUvYnVmZmVyL3NpemUKICAqLwogc3RhdGljIGludCBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCQkgICBlbnVtIGh2X2dwYWRsX3R5cGUgdHlwZSwgdm9pZCAqa2J1ZmZlciwKQEAgLTQ1NCwzMCAmIzQzOzQ2MCw4IEBAIHN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsCiAJCShhdG9taWNfaW5jX3JldHVybigmYW1wO3ZtYnVzX2Nvbm5lY3Rpb24ubmV4dF9ncGFkbF9oYW5kbGUpIC0gMSk7CiAKIAlyZXQgPSBjcmVhdGVfZ3BhZGxfaGVhZGVyKHR5cGUsIGtidWZmZXIsIHNpemUsIHNlbmRfb2Zmc2V0LCAmYW1wO21zZ2luZm8pOwotCWlmIChyZXQpIHsKLQkJZ3BhZGwtJmd0O2RlY3J5cHRlZCA9IGZhbHNlOwomIzQzOwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCX0KLQotCWdwYWRsLSZndDtkZWNyeXB0ZWQgPSAhKChjaGFubmVsLSZndDtjb19leHRlcm5hbF9tZW1vcnkgJmFtcDsmYW1wOyB0eXBlID09IEhWX0dQQURMX0JVRkZFUikgfHwKLQkJKGNoYW5uZWwtJmd0O2NvX3JpbmdfYnVmZmVyICZhbXA7JmFtcDsgdHlwZSA9PSBIVl9HUEFETF9SSU5HKSk7Ci0JaWYgKGdwYWRsLSZndDtkZWNyeXB0ZWQpIHsKLQkJLyoKLQkJICogVGhlICYjMzQ7ZGVjcnlwdGVkJiMzNDsgZmxhZyBiZWluZyB0cnVlIGFzc3VtZXMgdGhhdCBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIHN1Y2NlZWRzLgotCQkgKiBCdXQgaWYgaXQgZmFpbHMsIHRoZSBlbmNyeXB0aW9uIHN0YXRlIG9mIHRoZSBtZW1vcnkgaXMgdW5rbm93bi4gSW4gdGhhdCBjYXNlLAotCQkgKiBsZWF2ZSAmIzM0O2RlY3J5cHRlZCYjMzQ7IGFzIHRydWUgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgbGVha2VkIGluc3RlYWQgb2YgZ29pbmcgYmFjawotCQkgKiBvbiB0aGUgZnJlZSBsaXN0LgotCQkgKi8KLQkJcmV0ID0gc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpa2J1ZmZlciwKLQkJCQkJUEZOX1VQKHNpemUpKTsKLQkJaWYgKHJldCkgewotCQkJZGV2X3dhcm4oJmFtcDtjaGFubmVsLSZndDtkZXZpY2Vfb2JqLSZndDtkZXZpY2UsCi0JCQkJJiMzNDtGYWlsZWQgdG8gc2V0IGhvc3QgdmlzaWJpbGl0eSBmb3IgbmV3IEdQQURMICVkLlxuJiMzNDssCi0JCQkJcmV0KTsKLQkJCXZtYnVzX2ZyZWVfY2hhbm5lbF9tc2dpbmZvKG1zZ2luZm8pOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KIAogCWluaXRfY29tcGxldGlvbigmYW1wO21zZ2luZm8tJmd0O3dhaXRldmVudCk7CiAJbXNnaW5mby0mZ3Q7d2FpdGluZ19jaGFubmVsID0gY2hhbm5lbDsKQEAgLTU1MywxOSAmIzQzOzUzNyw0NyBAQCBzdGF0aWMgaW50IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2bWJ1c19jb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywgZmxhZ3MpOwogCiAJdm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8obXNnaW5mbyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQogCi0JaWYgKHJldCkgewotCQkvKgotCQkgKiBJZiBzZXRfbWVtb3J5X2VuY3J5cHRlZCgpIGZhaWxzLCB0aGUgZGVjcnlwdGVkIGZsYWcgaXMKLQkJICogbGVmdCBhcyB0cnVlIHNvIHRoZSBtZW1vcnkgaXMgbGVha2VkIGluc3RlYWQgb2YgYmVpbmcKLQkJICogcHV0IGJhY2sgb24gdGhlIGZyZWUgbGlzdC4KLQkJICovCi0JCWlmIChncGFkbC0mZ3Q7ZGVjcnlwdGVkKSB7Ci0JCQlpZiAoIXNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSkpCi0JCQkJZ3BhZGwtJmd0O2RlY3J5cHRlZCA9IGZhbHNlOwomIzQzOy8qCiYjNDM7ICogdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0IC0gTWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZgomIzQzOyAqIEBrYnVmZmVyIGFyb3VuZCBhIF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKCkgY2FsbC4KJiM0MzsgKgomIzQzOyAqIERlY3J5cHRzIEBrYnVmZmVyIChtYWtpbmcgaXQgaG9zdC12aXNpYmxlKSB1bmxlc3MgdGhlIGNoYW5uZWwgd2FzIGNyZWF0ZWQKJiM0MzsgKiB3aXRoIGNvbmZpZGVudGlhbCBtZW1vcnkgZm9yIEB0eXBlLCB0aGVuIGVzdGFibGlzaGVzIHRoZSBHUEFETC4gIE9uCiYjNDM7ICogZXN0YWJsaXNoIGZhaWx1cmUgdGhlIGJ1ZmZlciBpcyByZS1lbmNyeXB0ZWQgc28gdGhlIGNhbGxlciBjYW4gZnJlZSBpdC4KJiM0MzsgKgomIzQzOyAqIFNldHMgZ3BhZGwtJmd0O2RlY3J5cHRlZDsgc2VlIHRoZSBjb21tZW50IG9uIHN0cnVjdCB2bWJ1c19ncGFkbDo6ZGVjcnlwdGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAomIzQzOwkJCQkJICAgICBlbnVtIGh2X2dwYWRsX3R5cGUgdHlwZSwKJiM0MzsJCQkJCSAgICAgdm9pZCAqa2J1ZmZlciwgdTMyIHNpemUsCiYjNDM7CQkJCQkgICAgIHUzMiBzZW5kX29mZnNldCwKJiM0MzsJCQkJCSAgICAgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbCkKJiM0Mzt7CiYjNDM7CWJvb2wgZGVjcnlwdCA9ICEoKGNoYW5uZWwtJmd0O2NvX2V4dGVybmFsX21lbW9yeSAmYW1wOyZhbXA7IHR5cGUgPT0gSFZfR1BBRExfQlVGRkVSKSB8fAomIzQzOwkJCSAoY2hhbm5lbC0mZ3Q7Y29fcmluZ19idWZmZXIgJmFtcDsmYW1wOyB0eXBlID09IEhWX0dQQURMX1JJTkcpKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGRlY3J5cHQpIHsKJiM0MzsJCXJldCA9IHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGV2X3dhcm4oJmFtcDtjaGFubmVsLSZndDtkZXZpY2Vfb2JqLSZndDtkZXZpY2UsCiYjNDM7CQkJCSAmIzM0O0ZhaWxlZCB0byBzZXQgaG9zdCB2aXNpYmlsaXR5IGZvciBuZXcgR1BBREwgJWQuXG4mIzM0OywKJiM0MzsJCQkJIHJldCk7CiYjNDM7CQkJLyogRW5jcnlwdGlvbiBzdGF0ZSB1bmtub3duOyBzaWduYWwgY2FsbGVyIHRvIGxlYWsuICovCiYjNDM7CQkJZ3BhZGwtJmd0O2RlY3J5cHRlZCA9IHRydWU7CiYjNDM7CQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIAomIzQzOwlncGFkbC0mZ3Q7ZGVjcnlwdGVkID0gZGVjcnlwdDsKJiM0MzsJcmV0ID0gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoY2hhbm5lbCwgdHlwZSwga2J1ZmZlciwgc2l6ZSwgc2VuZF9vZmZzZXQsCiYjNDM7CQkJCSAgICAgIGdwYWRsKTsKJiM0MzsJaWYgKHJldCAmYW1wOyZhbXA7IGRlY3J5cHQgJmFtcDsmYW1wOwomIzQzOwkgICAgIXNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSkpCiYjNDM7CQlncGFkbC0mZ3Q7ZGVjcnlwdGVkID0gZmFsc2U7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTgwLDExICYjNDM7NTkyLDQwIEBAIHN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsCiBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLCB2b2lkICprYnVmZmVyLAogCQkJICB1MzIgc2l6ZSwgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbCkKIHsKLQlyZXR1cm4gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoY2hhbm5lbCwgSFZfR1BBRExfQlVGRkVSLCBrYnVmZmVyLCBzaXplLAotCQkJCSAgICAgICAwVSwgZ3BhZGwpOwomIzQzOwlyZXR1cm4gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KGNoYW5uZWwsIEhWX0dQQURMX0JVRkZFUiwKJiM0MzsJCQkJCQkga2J1ZmZlciwgc2l6ZSwgMFUsIGdwYWRsKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2VzdGFibGlzaF9ncGFkbCk7CiAKJiM0MzsvKgomIzQzOyAqIHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkIC0gRXN0YWJsaXNoIGEgR1BBREwgZm9yIGEgYnVmZmVyCiYjNDM7ICogd2hvc2UgZW5jcnlwdGlvbiBzdGF0ZSBpcyBtYW5hZ2VkIGJ5IHRoZSBjYWxsZXIuCiYjNDM7ICoKJiM0MzsgKiBAY2hhbm5lbDogYSBjaGFubmVsCiYjNDM7ICogQGtidWZmZXI6IGEgYnVmZmVyIHRoYXQgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSB0cmFuc2l0aW9uZWQgdG8gaG9zdC12aXNpYmxlCiYjNDM7ICogICAgICAgICAgIChkZWNyeXB0ZWQpIHZpYSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9yIGFuIGVxdWl2YWxlbnQgbWVjaGFuaXNtLgomIzQzOyAqIEBzaXplOiBwYWdlLXNpemUgbXVsdGlwbGUKJiM0MzsgKiBAZ3BhZGw6IG91dCBwYXJhbWV0ZXIgcmVjZWl2aW5nIHRoZSBlc3RhYmxpc2hlZCBHUEFETAomIzQzOyAqCiYjNDM7ICogVW5saWtlIHZtYnVzX2VzdGFibGlzaF9ncGFkbCgpLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNhbGwKJiM0MzsgKiBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9uIEBrYnVmZmVyLCBhbmQgdGhlIG1hdGNoaW5nIHZtYnVzX3RlYXJkb3duX2dwYWRsKCkKJiM0MzsgKiBjYWxsIHdpbGwgbm90IGNhbGwgc2V0X21lbW9yeV9lbmNyeXB0ZWQoKSBvbiBpdC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUKJiM0MzsgKiBmb3IgdGhlIGZ1bGwgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2YgQGtidWZmZXI7IG9uIHJldHVybiBncGFkbC0mZ3Q7ZGVjcnlwdGVkCiYjNDM7ICogaXMgc2V0IHRvIGZhbHNlIHRvIHJlY29yZCB0aGF0IHZtYnVzIGRvZXMgbm90IG93biB0aGUgZW5jcnlwdGlvbiBzdGF0ZS4KJiM0MzsgKi8KJiM0MztpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsCiYjNDM7CQkJCQkgICB2b2lkICprYnVmZmVyLCB1MzIgc2l6ZSwKJiM0MzsJCQkJCSAgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoY2hhbm5lbCwgSFZfR1BBRExfQlVGRkVSLCBrYnVmZmVyLAomIzQzOwkJCQkJICBzaXplLCAwVSwgZ3BhZGwpOwomIzQzOwomIzQzOwkvKiBDYWxsZXIgb3ducyBAa2J1ZmZlciYjMzk7cyBlbmNyeXB0aW9uOyB0ZWFyZG93biBtdXN0IG5vdCB0b3VjaCBpdC4gKi8KJiM0MzsJZ3BhZGwtJmd0O2RlY3J5cHRlZCA9IGZhbHNlOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCk7CiYjNDM7CiAvKioKICAqIHJlcXVlc3RfYXJyX2luaXQgLSBBbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGUgcmVxdWVzdG9yIGFycmF5LiBFYWNoIHNsb3QKICAqIGtlZXBzIHRyYWNrIG9mIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBhcnJheS4gSW5pdGlhbGx5LCBlYWNoCkBAIC02ODUsMTEgJiM0Mzs3MjYsMTEgQEAgc3RhdGljIGludCBfX3ZtYnVzX29wZW4oc3RydWN0IHZtYnVzX2NoYW5uZWwgKm5ld2NoYW5uZWwsCiAJLyogRXN0YWJsaXNoIHRoZSBncGFkbCBmb3IgdGhlIHJpbmcgYnVmZmVyICovCiAJbmV3Y2hhbm5lbC0mZ3Q7cmluZ2J1ZmZlcl9ncGFkbGhhbmRsZS5ncGFkbF9oYW5kbGUgPSAwOwogCi0JZXJyID0gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwobmV3Y2hhbm5lbCwgSFZfR1BBRExfUklORywKLQkJCQkgICAgICBwYWdlX2FkZHJlc3MobmV3Y2hhbm5lbC0mZ3Q7cmluZ2J1ZmZlcl9wYWdlKSwKLQkJCQkgICAgICAoc2VuZF9wYWdlcyAmIzQzOyByZWN2X3BhZ2VzKSAmbHQ7Jmx0OyBQQUdFX1NISUZULAotCQkJCSAgICAgIG5ld2NoYW5uZWwtJmd0O3JpbmdidWZmZXJfc2VuZF9vZmZzZXQgJmx0OyZsdDsgUEFHRV9TSElGVCwKLQkJCQkgICAgICAmYW1wO25ld2NoYW5uZWwtJmd0O3JpbmdidWZmZXJfZ3BhZGxoYW5kbGUpOwomIzQzOwllcnIgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHQobmV3Y2hhbm5lbCwgSFZfR1BBRExfUklORywKJiM0MzsJCQkJCQlwYWdlX2FkZHJlc3MobmV3Y2hhbm5lbC0mZ3Q7cmluZ2J1ZmZlcl9wYWdlKSwKJiM0MzsJCQkJCQkoc2VuZF9wYWdlcyAmIzQzOyByZWN2X3BhZ2VzKSAmbHQ7Jmx0OyBQQUdFX1NISUZULAomIzQzOwkJCQkJCW5ld2NoYW5uZWwtJmd0O3JpbmdidWZmZXJfc2VuZF9vZmZzZXQgJmx0OyZsdDsgUEFHRV9TSElGVCwKJiM0MzsJCQkJCQkmYW1wO25ld2NoYW5uZWwtJmd0O3JpbmdidWZmZXJfZ3BhZGxoYW5kbGUpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3JfY2xlYW5fcmluZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaCBiL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmgKaW5kZXggNzM5N2M2OTNmOTg0YWYuLmIwYzRjYjBmN2E0Y2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmgKQEAgLTIyMCw2ICYjNDM7MjIwLDggQEAgc3RydWN0IG5ldF9kZXZpY2VfY29udGV4dDsKIAogZXh0ZXJuIHUzMiBuZXR2c2NfcmluZ19ieXRlczsKIAomIzQzO2ludCBuZXR2c2Nfd29ya3F1ZXVlX2luaXQodm9pZCk7CiYjNDM7dm9pZCBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3kodm9pZCk7CiBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLAogCQkJCQljb25zdCBzdHJ1Y3QgbmV0dnNjX2RldmljZV9pbmZvICppbmZvKTsKIGludCBuZXR2c2NfYWxsb2NfcmVjdl9jb21wX3Jpbmcoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsIHUzMiBxX2lkeCk7CkBAIC0xMTQ3LDYgJiM0MzsxMTQ5LDE2IEBAIHN0cnVjdCBuZXR2c2NfY2hhbm5lbCB7CiAJc3RydWN0IG5ldHZzY19zdGF0c19yeCByeF9zdGF0czsKIH07CiAKJiM0MzsvKiBBIHBoeXNpY2FsbHktY29udGlndW91cyBjaHVuayBvZiBuZXR2c2MgYnVmZmVyLgomIzQzOyAqCiYjNDM7ICogVGhlIGNodW5rIGxpc3QgaXMgcHJlc2VydmVkIHNvIGVhY2ggY2h1bmsgY2FuIGJlIGluZGl2aWR1YWxseSBmcmVlZCBhdAomIzQzOyAqIHRlYXJkb3duLgomIzQzOyAqLwomIzQzO3N0cnVjdCBuZXR2c2NfYnVmX2NodW5rIHsKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXVuc2lnbmVkIGludCBvcmRlcjsKJiM0Mzt9OwomIzQzOwogLyogUGVyIG5ldHZzYyBkZXZpY2UgKi8KIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHsKIAl1MzIgbnZzcF92ZXJzaW9uOwpAQCAtMTE1OCw2ICYjNDM7MTE3MCw4IEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHsKIAkvKiBSZWNlaXZlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdXMgYnV0IG1hbmFnZXMgYnkgTmV0VlNQICovCiAJdm9pZCAqcmVjdl9idWY7CiAJdTMyIHJlY3ZfYnVmX3NpemU7IC8qIGFsbG9jYXRlZCBieXRlcyAqLwomIzQzOwlzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqcmVjdl9idWZfY2h1bmtzOwomIzQzOwl1MzIgcmVjdl9idWZfY2h1bmtfY250OwogCXN0cnVjdCB2bWJ1c19ncGFkbCByZWN2X2J1Zl9ncGFkbF9oYW5kbGU7CiAJdTMyIHJlY3Zfc2VjdGlvbl9jbnQ7CiAJdTMyIHJlY3Zfc2VjdGlvbl9zaXplOwpAQCAtMTE2Niw2ICYjNDM7MTE4MCw4IEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHsKIAkvKiBTZW5kIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdXMgKi8KIAl2b2lkICpzZW5kX2J1ZjsKIAl1MzIgc2VuZF9idWZfc2l6ZTsKJiM0MzsJc3RydWN0IG5ldHZzY19idWZfY2h1bmsgKnNlbmRfYnVmX2NodW5rczsKJiM0MzsJdTMyIHNlbmRfYnVmX2NodW5rX2NudDsKIAlzdHJ1Y3Qgdm1idXNfZ3BhZGwgc2VuZF9idWZfZ3BhZGxfaGFuZGxlOwogCXUzMiBzZW5kX3NlY3Rpb25fY250OwogCXUzMiBzZW5kX3NlY3Rpb25fc2l6ZTsKQEAgLTExOTMsNyAmIzQzOzEyMDksNyBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSB7CiAKIAlzdHJ1Y3QgbmV0dnNjX2NoYW5uZWwgY2hhbl90YWJsZVtWUlNTX0NIQU5ORUxfTUFYXTsKIAotCXN0cnVjdCByY3VfaGVhZCByY3U7CiYjNDM7CXN0cnVjdCByY3Vfd29yayByd29yazsKIH07CiAKIC8qIE5kaXNJbml0aWFsaXplIG1lc3NhZ2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYwppbmRleCA1OWU5NTM0MWY5YjFlNS4uMjUwNWQxMGUyMjAxMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMKQEAgLTE0LDYgJiM0MzsxNCw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xvZzIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2V0X21lbW9yeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl9ldGhlci5oJmd0OwpAQCAtMjgsNiAmIzQzOzMwLDggQEAKICNpbmNsdWRlICYjMzQ7aHlwZXJ2X25ldC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bmV0dnNjX3RyYWNlLmgmIzM0OwogCiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXR2c2Nfd3E7CiYjNDM7CiAvKgogICogU3dpdGNoIHRoZSBkYXRhIHBhdGggZnJvbSB0aGUgc3ludGhldGljIGludGVyZmFjZSB0byB0aGUgVkYKICAqIGludGVyZmFjZS4KQEAgLTEyNSw0MCAmIzQzOzEyOSwxNjMgQEAgc3RhdGljIHZvaWQgbmV0dnNjX3N1YmNoYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiAJcnRubF91bmxvY2soKTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXR2c2NfZGV2aWNlICphbGxvY19uZXRfZGV2aWNlKHZvaWQpCiYjNDM7LyoKJiM0MzsgKiBuZXR2c2NfZnJlZV9idWZfcGFnZXMgLSByZWxlYXNlIGEgbmV0dnNjIHNlbmQvcmVjZWl2ZSBidWZmZXIuCiYjNDM7ICoKJiM0MzsgKiBAYWRkcjogYnVmZmVyIGFkZHJlc3MsIG9yIE5VTEwgaWYgbm9uZSB3YXMgYWxsb2NhdGVkIChlLmcuIGNsZWFudXAgZnJvbSBhCiYjNDM7ICogICAgICAgIGZhaWxlZCBhbGxvY2F0aW9uKQomIzQzOyAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIG5ldHZzY19hbGxvY19idWZfcGFnZXMoKSwgb3IgTlVMTAomIzQzOyAqIEBjaHVua19jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBjaHVua3MKJiM0MzsgKgomIzQzOyAqIFdoZW4gQGNodW5rcyBpcyBOVUxMIHRoZSBidWZmZXIgaXMgYSBwbGFpbiB2emFsbG9jKCkgYWxsb2NhdGlvbi4KJiM0MzsgKgomIzQzOyAqIE90aGVyd2lzZSB0ZWFyIGRvd24gdGhlIHZtYXAsIGFuZCBmb3IgZWFjaCBjaHVuayByZS1lbmNyeXB0IGFuZCBmcmVlCiYjNDM7ICogdGhlIHVuZGVybHlpbmcgcGFnZXMuIEFueSBjaHVuayB0aGF0IGNhbm5vdCBiZSByZS1lbmNyeXB0ZWQgaXMgbGVha2VkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG5ldHZzY19mcmVlX2J1Zl9wYWdlcyh2b2lkICphZGRyLAomIzQzOwkJCQkgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICpjaHVua3MsCiYjNDM7CQkJCSAgdTMyIGNodW5rX2NudCkKIHsKLQlzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZTsKJiM0MzsJdTMyIGk7CiAKLQluZXRfZGV2aWNlID0ga3phbGxvY19vYmooc3RydWN0IG5ldHZzY19kZXZpY2UpOwotCWlmICghbmV0X2RldmljZSkKJiM0MzsJaWYgKCFjaHVua3MpIHsKJiM0MzsJCXZmcmVlKGFkZHIpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZ1bm1hcChhZGRyKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNodW5rX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgdmFkZHIgPQomIzQzOwkJCSh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhjaHVua3NbaV0ucGFnZSk7CiYjNDM7CQl1bnNpZ25lZCBpbnQgb3JkZXIgPSBjaHVua3NbaV0ub3JkZXI7CiYjNDM7CiYjNDM7CQlpZiAoc2V0X21lbW9yeV9lbmNyeXB0ZWQodmFkZHIsIDFVICZsdDsmbHQ7IG9yZGVyKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCV9fZnJlZV9wYWdlcyhjaHVua3NbaV0ucGFnZSwgb3JkZXIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWt2ZnJlZShjaHVua3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIG5ldHZzY19hbGxvY19idWZfcGFnZXMgLSBhbGxvY2F0ZSBhIHZpcnR1YWxseS1jb250aWd1b3VzLCBob3N0LXZpc2libGUKJiM0MzsgKiBidWZmZXIgZm9yIHRoZSBuZXR2c2Mgc2VuZC9yZWNlaXZlIGFyZWEuCiYjNDM7ICoKJiM0MzsgKiBAbm9kZTogTlVNQSBub2RlIGhpbnQgKE5VTUFfTk9fTk9ERSBmb3IgYW55IG5vZGUpCiYjNDM7ICogQHNpemU6IHJlcXVlc3RlZCBidWZmZXIgc2l6ZSBpbiBieXRlcyAocm91bmRlZCB1cCB0byBQQUdFX1NJWkUpCiYjNDM7ICogQGNodW5rc19vdXQ6IG9uIHN1Y2Nlc3MsIHNldCB0byB0aGUgYXJyYXkgb2YgdW5kZXJseWluZyBjaHVua3MKJiM0MzsgKiBAY2h1bmtfY250X291dDogb24gc3VjY2Vzcywgc2V0IHRvIHRoZSBudW1iZXIgb2YgY2h1bmtzCiYjNDM7ICoKJiM0MzsgKiBBbGxvY2F0ZXMgdGhlIGJ1ZmZlciBhcyBhIHNlcmllcyBvZiBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgY2h1bmtzLAomIzQzOyAqIHN0YXJ0aW5nIGF0IE1BWF9QQUdFX09SREVSIGFuZCBmYWxsaW5nIGJhY2sgdG8gc21hbGxlciBvcmRlcnMgb24KJiM0MzsgKiBhbGxvY2F0aW9uIGZhaWx1cmUuIEVhY2ggY2h1bmsgaXMgdHJhbnNpdGlvbmVkIHRvIGhvc3QtdmlzaWJsZSB2aWEKJiM0MzsgKiBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9uIGl0cyBkaXJlY3QtbWFwIGFkZHJlc3MsIHRoZW4gYWxsIGNodW5rcyBhcmUKJiM0MzsgKiBjb21iaW5lZCBpbnRvIGEgdmlydHVhbGx5LWNvbnRpZ3VvdXMgcmFuZ2UgdmlhIHZtYXAoKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIHZtYXAoKWVkIHZpcnR1YWwgYWRkcmVzcywgb3IgTlVMTCBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkICpuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGludCBub2RlLCB1MzIgc2l6ZSwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICoqY2h1bmtzX291dCwKJiM0MzsJCQkJICAgIHUzMiAqY2h1bmtfY250X291dCkKJiM0Mzt7CiYjNDM7CXUzMiBucl9wYWdlcyA9IFBGTl9VUChzaXplKTsKJiM0MzsJc3RydWN0IG5ldHZzY19idWZfY2h1bmsgKmNodW5rcyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JkZXI7CiYjNDM7CXUzMiBjaHVua19jbnQgPSAwOwomIzQzOwl1MzIgcGFnZV9pZHggPSAwOwomIzQzOwl1MzIgcmVtYWluaW5nID0gbnJfcGFnZXM7CiYjNDM7CXZvaWQgKmFkZHI7CiYjNDM7CXUzMiBpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkqY2h1bmtzX291dCA9IE5VTEw7CiYjNDM7CSpjaHVua19jbnRfb3V0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFucl9wYWdlcykKIAkJcmV0dXJuIE5VTEw7CiAKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7bmV0X2RldmljZS0mZ3Q7d2FpdF9kcmFpbik7Ci0JbmV0X2RldmljZS0mZ3Q7ZGVzdHJveSA9IGZhbHNlOwotCW5ldF9kZXZpY2UtJmd0O3R4X2Rpc2FibGUgPSB0cnVlOwomIzQzOwkvKiBXb3JzdCBjYXNlOiBldmVyeSBjaHVuayBpcyBhIHNpbmdsZSBwYWdlLiAqLwomIzQzOwljaHVua3MgPSBrdm1hbGxvY19hcnJheShucl9wYWdlcywgc2l6ZW9mKCpjaHVua3MpLAomIzQzOwkJCQlHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiYjNDM7CWlmICghY2h1bmtzKQomIzQzOwkJZ290byBlcnI7CiAKLQluZXRfZGV2aWNlLSZndDttYXhfcGt0ID0gUk5ESVNfTUFYX1BLVF9ERUZBVUxUOwotCW5ldF9kZXZpY2UtJmd0O3BrdF9hbGlnbiA9IFJORElTX1BLVF9BTElHTl9ERUZBVUxUOwomIzQzOwlwYWdlcyA9IGt2bWFsbG9jX2FycmF5KG5yX3BhZ2VzLCBzaXplb2YoKnBhZ2VzKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGFnZXMpCiYjNDM7CQlnb3RvIGVycjsKIAotCWluaXRfY29tcGxldGlvbigmYW1wO25ldF9kZXZpY2UtJmd0O2NoYW5uZWxfaW5pdF93YWl0KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7bmV0X2RldmljZS0mZ3Q7c3ViY2hhbl9vcGVuKTsKLQlJTklUX1dPUksoJmFtcDtuZXRfZGV2aWNlLSZndDtzdWJjaGFuX3dvcmssIG5ldHZzY19zdWJjaGFuX3dvcmspOwomIzQzOwkvKgomIzQzOwkgKiBAb3JkZXIgbW9ub3RvbmljYWxseSBkZWNyZWFzZXMgYWNyb3NzIGl0ZXJhdGlvbnMKJiM0MzsJICoKJiM0MzsJICogVXNlIF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk4gdG8gYXZvaWQgT09NLWtpbGxpbmcsIGJ1dCB0cnkKJiM0MzsJICogaGFyZGVyIGF0IG9yZGVyIDAgc2luY2UgdGhhdCBpcyB0aGUgZmluYWwgZmFsbGJhY2suCiYjNDM7CSAqLwomIzQzOwlvcmRlciA9IG1pbl90KHVuc2lnbmVkIGludCwgTUFYX1BBR0VfT1JERVIsIGlsb2cyKG5yX3BhZ2VzKSk7CiYjNDM7CXdoaWxlIChyZW1haW5pbmcpIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwkJZ2ZwX3QgZ2ZwOwomIzQzOwomIzQzOwkJb3JkZXIgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG9yZGVyLCBpbG9nMihyZW1haW5pbmcpKTsKJiM0MzsKJiM0MzsJCWZvciAoOzspIHsKJiM0MzsJCQlnZnAgPSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTzsKJiM0MzsJCQlpZiAob3JkZXIpCiYjNDM7CQkJCWdmcCB8PSBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOOwomIzQzOwkJCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgb3JkZXIpOwomIzQzOwkJCWlmIChwYWdlKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCQlpZiAoIW9yZGVyKQomIzQzOwkJCQlnb3RvIGVycjsKJiM0MzsJCQlvcmRlci0tOwomIzQzOwkJfQogCi0JcmV0dXJuIG5ldF9kZXZpY2U7CiYjNDM7CQlyZXQgPSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSksCiYjNDM7CQkJCQkgICAxVSAmbHQ7Jmx0OyBvcmRlcik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIGZhaWxlZDsgdGhlIHBhZ2Ugc3RhdGUgaXMKJiM0MzsJCQkgKiB1bmtub3duIHNvIGl0IG11c3QgYmUgbGVha2VkIHJhdGhlciB0aGFuIGZyZWVkLgomIzQzOwkJCSAqLwomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJY2h1bmtzW2NodW5rX2NudF0ucGFnZSA9IHBhZ2U7CiYjNDM7CQljaHVua3NbY2h1bmtfY250XS5vcmRlciA9IG9yZGVyOwomIzQzOwkJY2h1bmtfY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyAoMVUgJmx0OyZsdDsgb3JkZXIpOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlwYWdlc1twYWdlX2lkeCYjNDM7JiM0MztdID0gcGFnZSAmIzQzOyBpOwomIzQzOwomIzQzOwkJcmVtYWluaW5nIC09IDFVICZsdDsmbHQ7IG9yZGVyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFkZHIgPSB2bWFwKHBhZ2VzLCBucl9wYWdlcywgVk1fTUFQLCBwZ3Byb3RfZGVjcnlwdGVkKFBBR0VfS0VSTkVMKSk7CiYjNDM7CWlmICghYWRkcikKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlrdmZyZWUocGFnZXMpOwomIzQzOwkqY2h1bmtzX291dCA9IGNodW5rczsKJiM0MzsJKmNodW5rX2NudF9vdXQgPSBjaHVua19jbnQ7CiYjNDM7CXJldHVybiBhZGRyOwomIzQzOwomIzQzO2VycjoKJiM0MzsJa3ZmcmVlKHBhZ2VzKTsKJiM0MzsJbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKE5VTEwsIGNodW5rcywgY2h1bmtfY250KTsKJiM0MzsJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfbmV0dnNjX2RldmljZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiYjNDM7c3RhdGljIHZvaWQgX19mcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IG5ldHZzY19kZXZpY2UgKm52ZGV2KQogewotCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpudmRldgotCQk9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgbmV0dnNjX2RldmljZSwgcmN1KTsKIAlpbnQgaTsKIAogCWtmcmVlKG52ZGV2LSZndDtleHRlbnNpb24pOwogCi0JaWYgKCFudmRldi0mZ3Q7cmVjdl9idWZfZ3BhZGxfaGFuZGxlLmRlY3J5cHRlZCkKLQkJdmZyZWUobnZkZXYtJmd0O3JlY3ZfYnVmKTsKLQlpZiAoIW52ZGV2LSZndDtzZW5kX2J1Zl9ncGFkbF9oYW5kbGUuZGVjcnlwdGVkKQotCQl2ZnJlZShudmRldi0mZ3Q7c2VuZF9idWYpOwomIzQzOwluZXR2c2NfZnJlZV9idWZfcGFnZXMobnZkZXYtJmd0O3JlY3ZfYnVmLCBudmRldi0mZ3Q7cmVjdl9idWZfY2h1bmtzLAomIzQzOwkJCSAgICAgIG52ZGV2LSZndDtyZWN2X2J1Zl9jaHVua19jbnQpOwomIzQzOwluZXR2c2NfZnJlZV9idWZfcGFnZXMobnZkZXYtJmd0O3NlbmRfYnVmLCBudmRldi0mZ3Q7c2VuZF9idWZfY2h1bmtzLAomIzQzOwkJCSAgICAgIG52ZGV2LSZndDtzZW5kX2J1Zl9jaHVua19jbnQpOwogCWJpdG1hcF9mcmVlKG52ZGV2LSZndDtzZW5kX3NlY3Rpb25fbWFwKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBWUlNTX0NIQU5ORUxfTUFYOyBpJiM0MzsmIzQzOykgewpAQCAtMTcwLDkgJiM0MzsyOTcsNTYgQEAgc3RhdGljIHZvaWQgZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIAlrZnJlZShudmRldik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3KQomIzQzO3sKJiM0MzsJc3RydWN0IHJjdV93b3JrICpyd29yayA9IHRvX3JjdV93b3JrKHcpOwomIzQzOwomIzQzOwlfX2ZyZWVfbmV0dnNjX2RldmljZShjb250YWluZXJfb2YocndvcmssIHN0cnVjdCBuZXR2c2NfZGV2aWNlLCByd29yaykpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbmV0dnNjX3dvcmtxdWV1ZV9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwluZXR2c2Nfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDtodl9uZXR2c2MmIzM0OywgV1FfVU5CT1VORCwgMCk7CiYjNDM7CiYjNDM7CXJldHVybiBuZXR2c2Nfd3EgPyAwIDogLUVOT01FTTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3kodm9pZCkKJiM0Mzt7CiYjNDM7CXJjdV9iYXJyaWVyKCk7CiYjNDM7CWRlc3Ryb3lfd29ya3F1ZXVlKG5ldHZzY193cSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqYWxsb2NfbmV0X2RldmljZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2U7CiYjNDM7CiYjNDM7CW5ldF9kZXZpY2UgPSBremFsbG9jX29iaihzdHJ1Y3QgbmV0dnNjX2RldmljZSk7CiYjNDM7CWlmICghbmV0X2RldmljZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7bmV0X2RldmljZS0mZ3Q7d2FpdF9kcmFpbik7CiYjNDM7CW5ldF9kZXZpY2UtJmd0O2Rlc3Ryb3kgPSBmYWxzZTsKJiM0MzsJbmV0X2RldmljZS0mZ3Q7dHhfZGlzYWJsZSA9IHRydWU7CiYjNDM7CiYjNDM7CW5ldF9kZXZpY2UtJmd0O21heF9wa3QgPSBSTkRJU19NQVhfUEtUX0RFRkFVTFQ7CiYjNDM7CW5ldF9kZXZpY2UtJmd0O3BrdF9hbGlnbiA9IFJORElTX1BLVF9BTElHTl9ERUZBVUxUOwomIzQzOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDtuZXRfZGV2aWNlLSZndDtjaGFubmVsX2luaXRfd2FpdCk7CiYjNDM7CWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDtuZXRfZGV2aWNlLSZndDtzdWJjaGFuX29wZW4pOwomIzQzOwlJTklUX1dPUksoJmFtcDtuZXRfZGV2aWNlLSZndDtzdWJjaGFuX3dvcmssIG5ldHZzY19zdWJjaGFuX3dvcmspOwomIzQzOwlJTklUX1JDVV9XT1JLKCZhbXA7bmV0X2RldmljZS0mZ3Q7cndvcmssIGZyZWVfbmV0dnNjX2RldmljZSk7CiYjNDM7CiYjNDM7CXJldHVybiBuZXRfZGV2aWNlOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGZyZWVfbmV0dnNjX2RldmljZV9yY3Uoc3RydWN0IG5ldHZzY19kZXZpY2UgKm52ZGV2KQogewotCWNhbGxfcmN1KCZhbXA7bnZkZXYtJmd0O3JjdSwgZnJlZV9uZXR2c2NfZGV2aWNlKTsKJiM0MzsJLyoKJiM0MzsJICogRGVmZXIgdGhlIGFjdHVhbCBmcmVlIHRvIHByb2Nlc3MgY29udGV4dDogdnVubWFwKCkgYW5kCiYjNDM7CSAqIHNldF9tZW1vcnlfZW5jcnlwdGVkKCkgY2Fubm90IHJ1biBmcm9tIFJDVSBzb2Z0aXJxIGNvbnRleHQuCiYjNDM7CSAqLwomIzQzOwlxdWV1ZV9yY3Vfd29yayhuZXR2c2Nfd3EsICZhbXA7bnZkZXYtJmd0O3J3b3JrKTsKIH0KIAogc3RhdGljIHZvaWQgbmV0dnNjX3Jldm9rZV9yZWN2X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCkBAIC0zNTEsNyAmIzQzOzUyNSwyMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCiAJCWJ1Zl9zaXplID0gbWluX3QodW5zaWduZWQgaW50LCBidWZfc2l6ZSwKIAkJCQkgTkVUVlNDX1JFQ0VJVkVfQlVGRkVSX1NJWkVfTEVHQUNZKTsKIAotCW5ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmID0gdnphbGxvYyhidWZfc2l6ZSk7CiYjNDM7CWlmIChkZXZpY2UtJmd0O2NoYW5uZWwtJmd0O2NvX2V4dGVybmFsX21lbW9yeSkgewomIzQzOwkJLyogQ29uZmlkZW50aWFsIFZNIEJ1cyBsZWF2ZXMgYnVmZmVyIGVuY3J5cHRlZCAqLwomIzQzOwkJbmV0X2RldmljZS0mZ3Q7cmVjdl9idWZfY2h1bmtzID0gTlVMTDsKJiM0MzsJCW5ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmX2NodW5rX2NudCA9IDA7CiYjNDM7CQluZXRfZGV2aWNlLSZndDtyZWN2X2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogT3RoZXJ3aXNlLCBhbGxvY2F0ZSBkZWNyeXB0ZWQgYnVmZmVyICovCiYjNDM7CQluZXRfZGV2aWNlLSZndDtyZWN2X2J1ZiA9CiYjNDM7CQkJbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhjcHVfdG9fbm9kZShkZXZpY2UtJmd0O2NoYW5uZWwtJmd0O3RhcmdldF9jcHUpLAomIzQzOwkJCQkJICAgICAgIGJ1Zl9zaXplLAomIzQzOwkJCQkJICAgICAgICZhbXA7bmV0X2RldmljZS0mZ3Q7cmVjdl9idWZfY2h1bmtzLAomIzQzOwkJCQkJICAgICAgICZhbXA7bmV0X2RldmljZS0mZ3Q7cmVjdl9idWZfY2h1bmtfY250KTsKJiM0MzsJfQomIzQzOwogCWlmICghbmV0X2RldmljZS0mZ3Q7cmVjdl9idWYpIHsKIAkJbmV0ZGV2X2VycihuZGV2LAogCQkJICAgJiMzNDt1bmFibGUgdG8gYWxsb2NhdGUgcmVjZWl2ZSBidWZmZXIgb2Ygc2l6ZSAldVxuJiMzNDssCkBAIC0zNjcsOSAmIzQzOzU1NCwxMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCiAJICogY2hhbm5lbC4gIE5vdGU6IFRoaXMgY2FsbCB1c2VzIHRoZSB2bWJ1cyBjb25uZWN0aW9uIHJhdGhlcgogCSAqIHRoYW4gdGhlIGNoYW5uZWwgdG8gZXN0YWJsaXNoIHRoZSBncGFkbCBoYW5kbGUuCiAJICovCi0JcmV0ID0gdm1idXNfZXN0YWJsaXNoX2dwYWRsKGRldmljZS0mZ3Q7Y2hhbm5lbCwgbmV0X2RldmljZS0mZ3Q7cmVjdl9idWYsCi0JCQkJICAgIGJ1Zl9zaXplLAotCQkJCSAgICAmYW1wO25ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmX2dwYWRsX2hhbmRsZSk7CiYjNDM7CXJldCA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkKGRldmljZS0mZ3Q7Y2hhbm5lbCwKJiM0MzsJCQkJCQkgICAgIG5ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmLAomIzQzOwkJCQkJCSAgICAgYnVmX3NpemUsCiYjNDM7CQkJCQkJICAgICAmYW1wO25ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmX2dwYWRsX2hhbmRsZSk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCW5ldGRldl9lcnIobmRldiwKIAkJCSYjMzQ7dW5hYmxlIHRvIGVzdGFibGlzaCByZWNlaXZlIGJ1ZmZlciYjMzk7cyBncGFkbFxuJiMzNDspOwpAQCAtNDU3LDcgJiM0Mzs2NDUsMTkgQEAgc3RhdGljIGludCBuZXR2c2NfaW5pdF9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLAogCWJ1Zl9zaXplID0gZGV2aWNlX2luZm8tJmd0O3NlbmRfc2VjdGlvbnMgKiBkZXZpY2VfaW5mby0mZ3Q7c2VuZF9zZWN0aW9uX3NpemU7CiAJYnVmX3NpemUgPSByb3VuZF91cChidWZfc2l6ZSwgUEFHRV9TSVpFKTsKIAotCW5ldF9kZXZpY2UtJmd0O3NlbmRfYnVmID0gdnphbGxvYyhidWZfc2l6ZSk7CiYjNDM7CWlmIChkZXZpY2UtJmd0O2NoYW5uZWwtJmd0O2NvX2V4dGVybmFsX21lbW9yeSkgewomIzQzOwkJLyogQ29uZmlkZW50aWFsIFZNIEJ1cyBsZWF2ZXMgYnVmZmVyIGVuY3J5cHRlZCAqLwomIzQzOwkJbmV0X2RldmljZS0mZ3Q7c2VuZF9idWZfY2h1bmtzID0gTlVMTDsKJiM0MzsJCW5ldF9kZXZpY2UtJmd0O3NlbmRfYnVmX2NodW5rX2NudCA9IDA7CiYjNDM7CQluZXRfZGV2aWNlLSZndDtzZW5kX2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogT3RoZXJ3aXNlLCBhbGxvY2F0ZSBkZWNyeXB0ZWQgYnVmZmVyICovCiYjNDM7CQluZXRfZGV2aWNlLSZndDtzZW5kX2J1ZiA9CiYjNDM7CQkJbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhjcHVfdG9fbm9kZShkZXZpY2UtJmd0O2NoYW5uZWwtJmd0O3RhcmdldF9jcHUpLAomIzQzOwkJCQkJICAgICAgIGJ1Zl9zaXplLAomIzQzOwkJCQkJICAgICAgICZhbXA7bmV0X2RldmljZS0mZ3Q7c2VuZF9idWZfY2h1bmtzLAomIzQzOwkJCQkJICAgICAgICZhbXA7bmV0X2RldmljZS0mZ3Q7c2VuZF9idWZfY2h1bmtfY250KTsKJiM0MzsJfQogCWlmICghbmV0X2RldmljZS0mZ3Q7c2VuZF9idWYpIHsKIAkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O3VuYWJsZSB0byBhbGxvY2F0ZSBzZW5kIGJ1ZmZlciBvZiBzaXplICV1XG4mIzM0OywKIAkJCSAgIGJ1Zl9zaXplKTsKQEAgLTQ3MCw5ICYjNDM7NjcwLDEwIEBAIHN0YXRpYyBpbnQgbmV0dnNjX2luaXRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKIAkgKiBjaGFubmVsLiAgTm90ZTogVGhpcyBjYWxsIHVzZXMgdGhlIHZtYnVzIGNvbm5lY3Rpb24gcmF0aGVyCiAJICogdGhhbiB0aGUgY2hhbm5lbCB0byBlc3RhYmxpc2ggdGhlIGdwYWRsIGhhbmRsZS4KIAkgKi8KLQlyZXQgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoZGV2aWNlLSZndDtjaGFubmVsLCBuZXRfZGV2aWNlLSZndDtzZW5kX2J1ZiwKLQkJCQkgICAgYnVmX3NpemUsCi0JCQkJICAgICZhbXA7bmV0X2RldmljZS0mZ3Q7c2VuZF9idWZfZ3BhZGxfaGFuZGxlKTsKJiM0MzsJcmV0ID0gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoZGV2aWNlLSZndDtjaGFubmVsLAomIzQzOwkJCQkJCSAgICAgbmV0X2RldmljZS0mZ3Q7c2VuZF9idWYsCiYjNDM7CQkJCQkJICAgICBidWZfc2l6ZSwKJiM0MzsJCQkJCQkgICAgICZhbXA7bmV0X2RldmljZS0mZ3Q7c2VuZF9idWZfZ3BhZGxfaGFuZGxlKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJbmV0ZGV2X2VycihuZGV2LAogCQkJICAgJiMzNDt1bmFibGUgdG8gZXN0YWJsaXNoIHNlbmQgYnVmZmVyJiMzOTtzIGdwYWRsXG4mIzM0Oyk7CkBAIC0xODYzLDcgJiM0MzsyMDY0LDExIEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXR2c2NfZGV2aWNlX2FkZChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCiAJbmV0aWZfbmFwaV9kZWwoJmFtcDtuZXRfZGV2aWNlLSZndDtjaGFuX3RhYmxlWzBdLm5hcGkpOwogCiBjbGVhbnVwMjoKLQlmcmVlX25ldHZzY19kZXZpY2UoJmFtcDtuZXRfZGV2aWNlLSZndDtyY3UpOwomIzQzOwkvKgomIzQzOwkgKiBuZXRfZGV2aWNlIHdhcyBuZXZlciBwdWJsaXNoZWQsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIHdhaXQgZm9yIGFuCiYjNDM7CSAqIFJDVSBncmFjZSBwZXJpb2QgLS0gY2FsbCB0aGUgZnJlZSByb3V0aW5lIHN5bmNocm9ub3VzbHkuCiYjNDM7CSAqLwomIzQzOwlfX2ZyZWVfbmV0dnNjX2RldmljZShuZXRfZGV2aWNlKTsKIAogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jIGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYwppbmRleCBlZTVhYjVjZWIyYmUyZC4uMWQ0M2M3M2ZkNzNmMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYwpAQCAtMjg2NywxMiAmIzQzOzI4NjcsMTcgQEAgc3RhdGljIHZvaWQgX19leGl0IG5ldHZzY19kcnZfZXhpdCh2b2lkKQogewogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZhbXA7bmV0dnNjX25ldGRldl9ub3RpZmllcik7CiAJdm1idXNfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDtuZXR2c2NfZHJ2KTsKJiM0MzsJbmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG5ldHZzY19kcnZfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKJiM0MzsJcmV0ID0gbmV0dnNjX3dvcmtxdWV1ZV9pbml0KCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwogCWlmIChyaW5nX3NpemUgJmx0OyBSSU5HX1NJWkVfTUlOKSB7CiAJCXJpbmdfc2l6ZSA9IFJJTkdfU0laRV9NSU47CiAJCXByX2luZm8oJiMzNDtJbmNyZWFzZWQgcmluZ19zaXplIHRvICV1IChtaW4gYWxsb3dlZClcbiYjMzQ7LApAQCAtMjg5MCw2ICYjNDM7Mjg5NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldHZzY19kcnZfaW5pdCh2b2lkKQogCiBlcnJfdm1idXNfcmVnOgogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZhbXA7bmV0dnNjX25ldGRldl9ub3RpZmllcik7CiYjNDM7CW5ldHZzY193b3JrcXVldWVfZGVzdHJveSgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHlwZXJ2LmggYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oCmluZGV4IDk2NGYxYmU4MTUwYzU5Li45YzZiMWI3Nzk0YjQ4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oeXBlcnYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oCkBAIC03ODEsNiAmIzQzOzc4MSwxMiBAQCBzdHJ1Y3Qgdm1idXNfZ3BhZGwgewogCXUzMiBncGFkbF9oYW5kbGU7CiAJdTMyIHNpemU7CiAJdm9pZCAqYnVmZmVyOwomIzQzOwkvKgomIzQzOwkgKiBPbmx5IHVzZWQgaWYgdGhlIHZtYnVzIGxheWVyIG93bnMgdGhlIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mCiYjNDM7CSAqIEBidWZmZXIuCiYjNDM7CSAqIEluZGljYXRlcyBAYnVmZmVyIG11c3QgYmUgcmUtZW5jcnlwdGVkIGF0IHRlYXJkb3duIG9yIHRoYXQgaXQKJiM0MzsJICogbXVzdCBiZSBsZWFrZWQgYmVjYXVzZSByZS1lbmNyeXB0aW9uIGZhaWxlZC4KJiM0MzsJICovCiAJYm9vbCBkZWNyeXB0ZWQ7CiB9OwogCkBAIC0xMjA1LDYgJiM0MzsxMjExLDExIEBAIGV4dGVybiBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAogCQkJCSAgICAgIHUzMiBzaXplLAogCQkJCSAgICAgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpOwogCiYjNDM7ZXh0ZXJuIGludCB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKJiM0MzsJCQkJCQkgIHZvaWQgKmtidWZmZXIsCiYjNDM7CQkJCQkJICB1MzIgc2l6ZSwKJiM0MzsJCQkJCQkgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpOwomIzQzOwogZXh0ZXJuIGludCB2bWJ1c190ZWFyZG93bl9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCQkgICAgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEZ1enppbmcgdGhpcyBIeXBlci1WIE5ldHdvcmsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIEh5cGVyLVYgbmV0d29yayBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYG5ldHZzY2AgYW5kIFZNQnVzIGNoYW5uZWwgY29kZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiwgYHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkYCwgYW5kIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IGBuZXR2c2NgIGhhbmRsZXMgaXRzIHNlbmQvcmVjZWl2ZSBidWZmZXJzLiBUaGUga2V5IGhlcmUgaXMgdGhlIHVzZSBvZiBgc2V0X21lbW9yeV9kZWNyeXB0ZWRgIGFuZCBgc2V0X21lbW9yeV9lbmNyeXB0ZWRgIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIGJpZyBmbGFncyBmb3IgQ29uZmlkZW50aWFsIFZNcywgbGlrZSBBTUQgU0VWLVNOUCBvciBJbnRlbCBURFgsIHdoaWNoIGlzIGltcG9ydGFudCB0byBjb25zaWRlci4KClRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYG5ldHZzY19hbGxvY19idWZfcGFnZXNgIGFuZCBgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzYC4gVGhpcyBzZWVtcyB0byBiZSBhYm91dCBhbGxvY2F0aW5nIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgY2h1bmtzIGFuZCB2bWFwLWluZyB0aGVtLCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYHZ6YWxsb2NgLiBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIGEgbmV3IHdvcmtxdWV1ZSwgYG5ldHZzY193cWAsIGFkZGVkIGZvciBkZWZlcnJpbmcgdGhlIGRldmljZSBmcmVlaW5nLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXM6IGNhbiB0aGlzIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIFFFTVUgYW5kIEdDRSBhcyBwb3RlbnRpYWwgYmFycmllcnMsIGJ1dCBJIGtub3cgdGhlIEh5cGVyLVYgZHJpdmVycyAoYGh2X25ldHZzY2AsIGBodl92bWJ1c2ApIGFyZSBhY3RpdmVseSB1c2VkIHdoZW4gTGludXggcnVucyBhcyBhIGd1ZXN0IG9uIEh5cGVyLVYuIFRoZSBwcm9tcHQgYWxzbyBub3RlcyB0aGF0IGl0JiMzOTtzICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBTeXprYWxsZXIgKnNob3VsZCogYmUgYWJsZSB0byBmdXp6IEh5cGVyLVYgZHJpdmVycyBpZiBpdCYjMzk7cyBydW5uaW5nIG9uIEh5cGVyLVYgb3IgaWYgdGhlcmUmIzM5O3Mgc29tZSBzb3J0IG9mIGVtdWxhdGlvbi4KCldhaXQgYSBzZWNvbmQsIHdhc24mIzM5O3QgdGhlcmUgc29tZSBIeXBlci1WIGZ1enppbmcgc3VwcG9ydCBpbiBzeXprYWxsZXI/IExldCYjMzk7cyBzZWUuLi5JIHJlbWVtYmVyIHNlZWluZyB0aGluZ3MgbGlrZSBgc3l6X3ZtYnVzX2VzdGFibGlzaF9ncGFkbGAgaW4gdGhlIHN5emxhbmcsIHNvIHRoZXJlIG1pZ2h0IGJlIGEgVk1CdXMgZnV6emVyIHRoYXQgcnVucyBpbiBRRU1VIHdpdGggYSBtb2NrIFZNQnVzIGltcGxlbWVudGF0aW9uLCBvciBwb3RlbnRpYWxseSBldmVuIHJ1bm5pbmcgb24gSHlwZXItVi4gVGhpcyB3YXJyYW50cyBhIGRlZXBlciBsb29rOyBJIG5lZWQgdG8gdmVyaWZ5IGlmIGBodl9uZXR2c2NgIGl0c2VsZiBpcyB0YXJnZXRlZCBieSBmdXp6aW5nLgoKT2theSwgbGV0JiMzOTtzIHN0YXJ0IHNlYXJjaGluZy4gSSYjMzk7bGwgc2VhcmNoIHRoZSBrZXJuZWwgYW5kIHN5emthbGxlciBjb2RlYmFzZXMgZm9yICYjMzQ7bmV0dnNjJiMzNDsuIFdhaXQsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRoYXQgaWYgdGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIEkgbmVlZCB0byB1c2UgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IGlmIHRoZSBjb2RlICpjYW4qIGJlIGV4ZWN1dGVkLiBPa2F5LCB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7bGwgZG8uCgpBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIGlmIGBDT05GSUdfSFlQRVJWX05FVGAgYW5kIGBDT05GSUdfSFlQRVJWYCBhcmUgZW5hYmxlZCwgYW5kIHRoZXJlZm9yZSB3aGV0aGVyIHdlIGNhbiBmdXp6IGl0IGF0IGFsbC4gVGhlbiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzYCBhbmQgYG5ldHZzY19kZXZpY2VfYWRkYCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgd2hvbGUgcG9pbnQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBpcyBhY3R1YWxseSAqZXhlY3V0YWJsZSogYW5kIHRoZXJlZm9yZSBXb3J0aEZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0dnNjX2RldmljZV9hZGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaD0yMjQ9dm9pZCBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3kodm9pZCk7XG5kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oOjIyNTpzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaC0yMjYtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXR2c2NfZGV2aWNlX2luZm8gKmluZm8pO1xuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz0xOTQxPXZvaWQgbmV0dnNjX2NoYW5uZWxfY2Iodm9pZCAqY29udGV4dClcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTk1OC0vKlxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjE5NTk6ICogbmV0dnNjX2RldmljZV9hZGQgLSBDYWxsYmFjayB3aGVuIHRoZSBkZXZpY2UgYmVsb25naW5nIHRvIHRoaXNcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xOTYwLSAqIGRyaXZlciBpcyBhZGRlZFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE5NjEtICovXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MTk2MjpzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE5NjMtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0dnNjX2RldmljZV9pbmZvICpkZXZpY2VfaW5mbylcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvcm5kaXNfZmlsdGVyLmM9MTQ3MD1zdHJ1Y3QgbmV0dnNjX2RldmljZSAqcm5kaXNfZmlsdGVyX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9ybmRpc19maWx0ZXIuYy0xNDkwLVx0ICovXG5kcml2ZXJzL25ldC9oeXBlcnYvcm5kaXNfZmlsdGVyLmM6MTQ5MTpcdG5ldF9kZXZpY2UgPSBuZXR2c2NfZGV2aWNlX2FkZChkZXYsIGRldmljZV9pbmZvKTtcbmRyaXZlcnMvbmV0L2h5cGVydi9ybmRpc19maWx0ZXIuYy0xNDkyLVx0aWYgKElTX0VSUihuZXRfZGV2aWNlKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTAzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzYCoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYG5ldHZzY19hbGxvY19idWZfcGFnZXNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgaXRzIGludm9jYXRpb24gcG9pbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBzdGFjayBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcmVsYXRlZCB0byBidWZmZXIgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIG5ldHdvcmsgdmlydHVhbCBzZXJ2aWNlIGNvbnRleHQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGFuZCBnZXQgYSBmZWVsIGZvciB0aGUgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyB0aGF0IHRyaWdnZXIgaXQuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggdG8gaWRlbnRpZnkgYWxsIGNhbGwgc2l0ZXMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUsIGlkZWFsbHkgdW5kZXJzdGFuZGluZyB0aGUgbG9naWNhbCBmbG93IHRoYXQgbGVhZHMgdG8gYG5ldHZzY19hbGxvY19idWZfcGFnZXNgIGJlaW5nIGNhbGxlZC4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGludGVycHJldCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoZSBjYWxscy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZyBhcm91bmQgdGhlIGNhbGxzIGFzIHdlbGwuIE15IG1haW4gZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBhbGxvY2F0aW9uIHBhdHRlcm5zIGFuZCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MTAxPXN0YXRpYyB2b2lkIG5ldHZzY19zdWJjaGFuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xMzYtICogICAgICAgIGZhaWxlZCBhbGxvY2F0aW9uKVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjEzNzogKiBAY2h1bmtzOiBjaHVua3MgYXJyYXkgZnJvbSBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKCksIG9yIE5VTExcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xMzgtICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz0xNDU9c3RhdGljIHZvaWQgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKHZvaWQgKmFkZHIsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE3MS0vKlxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjE3MjogKiBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzIC0gYWxsb2NhdGUgYSB2aXJ0dWFsbHktY29udGlndW91cywgaG9zdC12aXNpYmxlXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTczLSAqIGJ1ZmZlciBmb3IgdGhlIG5ldHZzYyBzZW5kL3JlY2VpdmUgYXJlYS5cbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTg3LSAqL1xuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjE4ODpzdGF0aWMgdm9pZCAqbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhpbnQgbm9kZSwgdTMyIHNpemUsXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTg5LVx0XHRcdFx0ICAgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICoqY2h1bmtzX291dCxcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9NTA5PXN0YXRpYyBpbnQgbmV0dnNjX2luaXRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNTM1LVx0XHRuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmID1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo1MzY6XHRcdFx0bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhjcHVfdG9fbm9kZShkZXZpY2UtXHUwMDNlY2hhbm5lbC1cdTAwM2V0YXJnZXRfY3B1KSxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy01MzctXHRcdFx0XHRcdCAgICAgICBidWZfc2l6ZSxcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNjU1LVx0XHRuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmID1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo2NTY6XHRcdFx0bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhjcHVfdG9fbm9kZShkZXZpY2UtXHUwMDNlY2hhbm5lbC1cdTAwM2V0YXJnZXRfY3B1KSxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy02NTctXHRcdFx0XHRcdCAgICAgICBidWZfc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTmV0VlNDIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUmIzM5O3MgdGhlIGJlZWY/JiMzNDsgSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG5ldHZzY19pbml0X2J1ZmAgYW5kIGBuZXR2c2NfZGV2aWNlX2FkZGAsIGJvdGggaW4gYGRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY2AuIFRoYXQgcmluZ3Mgc29tZSBiZWxscyAtIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGluaXRpYWwgYnVmZmVyIHNldHVwIGFuZCBkZXZpY2UgYWRkaXRpb24gd2l0aGluIHRoZSBuZXR3b3JrIHZpcnR1YWwgc2VydmljZSBjbGllbnQuIEFuZCB0aGVuIGl0IGFsc28gc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbGAgaW4gYGRyaXZlcnMvaHYvY2hhbm5lbC5jYC4gVGhhdCYjMzk7cyBhIGxvdy1sZXZlbCBjaGFubmVsIGZ1bmN0aW9uLCByZWxhdGVkIHRvIHNldHRpbmcgdXAgdGhlIEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MgTGlzdC4gRGVmaW5pdGVseSBpbnRlcmVzdGluZy4KCkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSBjaGFuZ2VzIHRoZW1zZWx2ZXMsIEkgbmVlZCB0byBtYWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgcGF0Y2ggaXMgY29ycmVjdGx5IGd1YXJkZWQgYnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0hZUEVSVmAgYW5kIGBDT05GSUdfSFlQRVJWX05FVGAgYXJlIHRoZSBjb3JyZWN0IHByZS1yZXF1aXNpdGVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSBpZiB0aG9zZSBhcmUgc3VmZmljaWVudC4gSWYgbm90LCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIWVBFUlYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz03ODQ9Y29uZmlnIFNDSEVEX09NSVRfRlJBTUVfUE9JTlRFUlxuLS1cbmFyY2gveDg2L0tjb25maWctNzk1LVxuYXJjaC94ODYvS2NvbmZpZzo3OTY6bWVudWNvbmZpZyBIWVBFUlZJU09SX0dVRVNUXG5hcmNoL3g4Ni9LY29uZmlnLTc5Ny1cdGJvb2wgXCYjMzQ7TGludXggZ3Vlc3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZz0zPW1lbnUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgZ3Vlc3Qgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9odi9LY29uZmlnLTQtXG5kcml2ZXJzL2h2L0tjb25maWc6NTpjb25maWcgSFlQRVJWXG5kcml2ZXJzL2h2L0tjb25maWctNi1cdGJvb2wgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgY29yZSBoeXBlcnZpc29yIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctMTYtXG5kcml2ZXJzL2h2L0tjb25maWc6MTc6Y29uZmlnIEhZUEVSVl9WVExfTU9ERVxuZHJpdmVycy9odi9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtFbmFibGUgTGludXggdG8gYm9vdCBpbiBWVEwgY29udGV4dFwmIzM0O1xuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaHYvS2NvbmZpZzo0Mzpjb25maWcgSFlQRVJWX1RJTUVSXG5kcml2ZXJzL2h2L0tjb25maWctNDQtXHRkZWZfYm9vbCBIWVBFUlYgXHUwMDI2XHUwMDI2IFg4NlxuZHJpdmVycy9odi9LY29uZmlnLTQ1LVxuZHJpdmVycy9odi9LY29uZmlnOjQ2OmNvbmZpZyBIWVBFUlZfVVRJTFNcbmRyaXZlcnMvaHYvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIFV0aWxpdGllcyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctNTItXG5kcml2ZXJzL2h2L0tjb25maWc6NTM6Y29uZmlnIEhZUEVSVl9CQUxMT09OXG5kcml2ZXJzL2h2L0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBCYWxsb29uIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy01OS1cbmRyaXZlcnMvaHYvS2NvbmZpZzo2MDpjb25maWcgSFlQRVJWX1ZNQlVTXG5kcml2ZXJzL2h2L0tjb25maWctNjEtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBWTUJ1cyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjU0PWNvbmZpZyBTRVJJT19PTFBDX0FQU1Bcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjYzLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI2NDpjb25maWcgSFlQRVJWX0tFWUJPQVJEXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjY1LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IFN5bnRoZXRpYyBLZXlib2FyZCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWc6Mjpjb25maWcgSFlQRVJWX05FVFxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3Njc2kvS2NvbmZpZz01Nzg9Y29uZmlnIFhFTl9TQ1NJX0ZST05URU5EXG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctNTg3LVxuZHJpdmVycy9zY3NpL0tjb25maWc6NTg4OmNvbmZpZyBIWVBFUlZfU1RPUkFHRVxuZHJpdmVycy9zY3NpL0tjb25maWctNTg5LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgdmlydHVhbCBzdG9yYWdlIGRyaXZlclwmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnPTM1Mjc9Y29uZmlnIE1FTVRFU1Rcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zNTQwLVxubGliL0tjb25maWcuZGVidWc6MzU0MTpjb25maWcgSFlQRVJWX1RFU1RJTkdcbmxpYi9LY29uZmlnLmRlYnVnLTM1NDItXHRib29sIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIGRyaXZlciB0ZXN0aW5nXCYjMzQ7XG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnPTY2PWNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTcyLVxubmV0L3Ztd192c29jay9LY29uZmlnOjczOmNvbmZpZyBIWVBFUlZfVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O0h5cGVyLVYgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyB0aGUgSHlwZXItViBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGBDT05GSUdfSFlQRVJWX05FVGAgc2V0dGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN1Z2dlc3RzIHRoaXMgaXMgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBlbmFibGluZyBIeXBlci1WIG5ldHdvcmsgc3VwcG9ydCwgYnV0IGxldCYjMzk7cyBjb25maXJtIHRoaXMgcmlnb3JvdXNseSBiZWZvcmUgcHJvY2VlZGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IG51YW5jZXMgaW4gdGhlIGRlcGVuZGVuY2llcyBvciBjb25mbGljdGluZyBzZXR0aW5ncyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgaW50ZW5kZWQgbmV0d29yayBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgSHlwZXItViBlbnZpcm9ubWVudC4gQSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBkb2N1bWVudGF0aW9uIGFuZCBhbnkgcmVsZXZhbnQgYnVpbGQgbG9ncyBzaG91bGQgYmUgZW5vdWdoIHRvIHNvbGlkaWZ5IHRoaXMgcGFydGljdWxhciBjaG9pY2UsIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggYENPTkZJR19WSVJUSU9fTkVUYCBvciBgQ09ORklHX0UxMDAwRWAuIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHByZWNpc2UgaGVyZSwgYW5kIGF2b2lkIGFueSB1bndhbnRlZCBzdXJwcmlzZXMgZG93biB0aGUgcm9hZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLS4qbmV0dnNjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2h5cGVydi9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0hZUEVSVl9ORVQpICYjNDM7PSBodl9uZXR2c2Mub1xuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlLTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODY0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKk5hdmlnYXRpbmcgdGhlIEh5cGVyLVYgTmV0d29yayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgYENPTkZJR19IWVBFUlZfTkVUYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlIHBhdGNoIGl0c2VsZiB0b3VjaGVzIGBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmNgIGFuZCBgZHJpdmVycy9odi9jaGFubmVsLmNgLiBOb3csIGBuZXR2c2MuY2AgSSByZWNvZ25pemUsIGJ1dCBgY2hhbm5lbC5jYC4uLiB0aGF0IHJpbmdzIHNvbWUgYmVsbHMgd2l0aCB0aGUgYnJvYWRlciBIeXBlci1WIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgdGhlIFZNQnVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyBob3cgdGhpcyB0aWVzIGluIHdpdGggdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXMgYGNoYW5uZWwuY2AgcGFydCBvZiBgQ09ORklHX0hZUEVSVl9WTUJVU2Agb3IgbWF5YmUganVzdCB0aGUgZ2VuZXJhbCBgQ09ORklHX0hZUEVSVmA/IEkgbmVlZCB0byBnZXQgc29tZSBtb3JlIGNvbnRleHQsIHNvIEkmIzM5O2xsIGNoZWNrIHRoZSBgZHJpdmVycy9odi9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwbGFjZW1lbnQgb2YgdGhpcyBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgSHlwZXItViBkcml2ZXIgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhbm5lbFxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdD00OT1FYWNoIGNoYW5uZWwgaGFzIHRvIHByb3ZpZGUgdHdvIGZ1bmN0aW9ucyB0byB0aGUgZ2VuZXJpYyBQUFAgbGF5ZXIsXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjUwOnZpYSB0aGUgcHBwX2NoYW5uZWwub3BzIHBvaW50ZXI6XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0LTUxLVxuLS1cbmRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZT0yPWhvc3QxeC15ID0gXFxcbi0tXG5kcml2ZXJzL2dwdS9ob3N0MXgvTWFrZWZpbGUtNy1cdGNkbWEubyBcXFxuZHJpdmVycy9ncHUvaG9zdDF4L01ha2VmaWxlOjg6XHRjaGFubmVsLm8gXFxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZS05LVx0am9iLm8gXFxcbi0tXG5kcml2ZXJzL2h2L01ha2VmaWxlPTExPWh2X3ZtYnVzLXkgOj0gdm1idXNfZHJ2Lm8gXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTI6XHRcdCBodi5vIGNvbm5lY3Rpb24ubyBjaGFubmVsLm8gXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTMtXHRcdCBjaGFubmVsX21nbXQubyByaW5nX2J1ZmZlci5vIGh2X3RyYWNlLm9cbi0tXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aWR0di9NYWtlZmlsZT01PWR2Yi12aWR0di1icmlkZ2Utb2JqcyA6PSB2aWR0dl9icmlkZ2UubyB2aWR0dl9jb21tb24ubyB2aWR0dl90cy5vIHZpZHR2X3BzaS5vIFxcXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aWR0di9NYWtlZmlsZTo2Olx0XHRcdCB2aWR0dl9wZXMubyB2aWR0dl9zMzAybS5vIHZpZHR2X2NoYW5uZWwubyB2aWR0dl9tdXgub1xuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmlkdHYvTWFrZWZpbGUtNy1cbi0tXG5kcml2ZXJzL21pc2Mvc2dpLXhwL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX1NHSV9YUClcdFx0JiM0Mzs9IHhwYy5vXG5kcml2ZXJzL21pc2Mvc2dpLXhwL01ha2VmaWxlOjEwOnhwYy15XHRcdFx0XHQ6PSB4cGNfbWFpbi5vIHhwY19jaGFubmVsLm8geHBjX3BhcnRpdGlvbi5vIFxcXG5kcml2ZXJzL21pc2Mvc2dpLXhwL01ha2VmaWxlLTExLVx0XHRcdFx0ICAgeHBjX3V2Lm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZT01PW9iai0kKENPTkZJR19NSUNST1NPRlRfTUFOQSkgJiM0Mzs9IG1hbmEub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGU6NjptYW5hLW9ianMgOj0gZ2RtYV9tYWluLm8gc2htX2NoYW5uZWwubyBod19jaGFubmVsLm8gbWFuYV9lbi5vIG1hbmFfZXRodG9vbC5vIG1hbmFfYnBmLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU9Mj1hdGg5ay15ICYjNDM7PVx0YmVhY29uLm8gXFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtOS1cdFx0YW50ZW5uYS5vIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6MTA6XHRcdGNoYW5uZWwub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlLTExLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZT0yMz1icmNtc21hYy15IDo9IFxcXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlLTI3LVx0YW50c2VsLm8gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZToyODpcdGNoYW5uZWwubyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlLTI5LVx0bWFpbi5vIFxcXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZT0xMT1tdDc2LXkgOj0gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGUtMTItXHRtbWlvLm8gdXRpbC5vIHRyYWNlLm8gZG1hLm8gbWFjODAyMTEubyBkZWJ1Z2ZzLm8gZWVwcm9tLm8gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGU6MTM6XHR0eC5vIGFnZy1yeC5vIG1jdS5vIHdlZC5vIHNjYW4ubyBjaGFubmVsLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGUtMTQtXG4tLVxubmV0L21hYzgwMjExL01ha2VmaWxlPTU9bWFjODAyMTEteSA6PSBcXFxuLS1cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS0xMS1cdHdwYS5vIFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6MTI6XHRzY2FuLm8gb2ZmY2hhbm5lbC5vIFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMTMtXHRodC5vIGFnZy10eC5vIGFnZy1yeC5vIFxcXG4tLVxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZT00PXJwY3JkbWEteSA6PSB0cmFuc3BvcnQubyBycGNfcmRtYS5vIHZlcmJzLm8gZnJ3cl9vcHMubyBpYl9jbGllbnQubyBcXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZTo1Olx0c3ZjX3JkbWEubyBzdmNfcmRtYV9iYWNrY2hhbm5lbC5vIHN2Y19yZG1hX3RyYW5zcG9ydC5vIFxcXG5uZXQvc3VucnBjL3hwcnRyZG1hL01ha2VmaWxlLTYtXHRzdmNfcmRtYV9zZW5kdG8ubyBzdmNfcmRtYV9yZWN2ZnJvbS5vIHN2Y19yZG1hX3J3Lm8gXFxcbm5ldC9zdW5ycGMveHBydHJkbWEvTWFrZWZpbGUtNy1cdHN2Y19yZG1hX3BjbC5vIG1vZHVsZS5vXG5uZXQvc3VucnBjL3hwcnRyZG1hL01ha2VmaWxlOjg6cnBjcmRtYS0kKENPTkZJR19TVU5SUENfQkFDS0NIQU5ORUwpICYjNDM7PSBiYWNrY2hhbm5lbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mzk0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHlwZXItViBWTUJ1cyBNb2R1bGUgYW5kIEFzc29jaWF0ZWQgTmV0d29yayBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGh2X3ZtYnVzYCBtb2R1bGUsIGFuZCBpdCYjMzk7cyBjbGVhcmx5IHRpZWQgdG8gYENPTkZJR19IWVBFUlZgLiBOb3csIGEga2V5IHF1ZXN0aW9uIGlzOiBhcmUgYENPTkZJR19IWVBFUlZgIGFuZCBzcGVjaWZpY2FsbHkgYENPTkZJR19IWVBFUlZfTkVUYCBldmVuIGFjY2Vzc2libGUgd2l0aGluIHRoZSBzeXprYWxsZXIgZW52aXJvbm1lbnQ/IEkga25vdyBzeXprYWxsZXIgaGFzIHBzZXVkby1zeXNjYWxscyBsaWtlIGBzeXpfdm1idXNfZXN0YWJsaXNoX2dwYWRsYCwgd2hpY2ggc3VnZ2VzdHMgdm1idXMgaXMgc3VwcG9ydGVkLiBIbW0sIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IG5vdGUgYWJvdXQgcHNldWRvLXN5c2NhbGxzLiBJdCBzYXlzIEkgY2FuJiMzOTt0IHNlYXJjaCBmb3IgJiMzOTtzeXpfJiMzOTsgZXhwcmVzc2lvbnMgYmVjYXVzZSB0aG9zZSBhcmVuJiMzOTt0IGRpcmVjdGx5IGluIHRoZSBrZXJuZWwgc291cmNlLiBCdXQgSSBrbm93IHN5emthbGxlciAqZG9lcyogaGF2ZSB2bWJ1cyBzdXBwb3J0LCBzbyBJIGNhbiBwdXQgdGhhdCBhc2lkZSBmb3Igbm93LgoKTm93LCB0aGlzIGBuZXR2c2NgIGlzIHRoZSBuZXR3b3JrIGRyaXZlciwgYW5kIHRoYXQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIGZ1enppbmcgaXQgaWYgdGhlIHJpZ2h0IGRldmljZSBpcyBwcmVzZW50LgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyBhIG51bWJlciBvZiBrZXkgZnVuY3Rpb25zOiBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWRgLCBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0YCwgYG5ldHZzY19hbGxvY19idWZfcGFnZXNgLCBgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzYCwgYG5ldHZzY193b3JrcXVldWVfaW5pdGAsIGBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3lgLCBhbmQgYG5ldHZzY19kZXZpY2VfYWRkYC4gTG9va3MgbGlrZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWxsIGFyb3VuZC4KCkxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB0aGUgaW1wb3J0YW50IEZvY3VzU3ltYm9scyBhcmUgaGVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbjogYHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkYCwgYHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdGAsIGBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzYCwgYG5ldHZzY19mcmVlX2J1Zl9wYWdlc2AsIGBuZXR2c2NfZGV2aWNlX2FkZGAsIGBuZXR2c2NfaW5pdF9idWZgIGFuZCBgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGxgLgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzYCBhbmQgYG5ldHZzY19mcmVlX2J1Zl9wYWdlc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHZzY19hbGxvY19idWZfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTEwMT1zdGF0aWMgdm9pZCBuZXR2c2Nfc3ViY2hhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM2LSAqICAgICAgICBmYWlsZWQgYWxsb2NhdGlvbilcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzoxMzc6ICogQGNodW5rczogY2h1bmtzIGFycmF5IGZyb20gbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcygpLCBvciBOVUxMXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM4LSAqIEBjaHVua19jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBjaHVua3Ncbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MTQ1PXN0YXRpYyB2b2lkIG5ldHZzY19mcmVlX2J1Zl9wYWdlcyh2b2lkICphZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xNzEtLypcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzoxNzI6ICogbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyAtIGFsbG9jYXRlIGEgdmlydHVhbGx5LWNvbnRpZ3VvdXMsIGhvc3QtdmlzaWJsZVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE3My0gKiBidWZmZXIgZm9yIHRoZSBuZXR2c2Mgc2VuZC9yZWNlaXZlIGFyZWEuXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE4Ny0gKi9cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzoxODg6c3RhdGljIHZvaWQgKm5ldHZzY19hbGxvY19idWZfcGFnZXMoaW50IG5vZGUsIHUzMiBzaXplLFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE4OS1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqKmNodW5rc19vdXQsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTUwOT1zdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTUzNS1cdFx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1ZiA9XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NTM2Olx0XHRcdG5ldHZzY19hbGxvY19idWZfcGFnZXMoY3B1X3RvX25vZGUoZGV2aWNlLVx1MDAzZWNoYW5uZWwtXHUwMDNldGFyZ2V0X2NwdSksXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNTM3LVx0XHRcdFx0XHQgICAgICAgYnVmX3NpemUsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTY1NS1cdFx0bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1ZiA9XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NjU2Olx0XHRcdG5ldHZzY19hbGxvY19idWZfcGFnZXMoY3B1X3RvX25vZGUoZGV2aWNlLVx1MDAzZWNoYW5uZWwtXHUwMDNldGFyZ2V0X2NwdSksXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNjU3LVx0XHRcdFx0XHQgICAgICAgYnVmX3NpemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODg0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBmZXcgY3J1Y2lhbCBmdW5jdGlvbnMgaW4gdGhpcyBwcm9jZXNzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIG1lIHRvd2FyZHMgdGhlc2U6IGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZGAsIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRgLCBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AsIGBuZXR2c2NfZnJlZV9idWZfcGFnZXNgLCBhbmQgYG5ldHZzY19pbml0X2J1ZmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIHRoZSBkYXRhIHRyYW5zZmVyIGFuZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIHZpcnR1YWxpemVkIG5ldHdvcmsgaW50ZXJmYWNlLgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgY3VyaW91cyBhYm91dCBob3cgdGhlIEdQQURMIGVzdGFibGlzaG1lbnQgYW5kIGRlY3J5cHRpb24gYXJlIGhhbmRsZWQsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhlIGxvY2F0aW9uIG9mIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRgLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGluIHRoZSBgZHJpdmVycy9odi9jaGFubmVsLmNgIGZpbGUsIGJ1dCBpdCYjMzk7cyBhbHdheXMgYmVzdCB0byB2ZXJpZnkuIExldCYjMzk7cyBtYWtlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2h2L2NoYW5uZWwuYz00NDU9c3RhdGljIGludCBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01NDMtLypcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjU0NDogKiB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHQgLSBNYW5hZ2UgdGhlIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01NDUtICogQGtidWZmZXIgYXJvdW5kIGEgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoKSBjYWxsLlxuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTU1Mi0gKi9cbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjU1MzpzdGF0aWMgaW50IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTU1NC1cdFx0XHRcdFx0ICAgICBlbnVtIGh2X2dwYWRsX3R5cGUgdHlwZSxcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYz01OTI9aW50IHZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwgdm9pZCAqa2J1ZmZlcixcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01OTQte1xuZHJpdmVycy9odi9jaGFubmVsLmM6NTk1Olx0cmV0dXJuIHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChjaGFubmVsLCBIVl9HUEFETF9CVUZGRVIsXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01OTYtXHRcdFx0XHRcdFx0IGtidWZmZXIsIHNpemUsIDBVLCBncGFkbCk7XG4tLVxuZHJpdmVycy9odi9jaGFubmVsLmM9NjkzPXN0YXRpYyBpbnQgX192bWJ1c19vcGVuKHN0cnVjdCB2bWJ1c19jaGFubmVsICpuZXdjaGFubmVsLFxuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTcyOC1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjcyOTpcdGVyciA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChuZXdjaGFubmVsLCBIVl9HUEFETF9SSU5HLFxuZHJpdmVycy9odi9jaGFubmVsLmMtNzMwLVx0XHRcdFx0XHRcdHBhZ2VfYWRkcmVzcyhuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfcGFnZSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjY3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBkZWZpbml0ZWx5IHRvdWNoaW5nIHNvbWUgY3JpdGljYWwgSHlwZXItViBuZXR3b3JraW5nIGFuZCBWTUJ1cyBjb3JlIGxvZ2ljLiBCYXNlZCBvbiB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCBpdCB3YXJyYW50cyBhIGZ1enppbmcgZWZmb3J0LiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIG1vZGlmaWVzOiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZGAsIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRgLCBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AsIGBuZXR2c2NfZnJlZV9idWZfcGFnZXNgLCBgbmV0dnNjX2luaXRfYnVmYCwgYW5kIGBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbGAuIFRoZXNlIGFyZSB0aGUgYXJlYXMgd2hlcmUgSSYjMzk7ZCBhbnRpY2lwYXRlIHRoZSBtb3N0IGludGVyZXN0aW5nIGFuZCBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIGludGVyYWN0aW9ucy4gVGhlc2Ugd2lsbCBiZSBteSBmb2N1cyBzeW1ib2xzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIGZvciB0aGlzIHRvIGJlIGFjdGl2ZS4gSSBzZWUgaXQmIzM5O3MgbGlua2VkIHRvIGBIWVBFUlZgIGFuZCBgSFlQRVJWX05FVGAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgSFlQRVJWX05FVGAgaXMgdGhlIG9ubHkgY29uZmlnIGZvciBuZXR2c2MuIFllcywgdGhhdCYjMzk7cyBjb3JyZWN0LiBgQ09ORklHX0hZUEVSVl9ORVRgIGl0IGlzISBBbmQgYEhZUEVSVmAgaXMgZm9yIHZtYnVzLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgc2NhbiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50LCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFlQRVJWX05FVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWc6Mjpjb25maWcgSFlQRVJWX05FVFxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNzgKCQkJCQkJCW91dHB1dDogMTgzCgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiB0aGUgSHlwZXItViBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGVyZSBpc24mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gdG8gY29uc2lkZXIgaGVyZTsgaXQmIzM5O3MgYSBmb2N1c2VkIGNoYW5nZS4gTXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHByaW1hcmlseSByZXZvbHZlcyBhcm91bmQgZW5oYW5jZW1lbnRzIGZvciBDb25maWRlbnRpYWwgVk1zIHdpdGhpbiB0aGUgSHlwZXItViBlbnZpcm9ubWVudC4gSXQmIzM5O3MgZHJpbGxpbmcgaW50byB0aGUgYG5ldHZzY2AgbmV0d29yayBkcml2ZXIgYW5kIHRoZSBWTUJ1cyBjaGFubmVsIGNvZGUuIFRoZSBjb3JlIGxvZ2ljIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgbWFuYWdpbmcgdGhlIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mIEdQQURMIGJ1ZmZlcnMuCgpTcGVjaWZpY2FsbHksIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AgYW5kIGBuZXR2c2NfZnJlZV9idWZfcGFnZXNgIGhhbmRsZSB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mIGJ1ZmZlciBwYWdlcy4gVGhhdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBvZiBjb3Vyc2UuIFRoZW4sIHRoaW5ncyBnZXQgbW9yZSBpbnRlcmVzdGluZyB3aXRoIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZGAgYW5kIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRgLiBUaGVzZSBzdHJvbmdseSBzdWdnZXN0IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgd2F5IEdQQURMcyBhcmUgZXN0YWJsaXNoZWQsIGFuZCBkZWNyeXB0aW9uIGlzIG1hbmFnZWQgZm9yIHRoaXMgZHJpdmVyIGxvZ2ljLiBUaGlzIHdvdWxkIGFsbCBiZSByZWFjaGFibGUgZHJpdmVyIGxvZ2ljLCBvZiBjb3Vyc2UsIGFzIHRoZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIHRvIHBlcmZvcm0gYW4gb3BlcmF0aW9uLiBOb3cgdG8gc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFlQRVJWJiMzNDssCiAgICAmIzM0O0hZUEVSVl9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCYjMzQ7LAogICAgJiMzNDt2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHQmIzM0OywKICAgICYjMzQ7bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyYjMzQ7LAogICAgJiMzNDtuZXR2c2NfZnJlZV9idWZfcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0dnNjX2luaXRfYnVmJiMzNDssCiAgICAmIzM0O19fdm1idXNfZXN0YWJsaXNoX2dwYWRsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVyIChuZXR2c2MpIGFuZCBWTUJ1cyBjaGFubmVsIGNvZGUgdG8gbWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZiBHUEFETCBidWZmZXJzLCBwYXJ0aWN1bGFybHkgZm9yIENvbmZpZGVudGlhbCBWTXMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBhbGxvY2F0ZS9mcmVlIGJ1ZmZlcnMgYW5kIGVzdGFibGlzaCBHUEFETHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFlQRVJWJiMzNDssCiAgICAmIzM0O0hZUEVSVl9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCYjMzQ7LAogICAgJiMzNDt2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHQmIzM0OywKICAgICYjMzQ7bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyYjMzQ7LAogICAgJiMzNDtuZXR2c2NfZnJlZV9idWZfcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0dnNjX2luaXRfYnVmJiMzNDssCiAgICAmIzM0O19fdm1idXNfZXN0YWJsaXNoX2dwYWRsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVyIChuZXR2c2MpIGFuZCBWTUJ1cyBjaGFubmVsIGNvZGUgdG8gbWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZiBHUEFETCBidWZmZXJzLCBwYXJ0aWN1bGFybHkgZm9yIENvbmZpZGVudGlhbCBWTXMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBhbGxvY2F0ZS9mcmVlIGJ1ZmZlcnMgYW5kIGVzdGFibGlzaCBHUEFETHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjA3LjQ0Njc1MTQ1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTQzNzMxMzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhZUEVSVlwiLFxuICAgIFwiSFlQRVJWX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkXCIsXG4gICAgXCJ2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRcIixcbiAgICBcIm5ldHZzY19hbGxvY19idWZfcGFnZXNcIixcbiAgICBcIm5ldHZzY19mcmVlX2J1Zl9wYWdlc1wiLFxuICAgIFwibmV0dnNjX2luaXRfYnVmXCIsXG4gICAgXCJfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVyIChuZXR2c2MpIGFuZCBWTUJ1cyBjaGFubmVsIGNvZGUgdG8gbWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZiBHUEFETCBidWZmZXJzLCBwYXJ0aWN1bGFybHkgZm9yIENvbmZpZGVudGlhbCBWTXMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBhbGxvY2F0ZS9mcmVlIGJ1ZmZlcnMgYW5kIGVzdGFibGlzaCBHUEFETHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6MDcuNDQ2NzU3OTE5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDUwNjYxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNGI1ZmQ4Njk3MWYyMjA2MWMwOWM4OGRiNWVjZjc1OWViMjJjYmQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDE0OjU0OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvY2hhbm5lbC5jIGIvZHJpdmVycy9odi9jaGFubmVsLmNcXG5pbmRleCA2ODIxZjIyNTI0OGIxOS4uMDE2NjM2N2E0ZGYzNzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9odi9jaGFubmVsLmNcXG4rKysgYi9kcml2ZXJzL2h2L2NoYW5uZWwuY1xcbkBAIC00MjYsNyArNDI2LDEzIEBAIHN0YXRpYyB2b2lkIHZtYnVzX2ZyZWVfY2hhbm5lbF9tc2dpbmZvKHN0cnVjdCB2bWJ1c19jaGFubmVsX21zZ2luZm8gKm1zZ2luZm8pXFxuIH1cXG4gXFxuIC8qXFxuLSAqIF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsIC0gRXN0YWJsaXNoIGEgR1BBREwgZm9yIGEgYnVmZmVyIG9yIHJpbmdidWZmZXJcXG4rICogX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwgLSBFc3RhYmxpc2ggYSBHUEFETCBmb3IgYSBidWZmZXIgb3IgcmluZ2J1ZmZlci5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBvbmx5IGhhbmRsZXMgdGhlIEdQQURMIGhhbmRzaGFrZSB3aXRoIHRoZSBob3N0LiAgVGhlIGNhbGxlclxcbisgKiBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCBAa2J1ZmZlciBpcyBpbiB0aGUgZW5jcnlwdGlvbiBzdGF0ZSB0aGVcXG4rICogaG9zdCBleHBlY3RzIChob3N0LXZpc2libGUgLyBcXFwiZGVjcnlwdGVkXFxcIiBmb3IgY29uZmlkZW50aWFsIFZNcyk7IHRoaXNcXG4rICogZnVuY3Rpb24gbmV2ZXIgY2FsbHMgc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBvciBzZXRfbWVtb3J5X2VuY3J5cHRlZCgpLlxcbisgKiBJdCBhbHNvIGxlYXZlcyBncGFkbC1cXHUwMDNlZGVjcnlwdGVkIHVudG91Y2hlZCwgc28gdGhlIGNhbGxlciBtdXN0IHNldCBpdC5cXG4gICpcXG4gICogQGNoYW5uZWw6IGEgY2hhbm5lbFxcbiAgKiBAdHlwZTogdGhlIHR5cGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgR1BBREwsIG9ubHkgbWVhbmluZ2Z1bCBmb3IgdGhlIGd1ZXN0LlxcbkBAIC00MzQsNyArNDQwLDcgQEAgc3RhdGljIHZvaWQgdm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8oc3RydWN0IHZtYnVzX2NoYW5uZWxfbXNnaW5mbyAqbXNnaW5mbylcXG4gICogQHNpemU6IHBhZ2Utc2l6ZSBtdWx0aXBsZVxcbiAgKiBAc2VuZF9vZmZzZXQ6IHRoZSBvZmZzZXQgKGluIGJ5dGVzKSB3aGVyZSB0aGUgc2VuZCByaW5nIGJ1ZmZlciBzdGFydHMsXFxuICAqICAgICAgICAgICAgICBzaG91bGQgYmUgMCBmb3IgQlVGRkVSIHR5cGUgZ3BhZGxcXG4tICogQGdwYWRsX2hhbmRsZTogc29tZSBmdW5reSB0aGluZ1xcbisgKiBAZ3BhZGw6IG91dCBwYXJhbWV0ZXIgcmVjZWl2aW5nIHRoZSBlc3RhYmxpc2hlZCBHUEFETCBoYW5kbGUvYnVmZmVyL3NpemVcXG4gICovXFxuIHN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXFxuIFxcdFxcdFxcdFxcdCAgIGVudW0gaHZfZ3BhZGxfdHlwZSB0eXBlLCB2b2lkICprYnVmZmVyLFxcbkBAIC00NTQsMzAgKzQ2MCw4IEBAIHN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXFxuIFxcdFxcdChhdG9taWNfaW5jX3JldHVybihcXHUwMDI2dm1idXNfY29ubmVjdGlvbi5uZXh0X2dwYWRsX2hhbmRsZSkgLSAxKTtcXG4gXFxuIFxcdHJldCA9IGNyZWF0ZV9ncGFkbF9oZWFkZXIodHlwZSwga2J1ZmZlciwgc2l6ZSwgc2VuZF9vZmZzZXQsIFxcdTAwMjZtc2dpbmZvKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRncGFkbC1cXHUwMDNlZGVjcnlwdGVkID0gZmFsc2U7XFxuK1xcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGdwYWRsLVxcdTAwM2VkZWNyeXB0ZWQgPSAhKChjaGFubmVsLVxcdTAwM2Vjb19leHRlcm5hbF9tZW1vcnkgXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBIVl9HUEFETF9CVUZGRVIpIHx8XFxuLVxcdFxcdChjaGFubmVsLVxcdTAwM2Vjb19yaW5nX2J1ZmZlciBcXHUwMDI2XFx1MDAyNiB0eXBlID09IEhWX0dQQURMX1JJTkcpKTtcXG4tXFx0aWYgKGdwYWRsLVxcdTAwM2VkZWNyeXB0ZWQpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogVGhlIFxcXCJkZWNyeXB0ZWRcXFwiIGZsYWcgYmVpbmcgdHJ1ZSBhc3N1bWVzIHRoYXQgc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBzdWNjZWVkcy5cXG4tXFx0XFx0ICogQnV0IGlmIGl0IGZhaWxzLCB0aGUgZW5jcnlwdGlvbiBzdGF0ZSBvZiB0aGUgbWVtb3J5IGlzIHVua25vd24uIEluIHRoYXQgY2FzZSxcXG4tXFx0XFx0ICogbGVhdmUgXFxcImRlY3J5cHRlZFxcXCIgYXMgdHJ1ZSB0byBlbnN1cmUgdGhlIG1lbW9yeSBpcyBsZWFrZWQgaW5zdGVhZCBvZiBnb2luZyBiYWNrXFxuLVxcdFxcdCAqIG9uIHRoZSBmcmVlIGxpc3QuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXQgPSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylrYnVmZmVyLFxcbi1cXHRcXHRcXHRcXHRcXHRQRk5fVVAoc2l6ZSkpO1xcbi1cXHRcXHRpZiAocmV0KSB7XFxuLVxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZjaGFubmVsLVxcdTAwM2VkZXZpY2Vfb2JqLVxcdTAwM2VkZXZpY2UsXFxuLVxcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gc2V0IGhvc3QgdmlzaWJpbGl0eSBmb3IgbmV3IEdQQURMICVkLlxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0cmV0KTtcXG4tXFx0XFx0XFx0dm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8obXNnaW5mbyk7XFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbiBcXG4gXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZtc2dpbmZvLVxcdTAwM2V3YWl0ZXZlbnQpO1xcbiBcXHRtc2dpbmZvLVxcdTAwM2V3YWl0aW5nX2NoYW5uZWwgPSBjaGFubmVsO1xcbkBAIC01NTMsMTkgKzUzNyw0NyBAQCBzdGF0aWMgaW50IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2bWJ1c19jb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0dm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8obXNnaW5mbyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4gXFxuLVxcdGlmIChyZXQpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSWYgc2V0X21lbW9yeV9lbmNyeXB0ZWQoKSBmYWlscywgdGhlIGRlY3J5cHRlZCBmbGFnIGlzXFxuLVxcdFxcdCAqIGxlZnQgYXMgdHJ1ZSBzbyB0aGUgbWVtb3J5IGlzIGxlYWtlZCBpbnN0ZWFkIG9mIGJlaW5nXFxuLVxcdFxcdCAqIHB1dCBiYWNrIG9uIHRoZSBmcmVlIGxpc3QuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZ3BhZGwtXFx1MDAzZWRlY3J5cHRlZCkge1xcbi1cXHRcXHRcXHRpZiAoIXNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSkpXFxuLVxcdFxcdFxcdFxcdGdwYWRsLVxcdTAwM2VkZWNyeXB0ZWQgPSBmYWxzZTtcXG4rLypcXG4rICogdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0IC0gTWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZlxcbisgKiBAa2J1ZmZlciBhcm91bmQgYSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbCgpIGNhbGwuXFxuKyAqXFxuKyAqIERlY3J5cHRzIEBrYnVmZmVyIChtYWtpbmcgaXQgaG9zdC12aXNpYmxlKSB1bmxlc3MgdGhlIGNoYW5uZWwgd2FzIGNyZWF0ZWRcXG4rICogd2l0aCBjb25maWRlbnRpYWwgbWVtb3J5IGZvciBAdHlwZSwgdGhlbiBlc3RhYmxpc2hlcyB0aGUgR1BBREwuICBPblxcbisgKiBlc3RhYmxpc2ggZmFpbHVyZSB0aGUgYnVmZmVyIGlzIHJlLWVuY3J5cHRlZCBzbyB0aGUgY2FsbGVyIGNhbiBmcmVlIGl0LlxcbisgKlxcbisgKiBTZXRzIGdwYWRsLVxcdTAwM2VkZWNyeXB0ZWQ7IHNlZSB0aGUgY29tbWVudCBvbiBzdHJ1Y3Qgdm1idXNfZ3BhZGw6OmRlY3J5cHRlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gaHZfZ3BhZGxfdHlwZSB0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHZvaWQgKmtidWZmZXIsIHUzMiBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBzZW5kX29mZnNldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdm1idXNfZ3BhZGwgKmdwYWRsKVxcbit7XFxuK1xcdGJvb2wgZGVjcnlwdCA9ICEoKGNoYW5uZWwtXFx1MDAzZWNvX2V4dGVybmFsX21lbW9yeSBcXHUwMDI2XFx1MDAyNiB0eXBlID09IEhWX0dQQURMX0JVRkZFUikgfHxcXG4rXFx0XFx0XFx0IChjaGFubmVsLVxcdTAwM2Vjb19yaW5nX2J1ZmZlciBcXHUwMDI2XFx1MDAyNiB0eXBlID09IEhWX0dQQURMX1JJTkcpKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChkZWNyeXB0KSB7XFxuK1xcdFxcdHJldCA9IHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmNoYW5uZWwtXFx1MDAzZWRldmljZV9vYmotXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgdG8gc2V0IGhvc3QgdmlzaWJpbGl0eSBmb3IgbmV3IEdQQURMICVkLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IHJldCk7XFxuK1xcdFxcdFxcdC8qIEVuY3J5cHRpb24gc3RhdGUgdW5rbm93bjsgc2lnbmFsIGNhbGxlciB0byBsZWFrLiAqL1xcbitcXHRcXHRcXHRncGFkbC1cXHUwMDNlZGVjcnlwdGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRncGFkbC1cXHUwMDNlZGVjcnlwdGVkID0gZGVjcnlwdDtcXG4rXFx0cmV0ID0gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoY2hhbm5lbCwgdHlwZSwga2J1ZmZlciwgc2l6ZSwgc2VuZF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGdwYWRsKTtcXG4rXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBkZWNyeXB0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhc2V0X21lbW9yeV9lbmNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpa2J1ZmZlciwgUEZOX1VQKHNpemUpKSlcXG4rXFx0XFx0Z3BhZGwtXFx1MDAzZWRlY3J5cHRlZCA9IGZhbHNlO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC01ODAsMTEgKzU5Miw0MCBAQCBzdGF0aWMgaW50IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxcbiBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLCB2b2lkICprYnVmZmVyLFxcbiBcXHRcXHRcXHQgIHUzMiBzaXplLCBzdHJ1Y3Qgdm1idXNfZ3BhZGwgKmdwYWRsKVxcbiB7XFxuLVxcdHJldHVybiBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChjaGFubmVsLCBIVl9HUEFETF9CVUZGRVIsIGtidWZmZXIsIHNpemUsXFxuLVxcdFxcdFxcdFxcdCAgICAgICAwVSwgZ3BhZGwpO1xcbitcXHRyZXR1cm4gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KGNoYW5uZWwsIEhWX0dQQURMX0JVRkZFUixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGtidWZmZXIsIHNpemUsIDBVLCBncGFkbCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodm1idXNfZXN0YWJsaXNoX2dwYWRsKTtcXG4gXFxuKy8qXFxuKyAqIHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkIC0gRXN0YWJsaXNoIGEgR1BBREwgZm9yIGEgYnVmZmVyXFxuKyAqIHdob3NlIGVuY3J5cHRpb24gc3RhdGUgaXMgbWFuYWdlZCBieSB0aGUgY2FsbGVyLlxcbisgKlxcbisgKiBAY2hhbm5lbDogYSBjaGFubmVsXFxuKyAqIEBrYnVmZmVyOiBhIGJ1ZmZlciB0aGF0IHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgdHJhbnNpdGlvbmVkIHRvIGhvc3QtdmlzaWJsZVxcbisgKiAgICAgICAgICAgKGRlY3J5cHRlZCkgdmlhIHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgb3IgYW4gZXF1aXZhbGVudCBtZWNoYW5pc20uXFxuKyAqIEBzaXplOiBwYWdlLXNpemUgbXVsdGlwbGVcXG4rICogQGdwYWRsOiBvdXQgcGFyYW1ldGVyIHJlY2VpdmluZyB0aGUgZXN0YWJsaXNoZWQgR1BBRExcXG4rICpcXG4rICogVW5saWtlIHZtYnVzX2VzdGFibGlzaF9ncGFkbCgpLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNhbGxcXG4rICogc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBvbiBAa2J1ZmZlciwgYW5kIHRoZSBtYXRjaGluZyB2bWJ1c190ZWFyZG93bl9ncGFkbCgpXFxuKyAqIGNhbGwgd2lsbCBub3QgY2FsbCBzZXRfbWVtb3J5X2VuY3J5cHRlZCgpIG9uIGl0LiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZVxcbisgKiBmb3IgdGhlIGZ1bGwgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2YgQGtidWZmZXI7IG9uIHJldHVybiBncGFkbC1cXHUwMDNlZGVjcnlwdGVkXFxuKyAqIGlzIHNldCB0byBmYWxzZSB0byByZWNvcmQgdGhhdCB2bWJ1cyBkb2VzIG5vdCBvd24gdGhlIGVuY3J5cHRpb24gc3RhdGUuXFxuKyAqL1xcbitpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHZvaWQgKmtidWZmZXIsIHUzMiBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgdm1idXNfZ3BhZGwgKmdwYWRsKVxcbit7XFxuK1xcdGludCByZXQgPSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChjaGFubmVsLCBIVl9HUEFETF9CVUZGRVIsIGtidWZmZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc2l6ZSwgMFUsIGdwYWRsKTtcXG4rXFxuK1xcdC8qIENhbGxlciBvd25zIEBrYnVmZmVyJ3MgZW5jcnlwdGlvbjsgdGVhcmRvd24gbXVzdCBub3QgdG91Y2ggaXQuICovXFxuK1xcdGdwYWRsLVxcdTAwM2VkZWNyeXB0ZWQgPSBmYWxzZTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCk7XFxuK1xcbiAvKipcXG4gICogcmVxdWVzdF9hcnJfaW5pdCAtIEFsbG9jYXRlcyBtZW1vcnkgZm9yIHRoZSByZXF1ZXN0b3IgYXJyYXkuIEVhY2ggc2xvdFxcbiAgKiBrZWVwcyB0cmFjayBvZiB0aGUgbmV4dCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgYXJyYXkuIEluaXRpYWxseSwgZWFjaFxcbkBAIC02ODUsMTEgKzcyNiwxMSBAQCBzdGF0aWMgaW50IF9fdm1idXNfb3BlbihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqbmV3Y2hhbm5lbCxcXG4gXFx0LyogRXN0YWJsaXNoIHRoZSBncGFkbCBmb3IgdGhlIHJpbmcgYnVmZmVyICovXFxuIFxcdG5ld2NoYW5uZWwtXFx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUuZ3BhZGxfaGFuZGxlID0gMDtcXG4gXFxuLVxcdGVyciA9IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKG5ld2NoYW5uZWwsIEhWX0dQQURMX1JJTkcsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHBhZ2VfYWRkcmVzcyhuZXdjaGFubmVsLVxcdTAwM2VyaW5nYnVmZmVyX3BhZ2UpLFxcbi1cXHRcXHRcXHRcXHQgICAgICAoc2VuZF9wYWdlcyArIHJlY3ZfcGFnZXMpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuLVxcdFxcdFxcdFxcdCAgICAgIG5ld2NoYW5uZWwtXFx1MDAzZXJpbmdidWZmZXJfc2VuZF9vZmZzZXQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm5ld2NoYW5uZWwtXFx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUpO1xcbitcXHRlcnIgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHQobmV3Y2hhbm5lbCwgSFZfR1BBRExfUklORyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cGFnZV9hZGRyZXNzKG5ld2NoYW5uZWwtXFx1MDAzZXJpbmdidWZmZXJfcGFnZSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdChzZW5kX3BhZ2VzICsgcmVjdl9wYWdlcykgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bmV3Y2hhbm5lbC1cXHUwMDNlcmluZ2J1ZmZlcl9zZW5kX29mZnNldCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bmV3Y2hhbm5lbC1cXHUwMDNlcmluZ2J1ZmZlcl9ncGFkbGhhbmRsZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyb3JfY2xlYW5fcmluZztcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmggYi9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXFxuaW5kZXggNzM5N2M2OTNmOTg0YWYuLmIwYzRjYjBmN2E0Y2U0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmhcXG4rKysgYi9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXFxuQEAgLTIyMCw2ICsyMjAsOCBAQCBzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0O1xcbiBcXG4gZXh0ZXJuIHUzMiBuZXR2c2NfcmluZ19ieXRlcztcXG4gXFxuK2ludCBuZXR2c2Nfd29ya3F1ZXVlX2luaXQodm9pZCk7XFxuK3ZvaWQgbmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KHZvaWQpO1xcbiBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxcbiBcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0dnNjX2RldmljZV9pbmZvICppbmZvKTtcXG4gaW50IG5ldHZzY19hbGxvY19yZWN2X2NvbXBfcmluZyhzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZSwgdTMyIHFfaWR4KTtcXG5AQCAtMTE0Nyw2ICsxMTQ5LDE2IEBAIHN0cnVjdCBuZXR2c2NfY2hhbm5lbCB7XFxuIFxcdHN0cnVjdCBuZXR2c2Nfc3RhdHNfcnggcnhfc3RhdHM7XFxuIH07XFxuIFxcbisvKiBBIHBoeXNpY2FsbHktY29udGlndW91cyBjaHVuayBvZiBuZXR2c2MgYnVmZmVyLlxcbisgKlxcbisgKiBUaGUgY2h1bmsgbGlzdCBpcyBwcmVzZXJ2ZWQgc28gZWFjaCBjaHVuayBjYW4gYmUgaW5kaXZpZHVhbGx5IGZyZWVkIGF0XFxuKyAqIHRlYXJkb3duLlxcbisgKi9cXG4rc3RydWN0IG5ldHZzY19idWZfY2h1bmsge1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbit9O1xcbitcXG4gLyogUGVyIG5ldHZzYyBkZXZpY2UgKi9cXG4gc3RydWN0IG5ldHZzY19kZXZpY2Uge1xcbiBcXHR1MzIgbnZzcF92ZXJzaW9uO1xcbkBAIC0xMTU4LDYgKzExNzAsOCBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSB7XFxuIFxcdC8qIFJlY2VpdmUgYnVmZmVyIGFsbG9jYXRlZCBieSB1cyBidXQgbWFuYWdlcyBieSBOZXRWU1AgKi9cXG4gXFx0dm9pZCAqcmVjdl9idWY7XFxuIFxcdHUzMiByZWN2X2J1Zl9zaXplOyAvKiBhbGxvY2F0ZWQgYnl0ZXMgKi9cXG4rXFx0c3RydWN0IG5ldHZzY19idWZfY2h1bmsgKnJlY3ZfYnVmX2NodW5rcztcXG4rXFx0dTMyIHJlY3ZfYnVmX2NodW5rX2NudDtcXG4gXFx0c3RydWN0IHZtYnVzX2dwYWRsIHJlY3ZfYnVmX2dwYWRsX2hhbmRsZTtcXG4gXFx0dTMyIHJlY3Zfc2VjdGlvbl9jbnQ7XFxuIFxcdHUzMiByZWN2X3NlY3Rpb25fc2l6ZTtcXG5AQCAtMTE2Niw2ICsxMTgwLDggQEAgc3RydWN0IG5ldHZzY19kZXZpY2Uge1xcbiBcXHQvKiBTZW5kIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdXMgKi9cXG4gXFx0dm9pZCAqc2VuZF9idWY7XFxuIFxcdHUzMiBzZW5kX2J1Zl9zaXplO1xcbitcXHRzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqc2VuZF9idWZfY2h1bmtzO1xcbitcXHR1MzIgc2VuZF9idWZfY2h1bmtfY250O1xcbiBcXHRzdHJ1Y3Qgdm1idXNfZ3BhZGwgc2VuZF9idWZfZ3BhZGxfaGFuZGxlO1xcbiBcXHR1MzIgc2VuZF9zZWN0aW9uX2NudDtcXG4gXFx0dTMyIHNlbmRfc2VjdGlvbl9zaXplO1xcbkBAIC0xMTkzLDcgKzEyMDksNyBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSB7XFxuIFxcbiBcXHRzdHJ1Y3QgbmV0dnNjX2NoYW5uZWwgY2hhbl90YWJsZVtWUlNTX0NIQU5ORUxfTUFYXTtcXG4gXFxuLVxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuK1xcdHN0cnVjdCByY3Vfd29yayByd29yaztcXG4gfTtcXG4gXFxuIC8qIE5kaXNJbml0aWFsaXplIG1lc3NhZ2UgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jIGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXFxuaW5kZXggNTllOTUzNDFmOWIxZTUuLjI1MDVkMTBlMjIwMTAyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xcbkBAIC0xNCw2ICsxNCw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sb2cyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuQEAgLTI4LDYgKzMwLDggQEBcXG4gI2luY2x1ZGUgXFxcImh5cGVydl9uZXQuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm5ldHZzY190cmFjZS5oXFxcIlxcbiBcXG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXR2c2Nfd3E7XFxuK1xcbiAvKlxcbiAgKiBTd2l0Y2ggdGhlIGRhdGEgcGF0aCBmcm9tIHRoZSBzeW50aGV0aWMgaW50ZXJmYWNlIHRvIHRoZSBWRlxcbiAgKiBpbnRlcmZhY2UuXFxuQEAgLTEyNSw0MCArMTI5LDE2MyBAQCBzdGF0aWMgdm9pZCBuZXR2c2Nfc3ViY2hhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4gXFx0cnRubF91bmxvY2soKTtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBuZXR2c2NfZGV2aWNlICphbGxvY19uZXRfZGV2aWNlKHZvaWQpXFxuKy8qXFxuKyAqIG5ldHZzY19mcmVlX2J1Zl9wYWdlcyAtIHJlbGVhc2UgYSBuZXR2c2Mgc2VuZC9yZWNlaXZlIGJ1ZmZlci5cXG4rICpcXG4rICogQGFkZHI6IGJ1ZmZlciBhZGRyZXNzLCBvciBOVUxMIGlmIG5vbmUgd2FzIGFsbG9jYXRlZCAoZS5nLiBjbGVhbnVwIGZyb20gYVxcbisgKiAgICAgICAgZmFpbGVkIGFsbG9jYXRpb24pXFxuKyAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIG5ldHZzY19hbGxvY19idWZfcGFnZXMoKSwgb3IgTlVMTFxcbisgKiBAY2h1bmtfY250OiBudW1iZXIgb2YgZW50cmllcyBpbiBAY2h1bmtzXFxuKyAqXFxuKyAqIFdoZW4gQGNodW5rcyBpcyBOVUxMIHRoZSBidWZmZXIgaXMgYSBwbGFpbiB2emFsbG9jKCkgYWxsb2NhdGlvbi5cXG4rICpcXG4rICogT3RoZXJ3aXNlIHRlYXIgZG93biB0aGUgdm1hcCwgYW5kIGZvciBlYWNoIGNodW5rIHJlLWVuY3J5cHQgYW5kIGZyZWVcXG4rICogdGhlIHVuZGVybHlpbmcgcGFnZXMuIEFueSBjaHVuayB0aGF0IGNhbm5vdCBiZSByZS1lbmNyeXB0ZWQgaXMgbGVha2VkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKHZvaWQgKmFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG5ldHZzY19idWZfY2h1bmsgKmNodW5rcyxcXG4rXFx0XFx0XFx0XFx0ICB1MzIgY2h1bmtfY250KVxcbiB7XFxuLVxcdHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlO1xcbitcXHR1MzIgaTtcXG4gXFxuLVxcdG5ldF9kZXZpY2UgPSBremFsbG9jX29iaihzdHJ1Y3QgbmV0dnNjX2RldmljZSk7XFxuLVxcdGlmICghbmV0X2RldmljZSlcXG4rXFx0aWYgKCFjaHVua3MpIHtcXG4rXFx0XFx0dmZyZWUoYWRkcik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0dnVubWFwKGFkZHIpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNodW5rX2NudDsgaSsrKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgdmFkZHIgPVxcbitcXHRcXHRcXHQodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoY2h1bmtzW2ldLnBhZ2UpO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjaHVua3NbaV0ub3JkZXI7XFxuK1xcbitcXHRcXHRpZiAoc2V0X21lbW9yeV9lbmNyeXB0ZWQodmFkZHIsIDFVIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdF9fZnJlZV9wYWdlcyhjaHVua3NbaV0ucGFnZSwgb3JkZXIpO1xcbitcXHR9XFxuK1xcbitcXHRrdmZyZWUoY2h1bmtzKTtcXG4rfVxcbitcXG4rLypcXG4rICogbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyAtIGFsbG9jYXRlIGEgdmlydHVhbGx5LWNvbnRpZ3VvdXMsIGhvc3QtdmlzaWJsZVxcbisgKiBidWZmZXIgZm9yIHRoZSBuZXR2c2Mgc2VuZC9yZWNlaXZlIGFyZWEuXFxuKyAqXFxuKyAqIEBub2RlOiBOVU1BIG5vZGUgaGludCAoTlVNQV9OT19OT0RFIGZvciBhbnkgbm9kZSlcXG4rICogQHNpemU6IHJlcXVlc3RlZCBidWZmZXIgc2l6ZSBpbiBieXRlcyAocm91bmRlZCB1cCB0byBQQUdFX1NJWkUpXFxuKyAqIEBjaHVua3Nfb3V0OiBvbiBzdWNjZXNzLCBzZXQgdG8gdGhlIGFycmF5IG9mIHVuZGVybHlpbmcgY2h1bmtzXFxuKyAqIEBjaHVua19jbnRfb3V0OiBvbiBzdWNjZXNzLCBzZXQgdG8gdGhlIG51bWJlciBvZiBjaHVua3NcXG4rICpcXG4rICogQWxsb2NhdGVzIHRoZSBidWZmZXIgYXMgYSBzZXJpZXMgb2YgcGh5c2ljYWxseS1jb250aWd1b3VzIGNodW5rcyxcXG4rICogc3RhcnRpbmcgYXQgTUFYX1BBR0VfT1JERVIgYW5kIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIG9yZGVycyBvblxcbisgKiBhbGxvY2F0aW9uIGZhaWx1cmUuIEVhY2ggY2h1bmsgaXMgdHJhbnNpdGlvbmVkIHRvIGhvc3QtdmlzaWJsZSB2aWFcXG4rICogc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBvbiBpdHMgZGlyZWN0LW1hcCBhZGRyZXNzLCB0aGVuIGFsbCBjaHVua3MgYXJlXFxuKyAqIGNvbWJpbmVkIGludG8gYSB2aXJ0dWFsbHktY29udGlndW91cyByYW5nZSB2aWEgdm1hcCgpLlxcbisgKlxcbisgKiBSZXR1cm46IHRoZSB2bWFwKCllZCB2aXJ0dWFsIGFkZHJlc3MsIG9yIE5VTEwgb24gZmFpbHVyZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkICpuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGludCBub2RlLCB1MzIgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICoqY2h1bmtzX291dCxcXG4rXFx0XFx0XFx0XFx0ICAgIHUzMiAqY2h1bmtfY250X291dClcXG4re1xcbitcXHR1MzIgbnJfcGFnZXMgPSBQRk5fVVAoc2l6ZSk7XFxuK1xcdHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICpjaHVua3MgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDtcXG4rXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbitcXHR1MzIgY2h1bmtfY250ID0gMDtcXG4rXFx0dTMyIHBhZ2VfaWR4ID0gMDtcXG4rXFx0dTMyIHJlbWFpbmluZyA9IG5yX3BhZ2VzO1xcbitcXHR2b2lkICphZGRyO1xcbitcXHR1MzIgaTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdCpjaHVua3Nfb3V0ID0gTlVMTDtcXG4rXFx0KmNodW5rX2NudF9vdXQgPSAwO1xcbitcXG4rXFx0aWYgKCFucl9wYWdlcylcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2V3YWl0X2RyYWluKTtcXG4tXFx0bmV0X2RldmljZS1cXHUwMDNlZGVzdHJveSA9IGZhbHNlO1xcbi1cXHRuZXRfZGV2aWNlLVxcdTAwM2V0eF9kaXNhYmxlID0gdHJ1ZTtcXG4rXFx0LyogV29yc3QgY2FzZTogZXZlcnkgY2h1bmsgaXMgYSBzaW5nbGUgcGFnZS4gKi9cXG4rXFx0Y2h1bmtzID0ga3ZtYWxsb2NfYXJyYXkobnJfcGFnZXMsIHNpemVvZigqY2h1bmtzKSxcXG4rXFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbitcXHRpZiAoIWNodW5rcylcXG4rXFx0XFx0Z290byBlcnI7XFxuIFxcbi1cXHRuZXRfZGV2aWNlLVxcdTAwM2VtYXhfcGt0ID0gUk5ESVNfTUFYX1BLVF9ERUZBVUxUO1xcbi1cXHRuZXRfZGV2aWNlLVxcdTAwM2Vwa3RfYWxpZ24gPSBSTkRJU19QS1RfQUxJR05fREVGQVVMVDtcXG4rXFx0cGFnZXMgPSBrdm1hbGxvY19hcnJheShucl9wYWdlcywgc2l6ZW9mKCpwYWdlcyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBhZ2VzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4gXFxuLVxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlY2hhbm5lbF9pbml0X3dhaXQpO1xcbi1cXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VzdWJjaGFuX29wZW4pO1xcbi1cXHRJTklUX1dPUksoXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXN1YmNoYW5fd29yaywgbmV0dnNjX3N1YmNoYW5fd29yayk7XFxuK1xcdC8qXFxuK1xcdCAqIEBvcmRlciBtb25vdG9uaWNhbGx5IGRlY3JlYXNlcyBhY3Jvc3MgaXRlcmF0aW9uc1xcbitcXHQgKlxcbitcXHQgKiBVc2UgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTiB0byBhdm9pZCBPT00ta2lsbGluZywgYnV0IHRyeVxcbitcXHQgKiBoYXJkZXIgYXQgb3JkZXIgMCBzaW5jZSB0aGF0IGlzIHRoZSBmaW5hbCBmYWxsYmFjay5cXG4rXFx0ICovXFxuK1xcdG9yZGVyID0gbWluX3QodW5zaWduZWQgaW50LCBNQVhfUEFHRV9PUkRFUiwgaWxvZzIobnJfcGFnZXMpKTtcXG4rXFx0d2hpbGUgKHJlbWFpbmluZykge1xcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0XFx0Z2ZwX3QgZ2ZwO1xcbitcXG4rXFx0XFx0b3JkZXIgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG9yZGVyLCBpbG9nMihyZW1haW5pbmcpKTtcXG4rXFxuK1xcdFxcdGZvciAoOzspIHtcXG4rXFx0XFx0XFx0Z2ZwID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk87XFxuK1xcdFxcdFxcdGlmIChvcmRlcilcXG4rXFx0XFx0XFx0XFx0Z2ZwIHw9IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk47XFxuK1xcdFxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgb3JkZXIpO1xcbitcXHRcXHRcXHRpZiAocGFnZSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGlmICghb3JkZXIpXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHRcXHRcXHRvcmRlci0tO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRyZXR1cm4gbmV0X2RldmljZTtcXG4rXFx0XFx0cmV0ID0gc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAxVSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBmYWlsZWQ7IHRoZSBwYWdlIHN0YXRlIGlzXFxuK1xcdFxcdFxcdCAqIHVua25vd24gc28gaXQgbXVzdCBiZSBsZWFrZWQgcmF0aGVyIHRoYW4gZnJlZWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Y2h1bmtzW2NodW5rX2NudF0ucGFnZSA9IHBhZ2U7XFxuK1xcdFxcdGNodW5rc1tjaHVua19jbnRdLm9yZGVyID0gb3JkZXI7XFxuK1xcdFxcdGNodW5rX2NudCsrO1xcbitcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjICgxVSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7IGkrKylcXG4rXFx0XFx0XFx0cGFnZXNbcGFnZV9pZHgrK10gPSBwYWdlICsgaTtcXG4rXFxuK1xcdFxcdHJlbWFpbmluZyAtPSAxVSBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4rXFx0fVxcbitcXG4rXFx0YWRkciA9IHZtYXAocGFnZXMsIG5yX3BhZ2VzLCBWTV9NQVAsIHBncHJvdF9kZWNyeXB0ZWQoUEFHRV9LRVJORUwpKTtcXG4rXFx0aWYgKCFhZGRyKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGt2ZnJlZShwYWdlcyk7XFxuK1xcdCpjaHVua3Nfb3V0ID0gY2h1bmtzO1xcbitcXHQqY2h1bmtfY250X291dCA9IGNodW5rX2NudDtcXG4rXFx0cmV0dXJuIGFkZHI7XFxuK1xcbitlcnI6XFxuK1xcdGt2ZnJlZShwYWdlcyk7XFxuK1xcdG5ldHZzY19mcmVlX2J1Zl9wYWdlcyhOVUxMLCBjaHVua3MsIGNodW5rX2NudCk7XFxuK1xcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbitzdGF0aWMgdm9pZCBfX2ZyZWVfbmV0dnNjX2RldmljZShzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbnZkZXYpXFxuIHtcXG4tXFx0c3RydWN0IG5ldHZzY19kZXZpY2UgKm52ZGV2XFxuLVxcdFxcdD0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBuZXR2c2NfZGV2aWNlLCByY3UpO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGtmcmVlKG52ZGV2LVxcdTAwM2VleHRlbnNpb24pO1xcbiBcXG4tXFx0aWYgKCFudmRldi1cXHUwMDNlcmVjdl9idWZfZ3BhZGxfaGFuZGxlLmRlY3J5cHRlZClcXG4tXFx0XFx0dmZyZWUobnZkZXYtXFx1MDAzZXJlY3ZfYnVmKTtcXG4tXFx0aWYgKCFudmRldi1cXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlLmRlY3J5cHRlZClcXG4tXFx0XFx0dmZyZWUobnZkZXYtXFx1MDAzZXNlbmRfYnVmKTtcXG4rXFx0bmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKG52ZGV2LVxcdTAwM2VyZWN2X2J1ZiwgbnZkZXYtXFx1MDAzZXJlY3ZfYnVmX2NodW5rcyxcXG4rXFx0XFx0XFx0ICAgICAgbnZkZXYtXFx1MDAzZXJlY3ZfYnVmX2NodW5rX2NudCk7XFxuK1xcdG5ldHZzY19mcmVlX2J1Zl9wYWdlcyhudmRldi1cXHUwMDNlc2VuZF9idWYsIG52ZGV2LVxcdTAwM2VzZW5kX2J1Zl9jaHVua3MsXFxuK1xcdFxcdFxcdCAgICAgIG52ZGV2LVxcdTAwM2VzZW5kX2J1Zl9jaHVua19jbnQpO1xcbiBcXHRiaXRtYXBfZnJlZShudmRldi1cXHUwMDNlc2VuZF9zZWN0aW9uX21hcCk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVlJTU19DSEFOTkVMX01BWDsgaSsrKSB7XFxuQEAgLTE3MCw5ICsyOTcsNTYgQEAgc3RhdGljIHZvaWQgZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4gXFx0a2ZyZWUobnZkZXYpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbit7XFxuK1xcdHN0cnVjdCByY3Vfd29yayAqcndvcmsgPSB0b19yY3Vfd29yayh3KTtcXG4rXFxuK1xcdF9fZnJlZV9uZXR2c2NfZGV2aWNlKGNvbnRhaW5lcl9vZihyd29yaywgc3RydWN0IG5ldHZzY19kZXZpY2UsIHJ3b3JrKSk7XFxuK31cXG4rXFxuK2ludCBuZXR2c2Nfd29ya3F1ZXVlX2luaXQodm9pZClcXG4re1xcbitcXHRuZXR2c2Nfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcImh2X25ldHZzY1xcXCIsIFdRX1VOQk9VTkQsIDApO1xcbitcXG4rXFx0cmV0dXJuIG5ldHZzY193cSA/IDAgOiAtRU5PTUVNO1xcbit9XFxuK1xcbit2b2lkIG5ldHZzY193b3JrcXVldWVfZGVzdHJveSh2b2lkKVxcbit7XFxuK1xcdHJjdV9iYXJyaWVyKCk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKG5ldHZzY193cSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqYWxsb2NfbmV0X2RldmljZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlO1xcbitcXG4rXFx0bmV0X2RldmljZSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBuZXR2c2NfZGV2aWNlKTtcXG4rXFx0aWYgKCFuZXRfZGV2aWNlKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXdhaXRfZHJhaW4pO1xcbitcXHRuZXRfZGV2aWNlLVxcdTAwM2VkZXN0cm95ID0gZmFsc2U7XFxuK1xcdG5ldF9kZXZpY2UtXFx1MDAzZXR4X2Rpc2FibGUgPSB0cnVlO1xcbitcXG4rXFx0bmV0X2RldmljZS1cXHUwMDNlbWF4X3BrdCA9IFJORElTX01BWF9QS1RfREVGQVVMVDtcXG4rXFx0bmV0X2RldmljZS1cXHUwMDNlcGt0X2FsaWduID0gUk5ESVNfUEtUX0FMSUdOX0RFRkFVTFQ7XFxuK1xcbitcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZWNoYW5uZWxfaW5pdF93YWl0KTtcXG4rXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc3ViY2hhbl9vcGVuKTtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VzdWJjaGFuX3dvcmssIG5ldHZzY19zdWJjaGFuX3dvcmspO1xcbitcXHRJTklUX1JDVV9XT1JLKFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2Vyd29yaywgZnJlZV9uZXR2c2NfZGV2aWNlKTtcXG4rXFxuK1xcdHJldHVybiBuZXRfZGV2aWNlO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2VfcmN1KHN0cnVjdCBuZXR2c2NfZGV2aWNlICpudmRldilcXG4ge1xcbi1cXHRjYWxsX3JjdShcXHUwMDI2bnZkZXYtXFx1MDAzZXJjdSwgZnJlZV9uZXR2c2NfZGV2aWNlKTtcXG4rXFx0LypcXG4rXFx0ICogRGVmZXIgdGhlIGFjdHVhbCBmcmVlIHRvIHByb2Nlc3MgY29udGV4dDogdnVubWFwKCkgYW5kXFxuK1xcdCAqIHNldF9tZW1vcnlfZW5jcnlwdGVkKCkgY2Fubm90IHJ1biBmcm9tIFJDVSBzb2Z0aXJxIGNvbnRleHQuXFxuK1xcdCAqL1xcbitcXHRxdWV1ZV9yY3Vfd29yayhuZXR2c2Nfd3EsIFxcdTAwMjZudmRldi1cXHUwMDNlcndvcmspO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZXR2c2NfcmV2b2tlX3JlY3ZfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG5AQCAtMzUxLDcgKzUyNSwyMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXFxuIFxcdFxcdGJ1Zl9zaXplID0gbWluX3QodW5zaWduZWQgaW50LCBidWZfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0IE5FVFZTQ19SRUNFSVZFX0JVRkZFUl9TSVpFX0xFR0FDWSk7XFxuIFxcbi1cXHRuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xcbitcXHRpZiAoZGV2aWNlLVxcdTAwM2VjaGFubmVsLVxcdTAwM2Vjb19leHRlcm5hbF9tZW1vcnkpIHtcXG4rXFx0XFx0LyogQ29uZmlkZW50aWFsIFZNIEJ1cyBsZWF2ZXMgYnVmZmVyIGVuY3J5cHRlZCAqL1xcbitcXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9jaHVua3MgPSBOVUxMO1xcbitcXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9jaHVua19jbnQgPSAwO1xcbitcXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBPdGhlcndpc2UsIGFsbG9jYXRlIGRlY3J5cHRlZCBidWZmZXIgKi9cXG4rXFx0XFx0bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWYgPVxcbitcXHRcXHRcXHRuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGNwdV90b19ub2RlKGRldmljZS1cXHUwMDNlY2hhbm5lbC1cXHUwMDNldGFyZ2V0X2NwdSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBidWZfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9jaHVua3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKCFuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zikge1xcbiBcXHRcXHRuZXRkZXZfZXJyKG5kZXYsXFxuIFxcdFxcdFxcdCAgIFxcXCJ1bmFibGUgdG8gYWxsb2NhdGUgcmVjZWl2ZSBidWZmZXIgb2Ygc2l6ZSAldVxcXFxuXFxcIixcXG5AQCAtMzY3LDkgKzU1NCwxMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXFxuIFxcdCAqIGNoYW5uZWwuICBOb3RlOiBUaGlzIGNhbGwgdXNlcyB0aGUgdm1idXMgY29ubmVjdGlvbiByYXRoZXJcXG4gXFx0ICogdGhhbiB0aGUgY2hhbm5lbCB0byBlc3RhYmxpc2ggdGhlIGdwYWRsIGhhbmRsZS5cXG4gXFx0ICovXFxuLVxcdHJldCA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbChkZXZpY2UtXFx1MDAzZWNoYW5uZWwsIG5ldF9kZXZpY2UtXFx1MDAzZXJlY3ZfYnVmLFxcbi1cXHRcXHRcXHRcXHQgICAgYnVmX3NpemUsXFxuLVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfZ3BhZGxfaGFuZGxlKTtcXG4rXFx0cmV0ID0gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoZGV2aWNlLVxcdTAwM2VjaGFubmVsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5ldF9kZXZpY2UtXFx1MDAzZXJlY3ZfYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJ1Zl9zaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9ncGFkbF9oYW5kbGUpO1xcbiBcXHRpZiAocmV0ICE9IDApIHtcXG4gXFx0XFx0bmV0ZGV2X2VycihuZGV2LFxcbiBcXHRcXHRcXHRcXFwidW5hYmxlIHRvIGVzdGFibGlzaCByZWNlaXZlIGJ1ZmZlcidzIGdwYWRsXFxcXG5cXFwiKTtcXG5AQCAtNDU3LDcgKzY0NSwxOSBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXFxuIFxcdGJ1Zl9zaXplID0gZGV2aWNlX2luZm8tXFx1MDAzZXNlbmRfc2VjdGlvbnMgKiBkZXZpY2VfaW5mby1cXHUwMDNlc2VuZF9zZWN0aW9uX3NpemU7XFxuIFxcdGJ1Zl9zaXplID0gcm91bmRfdXAoYnVmX3NpemUsIFBBR0VfU0laRSk7XFxuIFxcbi1cXHRuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xcbitcXHRpZiAoZGV2aWNlLVxcdTAwM2VjaGFubmVsLVxcdTAwM2Vjb19leHRlcm5hbF9tZW1vcnkpIHtcXG4rXFx0XFx0LyogQ29uZmlkZW50aWFsIFZNIEJ1cyBsZWF2ZXMgYnVmZmVyIGVuY3J5cHRlZCAqL1xcbitcXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9jaHVua3MgPSBOVUxMO1xcbitcXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9jaHVua19jbnQgPSAwO1xcbitcXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBPdGhlcndpc2UsIGFsbG9jYXRlIGRlY3J5cHRlZCBidWZmZXIgKi9cXG4rXFx0XFx0bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWYgPVxcbitcXHRcXHRcXHRuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGNwdV90b19ub2RlKGRldmljZS1cXHUwMDNlY2hhbm5lbC1cXHUwMDNldGFyZ2V0X2NwdSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBidWZfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9jaHVua3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWZfY2h1bmtfY250KTtcXG4rXFx0fVxcbiBcXHRpZiAoIW5ldF9kZXZpY2UtXFx1MDAzZXNlbmRfYnVmKSB7XFxuIFxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcInVuYWJsZSB0byBhbGxvY2F0ZSBzZW5kIGJ1ZmZlciBvZiBzaXplICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICBidWZfc2l6ZSk7XFxuQEAgLTQ3MCw5ICs2NzAsMTAgQEAgc3RhdGljIGludCBuZXR2c2NfaW5pdF9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxcbiBcXHQgKiBjaGFubmVsLiAgTm90ZTogVGhpcyBjYWxsIHVzZXMgdGhlIHZtYnVzIGNvbm5lY3Rpb24gcmF0aGVyXFxuIFxcdCAqIHRoYW4gdGhlIGNoYW5uZWwgdG8gZXN0YWJsaXNoIHRoZSBncGFkbCBoYW5kbGUuXFxuIFxcdCAqL1xcbi1cXHRyZXQgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoZGV2aWNlLVxcdTAwM2VjaGFubmVsLCBuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1ZixcXG4tXFx0XFx0XFx0XFx0ICAgIGJ1Zl9zaXplLFxcbi1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXNlbmRfYnVmX2dwYWRsX2hhbmRsZSk7XFxuK1xcdHJldCA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkKGRldmljZS1cXHUwMDNlY2hhbm5lbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBidWZfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlKTtcXG4gXFx0aWYgKHJldCAhPSAwKSB7XFxuIFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4gXFx0XFx0XFx0ICAgXFxcInVuYWJsZSB0byBlc3RhYmxpc2ggc2VuZCBidWZmZXIncyBncGFkbFxcXFxuXFxcIik7XFxuQEAgLTE4NjMsNyArMjA2NCwxMSBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxcbiBcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlY2hhbl90YWJsZVswXS5uYXBpKTtcXG4gXFxuIGNsZWFudXAyOlxcbi1cXHRmcmVlX25ldHZzY19kZXZpY2UoXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXJjdSk7XFxuK1xcdC8qXFxuK1xcdCAqIG5ldF9kZXZpY2Ugd2FzIG5ldmVyIHB1Ymxpc2hlZCwgc28gd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGZvciBhblxcbitcXHQgKiBSQ1UgZ3JhY2UgcGVyaW9kIC0tIGNhbGwgdGhlIGZyZWUgcm91dGluZSBzeW5jaHJvbm91c2x5LlxcbitcXHQgKi9cXG4rXFx0X19mcmVlX25ldHZzY19kZXZpY2UobmV0X2RldmljZSk7XFxuIFxcbiBcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMgYi9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jXFxuaW5kZXggZWU1YWI1Y2ViMmJlMmQuLjFkNDNjNzNmZDczZjEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcXG4rKysgYi9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jXFxuQEAgLTI4NjcsMTIgKzI4NjcsMTcgQEAgc3RhdGljIHZvaWQgX19leGl0IG5ldHZzY19kcnZfZXhpdCh2b2lkKVxcbiB7XFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZuZXR2c2NfbmV0ZGV2X25vdGlmaWVyKTtcXG4gXFx0dm1idXNfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNm5ldHZzY19kcnYpO1xcbitcXHRuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3koKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2luaXQgbmV0dnNjX2Rydl9pbml0KHZvaWQpXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdHJldCA9IG5ldHZzY193b3JrcXVldWVfaW5pdCgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0aWYgKHJpbmdfc2l6ZSBcXHUwMDNjIFJJTkdfU0laRV9NSU4pIHtcXG4gXFx0XFx0cmluZ19zaXplID0gUklOR19TSVpFX01JTjtcXG4gXFx0XFx0cHJfaW5mbyhcXFwiSW5jcmVhc2VkIHJpbmdfc2l6ZSB0byAldSAobWluIGFsbG93ZWQpXFxcXG5cXFwiLFxcbkBAIC0yODkwLDYgKzI4OTUsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXR2c2NfZHJ2X2luaXQodm9pZClcXG4gXFxuIGVycl92bWJ1c19yZWc6XFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZuZXR2c2NfbmV0ZGV2X25vdGlmaWVyKTtcXG4rXFx0bmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHlwZXJ2LmggYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXFxuaW5kZXggOTY0ZjFiZTgxNTBjNTkuLjljNmIxYjc3OTRiNDhlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHlwZXJ2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXFxuQEAgLTc4MSw2ICs3ODEsMTIgQEAgc3RydWN0IHZtYnVzX2dwYWRsIHtcXG4gXFx0dTMyIGdwYWRsX2hhbmRsZTtcXG4gXFx0dTMyIHNpemU7XFxuIFxcdHZvaWQgKmJ1ZmZlcjtcXG4rXFx0LypcXG4rXFx0ICogT25seSB1c2VkIGlmIHRoZSB2bWJ1cyBsYXllciBvd25zIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZlxcbitcXHQgKiBAYnVmZmVyLlxcbitcXHQgKiBJbmRpY2F0ZXMgQGJ1ZmZlciBtdXN0IGJlIHJlLWVuY3J5cHRlZCBhdCB0ZWFyZG93biBvciB0aGF0IGl0XFxuK1xcdCAqIG11c3QgYmUgbGVha2VkIGJlY2F1c2UgcmUtZW5jcnlwdGlvbiBmYWlsZWQuXFxuK1xcdCAqL1xcbiBcXHRib29sIGRlY3J5cHRlZDtcXG4gfTtcXG4gXFxuQEAgLTEyMDUsNiArMTIxMSwxMSBAQCBleHRlcm4gaW50IHZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdTMyIHNpemUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpO1xcbiBcXG4rZXh0ZXJuIGludCB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICprYnVmZmVyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpO1xcbitcXG4gZXh0ZXJuIGludCB2bWJ1c190ZWFyZG93bl9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdm1idXNfZ3BhZGwgKmdwYWRsKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjA4LjA5MjU2NjU5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc4NDk3OTAzOTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhZUEVSVlwiLFxuICAgIFwiSFlQRVJWX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkXCIsXG4gICAgXCJ2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRcIixcbiAgICBcIm5ldHZzY19hbGxvY19idWZfcGFnZXNcIixcbiAgICBcIm5ldHZzY19mcmVlX2J1Zl9wYWdlc1wiLFxuICAgIFwibmV0dnNjX2luaXRfYnVmXCIsXG4gICAgXCJfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVyIChuZXR2c2MpIGFuZCBWTUJ1cyBjaGFubmVsIGNvZGUgdG8gbWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZiBHUEFETCBidWZmZXJzLCBwYXJ0aWN1bGFybHkgZm9yIENvbmZpZGVudGlhbCBWTXMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBhbGxvY2F0ZS9mcmVlIGJ1ZmZlcnMgYW5kIGVzdGFibGlzaCBHUEFETHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNGI1ZmQ4Njk3MWYyMjA2MWMwOWM4OGRiNWVjZjc1OWViMjJjYmQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTQ6NTQ6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2h2L2NoYW5uZWwuYyBiL2RyaXZlcnMvaHYvY2hhbm5lbC5jXG5pbmRleCA2ODIxZjIyNTI0OGIxOS4uMDE2NjM2N2E0ZGYzNzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2h2L2NoYW5uZWwuY1xuKysrIGIvZHJpdmVycy9odi9jaGFubmVsLmNcbkBAIC00MjYsNyArNDI2LDEzIEBAIHN0YXRpYyB2b2lkIHZtYnVzX2ZyZWVfY2hhbm5lbF9tc2dpbmZvKHN0cnVjdCB2bWJ1c19jaGFubmVsX21zZ2luZm8gKm1zZ2luZm8pXG4gfVxuIFxuIC8qXG4tICogX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwgLSBFc3RhYmxpc2ggYSBHUEFETCBmb3IgYSBidWZmZXIgb3IgcmluZ2J1ZmZlclxuKyAqIF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsIC0gRXN0YWJsaXNoIGEgR1BBREwgZm9yIGEgYnVmZmVyIG9yIHJpbmdidWZmZXIuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgaGFuZGxlcyB0aGUgR1BBREwgaGFuZHNoYWtlIHdpdGggdGhlIGhvc3QuICBUaGUgY2FsbGVyXG4rICogaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgQGtidWZmZXIgaXMgaW4gdGhlIGVuY3J5cHRpb24gc3RhdGUgdGhlXG4rICogaG9zdCBleHBlY3RzIChob3N0LXZpc2libGUgLyBcImRlY3J5cHRlZFwiIGZvciBjb25maWRlbnRpYWwgVk1zKTsgdGhpc1xuKyAqIGZ1bmN0aW9uIG5ldmVyIGNhbGxzIHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgb3Igc2V0X21lbW9yeV9lbmNyeXB0ZWQoKS5cbisgKiBJdCBhbHNvIGxlYXZlcyBncGFkbC1cdTAwM2VkZWNyeXB0ZWQgdW50b3VjaGVkLCBzbyB0aGUgY2FsbGVyIG11c3Qgc2V0IGl0LlxuICAqXG4gICogQGNoYW5uZWw6IGEgY2hhbm5lbFxuICAqIEB0eXBlOiB0aGUgdHlwZSBvZiB0aGUgY29ycmVzcG9uZGluZyBHUEFETCwgb25seSBtZWFuaW5nZnVsIGZvciB0aGUgZ3Vlc3QuXG5AQCAtNDM0LDcgKzQ0MCw3IEBAIHN0YXRpYyB2b2lkIHZtYnVzX2ZyZWVfY2hhbm5lbF9tc2dpbmZvKHN0cnVjdCB2bWJ1c19jaGFubmVsX21zZ2luZm8gKm1zZ2luZm8pXG4gICogQHNpemU6IHBhZ2Utc2l6ZSBtdWx0aXBsZVxuICAqIEBzZW5kX29mZnNldDogdGhlIG9mZnNldCAoaW4gYnl0ZXMpIHdoZXJlIHRoZSBzZW5kIHJpbmcgYnVmZmVyIHN0YXJ0cyxcbiAgKiAgICAgICAgICAgICAgc2hvdWxkIGJlIDAgZm9yIEJVRkZFUiB0eXBlIGdwYWRsXG4tICogQGdwYWRsX2hhbmRsZTogc29tZSBmdW5reSB0aGluZ1xuKyAqIEBncGFkbDogb3V0IHBhcmFtZXRlciByZWNlaXZpbmcgdGhlIGVzdGFibGlzaGVkIEdQQURMIGhhbmRsZS9idWZmZXIvc2l6ZVxuICAqL1xuIHN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4gXHRcdFx0XHQgICBlbnVtIGh2X2dwYWRsX3R5cGUgdHlwZSwgdm9pZCAqa2J1ZmZlcixcbkBAIC00NTQsMzAgKzQ2MCw4IEBAIHN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4gXHRcdChhdG9taWNfaW5jX3JldHVybihcdTAwMjZ2bWJ1c19jb25uZWN0aW9uLm5leHRfZ3BhZGxfaGFuZGxlKSAtIDEpO1xuIFxuIFx0cmV0ID0gY3JlYXRlX2dwYWRsX2hlYWRlcih0eXBlLCBrYnVmZmVyLCBzaXplLCBzZW5kX29mZnNldCwgXHUwMDI2bXNnaW5mbyk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdGdwYWRsLVx1MDAzZWRlY3J5cHRlZCA9IGZhbHNlO1xuK1x0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdGdwYWRsLVx1MDAzZWRlY3J5cHRlZCA9ICEoKGNoYW5uZWwtXHUwMDNlY29fZXh0ZXJuYWxfbWVtb3J5IFx1MDAyNlx1MDAyNiB0eXBlID09IEhWX0dQQURMX0JVRkZFUikgfHxcbi1cdFx0KGNoYW5uZWwtXHUwMDNlY29fcmluZ19idWZmZXIgXHUwMDI2XHUwMDI2IHR5cGUgPT0gSFZfR1BBRExfUklORykpO1xuLVx0aWYgKGdwYWRsLVx1MDAzZWRlY3J5cHRlZCkge1xuLVx0XHQvKlxuLVx0XHQgKiBUaGUgXCJkZWNyeXB0ZWRcIiBmbGFnIGJlaW5nIHRydWUgYXNzdW1lcyB0aGF0IHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgc3VjY2VlZHMuXG4tXHRcdCAqIEJ1dCBpZiBpdCBmYWlscywgdGhlIGVuY3J5cHRpb24gc3RhdGUgb2YgdGhlIG1lbW9yeSBpcyB1bmtub3duLiBJbiB0aGF0IGNhc2UsXG4tXHRcdCAqIGxlYXZlIFwiZGVjcnlwdGVkXCIgYXMgdHJ1ZSB0byBlbnN1cmUgdGhlIG1lbW9yeSBpcyBsZWFrZWQgaW5zdGVhZCBvZiBnb2luZyBiYWNrXG4tXHRcdCAqIG9uIHRoZSBmcmVlIGxpc3QuXG4tXHRcdCAqL1xuLVx0XHRyZXQgPSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylrYnVmZmVyLFxuLVx0XHRcdFx0XHRQRk5fVVAoc2l6ZSkpO1xuLVx0XHRpZiAocmV0KSB7XG4tXHRcdFx0ZGV2X3dhcm4oXHUwMDI2Y2hhbm5lbC1cdTAwM2VkZXZpY2Vfb2JqLVx1MDAzZWRldmljZSxcbi1cdFx0XHRcdFwiRmFpbGVkIHRvIHNldCBob3N0IHZpc2liaWxpdHkgZm9yIG5ldyBHUEFETCAlZC5cXG5cIixcbi1cdFx0XHRcdHJldCk7XG4tXHRcdFx0dm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8obXNnaW5mbyk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fVxuLVx0fVxuIFxuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNm1zZ2luZm8tXHUwMDNld2FpdGV2ZW50KTtcbiBcdG1zZ2luZm8tXHUwMDNld2FpdGluZ19jaGFubmVsID0gY2hhbm5lbDtcbkBAIC01NTMsMTkgKzUzNyw0NyBAQCBzdGF0aWMgaW50IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2bWJ1c19jb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywgZmxhZ3MpO1xuIFxuIFx0dm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8obXNnaW5mbyk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbiBcbi1cdGlmIChyZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogSWYgc2V0X21lbW9yeV9lbmNyeXB0ZWQoKSBmYWlscywgdGhlIGRlY3J5cHRlZCBmbGFnIGlzXG4tXHRcdCAqIGxlZnQgYXMgdHJ1ZSBzbyB0aGUgbWVtb3J5IGlzIGxlYWtlZCBpbnN0ZWFkIG9mIGJlaW5nXG4tXHRcdCAqIHB1dCBiYWNrIG9uIHRoZSBmcmVlIGxpc3QuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZ3BhZGwtXHUwMDNlZGVjcnlwdGVkKSB7XG4tXHRcdFx0aWYgKCFzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZylrYnVmZmVyLCBQRk5fVVAoc2l6ZSkpKVxuLVx0XHRcdFx0Z3BhZGwtXHUwMDNlZGVjcnlwdGVkID0gZmFsc2U7XG4rLypcbisgKiB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHQgLSBNYW5hZ2UgdGhlIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mXG4rICogQGtidWZmZXIgYXJvdW5kIGEgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoKSBjYWxsLlxuKyAqXG4rICogRGVjcnlwdHMgQGtidWZmZXIgKG1ha2luZyBpdCBob3N0LXZpc2libGUpIHVubGVzcyB0aGUgY2hhbm5lbCB3YXMgY3JlYXRlZFxuKyAqIHdpdGggY29uZmlkZW50aWFsIG1lbW9yeSBmb3IgQHR5cGUsIHRoZW4gZXN0YWJsaXNoZXMgdGhlIEdQQURMLiAgT25cbisgKiBlc3RhYmxpc2ggZmFpbHVyZSB0aGUgYnVmZmVyIGlzIHJlLWVuY3J5cHRlZCBzbyB0aGUgY2FsbGVyIGNhbiBmcmVlIGl0LlxuKyAqXG4rICogU2V0cyBncGFkbC1cdTAwM2VkZWNyeXB0ZWQ7IHNlZSB0aGUgY29tbWVudCBvbiBzdHJ1Y3Qgdm1idXNfZ3BhZGw6OmRlY3J5cHRlZC5cbisgKi9cbitzdGF0aWMgaW50IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbitcdFx0XHRcdFx0ICAgICBlbnVtIGh2X2dwYWRsX3R5cGUgdHlwZSxcbitcdFx0XHRcdFx0ICAgICB2b2lkICprYnVmZmVyLCB1MzIgc2l6ZSxcbitcdFx0XHRcdFx0ICAgICB1MzIgc2VuZF9vZmZzZXQsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbClcbit7XG4rXHRib29sIGRlY3J5cHQgPSAhKChjaGFubmVsLVx1MDAzZWNvX2V4dGVybmFsX21lbW9yeSBcdTAwMjZcdTAwMjYgdHlwZSA9PSBIVl9HUEFETF9CVUZGRVIpIHx8XG4rXHRcdFx0IChjaGFubmVsLVx1MDAzZWNvX3JpbmdfYnVmZmVyIFx1MDAyNlx1MDAyNiB0eXBlID09IEhWX0dQQURMX1JJTkcpKTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoZGVjcnlwdCkge1xuK1x0XHRyZXQgPSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylrYnVmZmVyLCBQRk5fVVAoc2l6ZSkpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X3dhcm4oXHUwMDI2Y2hhbm5lbC1cdTAwM2VkZXZpY2Vfb2JqLVx1MDAzZWRldmljZSxcbitcdFx0XHRcdCBcIkZhaWxlZCB0byBzZXQgaG9zdCB2aXNpYmlsaXR5IGZvciBuZXcgR1BBREwgJWQuXFxuXCIsXG4rXHRcdFx0XHQgcmV0KTtcbitcdFx0XHQvKiBFbmNyeXB0aW9uIHN0YXRlIHVua25vd247IHNpZ25hbCBjYWxsZXIgdG8gbGVhay4gKi9cbitcdFx0XHRncGFkbC1cdTAwM2VkZWNyeXB0ZWQgPSB0cnVlO1xuK1x0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbiBcdH1cbiBcbitcdGdwYWRsLVx1MDAzZWRlY3J5cHRlZCA9IGRlY3J5cHQ7XG4rXHRyZXQgPSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChjaGFubmVsLCB0eXBlLCBrYnVmZmVyLCBzaXplLCBzZW5kX29mZnNldCxcbitcdFx0XHRcdCAgICAgIGdwYWRsKTtcbitcdGlmIChyZXQgXHUwMDI2XHUwMDI2IGRlY3J5cHQgXHUwMDI2XHUwMDI2XG4rXHQgICAgIXNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSkpXG4rXHRcdGdwYWRsLVx1MDAzZWRlY3J5cHRlZCA9IGZhbHNlO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNTgwLDExICs1OTIsNDAgQEAgc3RhdGljIGludCBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLCB2b2lkICprYnVmZmVyLFxuIFx0XHRcdCAgdTMyIHNpemUsIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpXG4ge1xuLVx0cmV0dXJuIF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKGNoYW5uZWwsIEhWX0dQQURMX0JVRkZFUiwga2J1ZmZlciwgc2l6ZSxcbi1cdFx0XHRcdCAgICAgICAwVSwgZ3BhZGwpO1xuK1x0cmV0dXJuIHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChjaGFubmVsLCBIVl9HUEFETF9CVUZGRVIsXG4rXHRcdFx0XHRcdFx0IGtidWZmZXIsIHNpemUsIDBVLCBncGFkbCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2VzdGFibGlzaF9ncGFkbCk7XG4gXG4rLypcbisgKiB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCAtIEVzdGFibGlzaCBhIEdQQURMIGZvciBhIGJ1ZmZlclxuKyAqIHdob3NlIGVuY3J5cHRpb24gc3RhdGUgaXMgbWFuYWdlZCBieSB0aGUgY2FsbGVyLlxuKyAqXG4rICogQGNoYW5uZWw6IGEgY2hhbm5lbFxuKyAqIEBrYnVmZmVyOiBhIGJ1ZmZlciB0aGF0IHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgdHJhbnNpdGlvbmVkIHRvIGhvc3QtdmlzaWJsZVxuKyAqICAgICAgICAgICAoZGVjcnlwdGVkKSB2aWEgc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBvciBhbiBlcXVpdmFsZW50IG1lY2hhbmlzbS5cbisgKiBAc2l6ZTogcGFnZS1zaXplIG11bHRpcGxlXG4rICogQGdwYWRsOiBvdXQgcGFyYW1ldGVyIHJlY2VpdmluZyB0aGUgZXN0YWJsaXNoZWQgR1BBRExcbisgKlxuKyAqIFVubGlrZSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjYWxsXG4rICogc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBvbiBAa2J1ZmZlciwgYW5kIHRoZSBtYXRjaGluZyB2bWJ1c190ZWFyZG93bl9ncGFkbCgpXG4rICogY2FsbCB3aWxsIG5vdCBjYWxsIHNldF9tZW1vcnlfZW5jcnlwdGVkKCkgb24gaXQuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlXG4rICogZm9yIHRoZSBmdWxsIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mIEBrYnVmZmVyOyBvbiByZXR1cm4gZ3BhZGwtXHUwMDNlZGVjcnlwdGVkXG4rICogaXMgc2V0IHRvIGZhbHNlIHRvIHJlY29yZCB0aGF0IHZtYnVzIGRvZXMgbm90IG93biB0aGUgZW5jcnlwdGlvbiBzdGF0ZS5cbisgKi9cbitpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4rXHRcdFx0XHRcdCAgIHZvaWQgKmtidWZmZXIsIHUzMiBzaXplLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3Qgdm1idXNfZ3BhZGwgKmdwYWRsKVxuK3tcbitcdGludCByZXQgPSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChjaGFubmVsLCBIVl9HUEFETF9CVUZGRVIsIGtidWZmZXIsXG4rXHRcdFx0XHRcdCAgc2l6ZSwgMFUsIGdwYWRsKTtcbitcbitcdC8qIENhbGxlciBvd25zIEBrYnVmZmVyJ3MgZW5jcnlwdGlvbjsgdGVhcmRvd24gbXVzdCBub3QgdG91Y2ggaXQuICovXG4rXHRncGFkbC1cdTAwM2VkZWNyeXB0ZWQgPSBmYWxzZTtcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkKTtcbitcbiAvKipcbiAgKiByZXF1ZXN0X2Fycl9pbml0IC0gQWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhlIHJlcXVlc3RvciBhcnJheS4gRWFjaCBzbG90XG4gICoga2VlcHMgdHJhY2sgb2YgdGhlIG5leHQgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIGFycmF5LiBJbml0aWFsbHksIGVhY2hcbkBAIC02ODUsMTEgKzcyNiwxMSBAQCBzdGF0aWMgaW50IF9fdm1idXNfb3BlbihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqbmV3Y2hhbm5lbCxcbiBcdC8qIEVzdGFibGlzaCB0aGUgZ3BhZGwgZm9yIHRoZSByaW5nIGJ1ZmZlciAqL1xuIFx0bmV3Y2hhbm5lbC1cdTAwM2VyaW5nYnVmZmVyX2dwYWRsaGFuZGxlLmdwYWRsX2hhbmRsZSA9IDA7XG4gXG4tXHRlcnIgPSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChuZXdjaGFubmVsLCBIVl9HUEFETF9SSU5HLFxuLVx0XHRcdFx0ICAgICAgcGFnZV9hZGRyZXNzKG5ld2NoYW5uZWwtXHUwMDNlcmluZ2J1ZmZlcl9wYWdlKSxcbi1cdFx0XHRcdCAgICAgIChzZW5kX3BhZ2VzICsgcmVjdl9wYWdlcykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHQgICAgICBuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfc2VuZF9vZmZzZXQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHQgICAgICBcdTAwMjZuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUpO1xuK1x0ZXJyID0gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KG5ld2NoYW5uZWwsIEhWX0dQQURMX1JJTkcsXG4rXHRcdFx0XHRcdFx0cGFnZV9hZGRyZXNzKG5ld2NoYW5uZWwtXHUwMDNlcmluZ2J1ZmZlcl9wYWdlKSxcbitcdFx0XHRcdFx0XHQoc2VuZF9wYWdlcyArIHJlY3ZfcGFnZXMpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuK1x0XHRcdFx0XHRcdG5ld2NoYW5uZWwtXHUwMDNlcmluZ2J1ZmZlcl9zZW5kX29mZnNldCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbitcdFx0XHRcdFx0XHRcdTAwMjZuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcl9jbGVhbl9yaW5nO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmggYi9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXG5pbmRleCA3Mzk3YzY5M2Y5ODRhZi4uYjBjNGNiMGY3YTRjZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXG4rKysgYi9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXG5AQCAtMjIwLDYgKzIyMCw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlX2NvbnRleHQ7XG4gXG4gZXh0ZXJuIHUzMiBuZXR2c2NfcmluZ19ieXRlcztcbiBcbitpbnQgbmV0dnNjX3dvcmtxdWV1ZV9pbml0KHZvaWQpO1xuK3ZvaWQgbmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KHZvaWQpO1xuIHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXR2c2NfZGV2aWNlX2FkZChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXR2c2NfZGV2aWNlX2luZm8gKmluZm8pO1xuIGludCBuZXR2c2NfYWxsb2NfcmVjdl9jb21wX3Jpbmcoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsIHUzMiBxX2lkeCk7XG5AQCAtMTE0Nyw2ICsxMTQ5LDE2IEBAIHN0cnVjdCBuZXR2c2NfY2hhbm5lbCB7XG4gXHRzdHJ1Y3QgbmV0dnNjX3N0YXRzX3J4IHJ4X3N0YXRzO1xuIH07XG4gXG4rLyogQSBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgY2h1bmsgb2YgbmV0dnNjIGJ1ZmZlci5cbisgKlxuKyAqIFRoZSBjaHVuayBsaXN0IGlzIHByZXNlcnZlZCBzbyBlYWNoIGNodW5rIGNhbiBiZSBpbmRpdmlkdWFsbHkgZnJlZWQgYXRcbisgKiB0ZWFyZG93bi5cbisgKi9cbitzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayB7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHVuc2lnbmVkIGludCBvcmRlcjtcbit9O1xuK1xuIC8qIFBlciBuZXR2c2MgZGV2aWNlICovXG4gc3RydWN0IG5ldHZzY19kZXZpY2Uge1xuIFx0dTMyIG52c3BfdmVyc2lvbjtcbkBAIC0xMTU4LDYgKzExNzAsOCBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSB7XG4gXHQvKiBSZWNlaXZlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdXMgYnV0IG1hbmFnZXMgYnkgTmV0VlNQICovXG4gXHR2b2lkICpyZWN2X2J1ZjtcbiBcdHUzMiByZWN2X2J1Zl9zaXplOyAvKiBhbGxvY2F0ZWQgYnl0ZXMgKi9cbitcdHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICpyZWN2X2J1Zl9jaHVua3M7XG4rXHR1MzIgcmVjdl9idWZfY2h1bmtfY250O1xuIFx0c3RydWN0IHZtYnVzX2dwYWRsIHJlY3ZfYnVmX2dwYWRsX2hhbmRsZTtcbiBcdHUzMiByZWN2X3NlY3Rpb25fY250O1xuIFx0dTMyIHJlY3Zfc2VjdGlvbl9zaXplO1xuQEAgLTExNjYsNiArMTE4MCw4IEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHtcbiBcdC8qIFNlbmQgYnVmZmVyIGFsbG9jYXRlZCBieSB1cyAqL1xuIFx0dm9pZCAqc2VuZF9idWY7XG4gXHR1MzIgc2VuZF9idWZfc2l6ZTtcbitcdHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICpzZW5kX2J1Zl9jaHVua3M7XG4rXHR1MzIgc2VuZF9idWZfY2h1bmtfY250O1xuIFx0c3RydWN0IHZtYnVzX2dwYWRsIHNlbmRfYnVmX2dwYWRsX2hhbmRsZTtcbiBcdHUzMiBzZW5kX3NlY3Rpb25fY250O1xuIFx0dTMyIHNlbmRfc2VjdGlvbl9zaXplO1xuQEAgLTExOTMsNyArMTIwOSw3IEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHtcbiBcbiBcdHN0cnVjdCBuZXR2c2NfY2hhbm5lbCBjaGFuX3RhYmxlW1ZSU1NfQ0hBTk5FTF9NQVhdO1xuIFxuLVx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbitcdHN0cnVjdCByY3Vfd29yayByd29yaztcbiB9O1xuIFxuIC8qIE5kaXNJbml0aWFsaXplIG1lc3NhZ2UgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMgYi9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmNcbmluZGV4IDU5ZTk1MzQxZjliMWU1Li4yNTA1ZDEwZTIyMDEwMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xuKysrIGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXG5AQCAtMTQsNiArMTQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuQEAgLTI4LDYgKzMwLDggQEBcbiAjaW5jbHVkZSBcImh5cGVydl9uZXQuaFwiXG4gI2luY2x1ZGUgXCJuZXR2c2NfdHJhY2UuaFwiXG4gXG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXR2c2Nfd3E7XG4rXG4gLypcbiAgKiBTd2l0Y2ggdGhlIGRhdGEgcGF0aCBmcm9tIHRoZSBzeW50aGV0aWMgaW50ZXJmYWNlIHRvIHRoZSBWRlxuICAqIGludGVyZmFjZS5cbkBAIC0xMjUsNDAgKzEyOSwxNjMgQEAgc3RhdGljIHZvaWQgbmV0dnNjX3N1YmNoYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRydG5sX3VubG9jaygpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IG5ldHZzY19kZXZpY2UgKmFsbG9jX25ldF9kZXZpY2Uodm9pZClcbisvKlxuKyAqIG5ldHZzY19mcmVlX2J1Zl9wYWdlcyAtIHJlbGVhc2UgYSBuZXR2c2Mgc2VuZC9yZWNlaXZlIGJ1ZmZlci5cbisgKlxuKyAqIEBhZGRyOiBidWZmZXIgYWRkcmVzcywgb3IgTlVMTCBpZiBub25lIHdhcyBhbGxvY2F0ZWQgKGUuZy4gY2xlYW51cCBmcm9tIGFcbisgKiAgICAgICAgZmFpbGVkIGFsbG9jYXRpb24pXG4rICogQGNodW5rczogY2h1bmtzIGFycmF5IGZyb20gbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcygpLCBvciBOVUxMXG4rICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xuKyAqXG4rICogV2hlbiBAY2h1bmtzIGlzIE5VTEwgdGhlIGJ1ZmZlciBpcyBhIHBsYWluIHZ6YWxsb2MoKSBhbGxvY2F0aW9uLlxuKyAqXG4rICogT3RoZXJ3aXNlIHRlYXIgZG93biB0aGUgdm1hcCwgYW5kIGZvciBlYWNoIGNodW5rIHJlLWVuY3J5cHQgYW5kIGZyZWVcbisgKiB0aGUgdW5kZXJseWluZyBwYWdlcy4gQW55IGNodW5rIHRoYXQgY2Fubm90IGJlIHJlLWVuY3J5cHRlZCBpcyBsZWFrZWQuXG4rICovXG4rc3RhdGljIHZvaWQgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKHZvaWQgKmFkZHIsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICpjaHVua3MsXG4rXHRcdFx0XHQgIHUzMiBjaHVua19jbnQpXG4ge1xuLVx0c3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2U7XG4rXHR1MzIgaTtcbiBcbi1cdG5ldF9kZXZpY2UgPSBremFsbG9jX29iaihzdHJ1Y3QgbmV0dnNjX2RldmljZSk7XG4tXHRpZiAoIW5ldF9kZXZpY2UpXG4rXHRpZiAoIWNodW5rcykge1xuK1x0XHR2ZnJlZShhZGRyKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0dnVubWFwKGFkZHIpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2h1bmtfY250OyBpKyspIHtcbitcdFx0dW5zaWduZWQgbG9uZyB2YWRkciA9XG4rXHRcdFx0KHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKGNodW5rc1tpXS5wYWdlKTtcbitcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gY2h1bmtzW2ldLm9yZGVyO1xuK1xuK1x0XHRpZiAoc2V0X21lbW9yeV9lbmNyeXB0ZWQodmFkZHIsIDFVIFx1MDAzY1x1MDAzYyBvcmRlcikpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdF9fZnJlZV9wYWdlcyhjaHVua3NbaV0ucGFnZSwgb3JkZXIpO1xuK1x0fVxuK1xuK1x0a3ZmcmVlKGNodW5rcyk7XG4rfVxuK1xuKy8qXG4rICogbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyAtIGFsbG9jYXRlIGEgdmlydHVhbGx5LWNvbnRpZ3VvdXMsIGhvc3QtdmlzaWJsZVxuKyAqIGJ1ZmZlciBmb3IgdGhlIG5ldHZzYyBzZW5kL3JlY2VpdmUgYXJlYS5cbisgKlxuKyAqIEBub2RlOiBOVU1BIG5vZGUgaGludCAoTlVNQV9OT19OT0RFIGZvciBhbnkgbm9kZSlcbisgKiBAc2l6ZTogcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGluIGJ5dGVzIChyb3VuZGVkIHVwIHRvIFBBR0VfU0laRSlcbisgKiBAY2h1bmtzX291dDogb24gc3VjY2Vzcywgc2V0IHRvIHRoZSBhcnJheSBvZiB1bmRlcmx5aW5nIGNodW5rc1xuKyAqIEBjaHVua19jbnRfb3V0OiBvbiBzdWNjZXNzLCBzZXQgdG8gdGhlIG51bWJlciBvZiBjaHVua3NcbisgKlxuKyAqIEFsbG9jYXRlcyB0aGUgYnVmZmVyIGFzIGEgc2VyaWVzIG9mIHBoeXNpY2FsbHktY29udGlndW91cyBjaHVua3MsXG4rICogc3RhcnRpbmcgYXQgTUFYX1BBR0VfT1JERVIgYW5kIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIG9yZGVycyBvblxuKyAqIGFsbG9jYXRpb24gZmFpbHVyZS4gRWFjaCBjaHVuayBpcyB0cmFuc2l0aW9uZWQgdG8gaG9zdC12aXNpYmxlIHZpYVxuKyAqIHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgb24gaXRzIGRpcmVjdC1tYXAgYWRkcmVzcywgdGhlbiBhbGwgY2h1bmtzIGFyZVxuKyAqIGNvbWJpbmVkIGludG8gYSB2aXJ0dWFsbHktY29udGlndW91cyByYW5nZSB2aWEgdm1hcCgpLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgdm1hcCgpZWQgdmlydHVhbCBhZGRyZXNzLCBvciBOVUxMIG9uIGZhaWx1cmUuXG4rICovXG4rc3RhdGljIHZvaWQgKm5ldHZzY19hbGxvY19idWZfcGFnZXMoaW50IG5vZGUsIHUzMiBzaXplLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICoqY2h1bmtzX291dCxcbitcdFx0XHRcdCAgICB1MzIgKmNodW5rX2NudF9vdXQpXG4re1xuK1x0dTMyIG5yX3BhZ2VzID0gUEZOX1VQKHNpemUpO1xuK1x0c3RydWN0IG5ldHZzY19idWZfY2h1bmsgKmNodW5rcyA9IE5VTEw7XG4rXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDtcbitcdHVuc2lnbmVkIGludCBvcmRlcjtcbitcdHUzMiBjaHVua19jbnQgPSAwO1xuK1x0dTMyIHBhZ2VfaWR4ID0gMDtcbitcdHUzMiByZW1haW5pbmcgPSBucl9wYWdlcztcbitcdHZvaWQgKmFkZHI7XG4rXHR1MzIgaTtcbitcdGludCByZXQ7XG4rXG4rXHQqY2h1bmtzX291dCA9IE5VTEw7XG4rXHQqY2h1bmtfY250X291dCA9IDA7XG4rXG4rXHRpZiAoIW5yX3BhZ2VzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2bmV0X2RldmljZS1cdTAwM2V3YWl0X2RyYWluKTtcbi1cdG5ldF9kZXZpY2UtXHUwMDNlZGVzdHJveSA9IGZhbHNlO1xuLVx0bmV0X2RldmljZS1cdTAwM2V0eF9kaXNhYmxlID0gdHJ1ZTtcbitcdC8qIFdvcnN0IGNhc2U6IGV2ZXJ5IGNodW5rIGlzIGEgc2luZ2xlIHBhZ2UuICovXG4rXHRjaHVua3MgPSBrdm1hbGxvY19hcnJheShucl9wYWdlcywgc2l6ZW9mKCpjaHVua3MpLFxuK1x0XHRcdFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuK1x0aWYgKCFjaHVua3MpXG4rXHRcdGdvdG8gZXJyO1xuIFxuLVx0bmV0X2RldmljZS1cdTAwM2VtYXhfcGt0ID0gUk5ESVNfTUFYX1BLVF9ERUZBVUxUO1xuLVx0bmV0X2RldmljZS1cdTAwM2Vwa3RfYWxpZ24gPSBSTkRJU19QS1RfQUxJR05fREVGQVVMVDtcbitcdHBhZ2VzID0ga3ZtYWxsb2NfYXJyYXkobnJfcGFnZXMsIHNpemVvZigqcGFnZXMpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcGFnZXMpXG4rXHRcdGdvdG8gZXJyO1xuIFxuLVx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlY2hhbm5lbF9pbml0X3dhaXQpO1xuLVx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXN1YmNoYW5fb3Blbik7XG4tXHRJTklUX1dPUksoXHUwMDI2bmV0X2RldmljZS1cdTAwM2VzdWJjaGFuX3dvcmssIG5ldHZzY19zdWJjaGFuX3dvcmspO1xuK1x0LypcbitcdCAqIEBvcmRlciBtb25vdG9uaWNhbGx5IGRlY3JlYXNlcyBhY3Jvc3MgaXRlcmF0aW9uc1xuK1x0ICpcbitcdCAqIFVzZSBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOIHRvIGF2b2lkIE9PTS1raWxsaW5nLCBidXQgdHJ5XG4rXHQgKiBoYXJkZXIgYXQgb3JkZXIgMCBzaW5jZSB0aGF0IGlzIHRoZSBmaW5hbCBmYWxsYmFjay5cbitcdCAqL1xuK1x0b3JkZXIgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIE1BWF9QQUdFX09SREVSLCBpbG9nMihucl9wYWdlcykpO1xuK1x0d2hpbGUgKHJlbWFpbmluZykge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdFx0Z2ZwX3QgZ2ZwO1xuK1xuK1x0XHRvcmRlciA9IG1pbl90KHVuc2lnbmVkIGludCwgb3JkZXIsIGlsb2cyKHJlbWFpbmluZykpO1xuK1xuK1x0XHRmb3IgKDs7KSB7XG4rXHRcdFx0Z2ZwID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk87XG4rXHRcdFx0aWYgKG9yZGVyKVxuK1x0XHRcdFx0Z2ZwIHw9IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk47XG4rXHRcdFx0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwLCBvcmRlcik7XG4rXHRcdFx0aWYgKHBhZ2UpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRpZiAoIW9yZGVyKVxuK1x0XHRcdFx0Z290byBlcnI7XG4rXHRcdFx0b3JkZXItLTtcbitcdFx0fVxuIFxuLVx0cmV0dXJuIG5ldF9kZXZpY2U7XG4rXHRcdHJldCA9IHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKSxcbitcdFx0XHRcdFx0ICAgMVUgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBmYWlsZWQ7IHRoZSBwYWdlIHN0YXRlIGlzXG4rXHRcdFx0ICogdW5rbm93biBzbyBpdCBtdXN0IGJlIGxlYWtlZCByYXRoZXIgdGhhbiBmcmVlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRnb3RvIGVycjtcbitcdFx0fVxuK1xuK1x0XHRjaHVua3NbY2h1bmtfY250XS5wYWdlID0gcGFnZTtcbitcdFx0Y2h1bmtzW2NodW5rX2NudF0ub3JkZXIgPSBvcmRlcjtcbitcdFx0Y2h1bmtfY250Kys7XG4rXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjICgxVSBcdTAwM2NcdTAwM2Mgb3JkZXIpOyBpKyspXG4rXHRcdFx0cGFnZXNbcGFnZV9pZHgrK10gPSBwYWdlICsgaTtcbitcbitcdFx0cmVtYWluaW5nIC09IDFVIFx1MDAzY1x1MDAzYyBvcmRlcjtcbitcdH1cbitcbitcdGFkZHIgPSB2bWFwKHBhZ2VzLCBucl9wYWdlcywgVk1fTUFQLCBwZ3Byb3RfZGVjcnlwdGVkKFBBR0VfS0VSTkVMKSk7XG4rXHRpZiAoIWFkZHIpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0a3ZmcmVlKHBhZ2VzKTtcbitcdCpjaHVua3Nfb3V0ID0gY2h1bmtzO1xuK1x0KmNodW5rX2NudF9vdXQgPSBjaHVua19jbnQ7XG4rXHRyZXR1cm4gYWRkcjtcbitcbitlcnI6XG4rXHRrdmZyZWUocGFnZXMpO1xuK1x0bmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKE5VTEwsIGNodW5rcywgY2h1bmtfY250KTtcbitcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuK3N0YXRpYyB2b2lkIF9fZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCBuZXR2c2NfZGV2aWNlICpudmRldilcbiB7XG4tXHRzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbnZkZXZcbi1cdFx0PSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG5ldHZzY19kZXZpY2UsIHJjdSk7XG4gXHRpbnQgaTtcbiBcbiBcdGtmcmVlKG52ZGV2LVx1MDAzZWV4dGVuc2lvbik7XG4gXG4tXHRpZiAoIW52ZGV2LVx1MDAzZXJlY3ZfYnVmX2dwYWRsX2hhbmRsZS5kZWNyeXB0ZWQpXG4tXHRcdHZmcmVlKG52ZGV2LVx1MDAzZXJlY3ZfYnVmKTtcbi1cdGlmICghbnZkZXYtXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlLmRlY3J5cHRlZClcbi1cdFx0dmZyZWUobnZkZXYtXHUwMDNlc2VuZF9idWYpO1xuK1x0bmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKG52ZGV2LVx1MDAzZXJlY3ZfYnVmLCBudmRldi1cdTAwM2VyZWN2X2J1Zl9jaHVua3MsXG4rXHRcdFx0ICAgICAgbnZkZXYtXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcbitcdG5ldHZzY19mcmVlX2J1Zl9wYWdlcyhudmRldi1cdTAwM2VzZW5kX2J1ZiwgbnZkZXYtXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxuK1x0XHRcdCAgICAgIG52ZGV2LVx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCk7XG4gXHRiaXRtYXBfZnJlZShudmRldi1cdTAwM2VzZW5kX3NlY3Rpb25fbWFwKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFZSU1NfQ0hBTk5FTF9NQVg7IGkrKykge1xuQEAgLTE3MCw5ICsyOTcsNTYgQEAgc3RhdGljIHZvaWQgZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiBcdGtmcmVlKG52ZGV2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbit7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgKnJ3b3JrID0gdG9fcmN1X3dvcmsodyk7XG4rXG4rXHRfX2ZyZWVfbmV0dnNjX2RldmljZShjb250YWluZXJfb2YocndvcmssIHN0cnVjdCBuZXR2c2NfZGV2aWNlLCByd29yaykpO1xuK31cbitcbitpbnQgbmV0dnNjX3dvcmtxdWV1ZV9pbml0KHZvaWQpXG4re1xuK1x0bmV0dnNjX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwiaHZfbmV0dnNjXCIsIFdRX1VOQk9VTkQsIDApO1xuK1xuK1x0cmV0dXJuIG5ldHZzY193cSA/IDAgOiAtRU5PTUVNO1xuK31cbitcbit2b2lkIG5ldHZzY193b3JrcXVldWVfZGVzdHJveSh2b2lkKVxuK3tcbitcdHJjdV9iYXJyaWVyKCk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZShuZXR2c2Nfd3EpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IG5ldHZzY19kZXZpY2UgKmFsbG9jX25ldF9kZXZpY2Uodm9pZClcbit7XG4rXHRzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZTtcbitcbitcdG5ldF9kZXZpY2UgPSBremFsbG9jX29iaihzdHJ1Y3QgbmV0dnNjX2RldmljZSk7XG4rXHRpZiAoIW5ldF9kZXZpY2UpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXdhaXRfZHJhaW4pO1xuK1x0bmV0X2RldmljZS1cdTAwM2VkZXN0cm95ID0gZmFsc2U7XG4rXHRuZXRfZGV2aWNlLVx1MDAzZXR4X2Rpc2FibGUgPSB0cnVlO1xuK1xuK1x0bmV0X2RldmljZS1cdTAwM2VtYXhfcGt0ID0gUk5ESVNfTUFYX1BLVF9ERUZBVUxUO1xuK1x0bmV0X2RldmljZS1cdTAwM2Vwa3RfYWxpZ24gPSBSTkRJU19QS1RfQUxJR05fREVGQVVMVDtcbitcbitcdGluaXRfY29tcGxldGlvbihcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZWNoYW5uZWxfaW5pdF93YWl0KTtcbitcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2bmV0X2RldmljZS1cdTAwM2VzdWJjaGFuX29wZW4pO1xuK1x0SU5JVF9XT1JLKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc3ViY2hhbl93b3JrLCBuZXR2c2Nfc3ViY2hhbl93b3JrKTtcbitcdElOSVRfUkNVX1dPUksoXHUwMDI2bmV0X2RldmljZS1cdTAwM2Vyd29yaywgZnJlZV9uZXR2c2NfZGV2aWNlKTtcbitcbitcdHJldHVybiBuZXRfZGV2aWNlO1xuK31cbitcbiBzdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2VfcmN1KHN0cnVjdCBuZXR2c2NfZGV2aWNlICpudmRldilcbiB7XG4tXHRjYWxsX3JjdShcdTAwMjZudmRldi1cdTAwM2VyY3UsIGZyZWVfbmV0dnNjX2RldmljZSk7XG4rXHQvKlxuK1x0ICogRGVmZXIgdGhlIGFjdHVhbCBmcmVlIHRvIHByb2Nlc3MgY29udGV4dDogdnVubWFwKCkgYW5kXG4rXHQgKiBzZXRfbWVtb3J5X2VuY3J5cHRlZCgpIGNhbm5vdCBydW4gZnJvbSBSQ1Ugc29mdGlycSBjb250ZXh0LlxuK1x0ICovXG4rXHRxdWV1ZV9yY3Vfd29yayhuZXR2c2Nfd3EsIFx1MDAyNm52ZGV2LVx1MDAzZXJ3b3JrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmV0dnNjX3Jldm9rZV9yZWN2X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG5AQCAtMzUxLDcgKzUyNSwyMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRcdGJ1Zl9zaXplID0gbWluX3QodW5zaWduZWQgaW50LCBidWZfc2l6ZSxcbiBcdFx0XHRcdCBORVRWU0NfUkVDRUlWRV9CVUZGRVJfU0laRV9MRUdBQ1kpO1xuIFxuLVx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xuK1x0aWYgKGRldmljZS1cdTAwM2VjaGFubmVsLVx1MDAzZWNvX2V4dGVybmFsX21lbW9yeSkge1xuK1x0XHQvKiBDb25maWRlbnRpYWwgVk0gQnVzIGxlYXZlcyBidWZmZXIgZW5jcnlwdGVkICovXG4rXHRcdG5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfY2h1bmtzID0gTlVMTDtcbitcdFx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua19jbnQgPSAwO1xuK1x0XHRuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmID0gdnphbGxvYyhidWZfc2l6ZSk7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBPdGhlcndpc2UsIGFsbG9jYXRlIGRlY3J5cHRlZCBidWZmZXIgKi9cbitcdFx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1ZiA9XG4rXHRcdFx0bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhjcHVfdG9fbm9kZShkZXZpY2UtXHUwMDNlY2hhbm5lbC1cdTAwM2V0YXJnZXRfY3B1KSxcbitcdFx0XHRcdFx0ICAgICAgIGJ1Zl9zaXplLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua3MsXG4rXHRcdFx0XHRcdCAgICAgICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmX2NodW5rX2NudCk7XG4rXHR9XG4rXG4gXHRpZiAoIW5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYpIHtcbiBcdFx0bmV0ZGV2X2VycihuZGV2LFxuIFx0XHRcdCAgIFwidW5hYmxlIHRvIGFsbG9jYXRlIHJlY2VpdmUgYnVmZmVyIG9mIHNpemUgJXVcXG5cIixcbkBAIC0zNjcsOSArNTU0LDEwIEBAIHN0YXRpYyBpbnQgbmV0dnNjX2luaXRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcbiBcdCAqIGNoYW5uZWwuICBOb3RlOiBUaGlzIGNhbGwgdXNlcyB0aGUgdm1idXMgY29ubmVjdGlvbiByYXRoZXJcbiBcdCAqIHRoYW4gdGhlIGNoYW5uZWwgdG8gZXN0YWJsaXNoIHRoZSBncGFkbCBoYW5kbGUuXG4gXHQgKi9cbi1cdHJldCA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbChkZXZpY2UtXHUwMDNlY2hhbm5lbCwgbmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zixcbi1cdFx0XHRcdCAgICBidWZfc2l6ZSxcbi1cdFx0XHRcdCAgICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmX2dwYWRsX2hhbmRsZSk7XG4rXHRyZXQgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZChkZXZpY2UtXHUwMDNlY2hhbm5lbCxcbitcdFx0XHRcdFx0XHQgICAgIG5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICBidWZfc2l6ZSxcbitcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfZ3BhZGxfaGFuZGxlKTtcbiBcdGlmIChyZXQgIT0gMCkge1xuIFx0XHRuZXRkZXZfZXJyKG5kZXYsXG4gXHRcdFx0XCJ1bmFibGUgdG8gZXN0YWJsaXNoIHJlY2VpdmUgYnVmZmVyJ3MgZ3BhZGxcXG5cIik7XG5AQCAtNDU3LDcgKzY0NSwxOSBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRidWZfc2l6ZSA9IGRldmljZV9pbmZvLVx1MDAzZXNlbmRfc2VjdGlvbnMgKiBkZXZpY2VfaW5mby1cdTAwM2VzZW5kX3NlY3Rpb25fc2l6ZTtcbiBcdGJ1Zl9zaXplID0gcm91bmRfdXAoYnVmX3NpemUsIFBBR0VfU0laRSk7XG4gXG4tXHRuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmID0gdnphbGxvYyhidWZfc2l6ZSk7XG4rXHRpZiAoZGV2aWNlLVx1MDAzZWNoYW5uZWwtXHUwMDNlY29fZXh0ZXJuYWxfbWVtb3J5KSB7XG4rXHRcdC8qIENvbmZpZGVudGlhbCBWTSBCdXMgbGVhdmVzIGJ1ZmZlciBlbmNyeXB0ZWQgKi9cbitcdFx0bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zl9jaHVua3MgPSBOVUxMO1xuK1x0XHRuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCA9IDA7XG4rXHRcdG5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYgPSB2emFsbG9jKGJ1Zl9zaXplKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIE90aGVyd2lzZSwgYWxsb2NhdGUgZGVjcnlwdGVkIGJ1ZmZlciAqL1xuK1x0XHRuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmID1cbitcdFx0XHRuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGNwdV90b19ub2RlKGRldmljZS1cdTAwM2VjaGFubmVsLVx1MDAzZXRhcmdldF9jcHUpLFxuK1x0XHRcdFx0XHQgICAgICAgYnVmX3NpemUsXG4rXHRcdFx0XHRcdCAgICAgICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2NodW5rcyxcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfY2h1bmtfY250KTtcbitcdH1cbiBcdGlmICghbmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zikge1xuIFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwidW5hYmxlIHRvIGFsbG9jYXRlIHNlbmQgYnVmZmVyIG9mIHNpemUgJXVcXG5cIixcbiBcdFx0XHQgICBidWZfc2l6ZSk7XG5AQCAtNDcwLDkgKzY3MCwxMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHQgKiBjaGFubmVsLiAgTm90ZTogVGhpcyBjYWxsIHVzZXMgdGhlIHZtYnVzIGNvbm5lY3Rpb24gcmF0aGVyXG4gXHQgKiB0aGFuIHRoZSBjaGFubmVsIHRvIGVzdGFibGlzaCB0aGUgZ3BhZGwgaGFuZGxlLlxuIFx0ICovXG4tXHRyZXQgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoZGV2aWNlLVx1MDAzZWNoYW5uZWwsIG5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYsXG4tXHRcdFx0XHQgICAgYnVmX3NpemUsXG4tXHRcdFx0XHQgICAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zl9ncGFkbF9oYW5kbGUpO1xuK1x0cmV0ID0gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoZGV2aWNlLVx1MDAzZWNoYW5uZWwsXG4rXHRcdFx0XHRcdFx0ICAgICBuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgYnVmX3NpemUsXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2dwYWRsX2hhbmRsZSk7XG4gXHRpZiAocmV0ICE9IDApIHtcbiBcdFx0bmV0ZGV2X2VycihuZGV2LFxuIFx0XHRcdCAgIFwidW5hYmxlIHRvIGVzdGFibGlzaCBzZW5kIGJ1ZmZlcidzIGdwYWRsXFxuXCIpO1xuQEAgLTE4NjMsNyArMjA2NCwxMSBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2bmV0X2RldmljZS1cdTAwM2VjaGFuX3RhYmxlWzBdLm5hcGkpO1xuIFxuIGNsZWFudXAyOlxuLVx0ZnJlZV9uZXR2c2NfZGV2aWNlKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmN1KTtcbitcdC8qXG4rXHQgKiBuZXRfZGV2aWNlIHdhcyBuZXZlciBwdWJsaXNoZWQsIHNvIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgYW5cbitcdCAqIFJDVSBncmFjZSBwZXJpb2QgLS0gY2FsbCB0aGUgZnJlZSByb3V0aW5lIHN5bmNocm9ub3VzbHkuXG4rXHQgKi9cbitcdF9fZnJlZV9uZXR2c2NfZGV2aWNlKG5ldF9kZXZpY2UpO1xuIFxuIFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcbmluZGV4IGVlNWFiNWNlYjJiZTJkLi4xZDQzYzczZmQ3M2YxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcbisrKyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcbkBAIC0yODY3LDEyICsyODY3LDE3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBuZXR2c2NfZHJ2X2V4aXQodm9pZClcbiB7XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZuZXR2c2NfbmV0ZGV2X25vdGlmaWVyKTtcbiBcdHZtYnVzX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNm5ldHZzY19kcnYpO1xuK1x0bmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IG5ldHZzY19kcnZfaW5pdCh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG4gXG4rXHRyZXQgPSBuZXR2c2Nfd29ya3F1ZXVlX2luaXQoKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHRpZiAocmluZ19zaXplIFx1MDAzYyBSSU5HX1NJWkVfTUlOKSB7XG4gXHRcdHJpbmdfc2l6ZSA9IFJJTkdfU0laRV9NSU47XG4gXHRcdHByX2luZm8oXCJJbmNyZWFzZWQgcmluZ19zaXplIHRvICV1IChtaW4gYWxsb3dlZClcXG5cIixcbkBAIC0yODkwLDYgKzI4OTUsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXR2c2NfZHJ2X2luaXQodm9pZClcbiBcbiBlcnJfdm1idXNfcmVnOlxuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2bmV0dnNjX25ldGRldl9ub3RpZmllcik7XG4rXHRuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3koKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHlwZXJ2LmggYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG5pbmRleCA5NjRmMWJlODE1MGM1OS4uOWM2YjFiNzc5NGI0OGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG5AQCAtNzgxLDYgKzc4MSwxMiBAQCBzdHJ1Y3Qgdm1idXNfZ3BhZGwge1xuIFx0dTMyIGdwYWRsX2hhbmRsZTtcbiBcdHUzMiBzaXplO1xuIFx0dm9pZCAqYnVmZmVyO1xuK1x0LypcbitcdCAqIE9ubHkgdXNlZCBpZiB0aGUgdm1idXMgbGF5ZXIgb3ducyB0aGUgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2ZcbitcdCAqIEBidWZmZXIuXG4rXHQgKiBJbmRpY2F0ZXMgQGJ1ZmZlciBtdXN0IGJlIHJlLWVuY3J5cHRlZCBhdCB0ZWFyZG93biBvciB0aGF0IGl0XG4rXHQgKiBtdXN0IGJlIGxlYWtlZCBiZWNhdXNlIHJlLWVuY3J5cHRpb24gZmFpbGVkLlxuK1x0ICovXG4gXHRib29sIGRlY3J5cHRlZDtcbiB9O1xuIFxuQEAgLTEyMDUsNiArMTIxMSwxMSBAQCBleHRlcm4gaW50IHZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiBcdFx0XHRcdCAgICAgIHUzMiBzaXplLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbCk7XG4gXG4rZXh0ZXJuIGludCB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbitcdFx0XHRcdFx0XHQgIHZvaWQgKmtidWZmZXIsXG4rXHRcdFx0XHRcdFx0ICB1MzIgc2l6ZSxcbitcdFx0XHRcdFx0XHQgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpO1xuK1xuIGV4dGVybiBpbnQgdm1idXNfdGVhcmRvd25fZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6MDguMDkyNTY4Mjg4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE1MTU3NDYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyB0aGlzIEh5cGVyLVYgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQncyB0d2Vha2luZyB0aGUgSHlwZXItViBuZXR3b3JrIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgbmV0dnNjYCBhbmQgVk1CdXMgY2hhbm5lbCBjb2RlLiBJdCBsb29rcyBsaWtlIGl0J3MgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24sIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZGAsIGFuZCBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBgbmV0dnNjYCBoYW5kbGVzIGl0cyBzZW5kL3JlY2VpdmUgYnVmZmVycy4gVGhlIGtleSBoZXJlIGlzIHRoZSB1c2Ugb2YgYHNldF9tZW1vcnlfZGVjcnlwdGVkYCBhbmQgYHNldF9tZW1vcnlfZW5jcnlwdGVkYCBmdW5jdGlvbnMuIFRob3NlIGFyZSBiaWcgZmxhZ3MgZm9yIENvbmZpZGVudGlhbCBWTXMsIGxpa2UgQU1EIFNFVi1TTlAgb3IgSW50ZWwgVERYLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gY29uc2lkZXIuXG5cblRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYG5ldHZzY19hbGxvY19idWZfcGFnZXNgIGFuZCBgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzYC4gVGhpcyBzZWVtcyB0byBiZSBhYm91dCBhbGxvY2F0aW5nIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgY2h1bmtzIGFuZCB2bWFwLWluZyB0aGVtLCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYHZ6YWxsb2NgLiBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIGEgbmV3IHdvcmtxdWV1ZSwgYG5ldHZzY193cWAsIGFkZGVkIGZvciBkZWZlcnJpbmcgdGhlIGRldmljZSBmcmVlaW5nLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpczogY2FuIHRoaXMgYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9uZWQgUUVNVSBhbmQgR0NFIGFzIHBvdGVudGlhbCBiYXJyaWVycywgYnV0IEkga25vdyB0aGUgSHlwZXItViBkcml2ZXJzIChgaHZfbmV0dnNjYCwgYGh2X3ZtYnVzYCkgYXJlIGFjdGl2ZWx5IHVzZWQgd2hlbiBMaW51eCBydW5zIGFzIGEgZ3Vlc3Qgb24gSHlwZXItVi4gVGhlIHByb21wdCBhbHNvIG5vdGVzIHRoYXQgaXQncyBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gU3l6a2FsbGVyICpzaG91bGQqIGJlIGFibGUgdG8gZnV6eiBIeXBlci1WIGRyaXZlcnMgaWYgaXQncyBydW5uaW5nIG9uIEh5cGVyLVYgb3IgaWYgdGhlcmUncyBzb21lIHNvcnQgb2YgZW11bGF0aW9uLlxuXG5XYWl0IGEgc2Vjb25kLCB3YXNuJ3QgdGhlcmUgc29tZSBIeXBlci1WIGZ1enppbmcgc3VwcG9ydCBpbiBzeXprYWxsZXI/IExldCdzIHNlZS4uLkkgcmVtZW1iZXIgc2VlaW5nIHRoaW5ncyBsaWtlIGBzeXpfdm1idXNfZXN0YWJsaXNoX2dwYWRsYCBpbiB0aGUgc3l6bGFuZywgc28gdGhlcmUgbWlnaHQgYmUgYSBWTUJ1cyBmdXp6ZXIgdGhhdCBydW5zIGluIFFFTVUgd2l0aCBhIG1vY2sgVk1CdXMgaW1wbGVtZW50YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gcnVubmluZyBvbiBIeXBlci1WLiBUaGlzIHdhcnJhbnRzIGEgZGVlcGVyIGxvb2s7IEkgbmVlZCB0byB2ZXJpZnkgaWYgYGh2X25ldHZzY2AgaXRzZWxmIGlzIHRhcmdldGVkIGJ5IGZ1enppbmcuXG5cbk9rYXksIGxldCdzIHN0YXJ0IHNlYXJjaGluZy4gSSdsbCBzZWFyY2ggdGhlIGtlcm5lbCBhbmQgc3l6a2FsbGVyIGNvZGViYXNlcyBmb3IgXCJuZXR2c2NcIi4gV2FpdCwgdGhlIGluc3RydWN0aW9ucyBzYXkgdGhhdCBpZiB0aGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgSSBuZWVkIHRvIHVzZSBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgaWYgdGhlIGNvZGUgKmNhbiogYmUgZXhlY3V0ZWQuIE9rYXksIHRoYXQncyB3aGF0IEknbGwgZG8uXG5cbkFscmlnaHQsIHRpbWUgdG8gY2hlY2sgaWYgYENPTkZJR19IWVBFUlZfTkVUYCBhbmQgYENPTkZJR19IWVBFUlZgIGFyZSBlbmFibGVkLCBhbmQgdGhlcmVmb3JlIHdoZXRoZXIgd2UgY2FuIGZ1enogaXQgYXQgYWxsLiBUaGVuIEknbGwgc2VhcmNoIGZvciBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AgYW5kIGBuZXR2c2NfZGV2aWNlX2FkZGAgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gVGhlIHdob2xlIHBvaW50IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgaXMgYWN0dWFsbHkgKmV4ZWN1dGFibGUqIGFuZCB0aGVyZWZvcmUgV29ydGhGdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODgwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6MTcuMjQ0MTQ1NDczWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzQ5MTMxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0dnNjX2RldmljZV9hZGRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaD0yMjQ9dm9pZCBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3kodm9pZCk7XFxuZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaDoyMjU6c3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldHZzY19kZXZpY2VfYWRkKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG5kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oLTIyNi1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0dnNjX2RldmljZV9pbmZvICppbmZvKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz0xOTQxPXZvaWQgbmV0dnNjX2NoYW5uZWxfY2Iodm9pZCAqY29udGV4dClcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xOTU4LS8qXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjE5NTk6ICogbmV0dnNjX2RldmljZV9hZGQgLSBDYWxsYmFjayB3aGVuIHRoZSBkZXZpY2UgYmVsb25naW5nIHRvIHRoaXNcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTk2MC0gKiBkcml2ZXIgaXMgYWRkZWRcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTk2MS0gKi9cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MTk2MjpzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xOTYzLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXR2c2NfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L3JuZGlzX2ZpbHRlci5jPTE0NzA9c3RydWN0IG5ldHZzY19kZXZpY2UgKnJuZGlzX2ZpbHRlcl9kZXZpY2VfYWRkKHN0cnVjdCBodl9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9ybmRpc19maWx0ZXIuYy0xNDkwLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2h5cGVydi9ybmRpc19maWx0ZXIuYzoxNDkxOlxcdG5ldF9kZXZpY2UgPSBuZXR2c2NfZGV2aWNlX2FkZChkZXYsIGRldmljZV9pbmZvKTtcXG5kcml2ZXJzL25ldC9oeXBlcnYvcm5kaXNfZmlsdGVyLmMtMTQ5Mi1cXHRpZiAoSVNfRVJSKG5ldF9kZXZpY2UpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjIwLjExOTA2NDExNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDIxNjgyNTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpdHMgaW52b2NhdGlvbiBwb2ludHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHN0YWNrIGFuZCBob3cgaXQncyBiZWluZyB1c2VkLiBJJ20gYXNzdW1pbmcgaXQncyByZWxhdGVkIHRvIGJ1ZmZlciBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgbmV0d29yayB2aXJ0dWFsIHNlcnZpY2UgY29udGV4dCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIHRoYXQgdHJpZ2dlciBpdC4gSSdsbCBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoIHRvIGlkZW50aWZ5IGFsbCBjYWxsIHNpdGVzLiBGcm9tIHRoZXJlLCBJJ2xsIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUsIGlkZWFsbHkgdW5kZXJzdGFuZGluZyB0aGUgbG9naWNhbCBmbG93IHRoYXQgbGVhZHMgdG8gYG5ldHZzY19hbGxvY19idWZfcGFnZXNgIGJlaW5nIGNhbGxlZC4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGludGVycHJldCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoZSBjYWxscy4gSSdsbCBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nIGFyb3VuZCB0aGUgY2FsbHMgYXMgd2VsbC4gTXkgbWFpbiBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGFsbG9jYXRpb24gcGF0dGVybnMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDozMC4xNDA3NDk1MDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MzM1NzYzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz0xMDE9c3RhdGljIHZvaWQgbmV0dnNjX3N1YmNoYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM2LSAqICAgICAgICBmYWlsZWQgYWxsb2NhdGlvbilcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MTM3OiAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIG5ldHZzY19hbGxvY19idWZfcGFnZXMoKSwgb3IgTlVMTFxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xMzgtICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTE0NT1zdGF0aWMgdm9pZCBuZXR2c2NfZnJlZV9idWZfcGFnZXModm9pZCAqYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xNzEtLypcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MTcyOiAqIG5ldHZzY19hbGxvY19idWZfcGFnZXMgLSBhbGxvY2F0ZSBhIHZpcnR1YWxseS1jb250aWd1b3VzLCBob3N0LXZpc2libGVcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTczLSAqIGJ1ZmZlciBmb3IgdGhlIG5ldHZzYyBzZW5kL3JlY2VpdmUgYXJlYS5cXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xODctICovXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjE4ODpzdGF0aWMgdm9pZCAqbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhpbnQgbm9kZSwgdTMyIHNpemUsXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE4OS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldHZzY19idWZfY2h1bmsgKipjaHVua3Nfb3V0LFxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTUwOT1zdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNTM1LVxcdFxcdG5ldF9kZXZpY2UtXFx1MDAzZXJlY3ZfYnVmID1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NTM2OlxcdFxcdFxcdG5ldHZzY19hbGxvY19idWZfcGFnZXMoY3B1X3RvX25vZGUoZGV2aWNlLVxcdTAwM2VjaGFubmVsLVxcdTAwM2V0YXJnZXRfY3B1KSxcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNTM3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBidWZfc2l6ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy02NTUtXFx0XFx0bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWYgPVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo2NTY6XFx0XFx0XFx0bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhjcHVfdG9fbm9kZShkZXZpY2UtXFx1MDAzZWNoYW5uZWwtXFx1MDAzZXRhcmdldF9jcHUpLFxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy02NTctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGJ1Zl9zaXplLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDozMi4wMDQxMTMwMzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk5MTExNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTmV0VlNDIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldoZXJlJ3MgdGhlIGJlZWY/XCIgSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG5ldHZzY19pbml0X2J1ZmAgYW5kIGBuZXR2c2NfZGV2aWNlX2FkZGAsIGJvdGggaW4gYGRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY2AuIFRoYXQgcmluZ3Mgc29tZSBiZWxscyAtIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGluaXRpYWwgYnVmZmVyIHNldHVwIGFuZCBkZXZpY2UgYWRkaXRpb24gd2l0aGluIHRoZSBuZXR3b3JrIHZpcnR1YWwgc2VydmljZSBjbGllbnQuIEFuZCB0aGVuIGl0IGFsc28gc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbGAgaW4gYGRyaXZlcnMvaHYvY2hhbm5lbC5jYC4gVGhhdCdzIGEgbG93LWxldmVsIGNoYW5uZWwgZnVuY3Rpb24sIHJlbGF0ZWQgdG8gc2V0dGluZyB1cCB0aGUgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzcyBMaXN0LiBEZWZpbml0ZWx5IGludGVyZXN0aW5nLlxuXG5CZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzLCBJIG5lZWQgdG8gbWFrZSBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIHBhdGNoIGlzIGNvcnJlY3RseSBndWFyZGVkIGJ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0hZUEVSVmAgYW5kIGBDT05GSUdfSFlQRVJWX05FVGAgYXJlIHRoZSBjb3JyZWN0IHByZS1yZXF1aXNpdGVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiB0aGUgY29kZS4gTGV0J3Mgc2VlIGlmIHRob3NlIGFyZSBzdWZmaWNpZW50LiBJZiBub3QsIEknbSBnb2luZyB0byBoYXZlIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgS2NvbmZpZyBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNDcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDozNi4zMDMyMjc0NTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMDE0NzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFlQRVJWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9Nzg0PWNvbmZpZyBTQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctNzk1LVxcbmFyY2gveDg2L0tjb25maWc6Nzk2Om1lbnVjb25maWcgSFlQRVJWSVNPUl9HVUVTVFxcbmFyY2gveDg2L0tjb25maWctNzk3LVxcdGJvb2wgXFxcIkxpbnV4IGd1ZXN0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWc9Mz1tZW51IFxcXCJNaWNyb3NvZnQgSHlwZXItViBndWVzdCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvaHYvS2NvbmZpZy00LVxcbmRyaXZlcnMvaHYvS2NvbmZpZzo1OmNvbmZpZyBIWVBFUlZcXG5kcml2ZXJzL2h2L0tjb25maWctNi1cXHRib29sIFxcXCJNaWNyb3NvZnQgSHlwZXItViBjb3JlIGh5cGVydmlzb3Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2h2L0tjb25maWc6MTc6Y29uZmlnIEhZUEVSVl9WVExfTU9ERVxcbmRyaXZlcnMvaHYvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJFbmFibGUgTGludXggdG8gYm9vdCBpbiBWVEwgY29udGV4dFxcXCJcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZy00Mi1cXG5kcml2ZXJzL2h2L0tjb25maWc6NDM6Y29uZmlnIEhZUEVSVl9USU1FUlxcbmRyaXZlcnMvaHYvS2NvbmZpZy00NC1cXHRkZWZfYm9vbCBIWVBFUlYgXFx1MDAyNlxcdTAwMjYgWDg2XFxuZHJpdmVycy9odi9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvaHYvS2NvbmZpZzo0Njpjb25maWcgSFlQRVJWX1VUSUxTXFxuZHJpdmVycy9odi9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgSHlwZXItViBVdGlsaXRpZXMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTUyLVxcbmRyaXZlcnMvaHYvS2NvbmZpZzo1Mzpjb25maWcgSFlQRVJWX0JBTExPT05cXG5kcml2ZXJzL2h2L0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIEJhbGxvb24gZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTU5LVxcbmRyaXZlcnMvaHYvS2NvbmZpZzo2MDpjb25maWcgSFlQRVJWX1ZNQlVTXFxuZHJpdmVycy9odi9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgSHlwZXItViBWTUJ1cyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjU0PWNvbmZpZyBTRVJJT19PTFBDX0FQU1BcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNjMtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI2NDpjb25maWcgSFlQRVJWX0tFWUJPQVJEXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI2NS1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IFN5bnRoZXRpYyBLZXlib2FyZCBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnOjI6Y29uZmlnIEhZUEVSVl9ORVRcXG5kcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgSHlwZXItViB2aXJ0dWFsIG5ldHdvcmsgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9zY3NpL0tjb25maWc9NTc4PWNvbmZpZyBYRU5fU0NTSV9GUk9OVEVORFxcbi0tXFxuZHJpdmVycy9zY3NpL0tjb25maWctNTg3LVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnOjU4ODpjb25maWcgSFlQRVJWX1NUT1JBR0VcXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy01ODktXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgc3RvcmFnZSBkcml2ZXJcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz0zNTI3PWNvbmZpZyBNRU1URVNUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zNTQwLVxcbmxpYi9LY29uZmlnLmRlYnVnOjM1NDE6Y29uZmlnIEhZUEVSVl9URVNUSU5HXFxubGliL0tjb25maWcuZGVidWctMzU0Mi1cXHRib29sIFxcXCJNaWNyb3NvZnQgSHlwZXItViBkcml2ZXIgdGVzdGluZ1xcXCJcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZz02Nj1jb25maWcgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTcyLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo3Mzpjb25maWcgSFlQRVJWX1ZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTc0LVxcdHRyaXN0YXRlIFxcXCJIeXBlci1WIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDozOC4wMjMzNzk5ODhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDU4MjAxMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpcm1pbmcgdGhlIEh5cGVyLVYgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGBDT05GSUdfSFlQRVJWX05FVGAgc2V0dGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN1Z2dlc3RzIHRoaXMgaXMgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBlbmFibGluZyBIeXBlci1WIG5ldHdvcmsgc3VwcG9ydCwgYnV0IGxldCdzIGNvbmZpcm0gdGhpcyByaWdvcm91c2x5IGJlZm9yZSBwcm9jZWVkaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBudWFuY2VzIGluIHRoZSBkZXBlbmRlbmNpZXMgb3IgY29uZmxpY3Rpbmcgc2V0dGluZ3MgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGludGVuZGVkIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIEh5cGVyLVYgZW52aXJvbm1lbnQuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIEtjb25maWcgZG9jdW1lbnRhdGlvbiBhbmQgYW55IHJlbGV2YW50IGJ1aWxkIGxvZ3Mgc2hvdWxkIGJlIGVub3VnaCB0byBzb2xpZGlmeSB0aGlzIHBhcnRpY3VsYXIgY2hvaWNlLCBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggYENPTkZJR19WSVJUSU9fTkVUYCBvciBgQ09ORklHX0UxMDAwRWAuIEl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSBoZXJlLCBhbmQgYXZvaWQgYW55IHVud2FudGVkIHN1cnByaXNlcyBkb3duIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU2MSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjQ0LjA4MTU4NDU3OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1MTk0MjE2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotLipuZXR2c2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0hZUEVSVl9ORVQpICs9IGh2X25ldHZzYy5vXFxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlLTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjQ2LjQzMzUzNTE4MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Njk1MTY1NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTmF2aWdhdGluZyB0aGUgSHlwZXItViBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgYENPTkZJR19IWVBFUlZfTkVUYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGUgcGF0Y2ggaXRzZWxmIHRvdWNoZXMgYGRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY2AgYW5kIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AuIE5vdywgYG5ldHZzYy5jYCBJIHJlY29nbml6ZSwgYnV0IGBjaGFubmVsLmNgLi4uIHRoYXQgcmluZ3Mgc29tZSBiZWxscyB3aXRoIHRoZSBicm9hZGVyIEh5cGVyLVYgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB0aGUgVk1CdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0aGlzIHRpZXMgaW4gd2l0aCB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJcyBgY2hhbm5lbC5jYCBwYXJ0IG9mIGBDT05GSUdfSFlQRVJWX1ZNQlVTYCBvciBtYXliZSBqdXN0IHRoZSBnZW5lcmFsIGBDT05GSUdfSFlQRVJWYD8gSSBuZWVkIHRvIGdldCBzb21lIG1vcmUgY29udGV4dCwgc28gSSdsbCBjaGVjayB0aGUgYGRyaXZlcnMvaHYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgcGxhY2VtZW50IG9mIHRoaXMgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIEh5cGVyLVYgZHJpdmVyIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODY0LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6NTIuMTI4NzAzMDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTM3OTM4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhbm5lbFxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0PTQ5PUVhY2ggY2hhbm5lbCBoYXMgdG8gcHJvdmlkZSB0d28gZnVuY3Rpb25zIHRvIHRoZSBnZW5lcmljIFBQUCBsYXllcixcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjUwOnZpYSB0aGUgcHBwX2NoYW5uZWwub3BzIHBvaW50ZXI6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC01MS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZT0yPWhvc3QxeC15ID0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvaG9zdDF4L01ha2VmaWxlLTctXFx0Y2RtYS5vIFxcXFxcXG5kcml2ZXJzL2dwdS9ob3N0MXgvTWFrZWZpbGU6ODpcXHRjaGFubmVsLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZS05LVxcdGpvYi5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvaHYvTWFrZWZpbGU9MTE9aHZfdm1idXMteSA6PSB2bWJ1c19kcnYubyBcXFxcXFxuZHJpdmVycy9odi9NYWtlZmlsZToxMjpcXHRcXHQgaHYubyBjb25uZWN0aW9uLm8gY2hhbm5lbC5vIFxcXFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlLTEzLVxcdFxcdCBjaGFubmVsX21nbXQubyByaW5nX2J1ZmZlci5vIGh2X3RyYWNlLm9cXG4tLVxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpZHR2L01ha2VmaWxlPTU9ZHZiLXZpZHR2LWJyaWRnZS1vYmpzIDo9IHZpZHR2X2JyaWRnZS5vIHZpZHR2X2NvbW1vbi5vIHZpZHR2X3RzLm8gdmlkdHZfcHNpLm8gXFxcXFxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpZHR2L01ha2VmaWxlOjY6XFx0XFx0XFx0IHZpZHR2X3Blcy5vIHZpZHR2X3MzMDJtLm8gdmlkdHZfY2hhbm5lbC5vIHZpZHR2X211eC5vXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmlkdHYvTWFrZWZpbGUtNy1cXG4tLVxcbmRyaXZlcnMvbWlzYy9zZ2kteHAvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfU0dJX1hQKVxcdFxcdCs9IHhwYy5vXFxuZHJpdmVycy9taXNjL3NnaS14cC9NYWtlZmlsZToxMDp4cGMteVxcdFxcdFxcdFxcdDo9IHhwY19tYWluLm8geHBjX2NoYW5uZWwubyB4cGNfcGFydGl0aW9uLm8gXFxcXFxcbmRyaXZlcnMvbWlzYy9zZ2kteHAvTWFrZWZpbGUtMTEtXFx0XFx0XFx0XFx0ICAgeHBjX3V2Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSArPSBtYW5hLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo2Om1hbmEtb2JqcyA6PSBnZG1hX21haW4ubyBzaG1fY2hhbm5lbC5vIGh3X2NoYW5uZWwubyBtYW5hX2VuLm8gbWFuYV9ldGh0b29sLm8gbWFuYV9icGYub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlPTI9YXRoOWsteSArPVxcdGJlYWNvbi5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS05LVxcdFxcdGFudGVubmEubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlOjEwOlxcdFxcdGNoYW5uZWwub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZT0yMz1icmNtc21hYy15IDo9IFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZS0yNy1cXHRhbnRzZWwubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlOjI4OlxcdGNoYW5uZWwubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlLTI5LVxcdG1haW4ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L01ha2VmaWxlPTExPW10NzYteSA6PSBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZS0xMi1cXHRtbWlvLm8gdXRpbC5vIHRyYWNlLm8gZG1hLm8gbWFjODAyMTEubyBkZWJ1Z2ZzLm8gZWVwcm9tLm8gXFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGU6MTM6XFx0dHgubyBhZ2ctcngubyBtY3UubyB3ZWQubyBzY2FuLm8gY2hhbm5lbC5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZS0xNC1cXG4tLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZT01PW1hYzgwMjExLXkgOj0gXFxcXFxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTExLVxcdHdwYS5vIFxcXFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6MTI6XFx0c2Nhbi5vIG9mZmNoYW5uZWwubyBcXFxcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTEzLVxcdGh0Lm8gYWdnLXR4Lm8gYWdnLXJ4Lm8gXFxcXFxcbi0tXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZT00PXJwY3JkbWEteSA6PSB0cmFuc3BvcnQubyBycGNfcmRtYS5vIHZlcmJzLm8gZnJ3cl9vcHMubyBpYl9jbGllbnQubyBcXFxcXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZTo1OlxcdHN2Y19yZG1hLm8gc3ZjX3JkbWFfYmFja2NoYW5uZWwubyBzdmNfcmRtYV90cmFuc3BvcnQubyBcXFxcXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZS02LVxcdHN2Y19yZG1hX3NlbmR0by5vIHN2Y19yZG1hX3JlY3Zmcm9tLm8gc3ZjX3JkbWFfcncubyBcXFxcXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZS03LVxcdHN2Y19yZG1hX3BjbC5vIG1vZHVsZS5vXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZTo4OnJwY3JkbWEtJChDT05GSUdfU1VOUlBDX0JBQ0tDSEFOTkVMKSArPSBiYWNrY2hhbm5lbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjU0LjM0MjUwMzkyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzE3OTY0OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHlwZXItViBWTUJ1cyBNb2R1bGUgYW5kIEFzc29jaWF0ZWQgTmV0d29yayBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBodl92bWJ1c2AgbW9kdWxlLCBhbmQgaXQncyBjbGVhcmx5IHRpZWQgdG8gYENPTkZJR19IWVBFUlZgLiBOb3csIGEga2V5IHF1ZXN0aW9uIGlzOiBhcmUgYENPTkZJR19IWVBFUlZgIGFuZCBzcGVjaWZpY2FsbHkgYENPTkZJR19IWVBFUlZfTkVUYCBldmVuIGFjY2Vzc2libGUgd2l0aGluIHRoZSBzeXprYWxsZXIgZW52aXJvbm1lbnQ/IEkga25vdyBzeXprYWxsZXIgaGFzIHBzZXVkby1zeXNjYWxscyBsaWtlIGBzeXpfdm1idXNfZXN0YWJsaXNoX2dwYWRsYCwgd2hpY2ggc3VnZ2VzdHMgdm1idXMgaXMgc3VwcG9ydGVkLiBIbW0sIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IG5vdGUgYWJvdXQgcHNldWRvLXN5c2NhbGxzLiBJdCBzYXlzIEkgY2FuJ3Qgc2VhcmNoIGZvciAnc3l6XycgZXhwcmVzc2lvbnMgYmVjYXVzZSB0aG9zZSBhcmVuJ3QgZGlyZWN0bHkgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEJ1dCBJIGtub3cgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHZtYnVzIHN1cHBvcnQsIHNvIEkgY2FuIHB1dCB0aGF0IGFzaWRlIGZvciBub3cuXG5cbk5vdywgdGhpcyBgbmV0dnNjYCBpcyB0aGUgbmV0d29yayBkcml2ZXIsIGFuZCB0aGF0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBmdXp6aW5nIGl0IGlmIHRoZSByaWdodCBkZXZpY2UgaXMgcHJlc2VudC5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyBhIG51bWJlciBvZiBrZXkgZnVuY3Rpb25zOiBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWRgLCBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0YCwgYG5ldHZzY19hbGxvY19idWZfcGFnZXNgLCBgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzYCwgYG5ldHZzY193b3JrcXVldWVfaW5pdGAsIGBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3lgLCBhbmQgYG5ldHZzY19kZXZpY2VfYWRkYC4gTG9va3MgbGlrZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWxsIGFyb3VuZC5cblxuTGV0J3MgbmFpbCBkb3duIHdoYXQgdGhlIGltcG9ydGFudCBGb2N1c1N5bWJvbHMgYXJlIGhlcmUuIEknbSBmb2N1c2luZyBvbjogYHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkYCwgYHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdGAsIGBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzYCwgYG5ldHZzY19mcmVlX2J1Zl9wYWdlc2AsIGBuZXR2c2NfZGV2aWNlX2FkZGAsIGBuZXR2c2NfaW5pdF9idWZgIGFuZCBgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGxgLlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gYGRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AgYW5kIGBuZXR2c2NfZnJlZV9idWZfcGFnZXNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM5NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NTowMy42NjA0NzE4NDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTM4NTYyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0dnNjX2FsbG9jX2J1Zl9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MTAxPXN0YXRpYyB2b2lkIG5ldHZzY19zdWJjaGFuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTEzNi0gKiAgICAgICAgZmFpbGVkIGFsbG9jYXRpb24pXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjEzNzogKiBAY2h1bmtzOiBjaHVua3MgYXJyYXkgZnJvbSBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKCksIG9yIE5VTExcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM4LSAqIEBjaHVua19jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBjaHVua3NcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz0xNDU9c3RhdGljIHZvaWQgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKHZvaWQgKmFkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTcxLS8qXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjE3MjogKiBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzIC0gYWxsb2NhdGUgYSB2aXJ0dWFsbHktY29udGlndW91cywgaG9zdC12aXNpYmxlXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE3My0gKiBidWZmZXIgZm9yIHRoZSBuZXR2c2Mgc2VuZC9yZWNlaXZlIGFyZWEuXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTg3LSAqL1xcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzoxODg6c3RhdGljIHZvaWQgKm5ldHZzY19hbGxvY19idWZfcGFnZXMoaW50IG5vZGUsIHUzMiBzaXplLFxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xODktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICoqY2h1bmtzX291dCxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz01MDk9c3RhdGljIGludCBuZXR2c2NfaW5pdF9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTUzNS1cXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1ZiA9XFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjUzNjpcXHRcXHRcXHRuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGNwdV90b19ub2RlKGRldmljZS1cXHUwMDNlY2hhbm5lbC1cXHUwMDNldGFyZ2V0X2NwdSksXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTUzNy1cXHRcXHRcXHRcXHRcXHQgICAgICAgYnVmX3NpemUsXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNjU1LVxcdFxcdG5ldF9kZXZpY2UtXFx1MDAzZXNlbmRfYnVmID1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NjU2OlxcdFxcdFxcdG5ldHZzY19hbGxvY19idWZfcGFnZXMoY3B1X3RvX25vZGUoZGV2aWNlLVxcdTAwM2VjaGFubmVsLVxcdTAwM2V0YXJnZXRfY3B1KSxcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNjU3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBidWZfc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTU6MDUuMzU0MzMzMTIzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxOTg1MTc3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgZmV3IGNydWNpYWwgZnVuY3Rpb25zIGluIHRoaXMgcHJvY2Vzcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyBtZSB0b3dhcmRzIHRoZXNlOiBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWRgLCBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0YCwgYG5ldHZzY19hbGxvY19idWZfcGFnZXNgLCBgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzYCwgYW5kIGBuZXR2c2NfaW5pdF9idWZgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGZvciB0aGUgZGF0YSB0cmFuc2ZlciBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSB2aXJ0dWFsaXplZCBuZXR3b3JrIGludGVyZmFjZS5cblxuSSdtIHBhcnRpY3VsYXJseSBjdXJpb3VzIGFib3V0IGhvdyB0aGUgR1BBREwgZXN0YWJsaXNobWVudCBhbmQgZGVjcnlwdGlvbiBhcmUgaGFuZGxlZCwgc28gSSdsbCBzdGFydCBieSBjb25maXJtaW5nIHRoZSBsb2NhdGlvbiBvZiBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0YC4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSdtIHByZXR0eSBzdXJlIGl0J3MgaW4gdGhlIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AgZmlsZSwgYnV0IGl0J3MgYWx3YXlzIGJlc3QgdG8gdmVyaWZ5LiBMZXQncyBtYWtlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODg0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU1OjEyLjU1Mjg1Mzc3M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNDA2NDA2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9odi9jaGFubmVsLmM9NDQ1PXN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01NDMtLypcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo1NDQ6ICogdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0IC0gTWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZlxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTU0NS0gKiBAa2J1ZmZlciBhcm91bmQgYSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbCgpIGNhbGwuXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01NTItICovXFxuZHJpdmVycy9odi9jaGFubmVsLmM6NTUzOnN0YXRpYyBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTU1NC1cXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gaHZfZ3BhZGxfdHlwZSB0eXBlLFxcbi0tXFxuZHJpdmVycy9odi9jaGFubmVsLmM9NTkyPWludCB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsIHZvaWQgKmtidWZmZXIsXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01OTQte1xcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjU5NTpcXHRyZXR1cm4gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KGNoYW5uZWwsIEhWX0dQQURMX0JVRkZFUixcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01OTYtXFx0XFx0XFx0XFx0XFx0XFx0IGtidWZmZXIsIHNpemUsIDBVLCBncGFkbCk7XFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYz02OTM9c3RhdGljIGludCBfX3ZtYnVzX29wZW4oc3RydWN0IHZtYnVzX2NoYW5uZWwgKm5ld2NoYW5uZWwsXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy03MjgtXFxuZHJpdmVycy9odi9jaGFubmVsLmM6NzI5OlxcdGVyciA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChuZXdjaGFubmVsLCBIVl9HUEFETF9SSU5HLFxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTczMC1cXHRcXHRcXHRcXHRcXHRcXHRwYWdlX2FkZHJlc3MobmV3Y2hhbm5lbC1cXHUwMDNlcmluZ2J1ZmZlcl9wYWdlKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTU6MTQuMTU2OTIxNTc2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzEwNDE4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGRlZmluaXRlbHkgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBIeXBlci1WIG5ldHdvcmtpbmcgYW5kIFZNQnVzIGNvcmUgbG9naWMuIEJhc2VkIG9uIHRoaXMsIEknbSBjb25maWRlbnQgaXQgd2FycmFudHMgYSBmdXp6aW5nIGVmZm9ydC4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCBtb2RpZmllczogSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZGAsIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRgLCBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AsIGBuZXR2c2NfZnJlZV9idWZfcGFnZXNgLCBgbmV0dnNjX2luaXRfYnVmYCwgYW5kIGBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbGAuIFRoZXNlIGFyZSB0aGUgYXJlYXMgd2hlcmUgSSdkIGFudGljaXBhdGUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgaW50ZXJhY3Rpb25zLiBUaGVzZSB3aWxsIGJlIG15IGZvY3VzIHN5bWJvbHMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyB0byBiZSBhY3RpdmUuIEkgc2VlIGl0J3MgbGlua2VkIHRvIGBIWVBFUlZgIGFuZCBgSFlQRVJWX05FVGAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgSFlQRVJWX05FVGAgaXMgdGhlIG9ubHkgY29uZmlnIGZvciBuZXR2c2MuIFllcywgdGhhdCdzIGNvcnJlY3QuIGBDT05GSUdfSFlQRVJWX05FVGAgaXQgaXMhIEFuZCBgSFlQRVJWYCBpcyBmb3Igdm1idXMuIEknbGwgdGFrZSBhIHF1aWNrIHNjYW4gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZWxldmFudCwganVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NjcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTU6MTguOTg3OTY2MTc3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcxMjI1MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIWVBFUlZfTkVUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWc6Mjpjb25maWcgSFlQRVJWX05FVFxcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU1OjIwLjY1OTE5NzI0N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODQ4MzUyNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiB0aGUgSHlwZXItViBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZXJlIGlzbid0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIHRvIGNvbnNpZGVyIGhlcmU7IGl0J3MgYSBmb2N1c2VkIGNoYW5nZS4gTXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHByaW1hcmlseSByZXZvbHZlcyBhcm91bmQgZW5oYW5jZW1lbnRzIGZvciBDb25maWRlbnRpYWwgVk1zIHdpdGhpbiB0aGUgSHlwZXItViBlbnZpcm9ubWVudC4gSXQncyBkcmlsbGluZyBpbnRvIHRoZSBgbmV0dnNjYCBuZXR3b3JrIGRyaXZlciBhbmQgdGhlIFZNQnVzIGNoYW5uZWwgY29kZS4gVGhlIGNvcmUgbG9naWMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBtYW5hZ2luZyB0aGUgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2YgR1BBREwgYnVmZmVycy5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIG5ldyBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgYG5ldHZzY19hbGxvY19idWZfcGFnZXNgIGFuZCBgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzYCBoYW5kbGUgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBidWZmZXIgcGFnZXMuIFRoYXQncyBwcmV0dHkgc3RhbmRhcmQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBvZiBjb3Vyc2UuIFRoZW4sIHRoaW5ncyBnZXQgbW9yZSBpbnRlcmVzdGluZyB3aXRoIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZGAgYW5kIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRgLiBUaGVzZSBzdHJvbmdseSBzdWdnZXN0IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgd2F5IEdQQURMcyBhcmUgZXN0YWJsaXNoZWQsIGFuZCBkZWNyeXB0aW9uIGlzIG1hbmFnZWQgZm9yIHRoaXMgZHJpdmVyIGxvZ2ljLiBUaGlzIHdvdWxkIGFsbCBiZSByZWFjaGFibGUgZHJpdmVyIGxvZ2ljLCBvZiBjb3Vyc2UsIGFzIHRoZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIHRvIHBlcmZvcm0gYW4gb3BlcmF0aW9uLiBOb3cgdG8gc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI3OCwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTU6MjYuNTA3NTUzMzYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI5MTMzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhZUEVSVlwiLFxuICAgIFwiSFlQRVJWX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkXCIsXG4gICAgXCJ2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRcIixcbiAgICBcIm5ldHZzY19hbGxvY19idWZfcGFnZXNcIixcbiAgICBcIm5ldHZzY19mcmVlX2J1Zl9wYWdlc1wiLFxuICAgIFwibmV0dnNjX2luaXRfYnVmXCIsXG4gICAgXCJfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVyIChuZXR2c2MpIGFuZCBWTUJ1cyBjaGFubmVsIGNvZGUgdG8gbWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZiBHUEFETCBidWZmZXJzLCBwYXJ0aWN1bGFybHkgZm9yIENvbmZpZGVudGlhbCBWTXMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBhbGxvY2F0ZS9mcmVlIGJ1ZmZlcnMgYW5kIGVzdGFibGlzaCBHUEFETHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIWVBFUlZcIixcbiAgICBcIkhZUEVSVl9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZFwiLFxuICAgIFwidm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0XCIsXG4gICAgXCJuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzXCIsXG4gICAgXCJuZXR2c2NfZnJlZV9idWZfcGFnZXNcIixcbiAgICBcIm5ldHZzY19pbml0X2J1ZlwiLFxuICAgIFwiX192bWJ1c19lc3RhYmxpc2hfZ3BhZGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSHlwZXItViBuZXR3b3JrIGRyaXZlciAobmV0dnNjKSBhbmQgVk1CdXMgY2hhbm5lbCBjb2RlIHRvIG1hbmFnZSB0aGUgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2YgR1BBREwgYnVmZmVycywgcGFydGljdWxhcmx5IGZvciBDb25maWRlbnRpYWwgVk1zLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gYWxsb2NhdGUvZnJlZSBidWZmZXJzIGFuZCBlc3RhYmxpc2ggR1BBRExzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowtlhjm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 14:38:11 +0000 UTC FinishedAt: 2026-07-22 14:55:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a4ffc59238be84dd1c26bf1c001543e832674fc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HYPERV", "HYPERV_NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a4ffc59238be84dd1c26bf1c001543e832674fc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HYPERV", "HYPERV_NET" ], "series_id": "a63a2468-8286-4d90-a95e-5c8577522acb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vmbus_establish_gpadl_caller_decrypted", "vmbus_establish_gpadl_and_decrypt", "netvsc_alloc_buf_pages", "netvsc_free_buf_pages", "netvsc_init_buf", "__vmbus_establish_gpadl" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hZUEVSViYjMzQ7LAogICAgJiMzNDtIWVBFUlZfTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQmIzM0OywKICAgICYjMzQ7dm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0JiMzNDssCiAgICAmIzM0O25ldHZzY19hbGxvY19idWZfcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0dnNjX2ZyZWVfYnVmX3BhZ2VzJiMzNDssCiAgICAmIzM0O25ldHZzY19pbml0X2J1ZiYjMzQ7LAogICAgJiMzNDtfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSHlwZXItViBuZXR3b3JrIGRyaXZlciAobmV0dnNjKSBhbmQgVk1CdXMgY2hhbm5lbCBjb2RlIHRvIG1hbmFnZSB0aGUgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2YgR1BBREwgYnVmZmVycywgcGFydGljdWxhcmx5IGZvciBDb25maWRlbnRpYWwgVk1zLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gYWxsb2NhdGUvZnJlZSBidWZmZXJzIGFuZCBlc3RhYmxpc2ggR1BBRExzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNGI1ZmQ4Njk3MWYyMjA2MWMwOWM4OGRiNWVjZjc1OWViMjJjYmQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTQ6NTQ6MDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9odi9jaGFubmVsLmMgYi9kcml2ZXJzL2h2L2NoYW5uZWwuY1xuaW5kZXggNjgyMWYyMjUyNDhiMTkuLjAxNjYzNjdhNGRmMzc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9odi9jaGFubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaHYvY2hhbm5lbC5jXG5AQCAtNDI2LDcgJiM0Mzs0MjYsMTMgQEAgc3RhdGljIHZvaWQgdm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8oc3RydWN0IHZtYnVzX2NoYW5uZWxfbXNnaW5mbyAqbXNnaW5mbylcbiB9XG4gXG4gLypcbi0gKiBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbCAtIEVzdGFibGlzaCBhIEdQQURMIGZvciBhIGJ1ZmZlciBvciByaW5nYnVmZmVyXG4mIzQzOyAqIF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsIC0gRXN0YWJsaXNoIGEgR1BBREwgZm9yIGEgYnVmZmVyIG9yIHJpbmdidWZmZXIuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gb25seSBoYW5kbGVzIHRoZSBHUEFETCBoYW5kc2hha2Ugd2l0aCB0aGUgaG9zdC4gIFRoZSBjYWxsZXJcbiYjNDM7ICogaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgQGtidWZmZXIgaXMgaW4gdGhlIGVuY3J5cHRpb24gc3RhdGUgdGhlXG4mIzQzOyAqIGhvc3QgZXhwZWN0cyAoaG9zdC12aXNpYmxlIC8gXCYjMzQ7ZGVjcnlwdGVkXCYjMzQ7IGZvciBjb25maWRlbnRpYWwgVk1zKTsgdGhpc1xuJiM0MzsgKiBmdW5jdGlvbiBuZXZlciBjYWxscyBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9yIHNldF9tZW1vcnlfZW5jcnlwdGVkKCkuXG4mIzQzOyAqIEl0IGFsc28gbGVhdmVzIGdwYWRsLVx1MDAzZWRlY3J5cHRlZCB1bnRvdWNoZWQsIHNvIHRoZSBjYWxsZXIgbXVzdCBzZXQgaXQuXG4gICpcbiAgKiBAY2hhbm5lbDogYSBjaGFubmVsXG4gICogQHR5cGU6IHRoZSB0eXBlIG9mIHRoZSBjb3JyZXNwb25kaW5nIEdQQURMLCBvbmx5IG1lYW5pbmdmdWwgZm9yIHRoZSBndWVzdC5cbkBAIC00MzQsNyAmIzQzOzQ0MCw3IEBAIHN0YXRpYyB2b2lkIHZtYnVzX2ZyZWVfY2hhbm5lbF9tc2dpbmZvKHN0cnVjdCB2bWJ1c19jaGFubmVsX21zZ2luZm8gKm1zZ2luZm8pXG4gICogQHNpemU6IHBhZ2Utc2l6ZSBtdWx0aXBsZVxuICAqIEBzZW5kX29mZnNldDogdGhlIG9mZnNldCAoaW4gYnl0ZXMpIHdoZXJlIHRoZSBzZW5kIHJpbmcgYnVmZmVyIHN0YXJ0cyxcbiAgKiAgICAgICAgICAgICAgc2hvdWxkIGJlIDAgZm9yIEJVRkZFUiB0eXBlIGdwYWRsXG4tICogQGdwYWRsX2hhbmRsZTogc29tZSBmdW5reSB0aGluZ1xuJiM0MzsgKiBAZ3BhZGw6IG91dCBwYXJhbWV0ZXIgcmVjZWl2aW5nIHRoZSBlc3RhYmxpc2hlZCBHUEFETCBoYW5kbGUvYnVmZmVyL3NpemVcbiAgKi9cbiBzdGF0aWMgaW50IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxuIFx0XHRcdFx0ICAgZW51bSBodl9ncGFkbF90eXBlIHR5cGUsIHZvaWQgKmtidWZmZXIsXG5AQCAtNDU0LDMwICYjNDM7NDYwLDggQEAgc3RhdGljIGludCBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiBcdFx0KGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNnZtYnVzX2Nvbm5lY3Rpb24ubmV4dF9ncGFkbF9oYW5kbGUpIC0gMSk7XG4gXG4gXHRyZXQgPSBjcmVhdGVfZ3BhZGxfaGVhZGVyKHR5cGUsIGtidWZmZXIsIHNpemUsIHNlbmRfb2Zmc2V0LCBcdTAwMjZtc2dpbmZvKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0Z3BhZGwtXHUwMDNlZGVjcnlwdGVkID0gZmFsc2U7XG4mIzQzO1x0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdGdwYWRsLVx1MDAzZWRlY3J5cHRlZCA9ICEoKGNoYW5uZWwtXHUwMDNlY29fZXh0ZXJuYWxfbWVtb3J5IFx1MDAyNlx1MDAyNiB0eXBlID09IEhWX0dQQURMX0JVRkZFUikgfHxcbi1cdFx0KGNoYW5uZWwtXHUwMDNlY29fcmluZ19idWZmZXIgXHUwMDI2XHUwMDI2IHR5cGUgPT0gSFZfR1BBRExfUklORykpO1xuLVx0aWYgKGdwYWRsLVx1MDAzZWRlY3J5cHRlZCkge1xuLVx0XHQvKlxuLVx0XHQgKiBUaGUgXCYjMzQ7ZGVjcnlwdGVkXCYjMzQ7IGZsYWcgYmVpbmcgdHJ1ZSBhc3N1bWVzIHRoYXQgc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBzdWNjZWVkcy5cbi1cdFx0ICogQnV0IGlmIGl0IGZhaWxzLCB0aGUgZW5jcnlwdGlvbiBzdGF0ZSBvZiB0aGUgbWVtb3J5IGlzIHVua25vd24uIEluIHRoYXQgY2FzZSxcbi1cdFx0ICogbGVhdmUgXCYjMzQ7ZGVjcnlwdGVkXCYjMzQ7IGFzIHRydWUgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgbGVha2VkIGluc3RlYWQgb2YgZ29pbmcgYmFja1xuLVx0XHQgKiBvbiB0aGUgZnJlZSBsaXN0LlxuLVx0XHQgKi9cbi1cdFx0cmV0ID0gc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpa2J1ZmZlcixcbi1cdFx0XHRcdFx0UEZOX1VQKHNpemUpKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGRldl93YXJuKFx1MDAyNmNoYW5uZWwtXHUwMDNlZGV2aWNlX29iai1cdTAwM2VkZXZpY2UsXG4tXHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gc2V0IGhvc3QgdmlzaWJpbGl0eSBmb3IgbmV3IEdQQURMICVkLlxcblwmIzM0Oyxcbi1cdFx0XHRcdHJldCk7XG4tXHRcdFx0dm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8obXNnaW5mbyk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fVxuLVx0fVxuIFxuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNm1zZ2luZm8tXHUwMDNld2FpdGV2ZW50KTtcbiBcdG1zZ2luZm8tXHUwMDNld2FpdGluZ19jaGFubmVsID0gY2hhbm5lbDtcbkBAIC01NTMsMTkgJiM0Mzs1MzcsNDcgQEAgc3RhdGljIGludCBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dm1idXNfY29ubmVjdGlvbi5jaGFubmVsbXNnX2xvY2ssIGZsYWdzKTtcbiBcbiBcdHZtYnVzX2ZyZWVfY2hhbm5lbF9tc2dpbmZvKG1zZ2luZm8pO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiBcbi1cdGlmIChyZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogSWYgc2V0X21lbW9yeV9lbmNyeXB0ZWQoKSBmYWlscywgdGhlIGRlY3J5cHRlZCBmbGFnIGlzXG4tXHRcdCAqIGxlZnQgYXMgdHJ1ZSBzbyB0aGUgbWVtb3J5IGlzIGxlYWtlZCBpbnN0ZWFkIG9mIGJlaW5nXG4tXHRcdCAqIHB1dCBiYWNrIG9uIHRoZSBmcmVlIGxpc3QuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZ3BhZGwtXHUwMDNlZGVjcnlwdGVkKSB7XG4tXHRcdFx0aWYgKCFzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZylrYnVmZmVyLCBQRk5fVVAoc2l6ZSkpKVxuLVx0XHRcdFx0Z3BhZGwtXHUwMDNlZGVjcnlwdGVkID0gZmFsc2U7XG4mIzQzOy8qXG4mIzQzOyAqIHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdCAtIE1hbmFnZSB0aGUgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2ZcbiYjNDM7ICogQGtidWZmZXIgYXJvdW5kIGEgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoKSBjYWxsLlxuJiM0MzsgKlxuJiM0MzsgKiBEZWNyeXB0cyBAa2J1ZmZlciAobWFraW5nIGl0IGhvc3QtdmlzaWJsZSkgdW5sZXNzIHRoZSBjaGFubmVsIHdhcyBjcmVhdGVkXG4mIzQzOyAqIHdpdGggY29uZmlkZW50aWFsIG1lbW9yeSBmb3IgQHR5cGUsIHRoZW4gZXN0YWJsaXNoZXMgdGhlIEdQQURMLiAgT25cbiYjNDM7ICogZXN0YWJsaXNoIGZhaWx1cmUgdGhlIGJ1ZmZlciBpcyByZS1lbmNyeXB0ZWQgc28gdGhlIGNhbGxlciBjYW4gZnJlZSBpdC5cbiYjNDM7ICpcbiYjNDM7ICogU2V0cyBncGFkbC1cdTAwM2VkZWNyeXB0ZWQ7IHNlZSB0aGUgY29tbWVudCBvbiBzdHJ1Y3Qgdm1idXNfZ3BhZGw6OmRlY3J5cHRlZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxuJiM0MztcdFx0XHRcdFx0ICAgICBlbnVtIGh2X2dwYWRsX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgdm9pZCAqa2J1ZmZlciwgdTMyIHNpemUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHUzMiBzZW5kX29mZnNldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbClcbiYjNDM7e1xuJiM0MztcdGJvb2wgZGVjcnlwdCA9ICEoKGNoYW5uZWwtXHUwMDNlY29fZXh0ZXJuYWxfbWVtb3J5IFx1MDAyNlx1MDAyNiB0eXBlID09IEhWX0dQQURMX0JVRkZFUikgfHxcbiYjNDM7XHRcdFx0IChjaGFubmVsLVx1MDAzZWNvX3JpbmdfYnVmZmVyIFx1MDAyNlx1MDAyNiB0eXBlID09IEhWX0dQQURMX1JJTkcpKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoZGVjcnlwdCkge1xuJiM0MztcdFx0cmV0ID0gc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpa2J1ZmZlciwgUEZOX1VQKHNpemUpKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oXHUwMDI2Y2hhbm5lbC1cdTAwM2VkZXZpY2Vfb2JqLVx1MDAzZWRldmljZSxcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHNldCBob3N0IHZpc2liaWxpdHkgZm9yIG5ldyBHUEFETCAlZC5cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IHJldCk7XG4mIzQzO1x0XHRcdC8qIEVuY3J5cHRpb24gc3RhdGUgdW5rbm93bjsgc2lnbmFsIGNhbGxlciB0byBsZWFrLiAqL1xuJiM0MztcdFx0XHRncGFkbC1cdTAwM2VkZWNyeXB0ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0Z3BhZGwtXHUwMDNlZGVjcnlwdGVkID0gZGVjcnlwdDtcbiYjNDM7XHRyZXQgPSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChjaGFubmVsLCB0eXBlLCBrYnVmZmVyLCBzaXplLCBzZW5kX29mZnNldCxcbiYjNDM7XHRcdFx0XHQgICAgICBncGFkbCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwMjZcdTAwMjYgZGVjcnlwdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSkpXG4mIzQzO1x0XHRncGFkbC1cdTAwM2VkZWNyeXB0ZWQgPSBmYWxzZTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTU4MCwxMSAmIzQzOzU5Miw0MCBAQCBzdGF0aWMgaW50IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxuIGludCB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsIHZvaWQgKmtidWZmZXIsXG4gXHRcdFx0ICB1MzIgc2l6ZSwgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbClcbiB7XG4tXHRyZXR1cm4gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoY2hhbm5lbCwgSFZfR1BBRExfQlVGRkVSLCBrYnVmZmVyLCBzaXplLFxuLVx0XHRcdFx0ICAgICAgIDBVLCBncGFkbCk7XG4mIzQzO1x0cmV0dXJuIHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChjaGFubmVsLCBIVl9HUEFETF9CVUZGRVIsXG4mIzQzO1x0XHRcdFx0XHRcdCBrYnVmZmVyLCBzaXplLCAwVSwgZ3BhZGwpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19lc3RhYmxpc2hfZ3BhZGwpO1xuIFxuJiM0MzsvKlxuJiM0MzsgKiB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCAtIEVzdGFibGlzaCBhIEdQQURMIGZvciBhIGJ1ZmZlclxuJiM0MzsgKiB3aG9zZSBlbmNyeXB0aW9uIHN0YXRlIGlzIG1hbmFnZWQgYnkgdGhlIGNhbGxlci5cbiYjNDM7ICpcbiYjNDM7ICogQGNoYW5uZWw6IGEgY2hhbm5lbFxuJiM0MzsgKiBAa2J1ZmZlcjogYSBidWZmZXIgdGhhdCB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IHRyYW5zaXRpb25lZCB0byBob3N0LXZpc2libGVcbiYjNDM7ICogICAgICAgICAgIChkZWNyeXB0ZWQpIHZpYSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9yIGFuIGVxdWl2YWxlbnQgbWVjaGFuaXNtLlxuJiM0MzsgKiBAc2l6ZTogcGFnZS1zaXplIG11bHRpcGxlXG4mIzQzOyAqIEBncGFkbDogb3V0IHBhcmFtZXRlciByZWNlaXZpbmcgdGhlIGVzdGFibGlzaGVkIEdQQURMXG4mIzQzOyAqXG4mIzQzOyAqIFVubGlrZSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjYWxsXG4mIzQzOyAqIHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgb24gQGtidWZmZXIsIGFuZCB0aGUgbWF0Y2hpbmcgdm1idXNfdGVhcmRvd25fZ3BhZGwoKVxuJiM0MzsgKiBjYWxsIHdpbGwgbm90IGNhbGwgc2V0X21lbW9yeV9lbmNyeXB0ZWQoKSBvbiBpdC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGVcbiYjNDM7ICogZm9yIHRoZSBmdWxsIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mIEBrYnVmZmVyOyBvbiByZXR1cm4gZ3BhZGwtXHUwMDNlZGVjcnlwdGVkXG4mIzQzOyAqIGlzIHNldCB0byBmYWxzZSB0byByZWNvcmQgdGhhdCB2bWJ1cyBkb2VzIG5vdCBvd24gdGhlIGVuY3J5cHRpb24gc3RhdGUuXG4mIzQzOyAqL1xuJiM0MztpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4mIzQzO1x0XHRcdFx0XHQgICB2b2lkICprYnVmZmVyLCB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoY2hhbm5lbCwgSFZfR1BBRExfQlVGRkVSLCBrYnVmZmVyLFxuJiM0MztcdFx0XHRcdFx0ICBzaXplLCAwVSwgZ3BhZGwpO1xuJiM0MztcbiYjNDM7XHQvKiBDYWxsZXIgb3ducyBAa2J1ZmZlciYjMzk7cyBlbmNyeXB0aW9uOyB0ZWFyZG93biBtdXN0IG5vdCB0b3VjaCBpdC4gKi9cbiYjNDM7XHRncGFkbC1cdTAwM2VkZWNyeXB0ZWQgPSBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkKTtcbiYjNDM7XG4gLyoqXG4gICogcmVxdWVzdF9hcnJfaW5pdCAtIEFsbG9jYXRlcyBtZW1vcnkgZm9yIHRoZSByZXF1ZXN0b3IgYXJyYXkuIEVhY2ggc2xvdFxuICAqIGtlZXBzIHRyYWNrIG9mIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBhcnJheS4gSW5pdGlhbGx5LCBlYWNoXG5AQCAtNjg1LDExICYjNDM7NzI2LDExIEBAIHN0YXRpYyBpbnQgX192bWJ1c19vcGVuKHN0cnVjdCB2bWJ1c19jaGFubmVsICpuZXdjaGFubmVsLFxuIFx0LyogRXN0YWJsaXNoIHRoZSBncGFkbCBmb3IgdGhlIHJpbmcgYnVmZmVyICovXG4gXHRuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUuZ3BhZGxfaGFuZGxlID0gMDtcbiBcbi1cdGVyciA9IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKG5ld2NoYW5uZWwsIEhWX0dQQURMX1JJTkcsXG4tXHRcdFx0XHQgICAgICBwYWdlX2FkZHJlc3MobmV3Y2hhbm5lbC1cdTAwM2VyaW5nYnVmZmVyX3BhZ2UpLFxuLVx0XHRcdFx0ICAgICAgKHNlbmRfcGFnZXMgJiM0MzsgcmVjdl9wYWdlcykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHQgICAgICBuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfc2VuZF9vZmZzZXQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHQgICAgICBcdTAwMjZuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUpO1xuJiM0MztcdGVyciA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChuZXdjaGFubmVsLCBIVl9HUEFETF9SSU5HLFxuJiM0MztcdFx0XHRcdFx0XHRwYWdlX2FkZHJlc3MobmV3Y2hhbm5lbC1cdTAwM2VyaW5nYnVmZmVyX3BhZ2UpLFxuJiM0MztcdFx0XHRcdFx0XHQoc2VuZF9wYWdlcyAmIzQzOyByZWN2X3BhZ2VzKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbiYjNDM7XHRcdFx0XHRcdFx0bmV3Y2hhbm5lbC1cdTAwM2VyaW5nYnVmZmVyX3NlbmRfb2Zmc2V0IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuJiM0MztcdFx0XHRcdFx0XHRcdTAwMjZuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcl9jbGVhbl9yaW5nO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmggYi9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXG5pbmRleCA3Mzk3YzY5M2Y5ODRhZi4uYjBjNGNiMGY3YTRjZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXG5AQCAtMjIwLDYgJiM0MzsyMjAsOCBAQCBzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0O1xuIFxuIGV4dGVybiB1MzIgbmV0dnNjX3JpbmdfYnl0ZXM7XG4gXG4mIzQzO2ludCBuZXR2c2Nfd29ya3F1ZXVlX2luaXQodm9pZCk7XG4mIzQzO3ZvaWQgbmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KHZvaWQpO1xuIHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXR2c2NfZGV2aWNlX2FkZChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXR2c2NfZGV2aWNlX2luZm8gKmluZm8pO1xuIGludCBuZXR2c2NfYWxsb2NfcmVjdl9jb21wX3Jpbmcoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsIHUzMiBxX2lkeCk7XG5AQCAtMTE0Nyw2ICYjNDM7MTE0OSwxNiBAQCBzdHJ1Y3QgbmV0dnNjX2NoYW5uZWwge1xuIFx0c3RydWN0IG5ldHZzY19zdGF0c19yeCByeF9zdGF0cztcbiB9O1xuIFxuJiM0MzsvKiBBIHBoeXNpY2FsbHktY29udGlndW91cyBjaHVuayBvZiBuZXR2c2MgYnVmZmVyLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgY2h1bmsgbGlzdCBpcyBwcmVzZXJ2ZWQgc28gZWFjaCBjaHVuayBjYW4gYmUgaW5kaXZpZHVhbGx5IGZyZWVkIGF0XG4mIzQzOyAqIHRlYXJkb3duLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IG5ldHZzY19idWZfY2h1bmsge1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmRlcjtcbiYjNDM7fTtcbiYjNDM7XG4gLyogUGVyIG5ldHZzYyBkZXZpY2UgKi9cbiBzdHJ1Y3QgbmV0dnNjX2RldmljZSB7XG4gXHR1MzIgbnZzcF92ZXJzaW9uO1xuQEAgLTExNTgsNiAmIzQzOzExNzAsOCBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSB7XG4gXHQvKiBSZWNlaXZlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdXMgYnV0IG1hbmFnZXMgYnkgTmV0VlNQICovXG4gXHR2b2lkICpyZWN2X2J1ZjtcbiBcdHUzMiByZWN2X2J1Zl9zaXplOyAvKiBhbGxvY2F0ZWQgYnl0ZXMgKi9cbiYjNDM7XHRzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqcmVjdl9idWZfY2h1bmtzO1xuJiM0MztcdHUzMiByZWN2X2J1Zl9jaHVua19jbnQ7XG4gXHRzdHJ1Y3Qgdm1idXNfZ3BhZGwgcmVjdl9idWZfZ3BhZGxfaGFuZGxlO1xuIFx0dTMyIHJlY3Zfc2VjdGlvbl9jbnQ7XG4gXHR1MzIgcmVjdl9zZWN0aW9uX3NpemU7XG5AQCAtMTE2Niw2ICYjNDM7MTE4MCw4IEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHtcbiBcdC8qIFNlbmQgYnVmZmVyIGFsbG9jYXRlZCBieSB1cyAqL1xuIFx0dm9pZCAqc2VuZF9idWY7XG4gXHR1MzIgc2VuZF9idWZfc2l6ZTtcbiYjNDM7XHRzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqc2VuZF9idWZfY2h1bmtzO1xuJiM0MztcdHUzMiBzZW5kX2J1Zl9jaHVua19jbnQ7XG4gXHRzdHJ1Y3Qgdm1idXNfZ3BhZGwgc2VuZF9idWZfZ3BhZGxfaGFuZGxlO1xuIFx0dTMyIHNlbmRfc2VjdGlvbl9jbnQ7XG4gXHR1MzIgc2VuZF9zZWN0aW9uX3NpemU7XG5AQCAtMTE5Myw3ICYjNDM7MTIwOSw3IEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHtcbiBcbiBcdHN0cnVjdCBuZXR2c2NfY2hhbm5lbCBjaGFuX3RhYmxlW1ZSU1NfQ0hBTk5FTF9NQVhdO1xuIFxuLVx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbiYjNDM7XHRzdHJ1Y3QgcmN1X3dvcmsgcndvcms7XG4gfTtcbiBcbiAvKiBOZGlzSW5pdGlhbGl6ZSBtZXNzYWdlICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jIGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXG5pbmRleCA1OWU5NTM0MWY5YjFlNS4uMjUwNWQxMGUyMjAxMDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xuQEAgLTE0LDYgJiM0MzsxNCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbkBAIC0yOCw2ICYjNDM7MzAsOCBAQFxuICNpbmNsdWRlIFwmIzM0O2h5cGVydl9uZXQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O25ldHZzY190cmFjZS5oXCYjMzQ7XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmV0dnNjX3dxO1xuJiM0MztcbiAvKlxuICAqIFN3aXRjaCB0aGUgZGF0YSBwYXRoIGZyb20gdGhlIHN5bnRoZXRpYyBpbnRlcmZhY2UgdG8gdGhlIFZGXG4gICogaW50ZXJmYWNlLlxuQEAgLTEyNSw0MCAmIzQzOzEyOSwxNjMgQEAgc3RhdGljIHZvaWQgbmV0dnNjX3N1YmNoYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRydG5sX3VubG9jaygpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IG5ldHZzY19kZXZpY2UgKmFsbG9jX25ldF9kZXZpY2Uodm9pZClcbiYjNDM7LypcbiYjNDM7ICogbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzIC0gcmVsZWFzZSBhIG5ldHZzYyBzZW5kL3JlY2VpdmUgYnVmZmVyLlxuJiM0MzsgKlxuJiM0MzsgKiBAYWRkcjogYnVmZmVyIGFkZHJlc3MsIG9yIE5VTEwgaWYgbm9uZSB3YXMgYWxsb2NhdGVkIChlLmcuIGNsZWFudXAgZnJvbSBhXG4mIzQzOyAqICAgICAgICBmYWlsZWQgYWxsb2NhdGlvbilcbiYjNDM7ICogQGNodW5rczogY2h1bmtzIGFycmF5IGZyb20gbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcygpLCBvciBOVUxMXG4mIzQzOyAqIEBjaHVua19jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBjaHVua3NcbiYjNDM7ICpcbiYjNDM7ICogV2hlbiBAY2h1bmtzIGlzIE5VTEwgdGhlIGJ1ZmZlciBpcyBhIHBsYWluIHZ6YWxsb2MoKSBhbGxvY2F0aW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBPdGhlcndpc2UgdGVhciBkb3duIHRoZSB2bWFwLCBhbmQgZm9yIGVhY2ggY2h1bmsgcmUtZW5jcnlwdCBhbmQgZnJlZVxuJiM0MzsgKiB0aGUgdW5kZXJseWluZyBwYWdlcy4gQW55IGNodW5rIHRoYXQgY2Fubm90IGJlIHJlLWVuY3J5cHRlZCBpcyBsZWFrZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBuZXR2c2NfZnJlZV9idWZfcGFnZXModm9pZCAqYWRkcixcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICpjaHVua3MsXG4mIzQzO1x0XHRcdFx0ICB1MzIgY2h1bmtfY250KVxuIHtcbi1cdHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlO1xuJiM0MztcdHUzMiBpO1xuIFxuLVx0bmV0X2RldmljZSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBuZXR2c2NfZGV2aWNlKTtcbi1cdGlmICghbmV0X2RldmljZSlcbiYjNDM7XHRpZiAoIWNodW5rcykge1xuJiM0MztcdFx0dmZyZWUoYWRkcik7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR2dW5tYXAoYWRkcik7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNodW5rX2NudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgdmFkZHIgPVxuJiM0MztcdFx0XHQodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoY2h1bmtzW2ldLnBhZ2UpO1xuJiM0MztcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gY2h1bmtzW2ldLm9yZGVyO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzZXRfbWVtb3J5X2VuY3J5cHRlZCh2YWRkciwgMVUgXHUwMDNjXHUwMDNjIG9yZGVyKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZXMoY2h1bmtzW2ldLnBhZ2UsIG9yZGVyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGt2ZnJlZShjaHVua3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzIC0gYWxsb2NhdGUgYSB2aXJ0dWFsbHktY29udGlndW91cywgaG9zdC12aXNpYmxlXG4mIzQzOyAqIGJ1ZmZlciBmb3IgdGhlIG5ldHZzYyBzZW5kL3JlY2VpdmUgYXJlYS5cbiYjNDM7ICpcbiYjNDM7ICogQG5vZGU6IE5VTUEgbm9kZSBoaW50IChOVU1BX05PX05PREUgZm9yIGFueSBub2RlKVxuJiM0MzsgKiBAc2l6ZTogcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGluIGJ5dGVzIChyb3VuZGVkIHVwIHRvIFBBR0VfU0laRSlcbiYjNDM7ICogQGNodW5rc19vdXQ6IG9uIHN1Y2Nlc3MsIHNldCB0byB0aGUgYXJyYXkgb2YgdW5kZXJseWluZyBjaHVua3NcbiYjNDM7ICogQGNodW5rX2NudF9vdXQ6IG9uIHN1Y2Nlc3MsIHNldCB0byB0aGUgbnVtYmVyIG9mIGNodW5rc1xuJiM0MzsgKlxuJiM0MzsgKiBBbGxvY2F0ZXMgdGhlIGJ1ZmZlciBhcyBhIHNlcmllcyBvZiBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgY2h1bmtzLFxuJiM0MzsgKiBzdGFydGluZyBhdCBNQVhfUEFHRV9PUkRFUiBhbmQgZmFsbGluZyBiYWNrIHRvIHNtYWxsZXIgb3JkZXJzIG9uXG4mIzQzOyAqIGFsbG9jYXRpb24gZmFpbHVyZS4gRWFjaCBjaHVuayBpcyB0cmFuc2l0aW9uZWQgdG8gaG9zdC12aXNpYmxlIHZpYVxuJiM0MzsgKiBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9uIGl0cyBkaXJlY3QtbWFwIGFkZHJlc3MsIHRoZW4gYWxsIGNodW5rcyBhcmVcbiYjNDM7ICogY29tYmluZWQgaW50byBhIHZpcnR1YWxseS1jb250aWd1b3VzIHJhbmdlIHZpYSB2bWFwKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdGhlIHZtYXAoKWVkIHZpcnR1YWwgYWRkcmVzcywgb3IgTlVMTCBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgKm5ldHZzY19hbGxvY19idWZfcGFnZXMoaW50IG5vZGUsIHUzMiBzaXplLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqKmNodW5rc19vdXQsXG4mIzQzO1x0XHRcdFx0ICAgIHUzMiAqY2h1bmtfY250X291dClcbiYjNDM7e1xuJiM0MztcdHUzMiBucl9wYWdlcyA9IFBGTl9VUChzaXplKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqY2h1bmtzID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgb3JkZXI7XG4mIzQzO1x0dTMyIGNodW5rX2NudCA9IDA7XG4mIzQzO1x0dTMyIHBhZ2VfaWR4ID0gMDtcbiYjNDM7XHR1MzIgcmVtYWluaW5nID0gbnJfcGFnZXM7XG4mIzQzO1x0dm9pZCAqYWRkcjtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQqY2h1bmtzX291dCA9IE5VTEw7XG4mIzQzO1x0KmNodW5rX2NudF9vdXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5yX3BhZ2VzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2bmV0X2RldmljZS1cdTAwM2V3YWl0X2RyYWluKTtcbi1cdG5ldF9kZXZpY2UtXHUwMDNlZGVzdHJveSA9IGZhbHNlO1xuLVx0bmV0X2RldmljZS1cdTAwM2V0eF9kaXNhYmxlID0gdHJ1ZTtcbiYjNDM7XHQvKiBXb3JzdCBjYXNlOiBldmVyeSBjaHVuayBpcyBhIHNpbmdsZSBwYWdlLiAqL1xuJiM0MztcdGNodW5rcyA9IGt2bWFsbG9jX2FycmF5KG5yX3BhZ2VzLCBzaXplb2YoKmNodW5rcyksXG4mIzQzO1x0XHRcdFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuJiM0MztcdGlmICghY2h1bmtzKVxuJiM0MztcdFx0Z290byBlcnI7XG4gXG4tXHRuZXRfZGV2aWNlLVx1MDAzZW1heF9wa3QgPSBSTkRJU19NQVhfUEtUX0RFRkFVTFQ7XG4tXHRuZXRfZGV2aWNlLVx1MDAzZXBrdF9hbGlnbiA9IFJORElTX1BLVF9BTElHTl9ERUZBVUxUO1xuJiM0MztcdHBhZ2VzID0ga3ZtYWxsb2NfYXJyYXkobnJfcGFnZXMsIHNpemVvZigqcGFnZXMpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXBhZ2VzKVxuJiM0MztcdFx0Z290byBlcnI7XG4gXG4tXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2bmV0X2RldmljZS1cdTAwM2VjaGFubmVsX2luaXRfd2FpdCk7XG4tXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc3ViY2hhbl9vcGVuKTtcbi1cdElOSVRfV09SSyhcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXN1YmNoYW5fd29yaywgbmV0dnNjX3N1YmNoYW5fd29yayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBAb3JkZXIgbW9ub3RvbmljYWxseSBkZWNyZWFzZXMgYWNyb3NzIGl0ZXJhdGlvbnNcbiYjNDM7XHQgKlxuJiM0MztcdCAqIFVzZSBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOIHRvIGF2b2lkIE9PTS1raWxsaW5nLCBidXQgdHJ5XG4mIzQzO1x0ICogaGFyZGVyIGF0IG9yZGVyIDAgc2luY2UgdGhhdCBpcyB0aGUgZmluYWwgZmFsbGJhY2suXG4mIzQzO1x0ICovXG4mIzQzO1x0b3JkZXIgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIE1BWF9QQUdFX09SREVSLCBpbG9nMihucl9wYWdlcykpO1xuJiM0MztcdHdoaWxlIChyZW1haW5pbmcpIHtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdFx0Z2ZwX3QgZ2ZwO1xuJiM0MztcbiYjNDM7XHRcdG9yZGVyID0gbWluX3QodW5zaWduZWQgaW50LCBvcmRlciwgaWxvZzIocmVtYWluaW5nKSk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICg7Oykge1xuJiM0MztcdFx0XHRnZnAgPSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTztcbiYjNDM7XHRcdFx0aWYgKG9yZGVyKVxuJiM0MztcdFx0XHRcdGdmcCB8PSBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOO1xuJiM0MztcdFx0XHRwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIG9yZGVyKTtcbiYjNDM7XHRcdFx0aWYgKHBhZ2UpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGlmICghb3JkZXIpXG4mIzQzO1x0XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHRcdG9yZGVyLS07XG4mIzQzO1x0XHR9XG4gXG4tXHRyZXR1cm4gbmV0X2RldmljZTtcbiYjNDM7XHRcdHJldCA9IHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKSxcbiYjNDM7XHRcdFx0XHRcdCAgIDFVIFx1MDAzY1x1MDAzYyBvcmRlcik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgZmFpbGVkOyB0aGUgcGFnZSBzdGF0ZSBpc1xuJiM0MztcdFx0XHQgKiB1bmtub3duIHNvIGl0IG11c3QgYmUgbGVha2VkIHJhdGhlciB0aGFuIGZyZWVkLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0Y2h1bmtzW2NodW5rX2NudF0ucGFnZSA9IHBhZ2U7XG4mIzQzO1x0XHRjaHVua3NbY2h1bmtfY250XS5vcmRlciA9IG9yZGVyO1xuJiM0MztcdFx0Y2h1bmtfY250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAoMVUgXHUwMDNjXHUwMDNjIG9yZGVyKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdHBhZ2VzW3BhZ2VfaWR4JiM0MzsmIzQzO10gPSBwYWdlICYjNDM7IGk7XG4mIzQzO1xuJiM0MztcdFx0cmVtYWluaW5nIC09IDFVIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFkZHIgPSB2bWFwKHBhZ2VzLCBucl9wYWdlcywgVk1fTUFQLCBwZ3Byb3RfZGVjcnlwdGVkKFBBR0VfS0VSTkVMKSk7XG4mIzQzO1x0aWYgKCFhZGRyKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdGt2ZnJlZShwYWdlcyk7XG4mIzQzO1x0KmNodW5rc19vdXQgPSBjaHVua3M7XG4mIzQzO1x0KmNodW5rX2NudF9vdXQgPSBjaHVua19jbnQ7XG4mIzQzO1x0cmV0dXJuIGFkZHI7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0a3ZmcmVlKHBhZ2VzKTtcbiYjNDM7XHRuZXR2c2NfZnJlZV9idWZfcGFnZXMoTlVMTCwgY2h1bmtzLCBjaHVua19jbnQpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuJiM0MztzdGF0aWMgdm9pZCBfX2ZyZWVfbmV0dnNjX2RldmljZShzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbnZkZXYpXG4ge1xuLVx0c3RydWN0IG5ldHZzY19kZXZpY2UgKm52ZGV2XG4tXHRcdD0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBuZXR2c2NfZGV2aWNlLCByY3UpO1xuIFx0aW50IGk7XG4gXG4gXHRrZnJlZShudmRldi1cdTAwM2VleHRlbnNpb24pO1xuIFxuLVx0aWYgKCFudmRldi1cdTAwM2VyZWN2X2J1Zl9ncGFkbF9oYW5kbGUuZGVjcnlwdGVkKVxuLVx0XHR2ZnJlZShudmRldi1cdTAwM2VyZWN2X2J1Zik7XG4tXHRpZiAoIW52ZGV2LVx1MDAzZXNlbmRfYnVmX2dwYWRsX2hhbmRsZS5kZWNyeXB0ZWQpXG4tXHRcdHZmcmVlKG52ZGV2LVx1MDAzZXNlbmRfYnVmKTtcbiYjNDM7XHRuZXR2c2NfZnJlZV9idWZfcGFnZXMobnZkZXYtXHUwMDNlcmVjdl9idWYsIG52ZGV2LVx1MDAzZXJlY3ZfYnVmX2NodW5rcyxcbiYjNDM7XHRcdFx0ICAgICAgbnZkZXYtXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcbiYjNDM7XHRuZXR2c2NfZnJlZV9idWZfcGFnZXMobnZkZXYtXHUwMDNlc2VuZF9idWYsIG52ZGV2LVx1MDAzZXNlbmRfYnVmX2NodW5rcyxcbiYjNDM7XHRcdFx0ICAgICAgbnZkZXYtXHUwMDNlc2VuZF9idWZfY2h1bmtfY250KTtcbiBcdGJpdG1hcF9mcmVlKG52ZGV2LVx1MDAzZXNlbmRfc2VjdGlvbl9tYXApO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVlJTU19DSEFOTkVMX01BWDsgaSYjNDM7JiM0MzspIHtcbkBAIC0xNzAsOSAmIzQzOzI5Nyw1NiBAQCBzdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuIFx0a2ZyZWUobnZkZXYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByY3Vfd29yayAqcndvcmsgPSB0b19yY3Vfd29yayh3KTtcbiYjNDM7XG4mIzQzO1x0X19mcmVlX25ldHZzY19kZXZpY2UoY29udGFpbmVyX29mKHJ3b3JrLCBzdHJ1Y3QgbmV0dnNjX2RldmljZSwgcndvcmspKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG5ldHZzY193b3JrcXVldWVfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0bmV0dnNjX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O2h2X25ldHZzY1wmIzM0OywgV1FfVU5CT1VORCwgMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuZXR2c2Nfd3EgPyAwIDogLUVOT01FTTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3kodm9pZClcbiYjNDM7e1xuJiM0MztcdHJjdV9iYXJyaWVyKCk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUobmV0dnNjX3dxKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBuZXR2c2NfZGV2aWNlICphbGxvY19uZXRfZGV2aWNlKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZTtcbiYjNDM7XG4mIzQzO1x0bmV0X2RldmljZSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBuZXR2c2NfZGV2aWNlKTtcbiYjNDM7XHRpZiAoIW5ldF9kZXZpY2UpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXdhaXRfZHJhaW4pO1xuJiM0MztcdG5ldF9kZXZpY2UtXHUwMDNlZGVzdHJveSA9IGZhbHNlO1xuJiM0MztcdG5ldF9kZXZpY2UtXHUwMDNldHhfZGlzYWJsZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdG5ldF9kZXZpY2UtXHUwMDNlbWF4X3BrdCA9IFJORElTX01BWF9QS1RfREVGQVVMVDtcbiYjNDM7XHRuZXRfZGV2aWNlLVx1MDAzZXBrdF9hbGlnbiA9IFJORElTX1BLVF9BTElHTl9ERUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2bmV0X2RldmljZS1cdTAwM2VjaGFubmVsX2luaXRfd2FpdCk7XG4mIzQzO1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXN1YmNoYW5fb3Blbik7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc3ViY2hhbl93b3JrLCBuZXR2c2Nfc3ViY2hhbl93b3JrKTtcbiYjNDM7XHRJTklUX1JDVV9XT1JLKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcndvcmssIGZyZWVfbmV0dnNjX2RldmljZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBuZXRfZGV2aWNlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGZyZWVfbmV0dnNjX2RldmljZV9yY3Uoc3RydWN0IG5ldHZzY19kZXZpY2UgKm52ZGV2KVxuIHtcbi1cdGNhbGxfcmN1KFx1MDAyNm52ZGV2LVx1MDAzZXJjdSwgZnJlZV9uZXR2c2NfZGV2aWNlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERlZmVyIHRoZSBhY3R1YWwgZnJlZSB0byBwcm9jZXNzIGNvbnRleHQ6IHZ1bm1hcCgpIGFuZFxuJiM0MztcdCAqIHNldF9tZW1vcnlfZW5jcnlwdGVkKCkgY2Fubm90IHJ1biBmcm9tIFJDVSBzb2Z0aXJxIGNvbnRleHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cXVldWVfcmN1X3dvcmsobmV0dnNjX3dxLCBcdTAwMjZudmRldi1cdTAwM2Vyd29yayk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG5ldHZzY19yZXZva2VfcmVjdl9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuQEAgLTM1MSw3ICYjNDM7NTI1LDIwIEBAIHN0YXRpYyBpbnQgbmV0dnNjX2luaXRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcbiBcdFx0YnVmX3NpemUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGJ1Zl9zaXplLFxuIFx0XHRcdFx0IE5FVFZTQ19SRUNFSVZFX0JVRkZFUl9TSVpFX0xFR0FDWSk7XG4gXG4tXHRuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmID0gdnphbGxvYyhidWZfc2l6ZSk7XG4mIzQzO1x0aWYgKGRldmljZS1cdTAwM2VjaGFubmVsLVx1MDAzZWNvX2V4dGVybmFsX21lbW9yeSkge1xuJiM0MztcdFx0LyogQ29uZmlkZW50aWFsIFZNIEJ1cyBsZWF2ZXMgYnVmZmVyIGVuY3J5cHRlZCAqL1xuJiM0MztcdFx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua3MgPSBOVUxMO1xuJiM0MztcdFx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua19jbnQgPSAwO1xuJiM0MztcdFx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBPdGhlcndpc2UsIGFsbG9jYXRlIGRlY3J5cHRlZCBidWZmZXIgKi9cbiYjNDM7XHRcdG5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYgPVxuJiM0MztcdFx0XHRuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGNwdV90b19ub2RlKGRldmljZS1cdTAwM2VjaGFubmVsLVx1MDAzZXRhcmdldF9jcHUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGJ1Zl9zaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfY2h1bmtzLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKCFuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmKSB7XG4gXHRcdG5ldGRldl9lcnIobmRldixcbiBcdFx0XHQgICBcJiMzNDt1bmFibGUgdG8gYWxsb2NhdGUgcmVjZWl2ZSBidWZmZXIgb2Ygc2l6ZSAldVxcblwmIzM0OyxcbkBAIC0zNjcsOSAmIzQzOzU1NCwxMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHQgKiBjaGFubmVsLiAgTm90ZTogVGhpcyBjYWxsIHVzZXMgdGhlIHZtYnVzIGNvbm5lY3Rpb24gcmF0aGVyXG4gXHQgKiB0aGFuIHRoZSBjaGFubmVsIHRvIGVzdGFibGlzaCB0aGUgZ3BhZGwgaGFuZGxlLlxuIFx0ICovXG4tXHRyZXQgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoZGV2aWNlLVx1MDAzZWNoYW5uZWwsIG5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYsXG4tXHRcdFx0XHQgICAgYnVmX3NpemUsXG4tXHRcdFx0XHQgICAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9ncGFkbF9oYW5kbGUpO1xuJiM0MztcdHJldCA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkKGRldmljZS1cdTAwM2VjaGFubmVsLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIG5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgYnVmX3NpemUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9ncGFkbF9oYW5kbGUpO1xuIFx0aWYgKHJldCAhPSAwKSB7XG4gXHRcdG5ldGRldl9lcnIobmRldixcbiBcdFx0XHRcJiMzNDt1bmFibGUgdG8gZXN0YWJsaXNoIHJlY2VpdmUgYnVmZmVyJiMzOTtzIGdwYWRsXFxuXCYjMzQ7KTtcbkBAIC00NTcsNyAmIzQzOzY0NSwxOSBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRidWZfc2l6ZSA9IGRldmljZV9pbmZvLVx1MDAzZXNlbmRfc2VjdGlvbnMgKiBkZXZpY2VfaW5mby1cdTAwM2VzZW5kX3NlY3Rpb25fc2l6ZTtcbiBcdGJ1Zl9zaXplID0gcm91bmRfdXAoYnVmX3NpemUsIFBBR0VfU0laRSk7XG4gXG4tXHRuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmID0gdnphbGxvYyhidWZfc2l6ZSk7XG4mIzQzO1x0aWYgKGRldmljZS1cdTAwM2VjaGFubmVsLVx1MDAzZWNvX2V4dGVybmFsX21lbW9yeSkge1xuJiM0MztcdFx0LyogQ29uZmlkZW50aWFsIFZNIEJ1cyBsZWF2ZXMgYnVmZmVyIGVuY3J5cHRlZCAqL1xuJiM0MztcdFx0bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zl9jaHVua3MgPSBOVUxMO1xuJiM0MztcdFx0bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zl9jaHVua19jbnQgPSAwO1xuJiM0MztcdFx0bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBPdGhlcndpc2UsIGFsbG9jYXRlIGRlY3J5cHRlZCBidWZmZXIgKi9cbiYjNDM7XHRcdG5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYgPVxuJiM0MztcdFx0XHRuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGNwdV90b19ub2RlKGRldmljZS1cdTAwM2VjaGFubmVsLVx1MDAzZXRhcmdldF9jcHUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGJ1Zl9zaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfY2h1bmtfY250KTtcbiYjNDM7XHR9XG4gXHRpZiAoIW5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYpIHtcbiBcdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDt1bmFibGUgdG8gYWxsb2NhdGUgc2VuZCBidWZmZXIgb2Ygc2l6ZSAldVxcblwmIzM0OyxcbiBcdFx0XHQgICBidWZfc2l6ZSk7XG5AQCAtNDcwLDkgJiM0Mzs2NzAsMTAgQEAgc3RhdGljIGludCBuZXR2c2NfaW5pdF9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuIFx0ICogY2hhbm5lbC4gIE5vdGU6IFRoaXMgY2FsbCB1c2VzIHRoZSB2bWJ1cyBjb25uZWN0aW9uIHJhdGhlclxuIFx0ICogdGhhbiB0aGUgY2hhbm5lbCB0byBlc3RhYmxpc2ggdGhlIGdwYWRsIGhhbmRsZS5cbiBcdCAqL1xuLVx0cmV0ID0gdm1idXNfZXN0YWJsaXNoX2dwYWRsKGRldmljZS1cdTAwM2VjaGFubmVsLCBuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmLFxuLVx0XHRcdFx0ICAgIGJ1Zl9zaXplLFxuLVx0XHRcdFx0ICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlKTtcbiYjNDM7XHRyZXQgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZChkZXZpY2UtXHUwMDNlY2hhbm5lbCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGJ1Zl9zaXplLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlKTtcbiBcdGlmIChyZXQgIT0gMCkge1xuIFx0XHRuZXRkZXZfZXJyKG5kZXYsXG4gXHRcdFx0ICAgXCYjMzQ7dW5hYmxlIHRvIGVzdGFibGlzaCBzZW5kIGJ1ZmZlciYjMzk7cyBncGFkbFxcblwmIzM0Oyk7XG5AQCAtMTg2Myw3ICYjNDM7MjA2NCwxMSBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2bmV0X2RldmljZS1cdTAwM2VjaGFuX3RhYmxlWzBdLm5hcGkpO1xuIFxuIGNsZWFudXAyOlxuLVx0ZnJlZV9uZXR2c2NfZGV2aWNlKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmN1KTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIG5ldF9kZXZpY2Ugd2FzIG5ldmVyIHB1Ymxpc2hlZCwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdG8gd2FpdCBmb3IgYW5cbiYjNDM7XHQgKiBSQ1UgZ3JhY2UgcGVyaW9kIC0tIGNhbGwgdGhlIGZyZWUgcm91dGluZSBzeW5jaHJvbm91c2x5LlxuJiM0MztcdCAqL1xuJiM0MztcdF9fZnJlZV9uZXR2c2NfZGV2aWNlKG5ldF9kZXZpY2UpO1xuIFxuIFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcbmluZGV4IGVlNWFiNWNlYjJiZTJkLi4xZDQzYzczZmQ3M2YxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcbkBAIC0yODY3LDEyICYjNDM7Mjg2NywxNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbmV0dnNjX2Rydl9leGl0KHZvaWQpXG4ge1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2bmV0dnNjX25ldGRldl9ub3RpZmllcik7XG4gXHR2bWJ1c19kcml2ZXJfdW5yZWdpc3RlcihcdTAwMjZuZXR2c2NfZHJ2KTtcbiYjNDM7XHRuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3koKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2luaXQgbmV0dnNjX2Rydl9pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRyZXQgPSBuZXR2c2Nfd29ya3F1ZXVlX2luaXQoKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4gXHRpZiAocmluZ19zaXplIFx1MDAzYyBSSU5HX1NJWkVfTUlOKSB7XG4gXHRcdHJpbmdfc2l6ZSA9IFJJTkdfU0laRV9NSU47XG4gXHRcdHByX2luZm8oXCYjMzQ7SW5jcmVhc2VkIHJpbmdfc2l6ZSB0byAldSAobWluIGFsbG93ZWQpXFxuXCYjMzQ7LFxuQEAgLTI4OTAsNiAmIzQzOzI4OTUsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXR2c2NfZHJ2X2luaXQodm9pZClcbiBcbiBlcnJfdm1idXNfcmVnOlxuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2bmV0dnNjX25ldGRldl9ub3RpZmllcik7XG4mIzQzO1x0bmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KCk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oIGIvaW5jbHVkZS9saW51eC9oeXBlcnYuaFxuaW5kZXggOTY0ZjFiZTgxNTBjNTkuLjljNmIxYjc3OTRiNDhlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9oeXBlcnYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9oeXBlcnYuaFxuQEAgLTc4MSw2ICYjNDM7NzgxLDEyIEBAIHN0cnVjdCB2bWJ1c19ncGFkbCB7XG4gXHR1MzIgZ3BhZGxfaGFuZGxlO1xuIFx0dTMyIHNpemU7XG4gXHR2b2lkICpidWZmZXI7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPbmx5IHVzZWQgaWYgdGhlIHZtYnVzIGxheWVyIG93bnMgdGhlIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mXG4mIzQzO1x0ICogQGJ1ZmZlci5cbiYjNDM7XHQgKiBJbmRpY2F0ZXMgQGJ1ZmZlciBtdXN0IGJlIHJlLWVuY3J5cHRlZCBhdCB0ZWFyZG93biBvciB0aGF0IGl0XG4mIzQzO1x0ICogbXVzdCBiZSBsZWFrZWQgYmVjYXVzZSByZS1lbmNyeXB0aW9uIGZhaWxlZC5cbiYjNDM7XHQgKi9cbiBcdGJvb2wgZGVjcnlwdGVkO1xuIH07XG4gXG5AQCAtMTIwNSw2ICYjNDM7MTIxMSwxMSBAQCBleHRlcm4gaW50IHZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiBcdFx0XHRcdCAgICAgIHUzMiBzaXplLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbCk7XG4gXG4mIzQzO2V4dGVybiBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgdm9pZCAqa2J1ZmZlcixcbiYjNDM7XHRcdFx0XHRcdFx0ICB1MzIgc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgdm1idXNfZ3BhZGwgKmdwYWRsKTtcbiYjNDM7XG4gZXh0ZXJuIGludCB2bWJ1c190ZWFyZG93bl9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hZUEVSViYjMzQ7LAogICAgJiMzNDtIWVBFUlZfTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQmIzM0OywKICAgICYjMzQ7dm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0JiMzNDssCiAgICAmIzM0O25ldHZzY19hbGxvY19idWZfcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0dnNjX2ZyZWVfYnVmX3BhZ2VzJiMzNDssCiAgICAmIzM0O25ldHZzY19pbml0X2J1ZiYjMzQ7LAogICAgJiMzNDtfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSHlwZXItViBuZXR3b3JrIGRyaXZlciAobmV0dnNjKSBhbmQgVk1CdXMgY2hhbm5lbCBjb2RlIHRvIG1hbmFnZSB0aGUgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2YgR1BBREwgYnVmZmVycywgcGFydGljdWxhcmx5IGZvciBDb25maWRlbnRpYWwgVk1zLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gYWxsb2NhdGUvZnJlZSBidWZmZXJzIGFuZCBlc3RhYmxpc2ggR1BBRExzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA0YjVmZDg2OTcxZjIyMDYxYzA5Yzg4ZGI1ZWNmNzU5ZWIyMmNiZDAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAyMiAxNDo1NDowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvY2hhbm5lbC5jIGIvZHJpdmVycy9odi9jaGFubmVsLmMKaW5kZXggNjgyMWYyMjUyNDhiMTkuLjAxNjYzNjdhNGRmMzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h2L2NoYW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2h2L2NoYW5uZWwuYwpAQCAtNDI2LDcgJiM0Mzs0MjYsMTMgQEAgc3RhdGljIHZvaWQgdm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8oc3RydWN0IHZtYnVzX2NoYW5uZWxfbXNnaW5mbyAqbXNnaW5mbykKIH0KIAogLyoKLSAqIF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsIC0gRXN0YWJsaXNoIGEgR1BBREwgZm9yIGEgYnVmZmVyIG9yIHJpbmdidWZmZXIKJiM0MzsgKiBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbCAtIEVzdGFibGlzaCBhIEdQQURMIGZvciBhIGJ1ZmZlciBvciByaW5nYnVmZmVyLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBvbmx5IGhhbmRsZXMgdGhlIEdQQURMIGhhbmRzaGFrZSB3aXRoIHRoZSBob3N0LiAgVGhlIGNhbGxlcgomIzQzOyAqIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IEBrYnVmZmVyIGlzIGluIHRoZSBlbmNyeXB0aW9uIHN0YXRlIHRoZQomIzQzOyAqIGhvc3QgZXhwZWN0cyAoaG9zdC12aXNpYmxlIC8gJiMzNDtkZWNyeXB0ZWQmIzM0OyBmb3IgY29uZmlkZW50aWFsIFZNcyk7IHRoaXMKJiM0MzsgKiBmdW5jdGlvbiBuZXZlciBjYWxscyBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9yIHNldF9tZW1vcnlfZW5jcnlwdGVkKCkuCiYjNDM7ICogSXQgYWxzbyBsZWF2ZXMgZ3BhZGwtJmd0O2RlY3J5cHRlZCB1bnRvdWNoZWQsIHNvIHRoZSBjYWxsZXIgbXVzdCBzZXQgaXQuCiAgKgogICogQGNoYW5uZWw6IGEgY2hhbm5lbAogICogQHR5cGU6IHRoZSB0eXBlIG9mIHRoZSBjb3JyZXNwb25kaW5nIEdQQURMLCBvbmx5IG1lYW5pbmdmdWwgZm9yIHRoZSBndWVzdC4KQEAgLTQzNCw3ICYjNDM7NDQwLDcgQEAgc3RhdGljIHZvaWQgdm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8oc3RydWN0IHZtYnVzX2NoYW5uZWxfbXNnaW5mbyAqbXNnaW5mbykKICAqIEBzaXplOiBwYWdlLXNpemUgbXVsdGlwbGUKICAqIEBzZW5kX29mZnNldDogdGhlIG9mZnNldCAoaW4gYnl0ZXMpIHdoZXJlIHRoZSBzZW5kIHJpbmcgYnVmZmVyIHN0YXJ0cywKICAqICAgICAgICAgICAgICBzaG91bGQgYmUgMCBmb3IgQlVGRkVSIHR5cGUgZ3BhZGwKLSAqIEBncGFkbF9oYW5kbGU6IHNvbWUgZnVua3kgdGhpbmcKJiM0MzsgKiBAZ3BhZGw6IG91dCBwYXJhbWV0ZXIgcmVjZWl2aW5nIHRoZSBlc3RhYmxpc2hlZCBHUEFETCBoYW5kbGUvYnVmZmVyL3NpemUKICAqLwogc3RhdGljIGludCBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCQkgICBlbnVtIGh2X2dwYWRsX3R5cGUgdHlwZSwgdm9pZCAqa2J1ZmZlciwKQEAgLTQ1NCwzMCAmIzQzOzQ2MCw4IEBAIHN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsCiAJCShhdG9taWNfaW5jX3JldHVybigmYW1wO3ZtYnVzX2Nvbm5lY3Rpb24ubmV4dF9ncGFkbF9oYW5kbGUpIC0gMSk7CiAKIAlyZXQgPSBjcmVhdGVfZ3BhZGxfaGVhZGVyKHR5cGUsIGtidWZmZXIsIHNpemUsIHNlbmRfb2Zmc2V0LCAmYW1wO21zZ2luZm8pOwotCWlmIChyZXQpIHsKLQkJZ3BhZGwtJmd0O2RlY3J5cHRlZCA9IGZhbHNlOwomIzQzOwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCX0KLQotCWdwYWRsLSZndDtkZWNyeXB0ZWQgPSAhKChjaGFubmVsLSZndDtjb19leHRlcm5hbF9tZW1vcnkgJmFtcDsmYW1wOyB0eXBlID09IEhWX0dQQURMX0JVRkZFUikgfHwKLQkJKGNoYW5uZWwtJmd0O2NvX3JpbmdfYnVmZmVyICZhbXA7JmFtcDsgdHlwZSA9PSBIVl9HUEFETF9SSU5HKSk7Ci0JaWYgKGdwYWRsLSZndDtkZWNyeXB0ZWQpIHsKLQkJLyoKLQkJICogVGhlICYjMzQ7ZGVjcnlwdGVkJiMzNDsgZmxhZyBiZWluZyB0cnVlIGFzc3VtZXMgdGhhdCBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIHN1Y2NlZWRzLgotCQkgKiBCdXQgaWYgaXQgZmFpbHMsIHRoZSBlbmNyeXB0aW9uIHN0YXRlIG9mIHRoZSBtZW1vcnkgaXMgdW5rbm93bi4gSW4gdGhhdCBjYXNlLAotCQkgKiBsZWF2ZSAmIzM0O2RlY3J5cHRlZCYjMzQ7IGFzIHRydWUgdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgbGVha2VkIGluc3RlYWQgb2YgZ29pbmcgYmFjawotCQkgKiBvbiB0aGUgZnJlZSBsaXN0LgotCQkgKi8KLQkJcmV0ID0gc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpa2J1ZmZlciwKLQkJCQkJUEZOX1VQKHNpemUpKTsKLQkJaWYgKHJldCkgewotCQkJZGV2X3dhcm4oJmFtcDtjaGFubmVsLSZndDtkZXZpY2Vfb2JqLSZndDtkZXZpY2UsCi0JCQkJJiMzNDtGYWlsZWQgdG8gc2V0IGhvc3QgdmlzaWJpbGl0eSBmb3IgbmV3IEdQQURMICVkLlxuJiMzNDssCi0JCQkJcmV0KTsKLQkJCXZtYnVzX2ZyZWVfY2hhbm5lbF9tc2dpbmZvKG1zZ2luZm8pOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KIAogCWluaXRfY29tcGxldGlvbigmYW1wO21zZ2luZm8tJmd0O3dhaXRldmVudCk7CiAJbXNnaW5mby0mZ3Q7d2FpdGluZ19jaGFubmVsID0gY2hhbm5lbDsKQEAgLTU1MywxOSAmIzQzOzUzNyw0NyBAQCBzdGF0aWMgaW50IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt2bWJ1c19jb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywgZmxhZ3MpOwogCiAJdm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8obXNnaW5mbyk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQogCi0JaWYgKHJldCkgewotCQkvKgotCQkgKiBJZiBzZXRfbWVtb3J5X2VuY3J5cHRlZCgpIGZhaWxzLCB0aGUgZGVjcnlwdGVkIGZsYWcgaXMKLQkJICogbGVmdCBhcyB0cnVlIHNvIHRoZSBtZW1vcnkgaXMgbGVha2VkIGluc3RlYWQgb2YgYmVpbmcKLQkJICogcHV0IGJhY2sgb24gdGhlIGZyZWUgbGlzdC4KLQkJICovCi0JCWlmIChncGFkbC0mZ3Q7ZGVjcnlwdGVkKSB7Ci0JCQlpZiAoIXNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSkpCi0JCQkJZ3BhZGwtJmd0O2RlY3J5cHRlZCA9IGZhbHNlOwomIzQzOy8qCiYjNDM7ICogdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0IC0gTWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZgomIzQzOyAqIEBrYnVmZmVyIGFyb3VuZCBhIF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKCkgY2FsbC4KJiM0MzsgKgomIzQzOyAqIERlY3J5cHRzIEBrYnVmZmVyIChtYWtpbmcgaXQgaG9zdC12aXNpYmxlKSB1bmxlc3MgdGhlIGNoYW5uZWwgd2FzIGNyZWF0ZWQKJiM0MzsgKiB3aXRoIGNvbmZpZGVudGlhbCBtZW1vcnkgZm9yIEB0eXBlLCB0aGVuIGVzdGFibGlzaGVzIHRoZSBHUEFETC4gIE9uCiYjNDM7ICogZXN0YWJsaXNoIGZhaWx1cmUgdGhlIGJ1ZmZlciBpcyByZS1lbmNyeXB0ZWQgc28gdGhlIGNhbGxlciBjYW4gZnJlZSBpdC4KJiM0MzsgKgomIzQzOyAqIFNldHMgZ3BhZGwtJmd0O2RlY3J5cHRlZDsgc2VlIHRoZSBjb21tZW50IG9uIHN0cnVjdCB2bWJ1c19ncGFkbDo6ZGVjcnlwdGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAomIzQzOwkJCQkJICAgICBlbnVtIGh2X2dwYWRsX3R5cGUgdHlwZSwKJiM0MzsJCQkJCSAgICAgdm9pZCAqa2J1ZmZlciwgdTMyIHNpemUsCiYjNDM7CQkJCQkgICAgIHUzMiBzZW5kX29mZnNldCwKJiM0MzsJCQkJCSAgICAgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbCkKJiM0Mzt7CiYjNDM7CWJvb2wgZGVjcnlwdCA9ICEoKGNoYW5uZWwtJmd0O2NvX2V4dGVybmFsX21lbW9yeSAmYW1wOyZhbXA7IHR5cGUgPT0gSFZfR1BBRExfQlVGRkVSKSB8fAomIzQzOwkJCSAoY2hhbm5lbC0mZ3Q7Y29fcmluZ19idWZmZXIgJmFtcDsmYW1wOyB0eXBlID09IEhWX0dQQURMX1JJTkcpKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGRlY3J5cHQpIHsKJiM0MzsJCXJldCA9IHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZGV2X3dhcm4oJmFtcDtjaGFubmVsLSZndDtkZXZpY2Vfb2JqLSZndDtkZXZpY2UsCiYjNDM7CQkJCSAmIzM0O0ZhaWxlZCB0byBzZXQgaG9zdCB2aXNpYmlsaXR5IGZvciBuZXcgR1BBREwgJWQuXG4mIzM0OywKJiM0MzsJCQkJIHJldCk7CiYjNDM7CQkJLyogRW5jcnlwdGlvbiBzdGF0ZSB1bmtub3duOyBzaWduYWwgY2FsbGVyIHRvIGxlYWsuICovCiYjNDM7CQkJZ3BhZGwtJmd0O2RlY3J5cHRlZCA9IHRydWU7CiYjNDM7CQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIAomIzQzOwlncGFkbC0mZ3Q7ZGVjcnlwdGVkID0gZGVjcnlwdDsKJiM0MzsJcmV0ID0gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoY2hhbm5lbCwgdHlwZSwga2J1ZmZlciwgc2l6ZSwgc2VuZF9vZmZzZXQsCiYjNDM7CQkJCSAgICAgIGdwYWRsKTsKJiM0MzsJaWYgKHJldCAmYW1wOyZhbXA7IGRlY3J5cHQgJmFtcDsmYW1wOwomIzQzOwkgICAgIXNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSkpCiYjNDM7CQlncGFkbC0mZ3Q7ZGVjcnlwdGVkID0gZmFsc2U7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTgwLDExICYjNDM7NTkyLDQwIEBAIHN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsCiBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLCB2b2lkICprYnVmZmVyLAogCQkJICB1MzIgc2l6ZSwgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbCkKIHsKLQlyZXR1cm4gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoY2hhbm5lbCwgSFZfR1BBRExfQlVGRkVSLCBrYnVmZmVyLCBzaXplLAotCQkJCSAgICAgICAwVSwgZ3BhZGwpOwomIzQzOwlyZXR1cm4gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KGNoYW5uZWwsIEhWX0dQQURMX0JVRkZFUiwKJiM0MzsJCQkJCQkga2J1ZmZlciwgc2l6ZSwgMFUsIGdwYWRsKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2VzdGFibGlzaF9ncGFkbCk7CiAKJiM0MzsvKgomIzQzOyAqIHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkIC0gRXN0YWJsaXNoIGEgR1BBREwgZm9yIGEgYnVmZmVyCiYjNDM7ICogd2hvc2UgZW5jcnlwdGlvbiBzdGF0ZSBpcyBtYW5hZ2VkIGJ5IHRoZSBjYWxsZXIuCiYjNDM7ICoKJiM0MzsgKiBAY2hhbm5lbDogYSBjaGFubmVsCiYjNDM7ICogQGtidWZmZXI6IGEgYnVmZmVyIHRoYXQgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSB0cmFuc2l0aW9uZWQgdG8gaG9zdC12aXNpYmxlCiYjNDM7ICogICAgICAgICAgIChkZWNyeXB0ZWQpIHZpYSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9yIGFuIGVxdWl2YWxlbnQgbWVjaGFuaXNtLgomIzQzOyAqIEBzaXplOiBwYWdlLXNpemUgbXVsdGlwbGUKJiM0MzsgKiBAZ3BhZGw6IG91dCBwYXJhbWV0ZXIgcmVjZWl2aW5nIHRoZSBlc3RhYmxpc2hlZCBHUEFETAomIzQzOyAqCiYjNDM7ICogVW5saWtlIHZtYnVzX2VzdGFibGlzaF9ncGFkbCgpLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNhbGwKJiM0MzsgKiBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9uIEBrYnVmZmVyLCBhbmQgdGhlIG1hdGNoaW5nIHZtYnVzX3RlYXJkb3duX2dwYWRsKCkKJiM0MzsgKiBjYWxsIHdpbGwgbm90IGNhbGwgc2V0X21lbW9yeV9lbmNyeXB0ZWQoKSBvbiBpdC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUKJiM0MzsgKiBmb3IgdGhlIGZ1bGwgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2YgQGtidWZmZXI7IG9uIHJldHVybiBncGFkbC0mZ3Q7ZGVjcnlwdGVkCiYjNDM7ICogaXMgc2V0IHRvIGZhbHNlIHRvIHJlY29yZCB0aGF0IHZtYnVzIGRvZXMgbm90IG93biB0aGUgZW5jcnlwdGlvbiBzdGF0ZS4KJiM0MzsgKi8KJiM0MztpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsCiYjNDM7CQkJCQkgICB2b2lkICprYnVmZmVyLCB1MzIgc2l6ZSwKJiM0MzsJCQkJCSAgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoY2hhbm5lbCwgSFZfR1BBRExfQlVGRkVSLCBrYnVmZmVyLAomIzQzOwkJCQkJICBzaXplLCAwVSwgZ3BhZGwpOwomIzQzOwomIzQzOwkvKiBDYWxsZXIgb3ducyBAa2J1ZmZlciYjMzk7cyBlbmNyeXB0aW9uOyB0ZWFyZG93biBtdXN0IG5vdCB0b3VjaCBpdC4gKi8KJiM0MzsJZ3BhZGwtJmd0O2RlY3J5cHRlZCA9IGZhbHNlOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCk7CiYjNDM7CiAvKioKICAqIHJlcXVlc3RfYXJyX2luaXQgLSBBbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGUgcmVxdWVzdG9yIGFycmF5LiBFYWNoIHNsb3QKICAqIGtlZXBzIHRyYWNrIG9mIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90IGluIHRoZSBhcnJheS4gSW5pdGlhbGx5LCBlYWNoCkBAIC02ODUsMTEgJiM0Mzs3MjYsMTEgQEAgc3RhdGljIGludCBfX3ZtYnVzX29wZW4oc3RydWN0IHZtYnVzX2NoYW5uZWwgKm5ld2NoYW5uZWwsCiAJLyogRXN0YWJsaXNoIHRoZSBncGFkbCBmb3IgdGhlIHJpbmcgYnVmZmVyICovCiAJbmV3Y2hhbm5lbC0mZ3Q7cmluZ2J1ZmZlcl9ncGFkbGhhbmRsZS5ncGFkbF9oYW5kbGUgPSAwOwogCi0JZXJyID0gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwobmV3Y2hhbm5lbCwgSFZfR1BBRExfUklORywKLQkJCQkgICAgICBwYWdlX2FkZHJlc3MobmV3Y2hhbm5lbC0mZ3Q7cmluZ2J1ZmZlcl9wYWdlKSwKLQkJCQkgICAgICAoc2VuZF9wYWdlcyAmIzQzOyByZWN2X3BhZ2VzKSAmbHQ7Jmx0OyBQQUdFX1NISUZULAotCQkJCSAgICAgIG5ld2NoYW5uZWwtJmd0O3JpbmdidWZmZXJfc2VuZF9vZmZzZXQgJmx0OyZsdDsgUEFHRV9TSElGVCwKLQkJCQkgICAgICAmYW1wO25ld2NoYW5uZWwtJmd0O3JpbmdidWZmZXJfZ3BhZGxoYW5kbGUpOwomIzQzOwllcnIgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHQobmV3Y2hhbm5lbCwgSFZfR1BBRExfUklORywKJiM0MzsJCQkJCQlwYWdlX2FkZHJlc3MobmV3Y2hhbm5lbC0mZ3Q7cmluZ2J1ZmZlcl9wYWdlKSwKJiM0MzsJCQkJCQkoc2VuZF9wYWdlcyAmIzQzOyByZWN2X3BhZ2VzKSAmbHQ7Jmx0OyBQQUdFX1NISUZULAomIzQzOwkJCQkJCW5ld2NoYW5uZWwtJmd0O3JpbmdidWZmZXJfc2VuZF9vZmZzZXQgJmx0OyZsdDsgUEFHRV9TSElGVCwKJiM0MzsJCQkJCQkmYW1wO25ld2NoYW5uZWwtJmd0O3JpbmdidWZmZXJfZ3BhZGxoYW5kbGUpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3JfY2xlYW5fcmluZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaCBiL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmgKaW5kZXggNzM5N2M2OTNmOTg0YWYuLmIwYzRjYjBmN2E0Y2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmgKQEAgLTIyMCw2ICYjNDM7MjIwLDggQEAgc3RydWN0IG5ldF9kZXZpY2VfY29udGV4dDsKIAogZXh0ZXJuIHUzMiBuZXR2c2NfcmluZ19ieXRlczsKIAomIzQzO2ludCBuZXR2c2Nfd29ya3F1ZXVlX2luaXQodm9pZCk7CiYjNDM7dm9pZCBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3kodm9pZCk7CiBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLAogCQkJCQljb25zdCBzdHJ1Y3QgbmV0dnNjX2RldmljZV9pbmZvICppbmZvKTsKIGludCBuZXR2c2NfYWxsb2NfcmVjdl9jb21wX3Jpbmcoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsIHUzMiBxX2lkeCk7CkBAIC0xMTQ3LDYgJiM0MzsxMTQ5LDE2IEBAIHN0cnVjdCBuZXR2c2NfY2hhbm5lbCB7CiAJc3RydWN0IG5ldHZzY19zdGF0c19yeCByeF9zdGF0czsKIH07CiAKJiM0MzsvKiBBIHBoeXNpY2FsbHktY29udGlndW91cyBjaHVuayBvZiBuZXR2c2MgYnVmZmVyLgomIzQzOyAqCiYjNDM7ICogVGhlIGNodW5rIGxpc3QgaXMgcHJlc2VydmVkIHNvIGVhY2ggY2h1bmsgY2FuIGJlIGluZGl2aWR1YWxseSBmcmVlZCBhdAomIzQzOyAqIHRlYXJkb3duLgomIzQzOyAqLwomIzQzO3N0cnVjdCBuZXR2c2NfYnVmX2NodW5rIHsKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CXVuc2lnbmVkIGludCBvcmRlcjsKJiM0Mzt9OwomIzQzOwogLyogUGVyIG5ldHZzYyBkZXZpY2UgKi8KIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHsKIAl1MzIgbnZzcF92ZXJzaW9uOwpAQCAtMTE1OCw2ICYjNDM7MTE3MCw4IEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHsKIAkvKiBSZWNlaXZlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdXMgYnV0IG1hbmFnZXMgYnkgTmV0VlNQICovCiAJdm9pZCAqcmVjdl9idWY7CiAJdTMyIHJlY3ZfYnVmX3NpemU7IC8qIGFsbG9jYXRlZCBieXRlcyAqLwomIzQzOwlzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqcmVjdl9idWZfY2h1bmtzOwomIzQzOwl1MzIgcmVjdl9idWZfY2h1bmtfY250OwogCXN0cnVjdCB2bWJ1c19ncGFkbCByZWN2X2J1Zl9ncGFkbF9oYW5kbGU7CiAJdTMyIHJlY3Zfc2VjdGlvbl9jbnQ7CiAJdTMyIHJlY3Zfc2VjdGlvbl9zaXplOwpAQCAtMTE2Niw2ICYjNDM7MTE4MCw4IEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHsKIAkvKiBTZW5kIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdXMgKi8KIAl2b2lkICpzZW5kX2J1ZjsKIAl1MzIgc2VuZF9idWZfc2l6ZTsKJiM0MzsJc3RydWN0IG5ldHZzY19idWZfY2h1bmsgKnNlbmRfYnVmX2NodW5rczsKJiM0MzsJdTMyIHNlbmRfYnVmX2NodW5rX2NudDsKIAlzdHJ1Y3Qgdm1idXNfZ3BhZGwgc2VuZF9idWZfZ3BhZGxfaGFuZGxlOwogCXUzMiBzZW5kX3NlY3Rpb25fY250OwogCXUzMiBzZW5kX3NlY3Rpb25fc2l6ZTsKQEAgLTExOTMsNyAmIzQzOzEyMDksNyBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSB7CiAKIAlzdHJ1Y3QgbmV0dnNjX2NoYW5uZWwgY2hhbl90YWJsZVtWUlNTX0NIQU5ORUxfTUFYXTsKIAotCXN0cnVjdCByY3VfaGVhZCByY3U7CiYjNDM7CXN0cnVjdCByY3Vfd29yayByd29yazsKIH07CiAKIC8qIE5kaXNJbml0aWFsaXplIG1lc3NhZ2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYwppbmRleCA1OWU5NTM0MWY5YjFlNS4uMjUwNWQxMGUyMjAxMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMKQEAgLTE0LDYgJiM0MzsxNCw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xvZzIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2V0X21lbW9yeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl9ldGhlci5oJmd0OwpAQCAtMjgsNiAmIzQzOzMwLDggQEAKICNpbmNsdWRlICYjMzQ7aHlwZXJ2X25ldC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bmV0dnNjX3RyYWNlLmgmIzM0OwogCiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXR2c2Nfd3E7CiYjNDM7CiAvKgogICogU3dpdGNoIHRoZSBkYXRhIHBhdGggZnJvbSB0aGUgc3ludGhldGljIGludGVyZmFjZSB0byB0aGUgVkYKICAqIGludGVyZmFjZS4KQEAgLTEyNSw0MCAmIzQzOzEyOSwxNjMgQEAgc3RhdGljIHZvaWQgbmV0dnNjX3N1YmNoYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiAJcnRubF91bmxvY2soKTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXR2c2NfZGV2aWNlICphbGxvY19uZXRfZGV2aWNlKHZvaWQpCiYjNDM7LyoKJiM0MzsgKiBuZXR2c2NfZnJlZV9idWZfcGFnZXMgLSByZWxlYXNlIGEgbmV0dnNjIHNlbmQvcmVjZWl2ZSBidWZmZXIuCiYjNDM7ICoKJiM0MzsgKiBAYWRkcjogYnVmZmVyIGFkZHJlc3MsIG9yIE5VTEwgaWYgbm9uZSB3YXMgYWxsb2NhdGVkIChlLmcuIGNsZWFudXAgZnJvbSBhCiYjNDM7ICogICAgICAgIGZhaWxlZCBhbGxvY2F0aW9uKQomIzQzOyAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIG5ldHZzY19hbGxvY19idWZfcGFnZXMoKSwgb3IgTlVMTAomIzQzOyAqIEBjaHVua19jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBjaHVua3MKJiM0MzsgKgomIzQzOyAqIFdoZW4gQGNodW5rcyBpcyBOVUxMIHRoZSBidWZmZXIgaXMgYSBwbGFpbiB2emFsbG9jKCkgYWxsb2NhdGlvbi4KJiM0MzsgKgomIzQzOyAqIE90aGVyd2lzZSB0ZWFyIGRvd24gdGhlIHZtYXAsIGFuZCBmb3IgZWFjaCBjaHVuayByZS1lbmNyeXB0IGFuZCBmcmVlCiYjNDM7ICogdGhlIHVuZGVybHlpbmcgcGFnZXMuIEFueSBjaHVuayB0aGF0IGNhbm5vdCBiZSByZS1lbmNyeXB0ZWQgaXMgbGVha2VkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIG5ldHZzY19mcmVlX2J1Zl9wYWdlcyh2b2lkICphZGRyLAomIzQzOwkJCQkgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICpjaHVua3MsCiYjNDM7CQkJCSAgdTMyIGNodW5rX2NudCkKIHsKLQlzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZTsKJiM0MzsJdTMyIGk7CiAKLQluZXRfZGV2aWNlID0ga3phbGxvY19vYmooc3RydWN0IG5ldHZzY19kZXZpY2UpOwotCWlmICghbmV0X2RldmljZSkKJiM0MzsJaWYgKCFjaHVua3MpIHsKJiM0MzsJCXZmcmVlKGFkZHIpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZ1bm1hcChhZGRyKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNodW5rX2NudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgdmFkZHIgPQomIzQzOwkJCSh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhjaHVua3NbaV0ucGFnZSk7CiYjNDM7CQl1bnNpZ25lZCBpbnQgb3JkZXIgPSBjaHVua3NbaV0ub3JkZXI7CiYjNDM7CiYjNDM7CQlpZiAoc2V0X21lbW9yeV9lbmNyeXB0ZWQodmFkZHIsIDFVICZsdDsmbHQ7IG9yZGVyKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCV9fZnJlZV9wYWdlcyhjaHVua3NbaV0ucGFnZSwgb3JkZXIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWt2ZnJlZShjaHVua3MpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIG5ldHZzY19hbGxvY19idWZfcGFnZXMgLSBhbGxvY2F0ZSBhIHZpcnR1YWxseS1jb250aWd1b3VzLCBob3N0LXZpc2libGUKJiM0MzsgKiBidWZmZXIgZm9yIHRoZSBuZXR2c2Mgc2VuZC9yZWNlaXZlIGFyZWEuCiYjNDM7ICoKJiM0MzsgKiBAbm9kZTogTlVNQSBub2RlIGhpbnQgKE5VTUFfTk9fTk9ERSBmb3IgYW55IG5vZGUpCiYjNDM7ICogQHNpemU6IHJlcXVlc3RlZCBidWZmZXIgc2l6ZSBpbiBieXRlcyAocm91bmRlZCB1cCB0byBQQUdFX1NJWkUpCiYjNDM7ICogQGNodW5rc19vdXQ6IG9uIHN1Y2Nlc3MsIHNldCB0byB0aGUgYXJyYXkgb2YgdW5kZXJseWluZyBjaHVua3MKJiM0MzsgKiBAY2h1bmtfY250X291dDogb24gc3VjY2Vzcywgc2V0IHRvIHRoZSBudW1iZXIgb2YgY2h1bmtzCiYjNDM7ICoKJiM0MzsgKiBBbGxvY2F0ZXMgdGhlIGJ1ZmZlciBhcyBhIHNlcmllcyBvZiBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgY2h1bmtzLAomIzQzOyAqIHN0YXJ0aW5nIGF0IE1BWF9QQUdFX09SREVSIGFuZCBmYWxsaW5nIGJhY2sgdG8gc21hbGxlciBvcmRlcnMgb24KJiM0MzsgKiBhbGxvY2F0aW9uIGZhaWx1cmUuIEVhY2ggY2h1bmsgaXMgdHJhbnNpdGlvbmVkIHRvIGhvc3QtdmlzaWJsZSB2aWEKJiM0MzsgKiBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIG9uIGl0cyBkaXJlY3QtbWFwIGFkZHJlc3MsIHRoZW4gYWxsIGNodW5rcyBhcmUKJiM0MzsgKiBjb21iaW5lZCBpbnRvIGEgdmlydHVhbGx5LWNvbnRpZ3VvdXMgcmFuZ2UgdmlhIHZtYXAoKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIHZtYXAoKWVkIHZpcnR1YWwgYWRkcmVzcywgb3IgTlVMTCBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkICpuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGludCBub2RlLCB1MzIgc2l6ZSwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICoqY2h1bmtzX291dCwKJiM0MzsJCQkJICAgIHUzMiAqY2h1bmtfY250X291dCkKJiM0Mzt7CiYjNDM7CXUzMiBucl9wYWdlcyA9IFBGTl9VUChzaXplKTsKJiM0MzsJc3RydWN0IG5ldHZzY19idWZfY2h1bmsgKmNodW5rcyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JkZXI7CiYjNDM7CXUzMiBjaHVua19jbnQgPSAwOwomIzQzOwl1MzIgcGFnZV9pZHggPSAwOwomIzQzOwl1MzIgcmVtYWluaW5nID0gbnJfcGFnZXM7CiYjNDM7CXZvaWQgKmFkZHI7CiYjNDM7CXUzMiBpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkqY2h1bmtzX291dCA9IE5VTEw7CiYjNDM7CSpjaHVua19jbnRfb3V0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFucl9wYWdlcykKIAkJcmV0dXJuIE5VTEw7CiAKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7bmV0X2RldmljZS0mZ3Q7d2FpdF9kcmFpbik7Ci0JbmV0X2RldmljZS0mZ3Q7ZGVzdHJveSA9IGZhbHNlOwotCW5ldF9kZXZpY2UtJmd0O3R4X2Rpc2FibGUgPSB0cnVlOwomIzQzOwkvKiBXb3JzdCBjYXNlOiBldmVyeSBjaHVuayBpcyBhIHNpbmdsZSBwYWdlLiAqLwomIzQzOwljaHVua3MgPSBrdm1hbGxvY19hcnJheShucl9wYWdlcywgc2l6ZW9mKCpjaHVua3MpLAomIzQzOwkJCQlHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiYjNDM7CWlmICghY2h1bmtzKQomIzQzOwkJZ290byBlcnI7CiAKLQluZXRfZGV2aWNlLSZndDttYXhfcGt0ID0gUk5ESVNfTUFYX1BLVF9ERUZBVUxUOwotCW5ldF9kZXZpY2UtJmd0O3BrdF9hbGlnbiA9IFJORElTX1BLVF9BTElHTl9ERUZBVUxUOwomIzQzOwlwYWdlcyA9IGt2bWFsbG9jX2FycmF5KG5yX3BhZ2VzLCBzaXplb2YoKnBhZ2VzKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGFnZXMpCiYjNDM7CQlnb3RvIGVycjsKIAotCWluaXRfY29tcGxldGlvbigmYW1wO25ldF9kZXZpY2UtJmd0O2NoYW5uZWxfaW5pdF93YWl0KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7bmV0X2RldmljZS0mZ3Q7c3ViY2hhbl9vcGVuKTsKLQlJTklUX1dPUksoJmFtcDtuZXRfZGV2aWNlLSZndDtzdWJjaGFuX3dvcmssIG5ldHZzY19zdWJjaGFuX3dvcmspOwomIzQzOwkvKgomIzQzOwkgKiBAb3JkZXIgbW9ub3RvbmljYWxseSBkZWNyZWFzZXMgYWNyb3NzIGl0ZXJhdGlvbnMKJiM0MzsJICoKJiM0MzsJICogVXNlIF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk4gdG8gYXZvaWQgT09NLWtpbGxpbmcsIGJ1dCB0cnkKJiM0MzsJICogaGFyZGVyIGF0IG9yZGVyIDAgc2luY2UgdGhhdCBpcyB0aGUgZmluYWwgZmFsbGJhY2suCiYjNDM7CSAqLwomIzQzOwlvcmRlciA9IG1pbl90KHVuc2lnbmVkIGludCwgTUFYX1BBR0VfT1JERVIsIGlsb2cyKG5yX3BhZ2VzKSk7CiYjNDM7CXdoaWxlIChyZW1haW5pbmcpIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwkJZ2ZwX3QgZ2ZwOwomIzQzOwomIzQzOwkJb3JkZXIgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG9yZGVyLCBpbG9nMihyZW1haW5pbmcpKTsKJiM0MzsKJiM0MzsJCWZvciAoOzspIHsKJiM0MzsJCQlnZnAgPSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTzsKJiM0MzsJCQlpZiAob3JkZXIpCiYjNDM7CQkJCWdmcCB8PSBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOOwomIzQzOwkJCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgb3JkZXIpOwomIzQzOwkJCWlmIChwYWdlKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCQlpZiAoIW9yZGVyKQomIzQzOwkJCQlnb3RvIGVycjsKJiM0MzsJCQlvcmRlci0tOwomIzQzOwkJfQogCi0JcmV0dXJuIG5ldF9kZXZpY2U7CiYjNDM7CQlyZXQgPSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSksCiYjNDM7CQkJCQkgICAxVSAmbHQ7Jmx0OyBvcmRlcik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBzZXRfbWVtb3J5X2RlY3J5cHRlZCgpIGZhaWxlZDsgdGhlIHBhZ2Ugc3RhdGUgaXMKJiM0MzsJCQkgKiB1bmtub3duIHNvIGl0IG11c3QgYmUgbGVha2VkIHJhdGhlciB0aGFuIGZyZWVkLgomIzQzOwkJCSAqLwomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJY2h1bmtzW2NodW5rX2NudF0ucGFnZSA9IHBhZ2U7CiYjNDM7CQljaHVua3NbY2h1bmtfY250XS5vcmRlciA9IG9yZGVyOwomIzQzOwkJY2h1bmtfY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyAoMVUgJmx0OyZsdDsgb3JkZXIpOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlwYWdlc1twYWdlX2lkeCYjNDM7JiM0MztdID0gcGFnZSAmIzQzOyBpOwomIzQzOwomIzQzOwkJcmVtYWluaW5nIC09IDFVICZsdDsmbHQ7IG9yZGVyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFkZHIgPSB2bWFwKHBhZ2VzLCBucl9wYWdlcywgVk1fTUFQLCBwZ3Byb3RfZGVjcnlwdGVkKFBBR0VfS0VSTkVMKSk7CiYjNDM7CWlmICghYWRkcikKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlrdmZyZWUocGFnZXMpOwomIzQzOwkqY2h1bmtzX291dCA9IGNodW5rczsKJiM0MzsJKmNodW5rX2NudF9vdXQgPSBjaHVua19jbnQ7CiYjNDM7CXJldHVybiBhZGRyOwomIzQzOwomIzQzO2VycjoKJiM0MzsJa3ZmcmVlKHBhZ2VzKTsKJiM0MzsJbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKE5VTEwsIGNodW5rcywgY2h1bmtfY250KTsKJiM0MzsJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfbmV0dnNjX2RldmljZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiYjNDM7c3RhdGljIHZvaWQgX19mcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IG5ldHZzY19kZXZpY2UgKm52ZGV2KQogewotCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpudmRldgotCQk9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgbmV0dnNjX2RldmljZSwgcmN1KTsKIAlpbnQgaTsKIAogCWtmcmVlKG52ZGV2LSZndDtleHRlbnNpb24pOwogCi0JaWYgKCFudmRldi0mZ3Q7cmVjdl9idWZfZ3BhZGxfaGFuZGxlLmRlY3J5cHRlZCkKLQkJdmZyZWUobnZkZXYtJmd0O3JlY3ZfYnVmKTsKLQlpZiAoIW52ZGV2LSZndDtzZW5kX2J1Zl9ncGFkbF9oYW5kbGUuZGVjcnlwdGVkKQotCQl2ZnJlZShudmRldi0mZ3Q7c2VuZF9idWYpOwomIzQzOwluZXR2c2NfZnJlZV9idWZfcGFnZXMobnZkZXYtJmd0O3JlY3ZfYnVmLCBudmRldi0mZ3Q7cmVjdl9idWZfY2h1bmtzLAomIzQzOwkJCSAgICAgIG52ZGV2LSZndDtyZWN2X2J1Zl9jaHVua19jbnQpOwomIzQzOwluZXR2c2NfZnJlZV9idWZfcGFnZXMobnZkZXYtJmd0O3NlbmRfYnVmLCBudmRldi0mZ3Q7c2VuZF9idWZfY2h1bmtzLAomIzQzOwkJCSAgICAgIG52ZGV2LSZndDtzZW5kX2J1Zl9jaHVua19jbnQpOwogCWJpdG1hcF9mcmVlKG52ZGV2LSZndDtzZW5kX3NlY3Rpb25fbWFwKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBWUlNTX0NIQU5ORUxfTUFYOyBpJiM0MzsmIzQzOykgewpAQCAtMTcwLDkgJiM0MzsyOTcsNTYgQEAgc3RhdGljIHZvaWQgZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIAlrZnJlZShudmRldik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3KQomIzQzO3sKJiM0MzsJc3RydWN0IHJjdV93b3JrICpyd29yayA9IHRvX3JjdV93b3JrKHcpOwomIzQzOwomIzQzOwlfX2ZyZWVfbmV0dnNjX2RldmljZShjb250YWluZXJfb2YocndvcmssIHN0cnVjdCBuZXR2c2NfZGV2aWNlLCByd29yaykpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbmV0dnNjX3dvcmtxdWV1ZV9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwluZXR2c2Nfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDtodl9uZXR2c2MmIzM0OywgV1FfVU5CT1VORCwgMCk7CiYjNDM7CiYjNDM7CXJldHVybiBuZXR2c2Nfd3EgPyAwIDogLUVOT01FTTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3kodm9pZCkKJiM0Mzt7CiYjNDM7CXJjdV9iYXJyaWVyKCk7CiYjNDM7CWRlc3Ryb3lfd29ya3F1ZXVlKG5ldHZzY193cSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqYWxsb2NfbmV0X2RldmljZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2U7CiYjNDM7CiYjNDM7CW5ldF9kZXZpY2UgPSBremFsbG9jX29iaihzdHJ1Y3QgbmV0dnNjX2RldmljZSk7CiYjNDM7CWlmICghbmV0X2RldmljZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7bmV0X2RldmljZS0mZ3Q7d2FpdF9kcmFpbik7CiYjNDM7CW5ldF9kZXZpY2UtJmd0O2Rlc3Ryb3kgPSBmYWxzZTsKJiM0MzsJbmV0X2RldmljZS0mZ3Q7dHhfZGlzYWJsZSA9IHRydWU7CiYjNDM7CiYjNDM7CW5ldF9kZXZpY2UtJmd0O21heF9wa3QgPSBSTkRJU19NQVhfUEtUX0RFRkFVTFQ7CiYjNDM7CW5ldF9kZXZpY2UtJmd0O3BrdF9hbGlnbiA9IFJORElTX1BLVF9BTElHTl9ERUZBVUxUOwomIzQzOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDtuZXRfZGV2aWNlLSZndDtjaGFubmVsX2luaXRfd2FpdCk7CiYjNDM7CWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDtuZXRfZGV2aWNlLSZndDtzdWJjaGFuX29wZW4pOwomIzQzOwlJTklUX1dPUksoJmFtcDtuZXRfZGV2aWNlLSZndDtzdWJjaGFuX3dvcmssIG5ldHZzY19zdWJjaGFuX3dvcmspOwomIzQzOwlJTklUX1JDVV9XT1JLKCZhbXA7bmV0X2RldmljZS0mZ3Q7cndvcmssIGZyZWVfbmV0dnNjX2RldmljZSk7CiYjNDM7CiYjNDM7CXJldHVybiBuZXRfZGV2aWNlOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGZyZWVfbmV0dnNjX2RldmljZV9yY3Uoc3RydWN0IG5ldHZzY19kZXZpY2UgKm52ZGV2KQogewotCWNhbGxfcmN1KCZhbXA7bnZkZXYtJmd0O3JjdSwgZnJlZV9uZXR2c2NfZGV2aWNlKTsKJiM0MzsJLyoKJiM0MzsJICogRGVmZXIgdGhlIGFjdHVhbCBmcmVlIHRvIHByb2Nlc3MgY29udGV4dDogdnVubWFwKCkgYW5kCiYjNDM7CSAqIHNldF9tZW1vcnlfZW5jcnlwdGVkKCkgY2Fubm90IHJ1biBmcm9tIFJDVSBzb2Z0aXJxIGNvbnRleHQuCiYjNDM7CSAqLwomIzQzOwlxdWV1ZV9yY3Vfd29yayhuZXR2c2Nfd3EsICZhbXA7bnZkZXYtJmd0O3J3b3JrKTsKIH0KIAogc3RhdGljIHZvaWQgbmV0dnNjX3Jldm9rZV9yZWN2X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCkBAIC0zNTEsNyAmIzQzOzUyNSwyMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCiAJCWJ1Zl9zaXplID0gbWluX3QodW5zaWduZWQgaW50LCBidWZfc2l6ZSwKIAkJCQkgTkVUVlNDX1JFQ0VJVkVfQlVGRkVSX1NJWkVfTEVHQUNZKTsKIAotCW5ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmID0gdnphbGxvYyhidWZfc2l6ZSk7CiYjNDM7CWlmIChkZXZpY2UtJmd0O2NoYW5uZWwtJmd0O2NvX2V4dGVybmFsX21lbW9yeSkgewomIzQzOwkJLyogQ29uZmlkZW50aWFsIFZNIEJ1cyBsZWF2ZXMgYnVmZmVyIGVuY3J5cHRlZCAqLwomIzQzOwkJbmV0X2RldmljZS0mZ3Q7cmVjdl9idWZfY2h1bmtzID0gTlVMTDsKJiM0MzsJCW5ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmX2NodW5rX2NudCA9IDA7CiYjNDM7CQluZXRfZGV2aWNlLSZndDtyZWN2X2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogT3RoZXJ3aXNlLCBhbGxvY2F0ZSBkZWNyeXB0ZWQgYnVmZmVyICovCiYjNDM7CQluZXRfZGV2aWNlLSZndDtyZWN2X2J1ZiA9CiYjNDM7CQkJbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhjcHVfdG9fbm9kZShkZXZpY2UtJmd0O2NoYW5uZWwtJmd0O3RhcmdldF9jcHUpLAomIzQzOwkJCQkJICAgICAgIGJ1Zl9zaXplLAomIzQzOwkJCQkJICAgICAgICZhbXA7bmV0X2RldmljZS0mZ3Q7cmVjdl9idWZfY2h1bmtzLAomIzQzOwkJCQkJICAgICAgICZhbXA7bmV0X2RldmljZS0mZ3Q7cmVjdl9idWZfY2h1bmtfY250KTsKJiM0MzsJfQomIzQzOwogCWlmICghbmV0X2RldmljZS0mZ3Q7cmVjdl9idWYpIHsKIAkJbmV0ZGV2X2VycihuZGV2LAogCQkJICAgJiMzNDt1bmFibGUgdG8gYWxsb2NhdGUgcmVjZWl2ZSBidWZmZXIgb2Ygc2l6ZSAldVxuJiMzNDssCkBAIC0zNjcsOSAmIzQzOzU1NCwxMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCiAJICogY2hhbm5lbC4gIE5vdGU6IFRoaXMgY2FsbCB1c2VzIHRoZSB2bWJ1cyBjb25uZWN0aW9uIHJhdGhlcgogCSAqIHRoYW4gdGhlIGNoYW5uZWwgdG8gZXN0YWJsaXNoIHRoZSBncGFkbCBoYW5kbGUuCiAJICovCi0JcmV0ID0gdm1idXNfZXN0YWJsaXNoX2dwYWRsKGRldmljZS0mZ3Q7Y2hhbm5lbCwgbmV0X2RldmljZS0mZ3Q7cmVjdl9idWYsCi0JCQkJICAgIGJ1Zl9zaXplLAotCQkJCSAgICAmYW1wO25ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmX2dwYWRsX2hhbmRsZSk7CiYjNDM7CXJldCA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkKGRldmljZS0mZ3Q7Y2hhbm5lbCwKJiM0MzsJCQkJCQkgICAgIG5ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmLAomIzQzOwkJCQkJCSAgICAgYnVmX3NpemUsCiYjNDM7CQkJCQkJICAgICAmYW1wO25ldF9kZXZpY2UtJmd0O3JlY3ZfYnVmX2dwYWRsX2hhbmRsZSk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCW5ldGRldl9lcnIobmRldiwKIAkJCSYjMzQ7dW5hYmxlIHRvIGVzdGFibGlzaCByZWNlaXZlIGJ1ZmZlciYjMzk7cyBncGFkbFxuJiMzNDspOwpAQCAtNDU3LDcgJiM0Mzs2NDUsMTkgQEAgc3RhdGljIGludCBuZXR2c2NfaW5pdF9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLAogCWJ1Zl9zaXplID0gZGV2aWNlX2luZm8tJmd0O3NlbmRfc2VjdGlvbnMgKiBkZXZpY2VfaW5mby0mZ3Q7c2VuZF9zZWN0aW9uX3NpemU7CiAJYnVmX3NpemUgPSByb3VuZF91cChidWZfc2l6ZSwgUEFHRV9TSVpFKTsKIAotCW5ldF9kZXZpY2UtJmd0O3NlbmRfYnVmID0gdnphbGxvYyhidWZfc2l6ZSk7CiYjNDM7CWlmIChkZXZpY2UtJmd0O2NoYW5uZWwtJmd0O2NvX2V4dGVybmFsX21lbW9yeSkgewomIzQzOwkJLyogQ29uZmlkZW50aWFsIFZNIEJ1cyBsZWF2ZXMgYnVmZmVyIGVuY3J5cHRlZCAqLwomIzQzOwkJbmV0X2RldmljZS0mZ3Q7c2VuZF9idWZfY2h1bmtzID0gTlVMTDsKJiM0MzsJCW5ldF9kZXZpY2UtJmd0O3NlbmRfYnVmX2NodW5rX2NudCA9IDA7CiYjNDM7CQluZXRfZGV2aWNlLSZndDtzZW5kX2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogT3RoZXJ3aXNlLCBhbGxvY2F0ZSBkZWNyeXB0ZWQgYnVmZmVyICovCiYjNDM7CQluZXRfZGV2aWNlLSZndDtzZW5kX2J1ZiA9CiYjNDM7CQkJbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhjcHVfdG9fbm9kZShkZXZpY2UtJmd0O2NoYW5uZWwtJmd0O3RhcmdldF9jcHUpLAomIzQzOwkJCQkJICAgICAgIGJ1Zl9zaXplLAomIzQzOwkJCQkJICAgICAgICZhbXA7bmV0X2RldmljZS0mZ3Q7c2VuZF9idWZfY2h1bmtzLAomIzQzOwkJCQkJICAgICAgICZhbXA7bmV0X2RldmljZS0mZ3Q7c2VuZF9idWZfY2h1bmtfY250KTsKJiM0MzsJfQogCWlmICghbmV0X2RldmljZS0mZ3Q7c2VuZF9idWYpIHsKIAkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O3VuYWJsZSB0byBhbGxvY2F0ZSBzZW5kIGJ1ZmZlciBvZiBzaXplICV1XG4mIzM0OywKIAkJCSAgIGJ1Zl9zaXplKTsKQEAgLTQ3MCw5ICYjNDM7NjcwLDEwIEBAIHN0YXRpYyBpbnQgbmV0dnNjX2luaXRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKIAkgKiBjaGFubmVsLiAgTm90ZTogVGhpcyBjYWxsIHVzZXMgdGhlIHZtYnVzIGNvbm5lY3Rpb24gcmF0aGVyCiAJICogdGhhbiB0aGUgY2hhbm5lbCB0byBlc3RhYmxpc2ggdGhlIGdwYWRsIGhhbmRsZS4KIAkgKi8KLQlyZXQgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoZGV2aWNlLSZndDtjaGFubmVsLCBuZXRfZGV2aWNlLSZndDtzZW5kX2J1ZiwKLQkJCQkgICAgYnVmX3NpemUsCi0JCQkJICAgICZhbXA7bmV0X2RldmljZS0mZ3Q7c2VuZF9idWZfZ3BhZGxfaGFuZGxlKTsKJiM0MzsJcmV0ID0gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoZGV2aWNlLSZndDtjaGFubmVsLAomIzQzOwkJCQkJCSAgICAgbmV0X2RldmljZS0mZ3Q7c2VuZF9idWYsCiYjNDM7CQkJCQkJICAgICBidWZfc2l6ZSwKJiM0MzsJCQkJCQkgICAgICZhbXA7bmV0X2RldmljZS0mZ3Q7c2VuZF9idWZfZ3BhZGxfaGFuZGxlKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJbmV0ZGV2X2VycihuZGV2LAogCQkJICAgJiMzNDt1bmFibGUgdG8gZXN0YWJsaXNoIHNlbmQgYnVmZmVyJiMzOTtzIGdwYWRsXG4mIzM0Oyk7CkBAIC0xODYzLDcgJiM0MzsyMDY0LDExIEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXR2c2NfZGV2aWNlX2FkZChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsCiAJbmV0aWZfbmFwaV9kZWwoJmFtcDtuZXRfZGV2aWNlLSZndDtjaGFuX3RhYmxlWzBdLm5hcGkpOwogCiBjbGVhbnVwMjoKLQlmcmVlX25ldHZzY19kZXZpY2UoJmFtcDtuZXRfZGV2aWNlLSZndDtyY3UpOwomIzQzOwkvKgomIzQzOwkgKiBuZXRfZGV2aWNlIHdhcyBuZXZlciBwdWJsaXNoZWQsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIHdhaXQgZm9yIGFuCiYjNDM7CSAqIFJDVSBncmFjZSBwZXJpb2QgLS0gY2FsbCB0aGUgZnJlZSByb3V0aW5lIHN5bmNocm9ub3VzbHkuCiYjNDM7CSAqLwomIzQzOwlfX2ZyZWVfbmV0dnNjX2RldmljZShuZXRfZGV2aWNlKTsKIAogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jIGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYwppbmRleCBlZTVhYjVjZWIyYmUyZC4uMWQ0M2M3M2ZkNzNmMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYwpAQCAtMjg2NywxMiAmIzQzOzI4NjcsMTcgQEAgc3RhdGljIHZvaWQgX19leGl0IG5ldHZzY19kcnZfZXhpdCh2b2lkKQogewogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZhbXA7bmV0dnNjX25ldGRldl9ub3RpZmllcik7CiAJdm1idXNfZHJpdmVyX3VucmVnaXN0ZXIoJmFtcDtuZXR2c2NfZHJ2KTsKJiM0MzsJbmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG5ldHZzY19kcnZfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKJiM0MzsJcmV0ID0gbmV0dnNjX3dvcmtxdWV1ZV9pbml0KCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwogCWlmIChyaW5nX3NpemUgJmx0OyBSSU5HX1NJWkVfTUlOKSB7CiAJCXJpbmdfc2l6ZSA9IFJJTkdfU0laRV9NSU47CiAJCXByX2luZm8oJiMzNDtJbmNyZWFzZWQgcmluZ19zaXplIHRvICV1IChtaW4gYWxsb3dlZClcbiYjMzQ7LApAQCAtMjg5MCw2ICYjNDM7Mjg5NSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldHZzY19kcnZfaW5pdCh2b2lkKQogCiBlcnJfdm1idXNfcmVnOgogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZhbXA7bmV0dnNjX25ldGRldl9ub3RpZmllcik7CiYjNDM7CW5ldHZzY193b3JrcXVldWVfZGVzdHJveSgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHlwZXJ2LmggYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oCmluZGV4IDk2NGYxYmU4MTUwYzU5Li45YzZiMWI3Nzk0YjQ4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oeXBlcnYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oCkBAIC03ODEsNiAmIzQzOzc4MSwxMiBAQCBzdHJ1Y3Qgdm1idXNfZ3BhZGwgewogCXUzMiBncGFkbF9oYW5kbGU7CiAJdTMyIHNpemU7CiAJdm9pZCAqYnVmZmVyOwomIzQzOwkvKgomIzQzOwkgKiBPbmx5IHVzZWQgaWYgdGhlIHZtYnVzIGxheWVyIG93bnMgdGhlIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mCiYjNDM7CSAqIEBidWZmZXIuCiYjNDM7CSAqIEluZGljYXRlcyBAYnVmZmVyIG11c3QgYmUgcmUtZW5jcnlwdGVkIGF0IHRlYXJkb3duIG9yIHRoYXQgaXQKJiM0MzsJICogbXVzdCBiZSBsZWFrZWQgYmVjYXVzZSByZS1lbmNyeXB0aW9uIGZhaWxlZC4KJiM0MzsJICovCiAJYm9vbCBkZWNyeXB0ZWQ7CiB9OwogCkBAIC0xMjA1LDYgJiM0MzsxMjExLDExIEBAIGV4dGVybiBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLAogCQkJCSAgICAgIHUzMiBzaXplLAogCQkJCSAgICAgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpOwogCiYjNDM7ZXh0ZXJuIGludCB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKJiM0MzsJCQkJCQkgIHZvaWQgKmtidWZmZXIsCiYjNDM7CQkJCQkJICB1MzIgc2l6ZSwKJiM0MzsJCQkJCQkgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpOwomIzQzOwogZXh0ZXJuIGludCB2bWJ1c190ZWFyZG93bl9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCQkgICAgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEZ1enppbmcgdGhpcyBIeXBlci1WIE5ldHdvcmsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQmIzM5O3MgdHdlYWtpbmcgdGhlIEh5cGVyLVYgbmV0d29yayBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYG5ldHZzY2AgYW5kIFZNQnVzIGNoYW5uZWwgY29kZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIG5ldyBmdW5jdGlvbiwgYHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkYCwgYW5kIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IGBuZXR2c2NgIGhhbmRsZXMgaXRzIHNlbmQvcmVjZWl2ZSBidWZmZXJzLiBUaGUga2V5IGhlcmUgaXMgdGhlIHVzZSBvZiBgc2V0X21lbW9yeV9kZWNyeXB0ZWRgIGFuZCBgc2V0X21lbW9yeV9lbmNyeXB0ZWRgIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIGJpZyBmbGFncyBmb3IgQ29uZmlkZW50aWFsIFZNcywgbGlrZSBBTUQgU0VWLVNOUCBvciBJbnRlbCBURFgsIHdoaWNoIGlzIGltcG9ydGFudCB0byBjb25zaWRlci4KClRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYG5ldHZzY19hbGxvY19idWZfcGFnZXNgIGFuZCBgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzYC4gVGhpcyBzZWVtcyB0byBiZSBhYm91dCBhbGxvY2F0aW5nIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgY2h1bmtzIGFuZCB2bWFwLWluZyB0aGVtLCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYHZ6YWxsb2NgLiBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIGEgbmV3IHdvcmtxdWV1ZSwgYG5ldHZzY193cWAsIGFkZGVkIGZvciBkZWZlcnJpbmcgdGhlIGRldmljZSBmcmVlaW5nLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaXM6IGNhbiB0aGlzIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIFFFTVUgYW5kIEdDRSBhcyBwb3RlbnRpYWwgYmFycmllcnMsIGJ1dCBJIGtub3cgdGhlIEh5cGVyLVYgZHJpdmVycyAoYGh2X25ldHZzY2AsIGBodl92bWJ1c2ApIGFyZSBhY3RpdmVseSB1c2VkIHdoZW4gTGludXggcnVucyBhcyBhIGd1ZXN0IG9uIEh5cGVyLVYuIFRoZSBwcm9tcHQgYWxzbyBub3RlcyB0aGF0IGl0JiMzOTtzICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBTeXprYWxsZXIgKnNob3VsZCogYmUgYWJsZSB0byBmdXp6IEh5cGVyLVYgZHJpdmVycyBpZiBpdCYjMzk7cyBydW5uaW5nIG9uIEh5cGVyLVYgb3IgaWYgdGhlcmUmIzM5O3Mgc29tZSBzb3J0IG9mIGVtdWxhdGlvbi4KCldhaXQgYSBzZWNvbmQsIHdhc24mIzM5O3QgdGhlcmUgc29tZSBIeXBlci1WIGZ1enppbmcgc3VwcG9ydCBpbiBzeXprYWxsZXI/IExldCYjMzk7cyBzZWUuLi5JIHJlbWVtYmVyIHNlZWluZyB0aGluZ3MgbGlrZSBgc3l6X3ZtYnVzX2VzdGFibGlzaF9ncGFkbGAgaW4gdGhlIHN5emxhbmcsIHNvIHRoZXJlIG1pZ2h0IGJlIGEgVk1CdXMgZnV6emVyIHRoYXQgcnVucyBpbiBRRU1VIHdpdGggYSBtb2NrIFZNQnVzIGltcGxlbWVudGF0aW9uLCBvciBwb3RlbnRpYWxseSBldmVuIHJ1bm5pbmcgb24gSHlwZXItVi4gVGhpcyB3YXJyYW50cyBhIGRlZXBlciBsb29rOyBJIG5lZWQgdG8gdmVyaWZ5IGlmIGBodl9uZXR2c2NgIGl0c2VsZiBpcyB0YXJnZXRlZCBieSBmdXp6aW5nLgoKT2theSwgbGV0JiMzOTtzIHN0YXJ0IHNlYXJjaGluZy4gSSYjMzk7bGwgc2VhcmNoIHRoZSBrZXJuZWwgYW5kIHN5emthbGxlciBjb2RlYmFzZXMgZm9yICYjMzQ7bmV0dnNjJiMzNDsuIFdhaXQsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRoYXQgaWYgdGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIEkgbmVlZCB0byB1c2UgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IGlmIHRoZSBjb2RlICpjYW4qIGJlIGV4ZWN1dGVkLiBPa2F5LCB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7bGwgZG8uCgpBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIGlmIGBDT05GSUdfSFlQRVJWX05FVGAgYW5kIGBDT05GSUdfSFlQRVJWYCBhcmUgZW5hYmxlZCwgYW5kIHRoZXJlZm9yZSB3aGV0aGVyIHdlIGNhbiBmdXp6IGl0IGF0IGFsbC4gVGhlbiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzYCBhbmQgYG5ldHZzY19kZXZpY2VfYWRkYCB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiBUaGUgd2hvbGUgcG9pbnQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBpcyBhY3R1YWxseSAqZXhlY3V0YWJsZSogYW5kIHRoZXJlZm9yZSBXb3J0aEZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0dnNjX2RldmljZV9hZGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaD0yMjQ9dm9pZCBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3kodm9pZCk7XG5kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oOjIyNTpzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaC0yMjYtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXR2c2NfZGV2aWNlX2luZm8gKmluZm8pO1xuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz0xOTQxPXZvaWQgbmV0dnNjX2NoYW5uZWxfY2Iodm9pZCAqY29udGV4dClcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTk1OC0vKlxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjE5NTk6ICogbmV0dnNjX2RldmljZV9hZGQgLSBDYWxsYmFjayB3aGVuIHRoZSBkZXZpY2UgYmVsb25naW5nIHRvIHRoaXNcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xOTYwLSAqIGRyaXZlciBpcyBhZGRlZFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE5NjEtICovXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MTk2MjpzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE5NjMtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmV0dnNjX2RldmljZV9pbmZvICpkZXZpY2VfaW5mbylcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvcm5kaXNfZmlsdGVyLmM9MTQ3MD1zdHJ1Y3QgbmV0dnNjX2RldmljZSAqcm5kaXNfZmlsdGVyX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9ybmRpc19maWx0ZXIuYy0xNDkwLVx0ICovXG5kcml2ZXJzL25ldC9oeXBlcnYvcm5kaXNfZmlsdGVyLmM6MTQ5MTpcdG5ldF9kZXZpY2UgPSBuZXR2c2NfZGV2aWNlX2FkZChkZXYsIGRldmljZV9pbmZvKTtcbmRyaXZlcnMvbmV0L2h5cGVydi9ybmRpc19maWx0ZXIuYy0xNDkyLVx0aWYgKElTX0VSUihuZXRfZGV2aWNlKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTAzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzYCoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYG5ldHZzY19hbGxvY19idWZfcGFnZXNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgaXRzIGludm9jYXRpb24gcG9pbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBzdGFjayBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcmVsYXRlZCB0byBidWZmZXIgYWxsb2NhdGlvbiB3aXRoaW4gdGhlIG5ldHdvcmsgdmlydHVhbCBzZXJ2aWNlIGNvbnRleHQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGFuZCBnZXQgYSBmZWVsIGZvciB0aGUgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyB0aGF0IHRyaWdnZXIgaXQuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggdG8gaWRlbnRpZnkgYWxsIGNhbGwgc2l0ZXMuIEZyb20gdGhlcmUsIEkmIzM5O2xsIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUsIGlkZWFsbHkgdW5kZXJzdGFuZGluZyB0aGUgbG9naWNhbCBmbG93IHRoYXQgbGVhZHMgdG8gYG5ldHZzY19hbGxvY19idWZfcGFnZXNgIGJlaW5nIGNhbGxlZC4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGludGVycHJldCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoZSBjYWxscy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZyBhcm91bmQgdGhlIGNhbGxzIGFzIHdlbGwuIE15IG1haW4gZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBhbGxvY2F0aW9uIHBhdHRlcm5zIGFuZCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MTAxPXN0YXRpYyB2b2lkIG5ldHZzY19zdWJjaGFuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xMzYtICogICAgICAgIGZhaWxlZCBhbGxvY2F0aW9uKVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjEzNzogKiBAY2h1bmtzOiBjaHVua3MgYXJyYXkgZnJvbSBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKCksIG9yIE5VTExcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xMzgtICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz0xNDU9c3RhdGljIHZvaWQgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKHZvaWQgKmFkZHIsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE3MS0vKlxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjE3MjogKiBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzIC0gYWxsb2NhdGUgYSB2aXJ0dWFsbHktY29udGlndW91cywgaG9zdC12aXNpYmxlXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTczLSAqIGJ1ZmZlciBmb3IgdGhlIG5ldHZzYyBzZW5kL3JlY2VpdmUgYXJlYS5cbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTg3LSAqL1xuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjE4ODpzdGF0aWMgdm9pZCAqbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhpbnQgbm9kZSwgdTMyIHNpemUsXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTg5LVx0XHRcdFx0ICAgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICoqY2h1bmtzX291dCxcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9NTA5PXN0YXRpYyBpbnQgbmV0dnNjX2luaXRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNTM1LVx0XHRuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmID1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo1MzY6XHRcdFx0bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhjcHVfdG9fbm9kZShkZXZpY2UtXHUwMDNlY2hhbm5lbC1cdTAwM2V0YXJnZXRfY3B1KSxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy01MzctXHRcdFx0XHRcdCAgICAgICBidWZfc2l6ZSxcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNjU1LVx0XHRuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmID1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo2NTY6XHRcdFx0bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhjcHVfdG9fbm9kZShkZXZpY2UtXHUwMDNlY2hhbm5lbC1cdTAwM2V0YXJnZXRfY3B1KSxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy02NTctXHRcdFx0XHRcdCAgICAgICBidWZfc2l6ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM0NwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTmV0VlNDIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUmIzM5O3MgdGhlIGJlZWY/JiMzNDsgSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG5ldHZzY19pbml0X2J1ZmAgYW5kIGBuZXR2c2NfZGV2aWNlX2FkZGAsIGJvdGggaW4gYGRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY2AuIFRoYXQgcmluZ3Mgc29tZSBiZWxscyAtIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGluaXRpYWwgYnVmZmVyIHNldHVwIGFuZCBkZXZpY2UgYWRkaXRpb24gd2l0aGluIHRoZSBuZXR3b3JrIHZpcnR1YWwgc2VydmljZSBjbGllbnQuIEFuZCB0aGVuIGl0IGFsc28gc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbGAgaW4gYGRyaXZlcnMvaHYvY2hhbm5lbC5jYC4gVGhhdCYjMzk7cyBhIGxvdy1sZXZlbCBjaGFubmVsIGZ1bmN0aW9uLCByZWxhdGVkIHRvIHNldHRpbmcgdXAgdGhlIEd1ZXN0IFBoeXNpY2FsIEFkZHJlc3MgTGlzdC4gRGVmaW5pdGVseSBpbnRlcmVzdGluZy4KCkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSBjaGFuZ2VzIHRoZW1zZWx2ZXMsIEkgbmVlZCB0byBtYWtlIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgcGF0Y2ggaXMgY29ycmVjdGx5IGd1YXJkZWQgYnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0hZUEVSVmAgYW5kIGBDT05GSUdfSFlQRVJWX05FVGAgYXJlIHRoZSBjb3JyZWN0IHByZS1yZXF1aXNpdGVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIHNlZSBpZiB0aG9zZSBhcmUgc3VmZmljaWVudC4gSWYgbm90LCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIWVBFUlYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz03ODQ9Y29uZmlnIFNDSEVEX09NSVRfRlJBTUVfUE9JTlRFUlxuLS1cbmFyY2gveDg2L0tjb25maWctNzk1LVxuYXJjaC94ODYvS2NvbmZpZzo3OTY6bWVudWNvbmZpZyBIWVBFUlZJU09SX0dVRVNUXG5hcmNoL3g4Ni9LY29uZmlnLTc5Ny1cdGJvb2wgXCYjMzQ7TGludXggZ3Vlc3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZz0zPW1lbnUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgZ3Vlc3Qgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9odi9LY29uZmlnLTQtXG5kcml2ZXJzL2h2L0tjb25maWc6NTpjb25maWcgSFlQRVJWXG5kcml2ZXJzL2h2L0tjb25maWctNi1cdGJvb2wgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgY29yZSBoeXBlcnZpc29yIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctMTYtXG5kcml2ZXJzL2h2L0tjb25maWc6MTc6Y29uZmlnIEhZUEVSVl9WVExfTU9ERVxuZHJpdmVycy9odi9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtFbmFibGUgTGludXggdG8gYm9vdCBpbiBWVEwgY29udGV4dFwmIzM0O1xuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy00Mi1cbmRyaXZlcnMvaHYvS2NvbmZpZzo0Mzpjb25maWcgSFlQRVJWX1RJTUVSXG5kcml2ZXJzL2h2L0tjb25maWctNDQtXHRkZWZfYm9vbCBIWVBFUlYgXHUwMDI2XHUwMDI2IFg4NlxuZHJpdmVycy9odi9LY29uZmlnLTQ1LVxuZHJpdmVycy9odi9LY29uZmlnOjQ2OmNvbmZpZyBIWVBFUlZfVVRJTFNcbmRyaXZlcnMvaHYvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIFV0aWxpdGllcyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2h2L0tjb25maWctNTItXG5kcml2ZXJzL2h2L0tjb25maWc6NTM6Y29uZmlnIEhZUEVSVl9CQUxMT09OXG5kcml2ZXJzL2h2L0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBCYWxsb29uIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy01OS1cbmRyaXZlcnMvaHYvS2NvbmZpZzo2MDpjb25maWcgSFlQRVJWX1ZNQlVTXG5kcml2ZXJzL2h2L0tjb25maWctNjEtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgSHlwZXItViBWTUJ1cyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjU0PWNvbmZpZyBTRVJJT19PTFBDX0FQU1Bcbi0tXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjYzLVxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI2NDpjb25maWcgSFlQRVJWX0tFWUJPQVJEXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWctMjY1LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IFN5bnRoZXRpYyBLZXlib2FyZCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWc6Mjpjb25maWcgSFlQRVJWX05FVFxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3Njc2kvS2NvbmZpZz01Nzg9Y29uZmlnIFhFTl9TQ1NJX0ZST05URU5EXG4tLVxuZHJpdmVycy9zY3NpL0tjb25maWctNTg3LVxuZHJpdmVycy9zY3NpL0tjb25maWc6NTg4OmNvbmZpZyBIWVBFUlZfU1RPUkFHRVxuZHJpdmVycy9zY3NpL0tjb25maWctNTg5LVx0dHJpc3RhdGUgXCYjMzQ7TWljcm9zb2Z0IEh5cGVyLVYgdmlydHVhbCBzdG9yYWdlIGRyaXZlclwmIzM0O1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnPTM1Mjc9Y29uZmlnIE1FTVRFU1Rcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zNTQwLVxubGliL0tjb25maWcuZGVidWc6MzU0MTpjb25maWcgSFlQRVJWX1RFU1RJTkdcbmxpYi9LY29uZmlnLmRlYnVnLTM1NDItXHRib29sIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIGRyaXZlciB0ZXN0aW5nXCYjMzQ7XG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnPTY2PWNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTcyLVxubmV0L3Ztd192c29jay9LY29uZmlnOjczOmNvbmZpZyBIWVBFUlZfVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O0h5cGVyLVYgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyB0aGUgSHlwZXItViBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGBDT05GSUdfSFlQRVJWX05FVGAgc2V0dGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN1Z2dlc3RzIHRoaXMgaXMgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBlbmFibGluZyBIeXBlci1WIG5ldHdvcmsgc3VwcG9ydCwgYnV0IGxldCYjMzk7cyBjb25maXJtIHRoaXMgcmlnb3JvdXNseSBiZWZvcmUgcHJvY2VlZGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgYW55IG51YW5jZXMgaW4gdGhlIGRlcGVuZGVuY2llcyBvciBjb25mbGljdGluZyBzZXR0aW5ncyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgaW50ZW5kZWQgbmV0d29yayBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgSHlwZXItViBlbnZpcm9ubWVudC4gQSBxdWljayBjaGVjayBvZiB0aGUgS2NvbmZpZyBkb2N1bWVudGF0aW9uIGFuZCBhbnkgcmVsZXZhbnQgYnVpbGQgbG9ncyBzaG91bGQgYmUgZW5vdWdoIHRvIHNvbGlkaWZ5IHRoaXMgcGFydGljdWxhciBjaG9pY2UsIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggYENPTkZJR19WSVJUSU9fTkVUYCBvciBgQ09ORklHX0UxMDAwRWAuIEl0JiMzOTtzIGFsd2F5cyBiZXN0IHRvIGJlIHByZWNpc2UgaGVyZSwgYW5kIGF2b2lkIGFueSB1bndhbnRlZCBzdXJwcmlzZXMgZG93biB0aGUgcm9hZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLS4qbmV0dnNjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2h5cGVydi9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0hZUEVSVl9ORVQpICYjNDM7PSBodl9uZXR2c2Mub1xuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlLTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODY0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKk5hdmlnYXRpbmcgdGhlIEh5cGVyLVYgTmV0d29yayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgYENPTkZJR19IWVBFUlZfTkVUYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlIHBhdGNoIGl0c2VsZiB0b3VjaGVzIGBkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmNgIGFuZCBgZHJpdmVycy9odi9jaGFubmVsLmNgLiBOb3csIGBuZXR2c2MuY2AgSSByZWNvZ25pemUsIGJ1dCBgY2hhbm5lbC5jYC4uLiB0aGF0IHJpbmdzIHNvbWUgYmVsbHMgd2l0aCB0aGUgYnJvYWRlciBIeXBlci1WIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgdGhlIFZNQnVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyBob3cgdGhpcyB0aWVzIGluIHdpdGggdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXMgYGNoYW5uZWwuY2AgcGFydCBvZiBgQ09ORklHX0hZUEVSVl9WTUJVU2Agb3IgbWF5YmUganVzdCB0aGUgZ2VuZXJhbCBgQ09ORklHX0hZUEVSVmA/IEkgbmVlZCB0byBnZXQgc29tZSBtb3JlIGNvbnRleHQsIHNvIEkmIzM5O2xsIGNoZWNrIHRoZSBgZHJpdmVycy9odi9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwbGFjZW1lbnQgb2YgdGhpcyBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgSHlwZXItViBkcml2ZXIgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhbm5lbFxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdD00OT1FYWNoIGNoYW5uZWwgaGFzIHRvIHByb3ZpZGUgdHdvIGZ1bmN0aW9ucyB0byB0aGUgZ2VuZXJpYyBQUFAgbGF5ZXIsXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjUwOnZpYSB0aGUgcHBwX2NoYW5uZWwub3BzIHBvaW50ZXI6XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0LTUxLVxuLS1cbmRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZT0yPWhvc3QxeC15ID0gXFxcbi0tXG5kcml2ZXJzL2dwdS9ob3N0MXgvTWFrZWZpbGUtNy1cdGNkbWEubyBcXFxuZHJpdmVycy9ncHUvaG9zdDF4L01ha2VmaWxlOjg6XHRjaGFubmVsLm8gXFxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZS05LVx0am9iLm8gXFxcbi0tXG5kcml2ZXJzL2h2L01ha2VmaWxlPTExPWh2X3ZtYnVzLXkgOj0gdm1idXNfZHJ2Lm8gXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGU6MTI6XHRcdCBodi5vIGNvbm5lY3Rpb24ubyBjaGFubmVsLm8gXFxcbmRyaXZlcnMvaHYvTWFrZWZpbGUtMTMtXHRcdCBjaGFubmVsX21nbXQubyByaW5nX2J1ZmZlci5vIGh2X3RyYWNlLm9cbi0tXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aWR0di9NYWtlZmlsZT01PWR2Yi12aWR0di1icmlkZ2Utb2JqcyA6PSB2aWR0dl9icmlkZ2UubyB2aWR0dl9jb21tb24ubyB2aWR0dl90cy5vIHZpZHR2X3BzaS5vIFxcXG5kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aWR0di9NYWtlZmlsZTo2Olx0XHRcdCB2aWR0dl9wZXMubyB2aWR0dl9zMzAybS5vIHZpZHR2X2NoYW5uZWwubyB2aWR0dl9tdXgub1xuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmlkdHYvTWFrZWZpbGUtNy1cbi0tXG5kcml2ZXJzL21pc2Mvc2dpLXhwL01ha2VmaWxlPTk9b2JqLSQoQ09ORklHX1NHSV9YUClcdFx0JiM0Mzs9IHhwYy5vXG5kcml2ZXJzL21pc2Mvc2dpLXhwL01ha2VmaWxlOjEwOnhwYy15XHRcdFx0XHQ6PSB4cGNfbWFpbi5vIHhwY19jaGFubmVsLm8geHBjX3BhcnRpdGlvbi5vIFxcXG5kcml2ZXJzL21pc2Mvc2dpLXhwL01ha2VmaWxlLTExLVx0XHRcdFx0ICAgeHBjX3V2Lm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZT01PW9iai0kKENPTkZJR19NSUNST1NPRlRfTUFOQSkgJiM0Mzs9IG1hbmEub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGU6NjptYW5hLW9ianMgOj0gZ2RtYV9tYWluLm8gc2htX2NoYW5uZWwubyBod19jaGFubmVsLm8gbWFuYV9lbi5vIG1hbmFfZXRodG9vbC5vIG1hbmFfYnBmLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU9Mj1hdGg5ay15ICYjNDM7PVx0YmVhY29uLm8gXFxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUtOS1cdFx0YW50ZW5uYS5vIFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGU6MTA6XHRcdGNoYW5uZWwub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlLTExLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZT0yMz1icmNtc21hYy15IDo9IFxcXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlLTI3LVx0YW50c2VsLm8gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZToyODpcdGNoYW5uZWwubyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlLTI5LVx0bWFpbi5vIFxcXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZT0xMT1tdDc2LXkgOj0gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGUtMTItXHRtbWlvLm8gdXRpbC5vIHRyYWNlLm8gZG1hLm8gbWFjODAyMTEubyBkZWJ1Z2ZzLm8gZWVwcm9tLm8gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGU6MTM6XHR0eC5vIGFnZy1yeC5vIG1jdS5vIHdlZC5vIHNjYW4ubyBjaGFubmVsLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGUtMTQtXG4tLVxubmV0L21hYzgwMjExL01ha2VmaWxlPTU9bWFjODAyMTEteSA6PSBcXFxuLS1cbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS0xMS1cdHdwYS5vIFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6MTI6XHRzY2FuLm8gb2ZmY2hhbm5lbC5vIFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtMTMtXHRodC5vIGFnZy10eC5vIGFnZy1yeC5vIFxcXG4tLVxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZT00PXJwY3JkbWEteSA6PSB0cmFuc3BvcnQubyBycGNfcmRtYS5vIHZlcmJzLm8gZnJ3cl9vcHMubyBpYl9jbGllbnQubyBcXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZTo1Olx0c3ZjX3JkbWEubyBzdmNfcmRtYV9iYWNrY2hhbm5lbC5vIHN2Y19yZG1hX3RyYW5zcG9ydC5vIFxcXG5uZXQvc3VucnBjL3hwcnRyZG1hL01ha2VmaWxlLTYtXHRzdmNfcmRtYV9zZW5kdG8ubyBzdmNfcmRtYV9yZWN2ZnJvbS5vIHN2Y19yZG1hX3J3Lm8gXFxcbm5ldC9zdW5ycGMveHBydHJkbWEvTWFrZWZpbGUtNy1cdHN2Y19yZG1hX3BjbC5vIG1vZHVsZS5vXG5uZXQvc3VucnBjL3hwcnRyZG1hL01ha2VmaWxlOjg6cnBjcmRtYS0kKENPTkZJR19TVU5SUENfQkFDS0NIQU5ORUwpICYjNDM7PSBiYWNrY2hhbm5lbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mzk0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHlwZXItViBWTUJ1cyBNb2R1bGUgYW5kIEFzc29jaWF0ZWQgTmV0d29yayBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGh2X3ZtYnVzYCBtb2R1bGUsIGFuZCBpdCYjMzk7cyBjbGVhcmx5IHRpZWQgdG8gYENPTkZJR19IWVBFUlZgLiBOb3csIGEga2V5IHF1ZXN0aW9uIGlzOiBhcmUgYENPTkZJR19IWVBFUlZgIGFuZCBzcGVjaWZpY2FsbHkgYENPTkZJR19IWVBFUlZfTkVUYCBldmVuIGFjY2Vzc2libGUgd2l0aGluIHRoZSBzeXprYWxsZXIgZW52aXJvbm1lbnQ/IEkga25vdyBzeXprYWxsZXIgaGFzIHBzZXVkby1zeXNjYWxscyBsaWtlIGBzeXpfdm1idXNfZXN0YWJsaXNoX2dwYWRsYCwgd2hpY2ggc3VnZ2VzdHMgdm1idXMgaXMgc3VwcG9ydGVkLiBIbW0sIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IG5vdGUgYWJvdXQgcHNldWRvLXN5c2NhbGxzLiBJdCBzYXlzIEkgY2FuJiMzOTt0IHNlYXJjaCBmb3IgJiMzOTtzeXpfJiMzOTsgZXhwcmVzc2lvbnMgYmVjYXVzZSB0aG9zZSBhcmVuJiMzOTt0IGRpcmVjdGx5IGluIHRoZSBrZXJuZWwgc291cmNlLiBCdXQgSSBrbm93IHN5emthbGxlciAqZG9lcyogaGF2ZSB2bWJ1cyBzdXBwb3J0LCBzbyBJIGNhbiBwdXQgdGhhdCBhc2lkZSBmb3Igbm93LgoKTm93LCB0aGlzIGBuZXR2c2NgIGlzIHRoZSBuZXR3b3JrIGRyaXZlciwgYW5kIHRoYXQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIGZ1enppbmcgaXQgaWYgdGhlIHJpZ2h0IGRldmljZSBpcyBwcmVzZW50LgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyBhIG51bWJlciBvZiBrZXkgZnVuY3Rpb25zOiBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWRgLCBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0YCwgYG5ldHZzY19hbGxvY19idWZfcGFnZXNgLCBgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzYCwgYG5ldHZzY193b3JrcXVldWVfaW5pdGAsIGBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3lgLCBhbmQgYG5ldHZzY19kZXZpY2VfYWRkYC4gTG9va3MgbGlrZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWxsIGFyb3VuZC4KCkxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB0aGUgaW1wb3J0YW50IEZvY3VzU3ltYm9scyBhcmUgaGVyZS4gSSYjMzk7bSBmb2N1c2luZyBvbjogYHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkYCwgYHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdGAsIGBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzYCwgYG5ldHZzY19mcmVlX2J1Zl9wYWdlc2AsIGBuZXR2c2NfZGV2aWNlX2FkZGAsIGBuZXR2c2NfaW5pdF9idWZgIGFuZCBgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGxgLgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzYCBhbmQgYG5ldHZzY19mcmVlX2J1Zl9wYWdlc2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldHZzY19hbGxvY19idWZfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTEwMT1zdGF0aWMgdm9pZCBuZXR2c2Nfc3ViY2hhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM2LSAqICAgICAgICBmYWlsZWQgYWxsb2NhdGlvbilcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzoxMzc6ICogQGNodW5rczogY2h1bmtzIGFycmF5IGZyb20gbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcygpLCBvciBOVUxMXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM4LSAqIEBjaHVua19jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBjaHVua3Ncbi0tXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MTQ1PXN0YXRpYyB2b2lkIG5ldHZzY19mcmVlX2J1Zl9wYWdlcyh2b2lkICphZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xNzEtLypcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzoxNzI6ICogbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyAtIGFsbG9jYXRlIGEgdmlydHVhbGx5LWNvbnRpZ3VvdXMsIGhvc3QtdmlzaWJsZVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE3My0gKiBidWZmZXIgZm9yIHRoZSBuZXR2c2Mgc2VuZC9yZWNlaXZlIGFyZWEuXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE4Ny0gKi9cbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzoxODg6c3RhdGljIHZvaWQgKm5ldHZzY19hbGxvY19idWZfcGFnZXMoaW50IG5vZGUsIHUzMiBzaXplLFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE4OS1cdFx0XHRcdCAgICBzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqKmNodW5rc19vdXQsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTUwOT1zdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTUzNS1cdFx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1ZiA9XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NTM2Olx0XHRcdG5ldHZzY19hbGxvY19idWZfcGFnZXMoY3B1X3RvX25vZGUoZGV2aWNlLVx1MDAzZWNoYW5uZWwtXHUwMDNldGFyZ2V0X2NwdSksXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNTM3LVx0XHRcdFx0XHQgICAgICAgYnVmX3NpemUsXG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTY1NS1cdFx0bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1ZiA9XG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NjU2Olx0XHRcdG5ldHZzY19hbGxvY19idWZfcGFnZXMoY3B1X3RvX25vZGUoZGV2aWNlLVx1MDAzZWNoYW5uZWwtXHUwMDNldGFyZ2V0X2NwdSksXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNjU3LVx0XHRcdFx0XHQgICAgICAgYnVmX3NpemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODg0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEtleSBGdW5jdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBmZXcgY3J1Y2lhbCBmdW5jdGlvbnMgaW4gdGhpcyBwcm9jZXNzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIG1lIHRvd2FyZHMgdGhlc2U6IGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZGAsIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRgLCBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AsIGBuZXR2c2NfZnJlZV9idWZfcGFnZXNgLCBhbmQgYG5ldHZzY19pbml0X2J1ZmAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIHRoZSBkYXRhIHRyYW5zZmVyIGFuZCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIHZpcnR1YWxpemVkIG5ldHdvcmsgaW50ZXJmYWNlLgoKSSYjMzk7bSBwYXJ0aWN1bGFybHkgY3VyaW91cyBhYm91dCBob3cgdGhlIEdQQURMIGVzdGFibGlzaG1lbnQgYW5kIGRlY3J5cHRpb24gYXJlIGhhbmRsZWQsIHNvIEkmIzM5O2xsIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhlIGxvY2F0aW9uIG9mIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRgLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGluIHRoZSBgZHJpdmVycy9odi9jaGFubmVsLmNgIGZpbGUsIGJ1dCBpdCYjMzk7cyBhbHdheXMgYmVzdCB0byB2ZXJpZnkuIExldCYjMzk7cyBtYWtlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2h2L2NoYW5uZWwuYz00NDU9c3RhdGljIGludCBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01NDMtLypcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjU0NDogKiB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHQgLSBNYW5hZ2UgdGhlIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01NDUtICogQGtidWZmZXIgYXJvdW5kIGEgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoKSBjYWxsLlxuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTU1Mi0gKi9cbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjU1MzpzdGF0aWMgaW50IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTU1NC1cdFx0XHRcdFx0ICAgICBlbnVtIGh2X2dwYWRsX3R5cGUgdHlwZSxcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYz01OTI9aW50IHZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCwgdm9pZCAqa2J1ZmZlcixcbi0tXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01OTQte1xuZHJpdmVycy9odi9jaGFubmVsLmM6NTk1Olx0cmV0dXJuIHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChjaGFubmVsLCBIVl9HUEFETF9CVUZGRVIsXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01OTYtXHRcdFx0XHRcdFx0IGtidWZmZXIsIHNpemUsIDBVLCBncGFkbCk7XG4tLVxuZHJpdmVycy9odi9jaGFubmVsLmM9NjkzPXN0YXRpYyBpbnQgX192bWJ1c19vcGVuKHN0cnVjdCB2bWJ1c19jaGFubmVsICpuZXdjaGFubmVsLFxuLS1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTcyOC1cbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjcyOTpcdGVyciA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChuZXdjaGFubmVsLCBIVl9HUEFETF9SSU5HLFxuZHJpdmVycy9odi9jaGFubmVsLmMtNzMwLVx0XHRcdFx0XHRcdHBhZ2VfYWRkcmVzcyhuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfcGFnZSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjY3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCYjMzk7cyBkZWZpbml0ZWx5IHRvdWNoaW5nIHNvbWUgY3JpdGljYWwgSHlwZXItViBuZXR3b3JraW5nIGFuZCBWTUJ1cyBjb3JlIGxvZ2ljLiBCYXNlZCBvbiB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCBpdCB3YXJyYW50cyBhIGZ1enppbmcgZWZmb3J0LiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIG1vZGlmaWVzOiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZGAsIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRgLCBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AsIGBuZXR2c2NfZnJlZV9idWZfcGFnZXNgLCBgbmV0dnNjX2luaXRfYnVmYCwgYW5kIGBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbGAuIFRoZXNlIGFyZSB0aGUgYXJlYXMgd2hlcmUgSSYjMzk7ZCBhbnRpY2lwYXRlIHRoZSBtb3N0IGludGVyZXN0aW5nIGFuZCBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIGludGVyYWN0aW9ucy4gVGhlc2Ugd2lsbCBiZSBteSBmb2N1cyBzeW1ib2xzLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGFwcHJvcHJpYXRlIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIGZvciB0aGlzIHRvIGJlIGFjdGl2ZS4gSSBzZWUgaXQmIzM5O3MgbGlua2VkIHRvIGBIWVBFUlZgIGFuZCBgSFlQRVJWX05FVGAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgSFlQRVJWX05FVGAgaXMgdGhlIG9ubHkgY29uZmlnIGZvciBuZXR2c2MuIFllcywgdGhhdCYjMzk7cyBjb3JyZWN0LiBgQ09ORklHX0hZUEVSVl9ORVRgIGl0IGlzISBBbmQgYEhZUEVSVmAgaXMgZm9yIHZtYnVzLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgc2NhbiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50LCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFlQRVJWX05FVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWc6Mjpjb25maWcgSFlQRVJWX05FVFxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNzgKCQkJCQkJCW91dHB1dDogMTgzCgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiB0aGUgSHlwZXItViBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGVyZSBpc24mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gdG8gY29uc2lkZXIgaGVyZTsgaXQmIzM5O3MgYSBmb2N1c2VkIGNoYW5nZS4gTXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHByaW1hcmlseSByZXZvbHZlcyBhcm91bmQgZW5oYW5jZW1lbnRzIGZvciBDb25maWRlbnRpYWwgVk1zIHdpdGhpbiB0aGUgSHlwZXItViBlbnZpcm9ubWVudC4gSXQmIzM5O3MgZHJpbGxpbmcgaW50byB0aGUgYG5ldHZzY2AgbmV0d29yayBkcml2ZXIgYW5kIHRoZSBWTUJ1cyBjaGFubmVsIGNvZGUuIFRoZSBjb3JlIGxvZ2ljIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgbWFuYWdpbmcgdGhlIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mIEdQQURMIGJ1ZmZlcnMuCgpTcGVjaWZpY2FsbHksIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgbmV3IGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AgYW5kIGBuZXR2c2NfZnJlZV9idWZfcGFnZXNgIGhhbmRsZSB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mIGJ1ZmZlciBwYWdlcy4gVGhhdCYjMzk7cyBwcmV0dHkgc3RhbmRhcmQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBvZiBjb3Vyc2UuIFRoZW4sIHRoaW5ncyBnZXQgbW9yZSBpbnRlcmVzdGluZyB3aXRoIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZGAgYW5kIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRgLiBUaGVzZSBzdHJvbmdseSBzdWdnZXN0IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgd2F5IEdQQURMcyBhcmUgZXN0YWJsaXNoZWQsIGFuZCBkZWNyeXB0aW9uIGlzIG1hbmFnZWQgZm9yIHRoaXMgZHJpdmVyIGxvZ2ljLiBUaGlzIHdvdWxkIGFsbCBiZSByZWFjaGFibGUgZHJpdmVyIGxvZ2ljLCBvZiBjb3Vyc2UsIGFzIHRoZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIHRvIHBlcmZvcm0gYW4gb3BlcmF0aW9uLiBOb3cgdG8gc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFlQRVJWJiMzNDssCiAgICAmIzM0O0hZUEVSVl9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCYjMzQ7LAogICAgJiMzNDt2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHQmIzM0OywKICAgICYjMzQ7bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyYjMzQ7LAogICAgJiMzNDtuZXR2c2NfZnJlZV9idWZfcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0dnNjX2luaXRfYnVmJiMzNDssCiAgICAmIzM0O19fdm1idXNfZXN0YWJsaXNoX2dwYWRsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVyIChuZXR2c2MpIGFuZCBWTUJ1cyBjaGFubmVsIGNvZGUgdG8gbWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZiBHUEFETCBidWZmZXJzLCBwYXJ0aWN1bGFybHkgZm9yIENvbmZpZGVudGlhbCBWTXMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBhbGxvY2F0ZS9mcmVlIGJ1ZmZlcnMgYW5kIGVzdGFibGlzaCBHUEFETHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFlQRVJWJiMzNDssCiAgICAmIzM0O0hZUEVSVl9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCYjMzQ7LAogICAgJiMzNDt2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHQmIzM0OywKICAgICYjMzQ7bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyYjMzQ7LAogICAgJiMzNDtuZXR2c2NfZnJlZV9idWZfcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0dnNjX2luaXRfYnVmJiMzNDssCiAgICAmIzM0O19fdm1idXNfZXN0YWJsaXNoX2dwYWRsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVyIChuZXR2c2MpIGFuZCBWTUJ1cyBjaGFubmVsIGNvZGUgdG8gbWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZiBHUEFETCBidWZmZXJzLCBwYXJ0aWN1bGFybHkgZm9yIENvbmZpZGVudGlhbCBWTXMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBhbGxvY2F0ZS9mcmVlIGJ1ZmZlcnMgYW5kIGVzdGFibGlzaCBHUEFETHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjA3LjQ0Njc1MTQ1OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTQzNzMxMzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhZUEVSVlwiLFxuICAgIFwiSFlQRVJWX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkXCIsXG4gICAgXCJ2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRcIixcbiAgICBcIm5ldHZzY19hbGxvY19idWZfcGFnZXNcIixcbiAgICBcIm5ldHZzY19mcmVlX2J1Zl9wYWdlc1wiLFxuICAgIFwibmV0dnNjX2luaXRfYnVmXCIsXG4gICAgXCJfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVyIChuZXR2c2MpIGFuZCBWTUJ1cyBjaGFubmVsIGNvZGUgdG8gbWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZiBHUEFETCBidWZmZXJzLCBwYXJ0aWN1bGFybHkgZm9yIENvbmZpZGVudGlhbCBWTXMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBhbGxvY2F0ZS9mcmVlIGJ1ZmZlcnMgYW5kIGVzdGFibGlzaCBHUEFETHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6MDcuNDQ2NzU3OTE5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDUwNjYxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNGI1ZmQ4Njk3MWYyMjA2MWMwOWM4OGRiNWVjZjc1OWViMjJjYmQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDE0OjU0OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHYvY2hhbm5lbC5jIGIvZHJpdmVycy9odi9jaGFubmVsLmNcXG5pbmRleCA2ODIxZjIyNTI0OGIxOS4uMDE2NjM2N2E0ZGYzNzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9odi9jaGFubmVsLmNcXG4rKysgYi9kcml2ZXJzL2h2L2NoYW5uZWwuY1xcbkBAIC00MjYsNyArNDI2LDEzIEBAIHN0YXRpYyB2b2lkIHZtYnVzX2ZyZWVfY2hhbm5lbF9tc2dpbmZvKHN0cnVjdCB2bWJ1c19jaGFubmVsX21zZ2luZm8gKm1zZ2luZm8pXFxuIH1cXG4gXFxuIC8qXFxuLSAqIF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsIC0gRXN0YWJsaXNoIGEgR1BBREwgZm9yIGEgYnVmZmVyIG9yIHJpbmdidWZmZXJcXG4rICogX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwgLSBFc3RhYmxpc2ggYSBHUEFETCBmb3IgYSBidWZmZXIgb3IgcmluZ2J1ZmZlci5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBvbmx5IGhhbmRsZXMgdGhlIEdQQURMIGhhbmRzaGFrZSB3aXRoIHRoZSBob3N0LiAgVGhlIGNhbGxlclxcbisgKiBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCBAa2J1ZmZlciBpcyBpbiB0aGUgZW5jcnlwdGlvbiBzdGF0ZSB0aGVcXG4rICogaG9zdCBleHBlY3RzIChob3N0LXZpc2libGUgLyBcXFwiZGVjcnlwdGVkXFxcIiBmb3IgY29uZmlkZW50aWFsIFZNcyk7IHRoaXNcXG4rICogZnVuY3Rpb24gbmV2ZXIgY2FsbHMgc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBvciBzZXRfbWVtb3J5X2VuY3J5cHRlZCgpLlxcbisgKiBJdCBhbHNvIGxlYXZlcyBncGFkbC1cXHUwMDNlZGVjcnlwdGVkIHVudG91Y2hlZCwgc28gdGhlIGNhbGxlciBtdXN0IHNldCBpdC5cXG4gICpcXG4gICogQGNoYW5uZWw6IGEgY2hhbm5lbFxcbiAgKiBAdHlwZTogdGhlIHR5cGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgR1BBREwsIG9ubHkgbWVhbmluZ2Z1bCBmb3IgdGhlIGd1ZXN0LlxcbkBAIC00MzQsNyArNDQwLDcgQEAgc3RhdGljIHZvaWQgdm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8oc3RydWN0IHZtYnVzX2NoYW5uZWxfbXNnaW5mbyAqbXNnaW5mbylcXG4gICogQHNpemU6IHBhZ2Utc2l6ZSBtdWx0aXBsZVxcbiAgKiBAc2VuZF9vZmZzZXQ6IHRoZSBvZmZzZXQgKGluIGJ5dGVzKSB3aGVyZSB0aGUgc2VuZCByaW5nIGJ1ZmZlciBzdGFydHMsXFxuICAqICAgICAgICAgICAgICBzaG91bGQgYmUgMCBmb3IgQlVGRkVSIHR5cGUgZ3BhZGxcXG4tICogQGdwYWRsX2hhbmRsZTogc29tZSBmdW5reSB0aGluZ1xcbisgKiBAZ3BhZGw6IG91dCBwYXJhbWV0ZXIgcmVjZWl2aW5nIHRoZSBlc3RhYmxpc2hlZCBHUEFETCBoYW5kbGUvYnVmZmVyL3NpemVcXG4gICovXFxuIHN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXFxuIFxcdFxcdFxcdFxcdCAgIGVudW0gaHZfZ3BhZGxfdHlwZSB0eXBlLCB2b2lkICprYnVmZmVyLFxcbkBAIC00NTQsMzAgKzQ2MCw4IEBAIHN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXFxuIFxcdFxcdChhdG9taWNfaW5jX3JldHVybihcXHUwMDI2dm1idXNfY29ubmVjdGlvbi5uZXh0X2dwYWRsX2hhbmRsZSkgLSAxKTtcXG4gXFxuIFxcdHJldCA9IGNyZWF0ZV9ncGFkbF9oZWFkZXIodHlwZSwga2J1ZmZlciwgc2l6ZSwgc2VuZF9vZmZzZXQsIFxcdTAwMjZtc2dpbmZvKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRncGFkbC1cXHUwMDNlZGVjcnlwdGVkID0gZmFsc2U7XFxuK1xcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGdwYWRsLVxcdTAwM2VkZWNyeXB0ZWQgPSAhKChjaGFubmVsLVxcdTAwM2Vjb19leHRlcm5hbF9tZW1vcnkgXFx1MDAyNlxcdTAwMjYgdHlwZSA9PSBIVl9HUEFETF9CVUZGRVIpIHx8XFxuLVxcdFxcdChjaGFubmVsLVxcdTAwM2Vjb19yaW5nX2J1ZmZlciBcXHUwMDI2XFx1MDAyNiB0eXBlID09IEhWX0dQQURMX1JJTkcpKTtcXG4tXFx0aWYgKGdwYWRsLVxcdTAwM2VkZWNyeXB0ZWQpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogVGhlIFxcXCJkZWNyeXB0ZWRcXFwiIGZsYWcgYmVpbmcgdHJ1ZSBhc3N1bWVzIHRoYXQgc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBzdWNjZWVkcy5cXG4tXFx0XFx0ICogQnV0IGlmIGl0IGZhaWxzLCB0aGUgZW5jcnlwdGlvbiBzdGF0ZSBvZiB0aGUgbWVtb3J5IGlzIHVua25vd24uIEluIHRoYXQgY2FzZSxcXG4tXFx0XFx0ICogbGVhdmUgXFxcImRlY3J5cHRlZFxcXCIgYXMgdHJ1ZSB0byBlbnN1cmUgdGhlIG1lbW9yeSBpcyBsZWFrZWQgaW5zdGVhZCBvZiBnb2luZyBiYWNrXFxuLVxcdFxcdCAqIG9uIHRoZSBmcmVlIGxpc3QuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXQgPSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylrYnVmZmVyLFxcbi1cXHRcXHRcXHRcXHRcXHRQRk5fVVAoc2l6ZSkpO1xcbi1cXHRcXHRpZiAocmV0KSB7XFxuLVxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZjaGFubmVsLVxcdTAwM2VkZXZpY2Vfb2JqLVxcdTAwM2VkZXZpY2UsXFxuLVxcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gc2V0IGhvc3QgdmlzaWJpbGl0eSBmb3IgbmV3IEdQQURMICVkLlxcXFxuXFxcIixcXG4tXFx0XFx0XFx0XFx0cmV0KTtcXG4tXFx0XFx0XFx0dm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8obXNnaW5mbyk7XFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbiBcXG4gXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZtc2dpbmZvLVxcdTAwM2V3YWl0ZXZlbnQpO1xcbiBcXHRtc2dpbmZvLVxcdTAwM2V3YWl0aW5nX2NoYW5uZWwgPSBjaGFubmVsO1xcbkBAIC01NTMsMTkgKzUzNyw0NyBAQCBzdGF0aWMgaW50IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ2bWJ1c19jb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0dm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8obXNnaW5mbyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4gXFxuLVxcdGlmIChyZXQpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSWYgc2V0X21lbW9yeV9lbmNyeXB0ZWQoKSBmYWlscywgdGhlIGRlY3J5cHRlZCBmbGFnIGlzXFxuLVxcdFxcdCAqIGxlZnQgYXMgdHJ1ZSBzbyB0aGUgbWVtb3J5IGlzIGxlYWtlZCBpbnN0ZWFkIG9mIGJlaW5nXFxuLVxcdFxcdCAqIHB1dCBiYWNrIG9uIHRoZSBmcmVlIGxpc3QuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZ3BhZGwtXFx1MDAzZWRlY3J5cHRlZCkge1xcbi1cXHRcXHRcXHRpZiAoIXNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSkpXFxuLVxcdFxcdFxcdFxcdGdwYWRsLVxcdTAwM2VkZWNyeXB0ZWQgPSBmYWxzZTtcXG4rLypcXG4rICogdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0IC0gTWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZlxcbisgKiBAa2J1ZmZlciBhcm91bmQgYSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbCgpIGNhbGwuXFxuKyAqXFxuKyAqIERlY3J5cHRzIEBrYnVmZmVyIChtYWtpbmcgaXQgaG9zdC12aXNpYmxlKSB1bmxlc3MgdGhlIGNoYW5uZWwgd2FzIGNyZWF0ZWRcXG4rICogd2l0aCBjb25maWRlbnRpYWwgbWVtb3J5IGZvciBAdHlwZSwgdGhlbiBlc3RhYmxpc2hlcyB0aGUgR1BBREwuICBPblxcbisgKiBlc3RhYmxpc2ggZmFpbHVyZSB0aGUgYnVmZmVyIGlzIHJlLWVuY3J5cHRlZCBzbyB0aGUgY2FsbGVyIGNhbiBmcmVlIGl0LlxcbisgKlxcbisgKiBTZXRzIGdwYWRsLVxcdTAwM2VkZWNyeXB0ZWQ7IHNlZSB0aGUgY29tbWVudCBvbiBzdHJ1Y3Qgdm1idXNfZ3BhZGw6OmRlY3J5cHRlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gaHZfZ3BhZGxfdHlwZSB0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHZvaWQgKmtidWZmZXIsIHUzMiBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHUzMiBzZW5kX29mZnNldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdm1idXNfZ3BhZGwgKmdwYWRsKVxcbit7XFxuK1xcdGJvb2wgZGVjcnlwdCA9ICEoKGNoYW5uZWwtXFx1MDAzZWNvX2V4dGVybmFsX21lbW9yeSBcXHUwMDI2XFx1MDAyNiB0eXBlID09IEhWX0dQQURMX0JVRkZFUikgfHxcXG4rXFx0XFx0XFx0IChjaGFubmVsLVxcdTAwM2Vjb19yaW5nX2J1ZmZlciBcXHUwMDI2XFx1MDAyNiB0eXBlID09IEhWX0dQQURMX1JJTkcpKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChkZWNyeXB0KSB7XFxuK1xcdFxcdHJldCA9IHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmNoYW5uZWwtXFx1MDAzZWRldmljZV9vYmotXFx1MDAzZWRldmljZSxcXG4rXFx0XFx0XFx0XFx0IFxcXCJGYWlsZWQgdG8gc2V0IGhvc3QgdmlzaWJpbGl0eSBmb3IgbmV3IEdQQURMICVkLlxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IHJldCk7XFxuK1xcdFxcdFxcdC8qIEVuY3J5cHRpb24gc3RhdGUgdW5rbm93bjsgc2lnbmFsIGNhbGxlciB0byBsZWFrLiAqL1xcbitcXHRcXHRcXHRncGFkbC1cXHUwMDNlZGVjcnlwdGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRncGFkbC1cXHUwMDNlZGVjcnlwdGVkID0gZGVjcnlwdDtcXG4rXFx0cmV0ID0gX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoY2hhbm5lbCwgdHlwZSwga2J1ZmZlciwgc2l6ZSwgc2VuZF9vZmZzZXQsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGdwYWRsKTtcXG4rXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBkZWNyeXB0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhc2V0X21lbW9yeV9lbmNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpa2J1ZmZlciwgUEZOX1VQKHNpemUpKSlcXG4rXFx0XFx0Z3BhZGwtXFx1MDAzZWRlY3J5cHRlZCA9IGZhbHNlO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC01ODAsMTEgKzU5Miw0MCBAQCBzdGF0aWMgaW50IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxcbiBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLCB2b2lkICprYnVmZmVyLFxcbiBcXHRcXHRcXHQgIHUzMiBzaXplLCBzdHJ1Y3Qgdm1idXNfZ3BhZGwgKmdwYWRsKVxcbiB7XFxuLVxcdHJldHVybiBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChjaGFubmVsLCBIVl9HUEFETF9CVUZGRVIsIGtidWZmZXIsIHNpemUsXFxuLVxcdFxcdFxcdFxcdCAgICAgICAwVSwgZ3BhZGwpO1xcbitcXHRyZXR1cm4gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KGNoYW5uZWwsIEhWX0dQQURMX0JVRkZFUixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGtidWZmZXIsIHNpemUsIDBVLCBncGFkbCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwodm1idXNfZXN0YWJsaXNoX2dwYWRsKTtcXG4gXFxuKy8qXFxuKyAqIHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkIC0gRXN0YWJsaXNoIGEgR1BBREwgZm9yIGEgYnVmZmVyXFxuKyAqIHdob3NlIGVuY3J5cHRpb24gc3RhdGUgaXMgbWFuYWdlZCBieSB0aGUgY2FsbGVyLlxcbisgKlxcbisgKiBAY2hhbm5lbDogYSBjaGFubmVsXFxuKyAqIEBrYnVmZmVyOiBhIGJ1ZmZlciB0aGF0IHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgdHJhbnNpdGlvbmVkIHRvIGhvc3QtdmlzaWJsZVxcbisgKiAgICAgICAgICAgKGRlY3J5cHRlZCkgdmlhIHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgb3IgYW4gZXF1aXZhbGVudCBtZWNoYW5pc20uXFxuKyAqIEBzaXplOiBwYWdlLXNpemUgbXVsdGlwbGVcXG4rICogQGdwYWRsOiBvdXQgcGFyYW1ldGVyIHJlY2VpdmluZyB0aGUgZXN0YWJsaXNoZWQgR1BBRExcXG4rICpcXG4rICogVW5saWtlIHZtYnVzX2VzdGFibGlzaF9ncGFkbCgpLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNhbGxcXG4rICogc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBvbiBAa2J1ZmZlciwgYW5kIHRoZSBtYXRjaGluZyB2bWJ1c190ZWFyZG93bl9ncGFkbCgpXFxuKyAqIGNhbGwgd2lsbCBub3QgY2FsbCBzZXRfbWVtb3J5X2VuY3J5cHRlZCgpIG9uIGl0LiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZVxcbisgKiBmb3IgdGhlIGZ1bGwgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2YgQGtidWZmZXI7IG9uIHJldHVybiBncGFkbC1cXHUwMDNlZGVjcnlwdGVkXFxuKyAqIGlzIHNldCB0byBmYWxzZSB0byByZWNvcmQgdGhhdCB2bWJ1cyBkb2VzIG5vdCBvd24gdGhlIGVuY3J5cHRpb24gc3RhdGUuXFxuKyAqL1xcbitpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHZvaWQgKmtidWZmZXIsIHUzMiBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgdm1idXNfZ3BhZGwgKmdwYWRsKVxcbit7XFxuK1xcdGludCByZXQgPSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChjaGFubmVsLCBIVl9HUEFETF9CVUZGRVIsIGtidWZmZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc2l6ZSwgMFUsIGdwYWRsKTtcXG4rXFxuK1xcdC8qIENhbGxlciBvd25zIEBrYnVmZmVyJ3MgZW5jcnlwdGlvbjsgdGVhcmRvd24gbXVzdCBub3QgdG91Y2ggaXQuICovXFxuK1xcdGdwYWRsLVxcdTAwM2VkZWNyeXB0ZWQgPSBmYWxzZTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTCh2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCk7XFxuK1xcbiAvKipcXG4gICogcmVxdWVzdF9hcnJfaW5pdCAtIEFsbG9jYXRlcyBtZW1vcnkgZm9yIHRoZSByZXF1ZXN0b3IgYXJyYXkuIEVhY2ggc2xvdFxcbiAgKiBrZWVwcyB0cmFjayBvZiB0aGUgbmV4dCBhdmFpbGFibGUgc2xvdCBpbiB0aGUgYXJyYXkuIEluaXRpYWxseSwgZWFjaFxcbkBAIC02ODUsMTEgKzcyNiwxMSBAQCBzdGF0aWMgaW50IF9fdm1idXNfb3BlbihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqbmV3Y2hhbm5lbCxcXG4gXFx0LyogRXN0YWJsaXNoIHRoZSBncGFkbCBmb3IgdGhlIHJpbmcgYnVmZmVyICovXFxuIFxcdG5ld2NoYW5uZWwtXFx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUuZ3BhZGxfaGFuZGxlID0gMDtcXG4gXFxuLVxcdGVyciA9IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKG5ld2NoYW5uZWwsIEhWX0dQQURMX1JJTkcsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHBhZ2VfYWRkcmVzcyhuZXdjaGFubmVsLVxcdTAwM2VyaW5nYnVmZmVyX3BhZ2UpLFxcbi1cXHRcXHRcXHRcXHQgICAgICAoc2VuZF9wYWdlcyArIHJlY3ZfcGFnZXMpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuLVxcdFxcdFxcdFxcdCAgICAgIG5ld2NoYW5uZWwtXFx1MDAzZXJpbmdidWZmZXJfc2VuZF9vZmZzZXQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm5ld2NoYW5uZWwtXFx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUpO1xcbitcXHRlcnIgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHQobmV3Y2hhbm5lbCwgSFZfR1BBRExfUklORyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cGFnZV9hZGRyZXNzKG5ld2NoYW5uZWwtXFx1MDAzZXJpbmdidWZmZXJfcGFnZSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdChzZW5kX3BhZ2VzICsgcmVjdl9wYWdlcykgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bmV3Y2hhbm5lbC1cXHUwMDNlcmluZ2J1ZmZlcl9zZW5kX29mZnNldCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bmV3Y2hhbm5lbC1cXHUwMDNlcmluZ2J1ZmZlcl9ncGFkbGhhbmRsZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyb3JfY2xlYW5fcmluZztcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmggYi9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXFxuaW5kZXggNzM5N2M2OTNmOTg0YWYuLmIwYzRjYjBmN2E0Y2U0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmhcXG4rKysgYi9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXFxuQEAgLTIyMCw2ICsyMjAsOCBAQCBzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0O1xcbiBcXG4gZXh0ZXJuIHUzMiBuZXR2c2NfcmluZ19ieXRlcztcXG4gXFxuK2ludCBuZXR2c2Nfd29ya3F1ZXVlX2luaXQodm9pZCk7XFxuK3ZvaWQgbmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KHZvaWQpO1xcbiBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxcbiBcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0dnNjX2RldmljZV9pbmZvICppbmZvKTtcXG4gaW50IG5ldHZzY19hbGxvY19yZWN2X2NvbXBfcmluZyhzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZSwgdTMyIHFfaWR4KTtcXG5AQCAtMTE0Nyw2ICsxMTQ5LDE2IEBAIHN0cnVjdCBuZXR2c2NfY2hhbm5lbCB7XFxuIFxcdHN0cnVjdCBuZXR2c2Nfc3RhdHNfcnggcnhfc3RhdHM7XFxuIH07XFxuIFxcbisvKiBBIHBoeXNpY2FsbHktY29udGlndW91cyBjaHVuayBvZiBuZXR2c2MgYnVmZmVyLlxcbisgKlxcbisgKiBUaGUgY2h1bmsgbGlzdCBpcyBwcmVzZXJ2ZWQgc28gZWFjaCBjaHVuayBjYW4gYmUgaW5kaXZpZHVhbGx5IGZyZWVkIGF0XFxuKyAqIHRlYXJkb3duLlxcbisgKi9cXG4rc3RydWN0IG5ldHZzY19idWZfY2h1bmsge1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbit9O1xcbitcXG4gLyogUGVyIG5ldHZzYyBkZXZpY2UgKi9cXG4gc3RydWN0IG5ldHZzY19kZXZpY2Uge1xcbiBcXHR1MzIgbnZzcF92ZXJzaW9uO1xcbkBAIC0xMTU4LDYgKzExNzAsOCBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSB7XFxuIFxcdC8qIFJlY2VpdmUgYnVmZmVyIGFsbG9jYXRlZCBieSB1cyBidXQgbWFuYWdlcyBieSBOZXRWU1AgKi9cXG4gXFx0dm9pZCAqcmVjdl9idWY7XFxuIFxcdHUzMiByZWN2X2J1Zl9zaXplOyAvKiBhbGxvY2F0ZWQgYnl0ZXMgKi9cXG4rXFx0c3RydWN0IG5ldHZzY19idWZfY2h1bmsgKnJlY3ZfYnVmX2NodW5rcztcXG4rXFx0dTMyIHJlY3ZfYnVmX2NodW5rX2NudDtcXG4gXFx0c3RydWN0IHZtYnVzX2dwYWRsIHJlY3ZfYnVmX2dwYWRsX2hhbmRsZTtcXG4gXFx0dTMyIHJlY3Zfc2VjdGlvbl9jbnQ7XFxuIFxcdHUzMiByZWN2X3NlY3Rpb25fc2l6ZTtcXG5AQCAtMTE2Niw2ICsxMTgwLDggQEAgc3RydWN0IG5ldHZzY19kZXZpY2Uge1xcbiBcXHQvKiBTZW5kIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdXMgKi9cXG4gXFx0dm9pZCAqc2VuZF9idWY7XFxuIFxcdHUzMiBzZW5kX2J1Zl9zaXplO1xcbitcXHRzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayAqc2VuZF9idWZfY2h1bmtzO1xcbitcXHR1MzIgc2VuZF9idWZfY2h1bmtfY250O1xcbiBcXHRzdHJ1Y3Qgdm1idXNfZ3BhZGwgc2VuZF9idWZfZ3BhZGxfaGFuZGxlO1xcbiBcXHR1MzIgc2VuZF9zZWN0aW9uX2NudDtcXG4gXFx0dTMyIHNlbmRfc2VjdGlvbl9zaXplO1xcbkBAIC0xMTkzLDcgKzEyMDksNyBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSB7XFxuIFxcbiBcXHRzdHJ1Y3QgbmV0dnNjX2NoYW5uZWwgY2hhbl90YWJsZVtWUlNTX0NIQU5ORUxfTUFYXTtcXG4gXFxuLVxcdHN0cnVjdCByY3VfaGVhZCByY3U7XFxuK1xcdHN0cnVjdCByY3Vfd29yayByd29yaztcXG4gfTtcXG4gXFxuIC8qIE5kaXNJbml0aWFsaXplIG1lc3NhZ2UgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jIGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXFxuaW5kZXggNTllOTUzNDFmOWIxZTUuLjI1MDVkMTBlMjIwMTAyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xcbkBAIC0xNCw2ICsxNCw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sb2cyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXRfbWVtb3J5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuQEAgLTI4LDYgKzMwLDggQEBcXG4gI2luY2x1ZGUgXFxcImh5cGVydl9uZXQuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm5ldHZzY190cmFjZS5oXFxcIlxcbiBcXG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXR2c2Nfd3E7XFxuK1xcbiAvKlxcbiAgKiBTd2l0Y2ggdGhlIGRhdGEgcGF0aCBmcm9tIHRoZSBzeW50aGV0aWMgaW50ZXJmYWNlIHRvIHRoZSBWRlxcbiAgKiBpbnRlcmZhY2UuXFxuQEAgLTEyNSw0MCArMTI5LDE2MyBAQCBzdGF0aWMgdm9pZCBuZXR2c2Nfc3ViY2hhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcXG4gXFx0cnRubF91bmxvY2soKTtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBuZXR2c2NfZGV2aWNlICphbGxvY19uZXRfZGV2aWNlKHZvaWQpXFxuKy8qXFxuKyAqIG5ldHZzY19mcmVlX2J1Zl9wYWdlcyAtIHJlbGVhc2UgYSBuZXR2c2Mgc2VuZC9yZWNlaXZlIGJ1ZmZlci5cXG4rICpcXG4rICogQGFkZHI6IGJ1ZmZlciBhZGRyZXNzLCBvciBOVUxMIGlmIG5vbmUgd2FzIGFsbG9jYXRlZCAoZS5nLiBjbGVhbnVwIGZyb20gYVxcbisgKiAgICAgICAgZmFpbGVkIGFsbG9jYXRpb24pXFxuKyAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIG5ldHZzY19hbGxvY19idWZfcGFnZXMoKSwgb3IgTlVMTFxcbisgKiBAY2h1bmtfY250OiBudW1iZXIgb2YgZW50cmllcyBpbiBAY2h1bmtzXFxuKyAqXFxuKyAqIFdoZW4gQGNodW5rcyBpcyBOVUxMIHRoZSBidWZmZXIgaXMgYSBwbGFpbiB2emFsbG9jKCkgYWxsb2NhdGlvbi5cXG4rICpcXG4rICogT3RoZXJ3aXNlIHRlYXIgZG93biB0aGUgdm1hcCwgYW5kIGZvciBlYWNoIGNodW5rIHJlLWVuY3J5cHQgYW5kIGZyZWVcXG4rICogdGhlIHVuZGVybHlpbmcgcGFnZXMuIEFueSBjaHVuayB0aGF0IGNhbm5vdCBiZSByZS1lbmNyeXB0ZWQgaXMgbGVha2VkLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKHZvaWQgKmFkZHIsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG5ldHZzY19idWZfY2h1bmsgKmNodW5rcyxcXG4rXFx0XFx0XFx0XFx0ICB1MzIgY2h1bmtfY250KVxcbiB7XFxuLVxcdHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlO1xcbitcXHR1MzIgaTtcXG4gXFxuLVxcdG5ldF9kZXZpY2UgPSBremFsbG9jX29iaihzdHJ1Y3QgbmV0dnNjX2RldmljZSk7XFxuLVxcdGlmICghbmV0X2RldmljZSlcXG4rXFx0aWYgKCFjaHVua3MpIHtcXG4rXFx0XFx0dmZyZWUoYWRkcik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0dnVubWFwKGFkZHIpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNodW5rX2NudDsgaSsrKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgdmFkZHIgPVxcbitcXHRcXHRcXHQodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoY2h1bmtzW2ldLnBhZ2UpO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjaHVua3NbaV0ub3JkZXI7XFxuK1xcbitcXHRcXHRpZiAoc2V0X21lbW9yeV9lbmNyeXB0ZWQodmFkZHIsIDFVIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdF9fZnJlZV9wYWdlcyhjaHVua3NbaV0ucGFnZSwgb3JkZXIpO1xcbitcXHR9XFxuK1xcbitcXHRrdmZyZWUoY2h1bmtzKTtcXG4rfVxcbitcXG4rLypcXG4rICogbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyAtIGFsbG9jYXRlIGEgdmlydHVhbGx5LWNvbnRpZ3VvdXMsIGhvc3QtdmlzaWJsZVxcbisgKiBidWZmZXIgZm9yIHRoZSBuZXR2c2Mgc2VuZC9yZWNlaXZlIGFyZWEuXFxuKyAqXFxuKyAqIEBub2RlOiBOVU1BIG5vZGUgaGludCAoTlVNQV9OT19OT0RFIGZvciBhbnkgbm9kZSlcXG4rICogQHNpemU6IHJlcXVlc3RlZCBidWZmZXIgc2l6ZSBpbiBieXRlcyAocm91bmRlZCB1cCB0byBQQUdFX1NJWkUpXFxuKyAqIEBjaHVua3Nfb3V0OiBvbiBzdWNjZXNzLCBzZXQgdG8gdGhlIGFycmF5IG9mIHVuZGVybHlpbmcgY2h1bmtzXFxuKyAqIEBjaHVua19jbnRfb3V0OiBvbiBzdWNjZXNzLCBzZXQgdG8gdGhlIG51bWJlciBvZiBjaHVua3NcXG4rICpcXG4rICogQWxsb2NhdGVzIHRoZSBidWZmZXIgYXMgYSBzZXJpZXMgb2YgcGh5c2ljYWxseS1jb250aWd1b3VzIGNodW5rcyxcXG4rICogc3RhcnRpbmcgYXQgTUFYX1BBR0VfT1JERVIgYW5kIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIG9yZGVycyBvblxcbisgKiBhbGxvY2F0aW9uIGZhaWx1cmUuIEVhY2ggY2h1bmsgaXMgdHJhbnNpdGlvbmVkIHRvIGhvc3QtdmlzaWJsZSB2aWFcXG4rICogc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBvbiBpdHMgZGlyZWN0LW1hcCBhZGRyZXNzLCB0aGVuIGFsbCBjaHVua3MgYXJlXFxuKyAqIGNvbWJpbmVkIGludG8gYSB2aXJ0dWFsbHktY29udGlndW91cyByYW5nZSB2aWEgdm1hcCgpLlxcbisgKlxcbisgKiBSZXR1cm46IHRoZSB2bWFwKCllZCB2aXJ0dWFsIGFkZHJlc3MsIG9yIE5VTEwgb24gZmFpbHVyZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkICpuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGludCBub2RlLCB1MzIgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICoqY2h1bmtzX291dCxcXG4rXFx0XFx0XFx0XFx0ICAgIHUzMiAqY2h1bmtfY250X291dClcXG4re1xcbitcXHR1MzIgbnJfcGFnZXMgPSBQRk5fVVAoc2l6ZSk7XFxuK1xcdHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICpjaHVua3MgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDtcXG4rXFx0dW5zaWduZWQgaW50IG9yZGVyO1xcbitcXHR1MzIgY2h1bmtfY250ID0gMDtcXG4rXFx0dTMyIHBhZ2VfaWR4ID0gMDtcXG4rXFx0dTMyIHJlbWFpbmluZyA9IG5yX3BhZ2VzO1xcbitcXHR2b2lkICphZGRyO1xcbitcXHR1MzIgaTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdCpjaHVua3Nfb3V0ID0gTlVMTDtcXG4rXFx0KmNodW5rX2NudF9vdXQgPSAwO1xcbitcXG4rXFx0aWYgKCFucl9wYWdlcylcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2V3YWl0X2RyYWluKTtcXG4tXFx0bmV0X2RldmljZS1cXHUwMDNlZGVzdHJveSA9IGZhbHNlO1xcbi1cXHRuZXRfZGV2aWNlLVxcdTAwM2V0eF9kaXNhYmxlID0gdHJ1ZTtcXG4rXFx0LyogV29yc3QgY2FzZTogZXZlcnkgY2h1bmsgaXMgYSBzaW5nbGUgcGFnZS4gKi9cXG4rXFx0Y2h1bmtzID0ga3ZtYWxsb2NfYXJyYXkobnJfcGFnZXMsIHNpemVvZigqY2h1bmtzKSxcXG4rXFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbitcXHRpZiAoIWNodW5rcylcXG4rXFx0XFx0Z290byBlcnI7XFxuIFxcbi1cXHRuZXRfZGV2aWNlLVxcdTAwM2VtYXhfcGt0ID0gUk5ESVNfTUFYX1BLVF9ERUZBVUxUO1xcbi1cXHRuZXRfZGV2aWNlLVxcdTAwM2Vwa3RfYWxpZ24gPSBSTkRJU19QS1RfQUxJR05fREVGQVVMVDtcXG4rXFx0cGFnZXMgPSBrdm1hbGxvY19hcnJheShucl9wYWdlcywgc2l6ZW9mKCpwYWdlcyksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBhZ2VzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4gXFxuLVxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlY2hhbm5lbF9pbml0X3dhaXQpO1xcbi1cXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VzdWJjaGFuX29wZW4pO1xcbi1cXHRJTklUX1dPUksoXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXN1YmNoYW5fd29yaywgbmV0dnNjX3N1YmNoYW5fd29yayk7XFxuK1xcdC8qXFxuK1xcdCAqIEBvcmRlciBtb25vdG9uaWNhbGx5IGRlY3JlYXNlcyBhY3Jvc3MgaXRlcmF0aW9uc1xcbitcXHQgKlxcbitcXHQgKiBVc2UgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTiB0byBhdm9pZCBPT00ta2lsbGluZywgYnV0IHRyeVxcbitcXHQgKiBoYXJkZXIgYXQgb3JkZXIgMCBzaW5jZSB0aGF0IGlzIHRoZSBmaW5hbCBmYWxsYmFjay5cXG4rXFx0ICovXFxuK1xcdG9yZGVyID0gbWluX3QodW5zaWduZWQgaW50LCBNQVhfUEFHRV9PUkRFUiwgaWxvZzIobnJfcGFnZXMpKTtcXG4rXFx0d2hpbGUgKHJlbWFpbmluZykge1xcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0XFx0Z2ZwX3QgZ2ZwO1xcbitcXG4rXFx0XFx0b3JkZXIgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG9yZGVyLCBpbG9nMihyZW1haW5pbmcpKTtcXG4rXFxuK1xcdFxcdGZvciAoOzspIHtcXG4rXFx0XFx0XFx0Z2ZwID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk87XFxuK1xcdFxcdFxcdGlmIChvcmRlcilcXG4rXFx0XFx0XFx0XFx0Z2ZwIHw9IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk47XFxuK1xcdFxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKG5vZGUsIGdmcCwgb3JkZXIpO1xcbitcXHRcXHRcXHRpZiAocGFnZSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGlmICghb3JkZXIpXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHRcXHRcXHRvcmRlci0tO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRyZXR1cm4gbmV0X2RldmljZTtcXG4rXFx0XFx0cmV0ID0gc2V0X21lbW9yeV9kZWNyeXB0ZWQoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAxVSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBmYWlsZWQ7IHRoZSBwYWdlIHN0YXRlIGlzXFxuK1xcdFxcdFxcdCAqIHVua25vd24gc28gaXQgbXVzdCBiZSBsZWFrZWQgcmF0aGVyIHRoYW4gZnJlZWQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Y2h1bmtzW2NodW5rX2NudF0ucGFnZSA9IHBhZ2U7XFxuK1xcdFxcdGNodW5rc1tjaHVua19jbnRdLm9yZGVyID0gb3JkZXI7XFxuK1xcdFxcdGNodW5rX2NudCsrO1xcbitcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjICgxVSBcXHUwMDNjXFx1MDAzYyBvcmRlcik7IGkrKylcXG4rXFx0XFx0XFx0cGFnZXNbcGFnZV9pZHgrK10gPSBwYWdlICsgaTtcXG4rXFxuK1xcdFxcdHJlbWFpbmluZyAtPSAxVSBcXHUwMDNjXFx1MDAzYyBvcmRlcjtcXG4rXFx0fVxcbitcXG4rXFx0YWRkciA9IHZtYXAocGFnZXMsIG5yX3BhZ2VzLCBWTV9NQVAsIHBncHJvdF9kZWNyeXB0ZWQoUEFHRV9LRVJORUwpKTtcXG4rXFx0aWYgKCFhZGRyKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGt2ZnJlZShwYWdlcyk7XFxuK1xcdCpjaHVua3Nfb3V0ID0gY2h1bmtzO1xcbitcXHQqY2h1bmtfY250X291dCA9IGNodW5rX2NudDtcXG4rXFx0cmV0dXJuIGFkZHI7XFxuK1xcbitlcnI6XFxuK1xcdGt2ZnJlZShwYWdlcyk7XFxuK1xcdG5ldHZzY19mcmVlX2J1Zl9wYWdlcyhOVUxMLCBjaHVua3MsIGNodW5rX2NudCk7XFxuK1xcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbitzdGF0aWMgdm9pZCBfX2ZyZWVfbmV0dnNjX2RldmljZShzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbnZkZXYpXFxuIHtcXG4tXFx0c3RydWN0IG5ldHZzY19kZXZpY2UgKm52ZGV2XFxuLVxcdFxcdD0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBuZXR2c2NfZGV2aWNlLCByY3UpO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGtmcmVlKG52ZGV2LVxcdTAwM2VleHRlbnNpb24pO1xcbiBcXG4tXFx0aWYgKCFudmRldi1cXHUwMDNlcmVjdl9idWZfZ3BhZGxfaGFuZGxlLmRlY3J5cHRlZClcXG4tXFx0XFx0dmZyZWUobnZkZXYtXFx1MDAzZXJlY3ZfYnVmKTtcXG4tXFx0aWYgKCFudmRldi1cXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlLmRlY3J5cHRlZClcXG4tXFx0XFx0dmZyZWUobnZkZXYtXFx1MDAzZXNlbmRfYnVmKTtcXG4rXFx0bmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKG52ZGV2LVxcdTAwM2VyZWN2X2J1ZiwgbnZkZXYtXFx1MDAzZXJlY3ZfYnVmX2NodW5rcyxcXG4rXFx0XFx0XFx0ICAgICAgbnZkZXYtXFx1MDAzZXJlY3ZfYnVmX2NodW5rX2NudCk7XFxuK1xcdG5ldHZzY19mcmVlX2J1Zl9wYWdlcyhudmRldi1cXHUwMDNlc2VuZF9idWYsIG52ZGV2LVxcdTAwM2VzZW5kX2J1Zl9jaHVua3MsXFxuK1xcdFxcdFxcdCAgICAgIG52ZGV2LVxcdTAwM2VzZW5kX2J1Zl9jaHVua19jbnQpO1xcbiBcXHRiaXRtYXBfZnJlZShudmRldi1cXHUwMDNlc2VuZF9zZWN0aW9uX21hcCk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVlJTU19DSEFOTkVMX01BWDsgaSsrKSB7XFxuQEAgLTE3MCw5ICsyOTcsNTYgQEAgc3RhdGljIHZvaWQgZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4gXFx0a2ZyZWUobnZkZXYpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbit7XFxuK1xcdHN0cnVjdCByY3Vfd29yayAqcndvcmsgPSB0b19yY3Vfd29yayh3KTtcXG4rXFxuK1xcdF9fZnJlZV9uZXR2c2NfZGV2aWNlKGNvbnRhaW5lcl9vZihyd29yaywgc3RydWN0IG5ldHZzY19kZXZpY2UsIHJ3b3JrKSk7XFxuK31cXG4rXFxuK2ludCBuZXR2c2Nfd29ya3F1ZXVlX2luaXQodm9pZClcXG4re1xcbitcXHRuZXR2c2Nfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcImh2X25ldHZzY1xcXCIsIFdRX1VOQk9VTkQsIDApO1xcbitcXG4rXFx0cmV0dXJuIG5ldHZzY193cSA/IDAgOiAtRU5PTUVNO1xcbit9XFxuK1xcbit2b2lkIG5ldHZzY193b3JrcXVldWVfZGVzdHJveSh2b2lkKVxcbit7XFxuK1xcdHJjdV9iYXJyaWVyKCk7XFxuK1xcdGRlc3Ryb3lfd29ya3F1ZXVlKG5ldHZzY193cSk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqYWxsb2NfbmV0X2RldmljZSh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlO1xcbitcXG4rXFx0bmV0X2RldmljZSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBuZXR2c2NfZGV2aWNlKTtcXG4rXFx0aWYgKCFuZXRfZGV2aWNlKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXdhaXRfZHJhaW4pO1xcbitcXHRuZXRfZGV2aWNlLVxcdTAwM2VkZXN0cm95ID0gZmFsc2U7XFxuK1xcdG5ldF9kZXZpY2UtXFx1MDAzZXR4X2Rpc2FibGUgPSB0cnVlO1xcbitcXG4rXFx0bmV0X2RldmljZS1cXHUwMDNlbWF4X3BrdCA9IFJORElTX01BWF9QS1RfREVGQVVMVDtcXG4rXFx0bmV0X2RldmljZS1cXHUwMDNlcGt0X2FsaWduID0gUk5ESVNfUEtUX0FMSUdOX0RFRkFVTFQ7XFxuK1xcbitcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZWNoYW5uZWxfaW5pdF93YWl0KTtcXG4rXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc3ViY2hhbl9vcGVuKTtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VzdWJjaGFuX3dvcmssIG5ldHZzY19zdWJjaGFuX3dvcmspO1xcbitcXHRJTklUX1JDVV9XT1JLKFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2Vyd29yaywgZnJlZV9uZXR2c2NfZGV2aWNlKTtcXG4rXFxuK1xcdHJldHVybiBuZXRfZGV2aWNlO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2VfcmN1KHN0cnVjdCBuZXR2c2NfZGV2aWNlICpudmRldilcXG4ge1xcbi1cXHRjYWxsX3JjdShcXHUwMDI2bnZkZXYtXFx1MDAzZXJjdSwgZnJlZV9uZXR2c2NfZGV2aWNlKTtcXG4rXFx0LypcXG4rXFx0ICogRGVmZXIgdGhlIGFjdHVhbCBmcmVlIHRvIHByb2Nlc3MgY29udGV4dDogdnVubWFwKCkgYW5kXFxuK1xcdCAqIHNldF9tZW1vcnlfZW5jcnlwdGVkKCkgY2Fubm90IHJ1biBmcm9tIFJDVSBzb2Z0aXJxIGNvbnRleHQuXFxuK1xcdCAqL1xcbitcXHRxdWV1ZV9yY3Vfd29yayhuZXR2c2Nfd3EsIFxcdTAwMjZudmRldi1cXHUwMDNlcndvcmspO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZXR2c2NfcmV2b2tlX3JlY3ZfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG5AQCAtMzUxLDcgKzUyNSwyMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXFxuIFxcdFxcdGJ1Zl9zaXplID0gbWluX3QodW5zaWduZWQgaW50LCBidWZfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0IE5FVFZTQ19SRUNFSVZFX0JVRkZFUl9TSVpFX0xFR0FDWSk7XFxuIFxcbi1cXHRuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xcbitcXHRpZiAoZGV2aWNlLVxcdTAwM2VjaGFubmVsLVxcdTAwM2Vjb19leHRlcm5hbF9tZW1vcnkpIHtcXG4rXFx0XFx0LyogQ29uZmlkZW50aWFsIFZNIEJ1cyBsZWF2ZXMgYnVmZmVyIGVuY3J5cHRlZCAqL1xcbitcXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9jaHVua3MgPSBOVUxMO1xcbitcXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9jaHVua19jbnQgPSAwO1xcbitcXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBPdGhlcndpc2UsIGFsbG9jYXRlIGRlY3J5cHRlZCBidWZmZXIgKi9cXG4rXFx0XFx0bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWYgPVxcbitcXHRcXHRcXHRuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGNwdV90b19ub2RlKGRldmljZS1cXHUwMDNlY2hhbm5lbC1cXHUwMDNldGFyZ2V0X2NwdSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBidWZfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9jaHVua3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKCFuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zikge1xcbiBcXHRcXHRuZXRkZXZfZXJyKG5kZXYsXFxuIFxcdFxcdFxcdCAgIFxcXCJ1bmFibGUgdG8gYWxsb2NhdGUgcmVjZWl2ZSBidWZmZXIgb2Ygc2l6ZSAldVxcXFxuXFxcIixcXG5AQCAtMzY3LDkgKzU1NCwxMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXFxuIFxcdCAqIGNoYW5uZWwuICBOb3RlOiBUaGlzIGNhbGwgdXNlcyB0aGUgdm1idXMgY29ubmVjdGlvbiByYXRoZXJcXG4gXFx0ICogdGhhbiB0aGUgY2hhbm5lbCB0byBlc3RhYmxpc2ggdGhlIGdwYWRsIGhhbmRsZS5cXG4gXFx0ICovXFxuLVxcdHJldCA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbChkZXZpY2UtXFx1MDAzZWNoYW5uZWwsIG5ldF9kZXZpY2UtXFx1MDAzZXJlY3ZfYnVmLFxcbi1cXHRcXHRcXHRcXHQgICAgYnVmX3NpemUsXFxuLVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlcmVjdl9idWZfZ3BhZGxfaGFuZGxlKTtcXG4rXFx0cmV0ID0gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoZGV2aWNlLVxcdTAwM2VjaGFubmVsLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5ldF9kZXZpY2UtXFx1MDAzZXJlY3ZfYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJ1Zl9zaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1Zl9ncGFkbF9oYW5kbGUpO1xcbiBcXHRpZiAocmV0ICE9IDApIHtcXG4gXFx0XFx0bmV0ZGV2X2VycihuZGV2LFxcbiBcXHRcXHRcXHRcXFwidW5hYmxlIHRvIGVzdGFibGlzaCByZWNlaXZlIGJ1ZmZlcidzIGdwYWRsXFxcXG5cXFwiKTtcXG5AQCAtNDU3LDcgKzY0NSwxOSBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXFxuIFxcdGJ1Zl9zaXplID0gZGV2aWNlX2luZm8tXFx1MDAzZXNlbmRfc2VjdGlvbnMgKiBkZXZpY2VfaW5mby1cXHUwMDNlc2VuZF9zZWN0aW9uX3NpemU7XFxuIFxcdGJ1Zl9zaXplID0gcm91bmRfdXAoYnVmX3NpemUsIFBBR0VfU0laRSk7XFxuIFxcbi1cXHRuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xcbitcXHRpZiAoZGV2aWNlLVxcdTAwM2VjaGFubmVsLVxcdTAwM2Vjb19leHRlcm5hbF9tZW1vcnkpIHtcXG4rXFx0XFx0LyogQ29uZmlkZW50aWFsIFZNIEJ1cyBsZWF2ZXMgYnVmZmVyIGVuY3J5cHRlZCAqL1xcbitcXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9jaHVua3MgPSBOVUxMO1xcbitcXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9jaHVua19jbnQgPSAwO1xcbitcXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBPdGhlcndpc2UsIGFsbG9jYXRlIGRlY3J5cHRlZCBidWZmZXIgKi9cXG4rXFx0XFx0bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWYgPVxcbitcXHRcXHRcXHRuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGNwdV90b19ub2RlKGRldmljZS1cXHUwMDNlY2hhbm5lbC1cXHUwMDNldGFyZ2V0X2NwdSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBidWZfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1Zl9jaHVua3MsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWZfY2h1bmtfY250KTtcXG4rXFx0fVxcbiBcXHRpZiAoIW5ldF9kZXZpY2UtXFx1MDAzZXNlbmRfYnVmKSB7XFxuIFxcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcInVuYWJsZSB0byBhbGxvY2F0ZSBzZW5kIGJ1ZmZlciBvZiBzaXplICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICBidWZfc2l6ZSk7XFxuQEAgLTQ3MCw5ICs2NzAsMTAgQEAgc3RhdGljIGludCBuZXR2c2NfaW5pdF9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxcbiBcXHQgKiBjaGFubmVsLiAgTm90ZTogVGhpcyBjYWxsIHVzZXMgdGhlIHZtYnVzIGNvbm5lY3Rpb24gcmF0aGVyXFxuIFxcdCAqIHRoYW4gdGhlIGNoYW5uZWwgdG8gZXN0YWJsaXNoIHRoZSBncGFkbCBoYW5kbGUuXFxuIFxcdCAqL1xcbi1cXHRyZXQgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoZGV2aWNlLVxcdTAwM2VjaGFubmVsLCBuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1ZixcXG4tXFx0XFx0XFx0XFx0ICAgIGJ1Zl9zaXplLFxcbi1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXNlbmRfYnVmX2dwYWRsX2hhbmRsZSk7XFxuK1xcdHJldCA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkKGRldmljZS1cXHUwMDNlY2hhbm5lbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBuZXRfZGV2aWNlLVxcdTAwM2VzZW5kX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBidWZfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlKTtcXG4gXFx0aWYgKHJldCAhPSAwKSB7XFxuIFxcdFxcdG5ldGRldl9lcnIobmRldixcXG4gXFx0XFx0XFx0ICAgXFxcInVuYWJsZSB0byBlc3RhYmxpc2ggc2VuZCBidWZmZXIncyBncGFkbFxcXFxuXFxcIik7XFxuQEAgLTE4NjMsNyArMjA2NCwxMSBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxcbiBcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2bmV0X2RldmljZS1cXHUwMDNlY2hhbl90YWJsZVswXS5uYXBpKTtcXG4gXFxuIGNsZWFudXAyOlxcbi1cXHRmcmVlX25ldHZzY19kZXZpY2UoXFx1MDAyNm5ldF9kZXZpY2UtXFx1MDAzZXJjdSk7XFxuK1xcdC8qXFxuK1xcdCAqIG5ldF9kZXZpY2Ugd2FzIG5ldmVyIHB1Ymxpc2hlZCwgc28gd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGZvciBhblxcbitcXHQgKiBSQ1UgZ3JhY2UgcGVyaW9kIC0tIGNhbGwgdGhlIGZyZWUgcm91dGluZSBzeW5jaHJvbm91c2x5LlxcbitcXHQgKi9cXG4rXFx0X19mcmVlX25ldHZzY19kZXZpY2UobmV0X2RldmljZSk7XFxuIFxcbiBcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmMgYi9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jXFxuaW5kZXggZWU1YWI1Y2ViMmJlMmQuLjFkNDNjNzNmZDczZjEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcXG4rKysgYi9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjX2Rydi5jXFxuQEAgLTI4NjcsMTIgKzI4NjcsMTcgQEAgc3RhdGljIHZvaWQgX19leGl0IG5ldHZzY19kcnZfZXhpdCh2b2lkKVxcbiB7XFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZuZXR2c2NfbmV0ZGV2X25vdGlmaWVyKTtcXG4gXFx0dm1idXNfZHJpdmVyX3VucmVnaXN0ZXIoXFx1MDAyNm5ldHZzY19kcnYpO1xcbitcXHRuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3koKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBfX2luaXQgbmV0dnNjX2Rydl9pbml0KHZvaWQpXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdHJldCA9IG5ldHZzY193b3JrcXVldWVfaW5pdCgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0aWYgKHJpbmdfc2l6ZSBcXHUwMDNjIFJJTkdfU0laRV9NSU4pIHtcXG4gXFx0XFx0cmluZ19zaXplID0gUklOR19TSVpFX01JTjtcXG4gXFx0XFx0cHJfaW5mbyhcXFwiSW5jcmVhc2VkIHJpbmdfc2l6ZSB0byAldSAobWluIGFsbG93ZWQpXFxcXG5cXFwiLFxcbkBAIC0yODkwLDYgKzI4OTUsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXR2c2NfZHJ2X2luaXQodm9pZClcXG4gXFxuIGVycl92bWJ1c19yZWc6XFxuIFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZuZXR2c2NfbmV0ZGV2X25vdGlmaWVyKTtcXG4rXFx0bmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHlwZXJ2LmggYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXFxuaW5kZXggOTY0ZjFiZTgxNTBjNTkuLjljNmIxYjc3OTRiNDhlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHlwZXJ2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXFxuQEAgLTc4MSw2ICs3ODEsMTIgQEAgc3RydWN0IHZtYnVzX2dwYWRsIHtcXG4gXFx0dTMyIGdwYWRsX2hhbmRsZTtcXG4gXFx0dTMyIHNpemU7XFxuIFxcdHZvaWQgKmJ1ZmZlcjtcXG4rXFx0LypcXG4rXFx0ICogT25seSB1c2VkIGlmIHRoZSB2bWJ1cyBsYXllciBvd25zIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZlxcbitcXHQgKiBAYnVmZmVyLlxcbitcXHQgKiBJbmRpY2F0ZXMgQGJ1ZmZlciBtdXN0IGJlIHJlLWVuY3J5cHRlZCBhdCB0ZWFyZG93biBvciB0aGF0IGl0XFxuK1xcdCAqIG11c3QgYmUgbGVha2VkIGJlY2F1c2UgcmUtZW5jcnlwdGlvbiBmYWlsZWQuXFxuK1xcdCAqL1xcbiBcXHRib29sIGRlY3J5cHRlZDtcXG4gfTtcXG4gXFxuQEAgLTEyMDUsNiArMTIxMSwxMSBAQCBleHRlcm4gaW50IHZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdTMyIHNpemUsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpO1xcbiBcXG4rZXh0ZXJuIGludCB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICB2b2lkICprYnVmZmVyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpO1xcbitcXG4gZXh0ZXJuIGludCB2bWJ1c190ZWFyZG93bl9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgdm1idXNfZ3BhZGwgKmdwYWRsKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjA4LjA5MjU2NjU5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc4NDk3OTAzOTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhZUEVSVlwiLFxuICAgIFwiSFlQRVJWX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkXCIsXG4gICAgXCJ2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRcIixcbiAgICBcIm5ldHZzY19hbGxvY19idWZfcGFnZXNcIixcbiAgICBcIm5ldHZzY19mcmVlX2J1Zl9wYWdlc1wiLFxuICAgIFwibmV0dnNjX2luaXRfYnVmXCIsXG4gICAgXCJfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVyIChuZXR2c2MpIGFuZCBWTUJ1cyBjaGFubmVsIGNvZGUgdG8gbWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZiBHUEFETCBidWZmZXJzLCBwYXJ0aWN1bGFybHkgZm9yIENvbmZpZGVudGlhbCBWTXMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBhbGxvY2F0ZS9mcmVlIGJ1ZmZlcnMgYW5kIGVzdGFibGlzaCBHUEFETHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNGI1ZmQ4Njk3MWYyMjA2MWMwOWM4OGRiNWVjZjc1OWViMjJjYmQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTQ6NTQ6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2h2L2NoYW5uZWwuYyBiL2RyaXZlcnMvaHYvY2hhbm5lbC5jXG5pbmRleCA2ODIxZjIyNTI0OGIxOS4uMDE2NjM2N2E0ZGYzNzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2h2L2NoYW5uZWwuY1xuKysrIGIvZHJpdmVycy9odi9jaGFubmVsLmNcbkBAIC00MjYsNyArNDI2LDEzIEBAIHN0YXRpYyB2b2lkIHZtYnVzX2ZyZWVfY2hhbm5lbF9tc2dpbmZvKHN0cnVjdCB2bWJ1c19jaGFubmVsX21zZ2luZm8gKm1zZ2luZm8pXG4gfVxuIFxuIC8qXG4tICogX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwgLSBFc3RhYmxpc2ggYSBHUEFETCBmb3IgYSBidWZmZXIgb3IgcmluZ2J1ZmZlclxuKyAqIF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsIC0gRXN0YWJsaXNoIGEgR1BBREwgZm9yIGEgYnVmZmVyIG9yIHJpbmdidWZmZXIuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgaGFuZGxlcyB0aGUgR1BBREwgaGFuZHNoYWtlIHdpdGggdGhlIGhvc3QuICBUaGUgY2FsbGVyXG4rICogaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgQGtidWZmZXIgaXMgaW4gdGhlIGVuY3J5cHRpb24gc3RhdGUgdGhlXG4rICogaG9zdCBleHBlY3RzIChob3N0LXZpc2libGUgLyBcImRlY3J5cHRlZFwiIGZvciBjb25maWRlbnRpYWwgVk1zKTsgdGhpc1xuKyAqIGZ1bmN0aW9uIG5ldmVyIGNhbGxzIHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgb3Igc2V0X21lbW9yeV9lbmNyeXB0ZWQoKS5cbisgKiBJdCBhbHNvIGxlYXZlcyBncGFkbC1cdTAwM2VkZWNyeXB0ZWQgdW50b3VjaGVkLCBzbyB0aGUgY2FsbGVyIG11c3Qgc2V0IGl0LlxuICAqXG4gICogQGNoYW5uZWw6IGEgY2hhbm5lbFxuICAqIEB0eXBlOiB0aGUgdHlwZSBvZiB0aGUgY29ycmVzcG9uZGluZyBHUEFETCwgb25seSBtZWFuaW5nZnVsIGZvciB0aGUgZ3Vlc3QuXG5AQCAtNDM0LDcgKzQ0MCw3IEBAIHN0YXRpYyB2b2lkIHZtYnVzX2ZyZWVfY2hhbm5lbF9tc2dpbmZvKHN0cnVjdCB2bWJ1c19jaGFubmVsX21zZ2luZm8gKm1zZ2luZm8pXG4gICogQHNpemU6IHBhZ2Utc2l6ZSBtdWx0aXBsZVxuICAqIEBzZW5kX29mZnNldDogdGhlIG9mZnNldCAoaW4gYnl0ZXMpIHdoZXJlIHRoZSBzZW5kIHJpbmcgYnVmZmVyIHN0YXJ0cyxcbiAgKiAgICAgICAgICAgICAgc2hvdWxkIGJlIDAgZm9yIEJVRkZFUiB0eXBlIGdwYWRsXG4tICogQGdwYWRsX2hhbmRsZTogc29tZSBmdW5reSB0aGluZ1xuKyAqIEBncGFkbDogb3V0IHBhcmFtZXRlciByZWNlaXZpbmcgdGhlIGVzdGFibGlzaGVkIEdQQURMIGhhbmRsZS9idWZmZXIvc2l6ZVxuICAqL1xuIHN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4gXHRcdFx0XHQgICBlbnVtIGh2X2dwYWRsX3R5cGUgdHlwZSwgdm9pZCAqa2J1ZmZlcixcbkBAIC00NTQsMzAgKzQ2MCw4IEBAIHN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4gXHRcdChhdG9taWNfaW5jX3JldHVybihcdTAwMjZ2bWJ1c19jb25uZWN0aW9uLm5leHRfZ3BhZGxfaGFuZGxlKSAtIDEpO1xuIFxuIFx0cmV0ID0gY3JlYXRlX2dwYWRsX2hlYWRlcih0eXBlLCBrYnVmZmVyLCBzaXplLCBzZW5kX29mZnNldCwgXHUwMDI2bXNnaW5mbyk7XG4tXHRpZiAocmV0KSB7XG4tXHRcdGdwYWRsLVx1MDAzZWRlY3J5cHRlZCA9IGZhbHNlO1xuK1x0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdGdwYWRsLVx1MDAzZWRlY3J5cHRlZCA9ICEoKGNoYW5uZWwtXHUwMDNlY29fZXh0ZXJuYWxfbWVtb3J5IFx1MDAyNlx1MDAyNiB0eXBlID09IEhWX0dQQURMX0JVRkZFUikgfHxcbi1cdFx0KGNoYW5uZWwtXHUwMDNlY29fcmluZ19idWZmZXIgXHUwMDI2XHUwMDI2IHR5cGUgPT0gSFZfR1BBRExfUklORykpO1xuLVx0aWYgKGdwYWRsLVx1MDAzZWRlY3J5cHRlZCkge1xuLVx0XHQvKlxuLVx0XHQgKiBUaGUgXCJkZWNyeXB0ZWRcIiBmbGFnIGJlaW5nIHRydWUgYXNzdW1lcyB0aGF0IHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgc3VjY2VlZHMuXG4tXHRcdCAqIEJ1dCBpZiBpdCBmYWlscywgdGhlIGVuY3J5cHRpb24gc3RhdGUgb2YgdGhlIG1lbW9yeSBpcyB1bmtub3duLiBJbiB0aGF0IGNhc2UsXG4tXHRcdCAqIGxlYXZlIFwiZGVjcnlwdGVkXCIgYXMgdHJ1ZSB0byBlbnN1cmUgdGhlIG1lbW9yeSBpcyBsZWFrZWQgaW5zdGVhZCBvZiBnb2luZyBiYWNrXG4tXHRcdCAqIG9uIHRoZSBmcmVlIGxpc3QuXG4tXHRcdCAqL1xuLVx0XHRyZXQgPSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylrYnVmZmVyLFxuLVx0XHRcdFx0XHRQRk5fVVAoc2l6ZSkpO1xuLVx0XHRpZiAocmV0KSB7XG4tXHRcdFx0ZGV2X3dhcm4oXHUwMDI2Y2hhbm5lbC1cdTAwM2VkZXZpY2Vfb2JqLVx1MDAzZWRldmljZSxcbi1cdFx0XHRcdFwiRmFpbGVkIHRvIHNldCBob3N0IHZpc2liaWxpdHkgZm9yIG5ldyBHUEFETCAlZC5cXG5cIixcbi1cdFx0XHRcdHJldCk7XG4tXHRcdFx0dm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8obXNnaW5mbyk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cdFx0fVxuLVx0fVxuIFxuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNm1zZ2luZm8tXHUwMDNld2FpdGV2ZW50KTtcbiBcdG1zZ2luZm8tXHUwMDNld2FpdGluZ19jaGFubmVsID0gY2hhbm5lbDtcbkBAIC01NTMsMTkgKzUzNyw0NyBAQCBzdGF0aWMgaW50IF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ2bWJ1c19jb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywgZmxhZ3MpO1xuIFxuIFx0dm1idXNfZnJlZV9jaGFubmVsX21zZ2luZm8obXNnaW5mbyk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbiBcbi1cdGlmIChyZXQpIHtcbi1cdFx0Lypcbi1cdFx0ICogSWYgc2V0X21lbW9yeV9lbmNyeXB0ZWQoKSBmYWlscywgdGhlIGRlY3J5cHRlZCBmbGFnIGlzXG4tXHRcdCAqIGxlZnQgYXMgdHJ1ZSBzbyB0aGUgbWVtb3J5IGlzIGxlYWtlZCBpbnN0ZWFkIG9mIGJlaW5nXG4tXHRcdCAqIHB1dCBiYWNrIG9uIHRoZSBmcmVlIGxpc3QuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZ3BhZGwtXHUwMDNlZGVjcnlwdGVkKSB7XG4tXHRcdFx0aWYgKCFzZXRfbWVtb3J5X2VuY3J5cHRlZCgodW5zaWduZWQgbG9uZylrYnVmZmVyLCBQRk5fVVAoc2l6ZSkpKVxuLVx0XHRcdFx0Z3BhZGwtXHUwMDNlZGVjcnlwdGVkID0gZmFsc2U7XG4rLypcbisgKiB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHQgLSBNYW5hZ2UgdGhlIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mXG4rICogQGtidWZmZXIgYXJvdW5kIGEgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoKSBjYWxsLlxuKyAqXG4rICogRGVjcnlwdHMgQGtidWZmZXIgKG1ha2luZyBpdCBob3N0LXZpc2libGUpIHVubGVzcyB0aGUgY2hhbm5lbCB3YXMgY3JlYXRlZFxuKyAqIHdpdGggY29uZmlkZW50aWFsIG1lbW9yeSBmb3IgQHR5cGUsIHRoZW4gZXN0YWJsaXNoZXMgdGhlIEdQQURMLiAgT25cbisgKiBlc3RhYmxpc2ggZmFpbHVyZSB0aGUgYnVmZmVyIGlzIHJlLWVuY3J5cHRlZCBzbyB0aGUgY2FsbGVyIGNhbiBmcmVlIGl0LlxuKyAqXG4rICogU2V0cyBncGFkbC1cdTAwM2VkZWNyeXB0ZWQ7IHNlZSB0aGUgY29tbWVudCBvbiBzdHJ1Y3Qgdm1idXNfZ3BhZGw6OmRlY3J5cHRlZC5cbisgKi9cbitzdGF0aWMgaW50IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbitcdFx0XHRcdFx0ICAgICBlbnVtIGh2X2dwYWRsX3R5cGUgdHlwZSxcbitcdFx0XHRcdFx0ICAgICB2b2lkICprYnVmZmVyLCB1MzIgc2l6ZSxcbitcdFx0XHRcdFx0ICAgICB1MzIgc2VuZF9vZmZzZXQsXG4rXHRcdFx0XHRcdCAgICAgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbClcbit7XG4rXHRib29sIGRlY3J5cHQgPSAhKChjaGFubmVsLVx1MDAzZWNvX2V4dGVybmFsX21lbW9yeSBcdTAwMjZcdTAwMjYgdHlwZSA9PSBIVl9HUEFETF9CVUZGRVIpIHx8XG4rXHRcdFx0IChjaGFubmVsLVx1MDAzZWNvX3JpbmdfYnVmZmVyIFx1MDAyNlx1MDAyNiB0eXBlID09IEhWX0dQQURMX1JJTkcpKTtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoZGVjcnlwdCkge1xuK1x0XHRyZXQgPSBzZXRfbWVtb3J5X2RlY3J5cHRlZCgodW5zaWduZWQgbG9uZylrYnVmZmVyLCBQRk5fVVAoc2l6ZSkpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZGV2X3dhcm4oXHUwMDI2Y2hhbm5lbC1cdTAwM2VkZXZpY2Vfb2JqLVx1MDAzZWRldmljZSxcbitcdFx0XHRcdCBcIkZhaWxlZCB0byBzZXQgaG9zdCB2aXNpYmlsaXR5IGZvciBuZXcgR1BBREwgJWQuXFxuXCIsXG4rXHRcdFx0XHQgcmV0KTtcbitcdFx0XHQvKiBFbmNyeXB0aW9uIHN0YXRlIHVua25vd247IHNpZ25hbCBjYWxsZXIgdG8gbGVhay4gKi9cbitcdFx0XHRncGFkbC1cdTAwM2VkZWNyeXB0ZWQgPSB0cnVlO1xuK1x0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbiBcdH1cbiBcbitcdGdwYWRsLVx1MDAzZWRlY3J5cHRlZCA9IGRlY3J5cHQ7XG4rXHRyZXQgPSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChjaGFubmVsLCB0eXBlLCBrYnVmZmVyLCBzaXplLCBzZW5kX29mZnNldCxcbitcdFx0XHRcdCAgICAgIGdwYWRsKTtcbitcdGlmIChyZXQgXHUwMDI2XHUwMDI2IGRlY3J5cHQgXHUwMDI2XHUwMDI2XG4rXHQgICAgIXNldF9tZW1vcnlfZW5jcnlwdGVkKCh1bnNpZ25lZCBsb25nKWtidWZmZXIsIFBGTl9VUChzaXplKSkpXG4rXHRcdGdwYWRsLVx1MDAzZWRlY3J5cHRlZCA9IGZhbHNlO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNTgwLDExICs1OTIsNDAgQEAgc3RhdGljIGludCBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLCB2b2lkICprYnVmZmVyLFxuIFx0XHRcdCAgdTMyIHNpemUsIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpXG4ge1xuLVx0cmV0dXJuIF9fdm1idXNfZXN0YWJsaXNoX2dwYWRsKGNoYW5uZWwsIEhWX0dQQURMX0JVRkZFUiwga2J1ZmZlciwgc2l6ZSxcbi1cdFx0XHRcdCAgICAgICAwVSwgZ3BhZGwpO1xuK1x0cmV0dXJuIHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChjaGFubmVsLCBIVl9HUEFETF9CVUZGRVIsXG4rXHRcdFx0XHRcdFx0IGtidWZmZXIsIHNpemUsIDBVLCBncGFkbCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2VzdGFibGlzaF9ncGFkbCk7XG4gXG4rLypcbisgKiB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZCAtIEVzdGFibGlzaCBhIEdQQURMIGZvciBhIGJ1ZmZlclxuKyAqIHdob3NlIGVuY3J5cHRpb24gc3RhdGUgaXMgbWFuYWdlZCBieSB0aGUgY2FsbGVyLlxuKyAqXG4rICogQGNoYW5uZWw6IGEgY2hhbm5lbFxuKyAqIEBrYnVmZmVyOiBhIGJ1ZmZlciB0aGF0IHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgdHJhbnNpdGlvbmVkIHRvIGhvc3QtdmlzaWJsZVxuKyAqICAgICAgICAgICAoZGVjcnlwdGVkKSB2aWEgc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBvciBhbiBlcXVpdmFsZW50IG1lY2hhbmlzbS5cbisgKiBAc2l6ZTogcGFnZS1zaXplIG11bHRpcGxlXG4rICogQGdwYWRsOiBvdXQgcGFyYW1ldGVyIHJlY2VpdmluZyB0aGUgZXN0YWJsaXNoZWQgR1BBRExcbisgKlxuKyAqIFVubGlrZSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjYWxsXG4rICogc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBvbiBAa2J1ZmZlciwgYW5kIHRoZSBtYXRjaGluZyB2bWJ1c190ZWFyZG93bl9ncGFkbCgpXG4rICogY2FsbCB3aWxsIG5vdCBjYWxsIHNldF9tZW1vcnlfZW5jcnlwdGVkKCkgb24gaXQuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlXG4rICogZm9yIHRoZSBmdWxsIGVuY3J5cHRpb24gbGlmZWN5Y2xlIG9mIEBrYnVmZmVyOyBvbiByZXR1cm4gZ3BhZGwtXHUwMDNlZGVjcnlwdGVkXG4rICogaXMgc2V0IHRvIGZhbHNlIHRvIHJlY29yZCB0aGF0IHZtYnVzIGRvZXMgbm90IG93biB0aGUgZW5jcnlwdGlvbiBzdGF0ZS5cbisgKi9cbitpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4rXHRcdFx0XHRcdCAgIHZvaWQgKmtidWZmZXIsIHUzMiBzaXplLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3Qgdm1idXNfZ3BhZGwgKmdwYWRsKVxuK3tcbitcdGludCByZXQgPSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChjaGFubmVsLCBIVl9HUEFETF9CVUZGRVIsIGtidWZmZXIsXG4rXHRcdFx0XHRcdCAgc2l6ZSwgMFUsIGdwYWRsKTtcbitcbitcdC8qIENhbGxlciBvd25zIEBrYnVmZmVyJ3MgZW5jcnlwdGlvbjsgdGVhcmRvd24gbXVzdCBub3QgdG91Y2ggaXQuICovXG4rXHRncGFkbC1cdTAwM2VkZWNyeXB0ZWQgPSBmYWxzZTtcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkKTtcbitcbiAvKipcbiAgKiByZXF1ZXN0X2Fycl9pbml0IC0gQWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhlIHJlcXVlc3RvciBhcnJheS4gRWFjaCBzbG90XG4gICoga2VlcHMgdHJhY2sgb2YgdGhlIG5leHQgYXZhaWxhYmxlIHNsb3QgaW4gdGhlIGFycmF5LiBJbml0aWFsbHksIGVhY2hcbkBAIC02ODUsMTEgKzcyNiwxMSBAQCBzdGF0aWMgaW50IF9fdm1idXNfb3BlbihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqbmV3Y2hhbm5lbCxcbiBcdC8qIEVzdGFibGlzaCB0aGUgZ3BhZGwgZm9yIHRoZSByaW5nIGJ1ZmZlciAqL1xuIFx0bmV3Y2hhbm5lbC1cdTAwM2VyaW5nYnVmZmVyX2dwYWRsaGFuZGxlLmdwYWRsX2hhbmRsZSA9IDA7XG4gXG4tXHRlcnIgPSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbChuZXdjaGFubmVsLCBIVl9HUEFETF9SSU5HLFxuLVx0XHRcdFx0ICAgICAgcGFnZV9hZGRyZXNzKG5ld2NoYW5uZWwtXHUwMDNlcmluZ2J1ZmZlcl9wYWdlKSxcbi1cdFx0XHRcdCAgICAgIChzZW5kX3BhZ2VzICsgcmVjdl9wYWdlcykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHQgICAgICBuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfc2VuZF9vZmZzZXQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHQgICAgICBcdTAwMjZuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUpO1xuK1x0ZXJyID0gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KG5ld2NoYW5uZWwsIEhWX0dQQURMX1JJTkcsXG4rXHRcdFx0XHRcdFx0cGFnZV9hZGRyZXNzKG5ld2NoYW5uZWwtXHUwMDNlcmluZ2J1ZmZlcl9wYWdlKSxcbitcdFx0XHRcdFx0XHQoc2VuZF9wYWdlcyArIHJlY3ZfcGFnZXMpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuK1x0XHRcdFx0XHRcdG5ld2NoYW5uZWwtXHUwMDNlcmluZ2J1ZmZlcl9zZW5kX29mZnNldCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbitcdFx0XHRcdFx0XHRcdTAwMjZuZXdjaGFubmVsLVx1MDAzZXJpbmdidWZmZXJfZ3BhZGxoYW5kbGUpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcl9jbGVhbl9yaW5nO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0LmggYi9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXG5pbmRleCA3Mzk3YzY5M2Y5ODRhZi4uYjBjNGNiMGY3YTRjZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXG4rKysgYi9kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oXG5AQCAtMjIwLDYgKzIyMCw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlX2NvbnRleHQ7XG4gXG4gZXh0ZXJuIHUzMiBuZXR2c2NfcmluZ19ieXRlcztcbiBcbitpbnQgbmV0dnNjX3dvcmtxdWV1ZV9pbml0KHZvaWQpO1xuK3ZvaWQgbmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KHZvaWQpO1xuIHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXR2c2NfZGV2aWNlX2FkZChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZXR2c2NfZGV2aWNlX2luZm8gKmluZm8pO1xuIGludCBuZXR2c2NfYWxsb2NfcmVjdl9jb21wX3Jpbmcoc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2UsIHUzMiBxX2lkeCk7XG5AQCAtMTE0Nyw2ICsxMTQ5LDE2IEBAIHN0cnVjdCBuZXR2c2NfY2hhbm5lbCB7XG4gXHRzdHJ1Y3QgbmV0dnNjX3N0YXRzX3J4IHJ4X3N0YXRzO1xuIH07XG4gXG4rLyogQSBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgY2h1bmsgb2YgbmV0dnNjIGJ1ZmZlci5cbisgKlxuKyAqIFRoZSBjaHVuayBsaXN0IGlzIHByZXNlcnZlZCBzbyBlYWNoIGNodW5rIGNhbiBiZSBpbmRpdmlkdWFsbHkgZnJlZWQgYXRcbisgKiB0ZWFyZG93bi5cbisgKi9cbitzdHJ1Y3QgbmV0dnNjX2J1Zl9jaHVuayB7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdHVuc2lnbmVkIGludCBvcmRlcjtcbit9O1xuK1xuIC8qIFBlciBuZXR2c2MgZGV2aWNlICovXG4gc3RydWN0IG5ldHZzY19kZXZpY2Uge1xuIFx0dTMyIG52c3BfdmVyc2lvbjtcbkBAIC0xMTU4LDYgKzExNzAsOCBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSB7XG4gXHQvKiBSZWNlaXZlIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgdXMgYnV0IG1hbmFnZXMgYnkgTmV0VlNQICovXG4gXHR2b2lkICpyZWN2X2J1ZjtcbiBcdHUzMiByZWN2X2J1Zl9zaXplOyAvKiBhbGxvY2F0ZWQgYnl0ZXMgKi9cbitcdHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICpyZWN2X2J1Zl9jaHVua3M7XG4rXHR1MzIgcmVjdl9idWZfY2h1bmtfY250O1xuIFx0c3RydWN0IHZtYnVzX2dwYWRsIHJlY3ZfYnVmX2dwYWRsX2hhbmRsZTtcbiBcdHUzMiByZWN2X3NlY3Rpb25fY250O1xuIFx0dTMyIHJlY3Zfc2VjdGlvbl9zaXplO1xuQEAgLTExNjYsNiArMTE4MCw4IEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHtcbiBcdC8qIFNlbmQgYnVmZmVyIGFsbG9jYXRlZCBieSB1cyAqL1xuIFx0dm9pZCAqc2VuZF9idWY7XG4gXHR1MzIgc2VuZF9idWZfc2l6ZTtcbitcdHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICpzZW5kX2J1Zl9jaHVua3M7XG4rXHR1MzIgc2VuZF9idWZfY2h1bmtfY250O1xuIFx0c3RydWN0IHZtYnVzX2dwYWRsIHNlbmRfYnVmX2dwYWRsX2hhbmRsZTtcbiBcdHUzMiBzZW5kX3NlY3Rpb25fY250O1xuIFx0dTMyIHNlbmRfc2VjdGlvbl9zaXplO1xuQEAgLTExOTMsNyArMTIwOSw3IEBAIHN0cnVjdCBuZXR2c2NfZGV2aWNlIHtcbiBcbiBcdHN0cnVjdCBuZXR2c2NfY2hhbm5lbCBjaGFuX3RhYmxlW1ZSU1NfQ0hBTk5FTF9NQVhdO1xuIFxuLVx0c3RydWN0IHJjdV9oZWFkIHJjdTtcbitcdHN0cnVjdCByY3Vfd29yayByd29yaztcbiB9O1xuIFxuIC8qIE5kaXNJbml0aWFsaXplIG1lc3NhZ2UgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMgYi9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmNcbmluZGV4IDU5ZTk1MzQxZjliMWU1Li4yNTA1ZDEwZTIyMDEwMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY1xuKysrIGIvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jXG5AQCAtMTQsNiArMTQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xvZzIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuQEAgLTI4LDYgKzMwLDggQEBcbiAjaW5jbHVkZSBcImh5cGVydl9uZXQuaFwiXG4gI2luY2x1ZGUgXCJuZXR2c2NfdHJhY2UuaFwiXG4gXG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXR2c2Nfd3E7XG4rXG4gLypcbiAgKiBTd2l0Y2ggdGhlIGRhdGEgcGF0aCBmcm9tIHRoZSBzeW50aGV0aWMgaW50ZXJmYWNlIHRvIHRoZSBWRlxuICAqIGludGVyZmFjZS5cbkBAIC0xMjUsNDAgKzEyOSwxNjMgQEAgc3RhdGljIHZvaWQgbmV0dnNjX3N1YmNoYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXG4gXHRydG5sX3VubG9jaygpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IG5ldHZzY19kZXZpY2UgKmFsbG9jX25ldF9kZXZpY2Uodm9pZClcbisvKlxuKyAqIG5ldHZzY19mcmVlX2J1Zl9wYWdlcyAtIHJlbGVhc2UgYSBuZXR2c2Mgc2VuZC9yZWNlaXZlIGJ1ZmZlci5cbisgKlxuKyAqIEBhZGRyOiBidWZmZXIgYWRkcmVzcywgb3IgTlVMTCBpZiBub25lIHdhcyBhbGxvY2F0ZWQgKGUuZy4gY2xlYW51cCBmcm9tIGFcbisgKiAgICAgICAgZmFpbGVkIGFsbG9jYXRpb24pXG4rICogQGNodW5rczogY2h1bmtzIGFycmF5IGZyb20gbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcygpLCBvciBOVUxMXG4rICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xuKyAqXG4rICogV2hlbiBAY2h1bmtzIGlzIE5VTEwgdGhlIGJ1ZmZlciBpcyBhIHBsYWluIHZ6YWxsb2MoKSBhbGxvY2F0aW9uLlxuKyAqXG4rICogT3RoZXJ3aXNlIHRlYXIgZG93biB0aGUgdm1hcCwgYW5kIGZvciBlYWNoIGNodW5rIHJlLWVuY3J5cHQgYW5kIGZyZWVcbisgKiB0aGUgdW5kZXJseWluZyBwYWdlcy4gQW55IGNodW5rIHRoYXQgY2Fubm90IGJlIHJlLWVuY3J5cHRlZCBpcyBsZWFrZWQuXG4rICovXG4rc3RhdGljIHZvaWQgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKHZvaWQgKmFkZHIsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICpjaHVua3MsXG4rXHRcdFx0XHQgIHUzMiBjaHVua19jbnQpXG4ge1xuLVx0c3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldF9kZXZpY2U7XG4rXHR1MzIgaTtcbiBcbi1cdG5ldF9kZXZpY2UgPSBremFsbG9jX29iaihzdHJ1Y3QgbmV0dnNjX2RldmljZSk7XG4tXHRpZiAoIW5ldF9kZXZpY2UpXG4rXHRpZiAoIWNodW5rcykge1xuK1x0XHR2ZnJlZShhZGRyKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0dnVubWFwKGFkZHIpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2h1bmtfY250OyBpKyspIHtcbitcdFx0dW5zaWduZWQgbG9uZyB2YWRkciA9XG4rXHRcdFx0KHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKGNodW5rc1tpXS5wYWdlKTtcbitcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gY2h1bmtzW2ldLm9yZGVyO1xuK1xuK1x0XHRpZiAoc2V0X21lbW9yeV9lbmNyeXB0ZWQodmFkZHIsIDFVIFx1MDAzY1x1MDAzYyBvcmRlcikpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdF9fZnJlZV9wYWdlcyhjaHVua3NbaV0ucGFnZSwgb3JkZXIpO1xuK1x0fVxuK1xuK1x0a3ZmcmVlKGNodW5rcyk7XG4rfVxuK1xuKy8qXG4rICogbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyAtIGFsbG9jYXRlIGEgdmlydHVhbGx5LWNvbnRpZ3VvdXMsIGhvc3QtdmlzaWJsZVxuKyAqIGJ1ZmZlciBmb3IgdGhlIG5ldHZzYyBzZW5kL3JlY2VpdmUgYXJlYS5cbisgKlxuKyAqIEBub2RlOiBOVU1BIG5vZGUgaGludCAoTlVNQV9OT19OT0RFIGZvciBhbnkgbm9kZSlcbisgKiBAc2l6ZTogcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGluIGJ5dGVzIChyb3VuZGVkIHVwIHRvIFBBR0VfU0laRSlcbisgKiBAY2h1bmtzX291dDogb24gc3VjY2Vzcywgc2V0IHRvIHRoZSBhcnJheSBvZiB1bmRlcmx5aW5nIGNodW5rc1xuKyAqIEBjaHVua19jbnRfb3V0OiBvbiBzdWNjZXNzLCBzZXQgdG8gdGhlIG51bWJlciBvZiBjaHVua3NcbisgKlxuKyAqIEFsbG9jYXRlcyB0aGUgYnVmZmVyIGFzIGEgc2VyaWVzIG9mIHBoeXNpY2FsbHktY29udGlndW91cyBjaHVua3MsXG4rICogc3RhcnRpbmcgYXQgTUFYX1BBR0VfT1JERVIgYW5kIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIG9yZGVycyBvblxuKyAqIGFsbG9jYXRpb24gZmFpbHVyZS4gRWFjaCBjaHVuayBpcyB0cmFuc2l0aW9uZWQgdG8gaG9zdC12aXNpYmxlIHZpYVxuKyAqIHNldF9tZW1vcnlfZGVjcnlwdGVkKCkgb24gaXRzIGRpcmVjdC1tYXAgYWRkcmVzcywgdGhlbiBhbGwgY2h1bmtzIGFyZVxuKyAqIGNvbWJpbmVkIGludG8gYSB2aXJ0dWFsbHktY29udGlndW91cyByYW5nZSB2aWEgdm1hcCgpLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgdm1hcCgpZWQgdmlydHVhbCBhZGRyZXNzLCBvciBOVUxMIG9uIGZhaWx1cmUuXG4rICovXG4rc3RhdGljIHZvaWQgKm5ldHZzY19hbGxvY19idWZfcGFnZXMoaW50IG5vZGUsIHUzMiBzaXplLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICoqY2h1bmtzX291dCxcbitcdFx0XHRcdCAgICB1MzIgKmNodW5rX2NudF9vdXQpXG4re1xuK1x0dTMyIG5yX3BhZ2VzID0gUEZOX1VQKHNpemUpO1xuK1x0c3RydWN0IG5ldHZzY19idWZfY2h1bmsgKmNodW5rcyA9IE5VTEw7XG4rXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDtcbitcdHVuc2lnbmVkIGludCBvcmRlcjtcbitcdHUzMiBjaHVua19jbnQgPSAwO1xuK1x0dTMyIHBhZ2VfaWR4ID0gMDtcbitcdHUzMiByZW1haW5pbmcgPSBucl9wYWdlcztcbitcdHZvaWQgKmFkZHI7XG4rXHR1MzIgaTtcbitcdGludCByZXQ7XG4rXG4rXHQqY2h1bmtzX291dCA9IE5VTEw7XG4rXHQqY2h1bmtfY250X291dCA9IDA7XG4rXG4rXHRpZiAoIW5yX3BhZ2VzKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2bmV0X2RldmljZS1cdTAwM2V3YWl0X2RyYWluKTtcbi1cdG5ldF9kZXZpY2UtXHUwMDNlZGVzdHJveSA9IGZhbHNlO1xuLVx0bmV0X2RldmljZS1cdTAwM2V0eF9kaXNhYmxlID0gdHJ1ZTtcbitcdC8qIFdvcnN0IGNhc2U6IGV2ZXJ5IGNodW5rIGlzIGEgc2luZ2xlIHBhZ2UuICovXG4rXHRjaHVua3MgPSBrdm1hbGxvY19hcnJheShucl9wYWdlcywgc2l6ZW9mKCpjaHVua3MpLFxuK1x0XHRcdFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuK1x0aWYgKCFjaHVua3MpXG4rXHRcdGdvdG8gZXJyO1xuIFxuLVx0bmV0X2RldmljZS1cdTAwM2VtYXhfcGt0ID0gUk5ESVNfTUFYX1BLVF9ERUZBVUxUO1xuLVx0bmV0X2RldmljZS1cdTAwM2Vwa3RfYWxpZ24gPSBSTkRJU19QS1RfQUxJR05fREVGQVVMVDtcbitcdHBhZ2VzID0ga3ZtYWxsb2NfYXJyYXkobnJfcGFnZXMsIHNpemVvZigqcGFnZXMpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcGFnZXMpXG4rXHRcdGdvdG8gZXJyO1xuIFxuLVx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlY2hhbm5lbF9pbml0X3dhaXQpO1xuLVx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXN1YmNoYW5fb3Blbik7XG4tXHRJTklUX1dPUksoXHUwMDI2bmV0X2RldmljZS1cdTAwM2VzdWJjaGFuX3dvcmssIG5ldHZzY19zdWJjaGFuX3dvcmspO1xuK1x0LypcbitcdCAqIEBvcmRlciBtb25vdG9uaWNhbGx5IGRlY3JlYXNlcyBhY3Jvc3MgaXRlcmF0aW9uc1xuK1x0ICpcbitcdCAqIFVzZSBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOIHRvIGF2b2lkIE9PTS1raWxsaW5nLCBidXQgdHJ5XG4rXHQgKiBoYXJkZXIgYXQgb3JkZXIgMCBzaW5jZSB0aGF0IGlzIHRoZSBmaW5hbCBmYWxsYmFjay5cbitcdCAqL1xuK1x0b3JkZXIgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIE1BWF9QQUdFX09SREVSLCBpbG9nMihucl9wYWdlcykpO1xuK1x0d2hpbGUgKHJlbWFpbmluZykge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbitcdFx0Z2ZwX3QgZ2ZwO1xuK1xuK1x0XHRvcmRlciA9IG1pbl90KHVuc2lnbmVkIGludCwgb3JkZXIsIGlsb2cyKHJlbWFpbmluZykpO1xuK1xuK1x0XHRmb3IgKDs7KSB7XG4rXHRcdFx0Z2ZwID0gR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk87XG4rXHRcdFx0aWYgKG9yZGVyKVxuK1x0XHRcdFx0Z2ZwIHw9IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk47XG4rXHRcdFx0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobm9kZSwgZ2ZwLCBvcmRlcik7XG4rXHRcdFx0aWYgKHBhZ2UpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRpZiAoIW9yZGVyKVxuK1x0XHRcdFx0Z290byBlcnI7XG4rXHRcdFx0b3JkZXItLTtcbitcdFx0fVxuIFxuLVx0cmV0dXJuIG5ldF9kZXZpY2U7XG4rXHRcdHJldCA9IHNldF9tZW1vcnlfZGVjcnlwdGVkKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKSxcbitcdFx0XHRcdFx0ICAgMVUgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogc2V0X21lbW9yeV9kZWNyeXB0ZWQoKSBmYWlsZWQ7IHRoZSBwYWdlIHN0YXRlIGlzXG4rXHRcdFx0ICogdW5rbm93biBzbyBpdCBtdXN0IGJlIGxlYWtlZCByYXRoZXIgdGhhbiBmcmVlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRnb3RvIGVycjtcbitcdFx0fVxuK1xuK1x0XHRjaHVua3NbY2h1bmtfY250XS5wYWdlID0gcGFnZTtcbitcdFx0Y2h1bmtzW2NodW5rX2NudF0ub3JkZXIgPSBvcmRlcjtcbitcdFx0Y2h1bmtfY250Kys7XG4rXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjICgxVSBcdTAwM2NcdTAwM2Mgb3JkZXIpOyBpKyspXG4rXHRcdFx0cGFnZXNbcGFnZV9pZHgrK10gPSBwYWdlICsgaTtcbitcbitcdFx0cmVtYWluaW5nIC09IDFVIFx1MDAzY1x1MDAzYyBvcmRlcjtcbitcdH1cbitcbitcdGFkZHIgPSB2bWFwKHBhZ2VzLCBucl9wYWdlcywgVk1fTUFQLCBwZ3Byb3RfZGVjcnlwdGVkKFBBR0VfS0VSTkVMKSk7XG4rXHRpZiAoIWFkZHIpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0a3ZmcmVlKHBhZ2VzKTtcbitcdCpjaHVua3Nfb3V0ID0gY2h1bmtzO1xuK1x0KmNodW5rX2NudF9vdXQgPSBjaHVua19jbnQ7XG4rXHRyZXR1cm4gYWRkcjtcbitcbitlcnI6XG4rXHRrdmZyZWUocGFnZXMpO1xuK1x0bmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKE5VTEwsIGNodW5rcywgY2h1bmtfY250KTtcbitcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuK3N0YXRpYyB2b2lkIF9fZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCBuZXR2c2NfZGV2aWNlICpudmRldilcbiB7XG4tXHRzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbnZkZXZcbi1cdFx0PSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG5ldHZzY19kZXZpY2UsIHJjdSk7XG4gXHRpbnQgaTtcbiBcbiBcdGtmcmVlKG52ZGV2LVx1MDAzZWV4dGVuc2lvbik7XG4gXG4tXHRpZiAoIW52ZGV2LVx1MDAzZXJlY3ZfYnVmX2dwYWRsX2hhbmRsZS5kZWNyeXB0ZWQpXG4tXHRcdHZmcmVlKG52ZGV2LVx1MDAzZXJlY3ZfYnVmKTtcbi1cdGlmICghbnZkZXYtXHUwMDNlc2VuZF9idWZfZ3BhZGxfaGFuZGxlLmRlY3J5cHRlZClcbi1cdFx0dmZyZWUobnZkZXYtXHUwMDNlc2VuZF9idWYpO1xuK1x0bmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKG52ZGV2LVx1MDAzZXJlY3ZfYnVmLCBudmRldi1cdTAwM2VyZWN2X2J1Zl9jaHVua3MsXG4rXHRcdFx0ICAgICAgbnZkZXYtXHUwMDNlcmVjdl9idWZfY2h1bmtfY250KTtcbitcdG5ldHZzY19mcmVlX2J1Zl9wYWdlcyhudmRldi1cdTAwM2VzZW5kX2J1ZiwgbnZkZXYtXHUwMDNlc2VuZF9idWZfY2h1bmtzLFxuK1x0XHRcdCAgICAgIG52ZGV2LVx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCk7XG4gXHRiaXRtYXBfZnJlZShudmRldi1cdTAwM2VzZW5kX3NlY3Rpb25fbWFwKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFZSU1NfQ0hBTk5FTF9NQVg7IGkrKykge1xuQEAgLTE3MCw5ICsyOTcsNTYgQEAgc3RhdGljIHZvaWQgZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbiBcdGtmcmVlKG52ZGV2KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZnJlZV9uZXR2c2NfZGV2aWNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqdylcbit7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgKnJ3b3JrID0gdG9fcmN1X3dvcmsodyk7XG4rXG4rXHRfX2ZyZWVfbmV0dnNjX2RldmljZShjb250YWluZXJfb2YocndvcmssIHN0cnVjdCBuZXR2c2NfZGV2aWNlLCByd29yaykpO1xuK31cbitcbitpbnQgbmV0dnNjX3dvcmtxdWV1ZV9pbml0KHZvaWQpXG4re1xuK1x0bmV0dnNjX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwiaHZfbmV0dnNjXCIsIFdRX1VOQk9VTkQsIDApO1xuK1xuK1x0cmV0dXJuIG5ldHZzY193cSA/IDAgOiAtRU5PTUVNO1xuK31cbitcbit2b2lkIG5ldHZzY193b3JrcXVldWVfZGVzdHJveSh2b2lkKVxuK3tcbitcdHJjdV9iYXJyaWVyKCk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZShuZXR2c2Nfd3EpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IG5ldHZzY19kZXZpY2UgKmFsbG9jX25ldF9kZXZpY2Uodm9pZClcbit7XG4rXHRzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0X2RldmljZTtcbitcbitcdG5ldF9kZXZpY2UgPSBremFsbG9jX29iaihzdHJ1Y3QgbmV0dnNjX2RldmljZSk7XG4rXHRpZiAoIW5ldF9kZXZpY2UpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXdhaXRfZHJhaW4pO1xuK1x0bmV0X2RldmljZS1cdTAwM2VkZXN0cm95ID0gZmFsc2U7XG4rXHRuZXRfZGV2aWNlLVx1MDAzZXR4X2Rpc2FibGUgPSB0cnVlO1xuK1xuK1x0bmV0X2RldmljZS1cdTAwM2VtYXhfcGt0ID0gUk5ESVNfTUFYX1BLVF9ERUZBVUxUO1xuK1x0bmV0X2RldmljZS1cdTAwM2Vwa3RfYWxpZ24gPSBSTkRJU19QS1RfQUxJR05fREVGQVVMVDtcbitcbitcdGluaXRfY29tcGxldGlvbihcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZWNoYW5uZWxfaW5pdF93YWl0KTtcbitcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2bmV0X2RldmljZS1cdTAwM2VzdWJjaGFuX29wZW4pO1xuK1x0SU5JVF9XT1JLKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc3ViY2hhbl93b3JrLCBuZXR2c2Nfc3ViY2hhbl93b3JrKTtcbitcdElOSVRfUkNVX1dPUksoXHUwMDI2bmV0X2RldmljZS1cdTAwM2Vyd29yaywgZnJlZV9uZXR2c2NfZGV2aWNlKTtcbitcbitcdHJldHVybiBuZXRfZGV2aWNlO1xuK31cbitcbiBzdGF0aWMgdm9pZCBmcmVlX25ldHZzY19kZXZpY2VfcmN1KHN0cnVjdCBuZXR2c2NfZGV2aWNlICpudmRldilcbiB7XG4tXHRjYWxsX3JjdShcdTAwMjZudmRldi1cdTAwM2VyY3UsIGZyZWVfbmV0dnNjX2RldmljZSk7XG4rXHQvKlxuK1x0ICogRGVmZXIgdGhlIGFjdHVhbCBmcmVlIHRvIHByb2Nlc3MgY29udGV4dDogdnVubWFwKCkgYW5kXG4rXHQgKiBzZXRfbWVtb3J5X2VuY3J5cHRlZCgpIGNhbm5vdCBydW4gZnJvbSBSQ1Ugc29mdGlycSBjb250ZXh0LlxuK1x0ICovXG4rXHRxdWV1ZV9yY3Vfd29yayhuZXR2c2Nfd3EsIFx1MDAyNm52ZGV2LVx1MDAzZXJ3b3JrKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmV0dnNjX3Jldm9rZV9yZWN2X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG5AQCAtMzUxLDcgKzUyNSwyMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRcdGJ1Zl9zaXplID0gbWluX3QodW5zaWduZWQgaW50LCBidWZfc2l6ZSxcbiBcdFx0XHRcdCBORVRWU0NfUkVDRUlWRV9CVUZGRVJfU0laRV9MRUdBQ1kpO1xuIFxuLVx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1ZiA9IHZ6YWxsb2MoYnVmX3NpemUpO1xuK1x0aWYgKGRldmljZS1cdTAwM2VjaGFubmVsLVx1MDAzZWNvX2V4dGVybmFsX21lbW9yeSkge1xuK1x0XHQvKiBDb25maWRlbnRpYWwgVk0gQnVzIGxlYXZlcyBidWZmZXIgZW5jcnlwdGVkICovXG4rXHRcdG5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfY2h1bmtzID0gTlVMTDtcbitcdFx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua19jbnQgPSAwO1xuK1x0XHRuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmID0gdnphbGxvYyhidWZfc2l6ZSk7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBPdGhlcndpc2UsIGFsbG9jYXRlIGRlY3J5cHRlZCBidWZmZXIgKi9cbitcdFx0bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1ZiA9XG4rXHRcdFx0bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhjcHVfdG9fbm9kZShkZXZpY2UtXHUwMDNlY2hhbm5lbC1cdTAwM2V0YXJnZXRfY3B1KSxcbitcdFx0XHRcdFx0ICAgICAgIGJ1Zl9zaXplLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zl9jaHVua3MsXG4rXHRcdFx0XHRcdCAgICAgICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmX2NodW5rX2NudCk7XG4rXHR9XG4rXG4gXHRpZiAoIW5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYpIHtcbiBcdFx0bmV0ZGV2X2VycihuZGV2LFxuIFx0XHRcdCAgIFwidW5hYmxlIHRvIGFsbG9jYXRlIHJlY2VpdmUgYnVmZmVyIG9mIHNpemUgJXVcXG5cIixcbkBAIC0zNjcsOSArNTU0LDEwIEBAIHN0YXRpYyBpbnQgbmV0dnNjX2luaXRfYnVmKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcbiBcdCAqIGNoYW5uZWwuICBOb3RlOiBUaGlzIGNhbGwgdXNlcyB0aGUgdm1idXMgY29ubmVjdGlvbiByYXRoZXJcbiBcdCAqIHRoYW4gdGhlIGNoYW5uZWwgdG8gZXN0YWJsaXNoIHRoZSBncGFkbCBoYW5kbGUuXG4gXHQgKi9cbi1cdHJldCA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbChkZXZpY2UtXHUwMDNlY2hhbm5lbCwgbmV0X2RldmljZS1cdTAwM2VyZWN2X2J1Zixcbi1cdFx0XHRcdCAgICBidWZfc2l6ZSxcbi1cdFx0XHRcdCAgICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXJlY3ZfYnVmX2dwYWRsX2hhbmRsZSk7XG4rXHRyZXQgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZChkZXZpY2UtXHUwMDNlY2hhbm5lbCxcbitcdFx0XHRcdFx0XHQgICAgIG5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICBidWZfc2l6ZSxcbitcdFx0XHRcdFx0XHQgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmVjdl9idWZfZ3BhZGxfaGFuZGxlKTtcbiBcdGlmIChyZXQgIT0gMCkge1xuIFx0XHRuZXRkZXZfZXJyKG5kZXYsXG4gXHRcdFx0XCJ1bmFibGUgdG8gZXN0YWJsaXNoIHJlY2VpdmUgYnVmZmVyJ3MgZ3BhZGxcXG5cIik7XG5AQCAtNDU3LDcgKzY0NSwxOSBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHRidWZfc2l6ZSA9IGRldmljZV9pbmZvLVx1MDAzZXNlbmRfc2VjdGlvbnMgKiBkZXZpY2VfaW5mby1cdTAwM2VzZW5kX3NlY3Rpb25fc2l6ZTtcbiBcdGJ1Zl9zaXplID0gcm91bmRfdXAoYnVmX3NpemUsIFBBR0VfU0laRSk7XG4gXG4tXHRuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmID0gdnphbGxvYyhidWZfc2l6ZSk7XG4rXHRpZiAoZGV2aWNlLVx1MDAzZWNoYW5uZWwtXHUwMDNlY29fZXh0ZXJuYWxfbWVtb3J5KSB7XG4rXHRcdC8qIENvbmZpZGVudGlhbCBWTSBCdXMgbGVhdmVzIGJ1ZmZlciBlbmNyeXB0ZWQgKi9cbitcdFx0bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zl9jaHVua3MgPSBOVUxMO1xuK1x0XHRuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2NodW5rX2NudCA9IDA7XG4rXHRcdG5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYgPSB2emFsbG9jKGJ1Zl9zaXplKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIE90aGVyd2lzZSwgYWxsb2NhdGUgZGVjcnlwdGVkIGJ1ZmZlciAqL1xuK1x0XHRuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmID1cbitcdFx0XHRuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGNwdV90b19ub2RlKGRldmljZS1cdTAwM2VjaGFubmVsLVx1MDAzZXRhcmdldF9jcHUpLFxuK1x0XHRcdFx0XHQgICAgICAgYnVmX3NpemUsXG4rXHRcdFx0XHRcdCAgICAgICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2NodW5rcyxcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWZfY2h1bmtfY250KTtcbitcdH1cbiBcdGlmICghbmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zikge1xuIFx0XHRuZXRkZXZfZXJyKG5kZXYsIFwidW5hYmxlIHRvIGFsbG9jYXRlIHNlbmQgYnVmZmVyIG9mIHNpemUgJXVcXG5cIixcbiBcdFx0XHQgICBidWZfc2l6ZSk7XG5AQCAtNDcwLDkgKzY3MCwxMCBAQCBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXG4gXHQgKiBjaGFubmVsLiAgTm90ZTogVGhpcyBjYWxsIHVzZXMgdGhlIHZtYnVzIGNvbm5lY3Rpb24gcmF0aGVyXG4gXHQgKiB0aGFuIHRoZSBjaGFubmVsIHRvIGVzdGFibGlzaCB0aGUgZ3BhZGwgaGFuZGxlLlxuIFx0ICovXG4tXHRyZXQgPSB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoZGV2aWNlLVx1MDAzZWNoYW5uZWwsIG5ldF9kZXZpY2UtXHUwMDNlc2VuZF9idWYsXG4tXHRcdFx0XHQgICAgYnVmX3NpemUsXG4tXHRcdFx0XHQgICAgXHUwMDI2bmV0X2RldmljZS1cdTAwM2VzZW5kX2J1Zl9ncGFkbF9oYW5kbGUpO1xuK1x0cmV0ID0gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWQoZGV2aWNlLVx1MDAzZWNoYW5uZWwsXG4rXHRcdFx0XHRcdFx0ICAgICBuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgYnVmX3NpemUsXG4rXHRcdFx0XHRcdFx0ICAgICBcdTAwMjZuZXRfZGV2aWNlLVx1MDAzZXNlbmRfYnVmX2dwYWRsX2hhbmRsZSk7XG4gXHRpZiAocmV0ICE9IDApIHtcbiBcdFx0bmV0ZGV2X2VycihuZGV2LFxuIFx0XHRcdCAgIFwidW5hYmxlIHRvIGVzdGFibGlzaCBzZW5kIGJ1ZmZlcidzIGdwYWRsXFxuXCIpO1xuQEAgLTE4NjMsNyArMjA2NCwxMSBAQCBzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxuIFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2bmV0X2RldmljZS1cdTAwM2VjaGFuX3RhYmxlWzBdLm5hcGkpO1xuIFxuIGNsZWFudXAyOlxuLVx0ZnJlZV9uZXR2c2NfZGV2aWNlKFx1MDAyNm5ldF9kZXZpY2UtXHUwMDNlcmN1KTtcbitcdC8qXG4rXHQgKiBuZXRfZGV2aWNlIHdhcyBuZXZlciBwdWJsaXNoZWQsIHNvIHdlIGRvbid0IG5lZWQgdG8gd2FpdCBmb3IgYW5cbitcdCAqIFJDVSBncmFjZSBwZXJpb2QgLS0gY2FsbCB0aGUgZnJlZSByb3V0aW5lIHN5bmNocm9ub3VzbHkuXG4rXHQgKi9cbitcdF9fZnJlZV9uZXR2c2NfZGV2aWNlKG5ldF9kZXZpY2UpO1xuIFxuIFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzY19kcnYuYyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcbmluZGV4IGVlNWFiNWNlYjJiZTJkLi4xZDQzYzczZmQ3M2YxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcbisrKyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2NfZHJ2LmNcbkBAIC0yODY3LDEyICsyODY3LDE3IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBuZXR2c2NfZHJ2X2V4aXQodm9pZClcbiB7XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZuZXR2c2NfbmV0ZGV2X25vdGlmaWVyKTtcbiBcdHZtYnVzX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNm5ldHZzY19kcnYpO1xuK1x0bmV0dnNjX3dvcmtxdWV1ZV9kZXN0cm95KCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pbml0IG5ldHZzY19kcnZfaW5pdCh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG4gXG4rXHRyZXQgPSBuZXR2c2Nfd29ya3F1ZXVlX2luaXQoKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHRpZiAocmluZ19zaXplIFx1MDAzYyBSSU5HX1NJWkVfTUlOKSB7XG4gXHRcdHJpbmdfc2l6ZSA9IFJJTkdfU0laRV9NSU47XG4gXHRcdHByX2luZm8oXCJJbmNyZWFzZWQgcmluZ19zaXplIHRvICV1IChtaW4gYWxsb3dlZClcXG5cIixcbkBAIC0yODkwLDYgKzI4OTUsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXR2c2NfZHJ2X2luaXQodm9pZClcbiBcbiBlcnJfdm1idXNfcmVnOlxuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2bmV0dnNjX25ldGRldl9ub3RpZmllcik7XG4rXHRuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3koKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHlwZXJ2LmggYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG5pbmRleCA5NjRmMWJlODE1MGM1OS4uOWM2YjFiNzc5NGI0OGUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h5cGVydi5oXG5AQCAtNzgxLDYgKzc4MSwxMiBAQCBzdHJ1Y3Qgdm1idXNfZ3BhZGwge1xuIFx0dTMyIGdwYWRsX2hhbmRsZTtcbiBcdHUzMiBzaXplO1xuIFx0dm9pZCAqYnVmZmVyO1xuK1x0LypcbitcdCAqIE9ubHkgdXNlZCBpZiB0aGUgdm1idXMgbGF5ZXIgb3ducyB0aGUgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2ZcbitcdCAqIEBidWZmZXIuXG4rXHQgKiBJbmRpY2F0ZXMgQGJ1ZmZlciBtdXN0IGJlIHJlLWVuY3J5cHRlZCBhdCB0ZWFyZG93biBvciB0aGF0IGl0XG4rXHQgKiBtdXN0IGJlIGxlYWtlZCBiZWNhdXNlIHJlLWVuY3J5cHRpb24gZmFpbGVkLlxuK1x0ICovXG4gXHRib29sIGRlY3J5cHRlZDtcbiB9O1xuIFxuQEAgLTEyMDUsNiArMTIxMSwxMSBAQCBleHRlcm4gaW50IHZtYnVzX2VzdGFibGlzaF9ncGFkbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbiBcdFx0XHRcdCAgICAgIHUzMiBzaXplLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IHZtYnVzX2dwYWRsICpncGFkbCk7XG4gXG4rZXh0ZXJuIGludCB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCxcbitcdFx0XHRcdFx0XHQgIHZvaWQgKmtidWZmZXIsXG4rXHRcdFx0XHRcdFx0ICB1MzIgc2l6ZSxcbitcdFx0XHRcdFx0XHQgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpO1xuK1xuIGV4dGVybiBpbnQgdm1idXNfdGVhcmRvd25fZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB2bWJ1c19ncGFkbCAqZ3BhZGwpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6MDguMDkyNTY4Mjg4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE1MTU3NDYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyB0aGlzIEh5cGVyLVYgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lIHRoYXQncyB0d2Vha2luZyB0aGUgSHlwZXItViBuZXR3b3JrIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgbmV0dnNjYCBhbmQgVk1CdXMgY2hhbm5lbCBjb2RlLiBJdCBsb29rcyBsaWtlIGl0J3MgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24sIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZGAsIGFuZCBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBgbmV0dnNjYCBoYW5kbGVzIGl0cyBzZW5kL3JlY2VpdmUgYnVmZmVycy4gVGhlIGtleSBoZXJlIGlzIHRoZSB1c2Ugb2YgYHNldF9tZW1vcnlfZGVjcnlwdGVkYCBhbmQgYHNldF9tZW1vcnlfZW5jcnlwdGVkYCBmdW5jdGlvbnMuIFRob3NlIGFyZSBiaWcgZmxhZ3MgZm9yIENvbmZpZGVudGlhbCBWTXMsIGxpa2UgQU1EIFNFVi1TTlAgb3IgSW50ZWwgVERYLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gY29uc2lkZXIuXG5cblRoZSBwYXRjaCBhbHNvIGludHJvZHVjZXMgYG5ldHZzY19hbGxvY19idWZfcGFnZXNgIGFuZCBgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzYC4gVGhpcyBzZWVtcyB0byBiZSBhYm91dCBhbGxvY2F0aW5nIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgY2h1bmtzIGFuZCB2bWFwLWluZyB0aGVtLCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYHZ6YWxsb2NgLiBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIGEgbmV3IHdvcmtxdWV1ZSwgYG5ldHZzY193cWAsIGFkZGVkIGZvciBkZWZlcnJpbmcgdGhlIGRldmljZSBmcmVlaW5nLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpczogY2FuIHRoaXMgYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9uZWQgUUVNVSBhbmQgR0NFIGFzIHBvdGVudGlhbCBiYXJyaWVycywgYnV0IEkga25vdyB0aGUgSHlwZXItViBkcml2ZXJzIChgaHZfbmV0dnNjYCwgYGh2X3ZtYnVzYCkgYXJlIGFjdGl2ZWx5IHVzZWQgd2hlbiBMaW51eCBydW5zIGFzIGEgZ3Vlc3Qgb24gSHlwZXItVi4gVGhlIHByb21wdCBhbHNvIG5vdGVzIHRoYXQgaXQncyBcImltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gU3l6a2FsbGVyICpzaG91bGQqIGJlIGFibGUgdG8gZnV6eiBIeXBlci1WIGRyaXZlcnMgaWYgaXQncyBydW5uaW5nIG9uIEh5cGVyLVYgb3IgaWYgdGhlcmUncyBzb21lIHNvcnQgb2YgZW11bGF0aW9uLlxuXG5XYWl0IGEgc2Vjb25kLCB3YXNuJ3QgdGhlcmUgc29tZSBIeXBlci1WIGZ1enppbmcgc3VwcG9ydCBpbiBzeXprYWxsZXI/IExldCdzIHNlZS4uLkkgcmVtZW1iZXIgc2VlaW5nIHRoaW5ncyBsaWtlIGBzeXpfdm1idXNfZXN0YWJsaXNoX2dwYWRsYCBpbiB0aGUgc3l6bGFuZywgc28gdGhlcmUgbWlnaHQgYmUgYSBWTUJ1cyBmdXp6ZXIgdGhhdCBydW5zIGluIFFFTVUgd2l0aCBhIG1vY2sgVk1CdXMgaW1wbGVtZW50YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gcnVubmluZyBvbiBIeXBlci1WLiBUaGlzIHdhcnJhbnRzIGEgZGVlcGVyIGxvb2s7IEkgbmVlZCB0byB2ZXJpZnkgaWYgYGh2X25ldHZzY2AgaXRzZWxmIGlzIHRhcmdldGVkIGJ5IGZ1enppbmcuXG5cbk9rYXksIGxldCdzIHN0YXJ0IHNlYXJjaGluZy4gSSdsbCBzZWFyY2ggdGhlIGtlcm5lbCBhbmQgc3l6a2FsbGVyIGNvZGViYXNlcyBmb3IgXCJuZXR2c2NcIi4gV2FpdCwgdGhlIGluc3RydWN0aW9ucyBzYXkgdGhhdCBpZiB0aGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgSSBuZWVkIHRvIHVzZSBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgaWYgdGhlIGNvZGUgKmNhbiogYmUgZXhlY3V0ZWQuIE9rYXksIHRoYXQncyB3aGF0IEknbGwgZG8uXG5cbkFscmlnaHQsIHRpbWUgdG8gY2hlY2sgaWYgYENPTkZJR19IWVBFUlZfTkVUYCBhbmQgYENPTkZJR19IWVBFUlZgIGFyZSBlbmFibGVkLCBhbmQgdGhlcmVmb3JlIHdoZXRoZXIgd2UgY2FuIGZ1enogaXQgYXQgYWxsLiBUaGVuIEknbGwgc2VhcmNoIGZvciBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AgYW5kIGBuZXR2c2NfZGV2aWNlX2FkZGAgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gVGhlIHdob2xlIHBvaW50IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGNvZGUgaXMgYWN0dWFsbHkgKmV4ZWN1dGFibGUqIGFuZCB0aGVyZWZvcmUgV29ydGhGdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODgwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6MTcuMjQ0MTQ1NDczWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzQ5MTMxOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0dnNjX2RldmljZV9hZGRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaD0yMjQ9dm9pZCBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3kodm9pZCk7XFxuZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaDoyMjU6c3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldHZzY19kZXZpY2VfYWRkKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSxcXG5kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oLTIyNi1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmV0dnNjX2RldmljZV9pbmZvICppbmZvKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz0xOTQxPXZvaWQgbmV0dnNjX2NoYW5uZWxfY2Iodm9pZCAqY29udGV4dClcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xOTU4LS8qXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjE5NTk6ICogbmV0dnNjX2RldmljZV9hZGQgLSBDYWxsYmFjayB3aGVuIHRoZSBkZXZpY2UgYmVsb25naW5nIHRvIHRoaXNcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTk2MC0gKiBkcml2ZXIgaXMgYWRkZWRcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTk2MS0gKi9cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MTk2MjpzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0dnNjX2RldmljZV9hZGQoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xOTYzLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZXR2c2NfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L3JuZGlzX2ZpbHRlci5jPTE0NzA9c3RydWN0IG5ldHZzY19kZXZpY2UgKnJuZGlzX2ZpbHRlcl9kZXZpY2VfYWRkKHN0cnVjdCBodl9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9ybmRpc19maWx0ZXIuYy0xNDkwLVxcdCAqL1xcbmRyaXZlcnMvbmV0L2h5cGVydi9ybmRpc19maWx0ZXIuYzoxNDkxOlxcdG5ldF9kZXZpY2UgPSBuZXR2c2NfZGV2aWNlX2FkZChkZXYsIGRldmljZV9pbmZvKTtcXG5kcml2ZXJzL25ldC9oeXBlcnYvcm5kaXNfZmlsdGVyLmMtMTQ5Mi1cXHRpZiAoSVNfRVJSKG5ldF9kZXZpY2UpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjIwLjExOTA2NDExNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDIxNjgyNTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AqKlxuXG5SaWdodCwgbGV0J3MgemVybyBpbiBvbiBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpdHMgaW52b2NhdGlvbiBwb2ludHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHN0YWNrIGFuZCBob3cgaXQncyBiZWluZyB1c2VkLiBJJ20gYXNzdW1pbmcgaXQncyByZWxhdGVkIHRvIGJ1ZmZlciBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgbmV0d29yayB2aXJ0dWFsIHNlcnZpY2UgY29udGV4dCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgYW5kIGdldCBhIGZlZWwgZm9yIHRoZSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIHRoYXQgdHJpZ2dlciBpdC4gSSdsbCBzdGFydCB3aXRoIGEgcXVpY2sgc2VhcmNoIHRvIGlkZW50aWZ5IGFsbCBjYWxsIHNpdGVzLiBGcm9tIHRoZXJlLCBJJ2xsIHRyYWNlIHRocm91Z2ggdGhlIGNvZGUsIGlkZWFsbHkgdW5kZXJzdGFuZGluZyB0aGUgbG9naWNhbCBmbG93IHRoYXQgbGVhZHMgdG8gYG5ldHZzY19hbGxvY19idWZfcGFnZXNgIGJlaW5nIGNhbGxlZC4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGludGVycHJldCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoZSBjYWxscy4gSSdsbCBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nIGFyb3VuZCB0aGUgY2FsbHMgYXMgd2VsbC4gTXkgbWFpbiBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGFsbG9jYXRpb24gcGF0dGVybnMgYW5kIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDozMC4xNDA3NDk1MDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MzM1NzYzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz0xMDE9c3RhdGljIHZvaWQgbmV0dnNjX3N1YmNoYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM2LSAqICAgICAgICBmYWlsZWQgYWxsb2NhdGlvbilcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MTM3OiAqIEBjaHVua3M6IGNodW5rcyBhcnJheSBmcm9tIG5ldHZzY19hbGxvY19idWZfcGFnZXMoKSwgb3IgTlVMTFxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xMzgtICogQGNodW5rX2NudDogbnVtYmVyIG9mIGVudHJpZXMgaW4gQGNodW5rc1xcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTE0NT1zdGF0aWMgdm9pZCBuZXR2c2NfZnJlZV9idWZfcGFnZXModm9pZCAqYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xNzEtLypcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6MTcyOiAqIG5ldHZzY19hbGxvY19idWZfcGFnZXMgLSBhbGxvY2F0ZSBhIHZpcnR1YWxseS1jb250aWd1b3VzLCBob3N0LXZpc2libGVcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTczLSAqIGJ1ZmZlciBmb3IgdGhlIG5ldHZzYyBzZW5kL3JlY2VpdmUgYXJlYS5cXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xODctICovXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjE4ODpzdGF0aWMgdm9pZCAqbmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhpbnQgbm9kZSwgdTMyIHNpemUsXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE4OS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldHZzY19idWZfY2h1bmsgKipjaHVua3Nfb3V0LFxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jPTUwOT1zdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNTM1LVxcdFxcdG5ldF9kZXZpY2UtXFx1MDAzZXJlY3ZfYnVmID1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NTM2OlxcdFxcdFxcdG5ldHZzY19hbGxvY19idWZfcGFnZXMoY3B1X3RvX25vZGUoZGV2aWNlLVxcdTAwM2VjaGFubmVsLVxcdTAwM2V0YXJnZXRfY3B1KSxcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNTM3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBidWZfc2l6ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy02NTUtXFx0XFx0bmV0X2RldmljZS1cXHUwMDNlc2VuZF9idWYgPVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzo2NTY6XFx0XFx0XFx0bmV0dnNjX2FsbG9jX2J1Zl9wYWdlcyhjcHVfdG9fbm9kZShkZXZpY2UtXFx1MDAzZWNoYW5uZWwtXFx1MDAzZXRhcmdldF9jcHUpLFxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy02NTctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGJ1Zl9zaXplLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDozMi4wMDQxMTMwMzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk5MTExNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTmV0VlNDIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldoZXJlJ3MgdGhlIGJlZWY/XCIgSXQgc2VlbXMgdG8gYmUgdG91Y2hpbmcgYG5ldHZzY19pbml0X2J1ZmAgYW5kIGBuZXR2c2NfZGV2aWNlX2FkZGAsIGJvdGggaW4gYGRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY2AuIFRoYXQgcmluZ3Mgc29tZSBiZWxscyAtIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhlIGluaXRpYWwgYnVmZmVyIHNldHVwIGFuZCBkZXZpY2UgYWRkaXRpb24gd2l0aGluIHRoZSBuZXR3b3JrIHZpcnR1YWwgc2VydmljZSBjbGllbnQuIEFuZCB0aGVuIGl0IGFsc28gc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIGBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbGAgaW4gYGRyaXZlcnMvaHYvY2hhbm5lbC5jYC4gVGhhdCdzIGEgbG93LWxldmVsIGNoYW5uZWwgZnVuY3Rpb24sIHJlbGF0ZWQgdG8gc2V0dGluZyB1cCB0aGUgR3Vlc3QgUGh5c2ljYWwgQWRkcmVzcyBMaXN0LiBEZWZpbml0ZWx5IGludGVyZXN0aW5nLlxuXG5CZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzLCBJIG5lZWQgdG8gbWFrZSBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIHBhdGNoIGlzIGNvcnJlY3RseSBndWFyZGVkIGJ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0hZUEVSVmAgYW5kIGBDT05GSUdfSFlQRVJWX05FVGAgYXJlIHRoZSBjb3JyZWN0IHByZS1yZXF1aXNpdGVzIGZvciB0aGlzIHBhcnRpY3VsYXIgYXJlYSBvZiB0aGUgY29kZS4gTGV0J3Mgc2VlIGlmIHRob3NlIGFyZSBzdWZmaWNpZW50LiBJZiBub3QsIEknbSBnb2luZyB0byBoYXZlIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgS2NvbmZpZyBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNDcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDozNi4zMDMyMjc0NTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMDE0NzUwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFlQRVJWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9Nzg0PWNvbmZpZyBTQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVJcXG4tLVxcbmFyY2gveDg2L0tjb25maWctNzk1LVxcbmFyY2gveDg2L0tjb25maWc6Nzk2Om1lbnVjb25maWcgSFlQRVJWSVNPUl9HVUVTVFxcbmFyY2gveDg2L0tjb25maWctNzk3LVxcdGJvb2wgXFxcIkxpbnV4IGd1ZXN0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWc9Mz1tZW51IFxcXCJNaWNyb3NvZnQgSHlwZXItViBndWVzdCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvaHYvS2NvbmZpZy00LVxcbmRyaXZlcnMvaHYvS2NvbmZpZzo1OmNvbmZpZyBIWVBFUlZcXG5kcml2ZXJzL2h2L0tjb25maWctNi1cXHRib29sIFxcXCJNaWNyb3NvZnQgSHlwZXItViBjb3JlIGh5cGVydmlzb3Igc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2h2L0tjb25maWc6MTc6Y29uZmlnIEhZUEVSVl9WVExfTU9ERVxcbmRyaXZlcnMvaHYvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJFbmFibGUgTGludXggdG8gYm9vdCBpbiBWVEwgY29udGV4dFxcXCJcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZy00Mi1cXG5kcml2ZXJzL2h2L0tjb25maWc6NDM6Y29uZmlnIEhZUEVSVl9USU1FUlxcbmRyaXZlcnMvaHYvS2NvbmZpZy00NC1cXHRkZWZfYm9vbCBIWVBFUlYgXFx1MDAyNlxcdTAwMjYgWDg2XFxuZHJpdmVycy9odi9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvaHYvS2NvbmZpZzo0Njpjb25maWcgSFlQRVJWX1VUSUxTXFxuZHJpdmVycy9odi9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgSHlwZXItViBVdGlsaXRpZXMgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTUyLVxcbmRyaXZlcnMvaHYvS2NvbmZpZzo1Mzpjb25maWcgSFlQRVJWX0JBTExPT05cXG5kcml2ZXJzL2h2L0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIEJhbGxvb24gZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9odi9LY29uZmlnLTU5LVxcbmRyaXZlcnMvaHYvS2NvbmZpZzo2MDpjb25maWcgSFlQRVJWX1ZNQlVTXFxuZHJpdmVycy9odi9LY29uZmlnLTYxLVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgSHlwZXItViBWTUJ1cyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWc9MjU0PWNvbmZpZyBTRVJJT19PTFBDX0FQU1BcXG4tLVxcbmRyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZy0yNjMtXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnOjI2NDpjb25maWcgSFlQRVJWX0tFWUJPQVJEXFxuZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnLTI2NS1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IFN5bnRoZXRpYyBLZXlib2FyZCBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnOjI6Y29uZmlnIEhZUEVSVl9ORVRcXG5kcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgSHlwZXItViB2aXJ0dWFsIG5ldHdvcmsgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9zY3NpL0tjb25maWc9NTc4PWNvbmZpZyBYRU5fU0NTSV9GUk9OVEVORFxcbi0tXFxuZHJpdmVycy9zY3NpL0tjb25maWctNTg3LVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnOjU4ODpjb25maWcgSFlQRVJWX1NUT1JBR0VcXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy01ODktXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgc3RvcmFnZSBkcml2ZXJcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz0zNTI3PWNvbmZpZyBNRU1URVNUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zNTQwLVxcbmxpYi9LY29uZmlnLmRlYnVnOjM1NDE6Y29uZmlnIEhZUEVSVl9URVNUSU5HXFxubGliL0tjb25maWcuZGVidWctMzU0Mi1cXHRib29sIFxcXCJNaWNyb3NvZnQgSHlwZXItViBkcml2ZXIgdGVzdGluZ1xcXCJcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZz02Nj1jb25maWcgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTcyLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo3Mzpjb25maWcgSFlQRVJWX1ZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTc0LVxcdHRyaXN0YXRlIFxcXCJIeXBlci1WIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NDozOC4wMjMzNzk5ODhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDU4MjAxMDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpcm1pbmcgdGhlIEh5cGVyLVYgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGBDT05GSUdfSFlQRVJWX05FVGAgc2V0dGluZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN1Z2dlc3RzIHRoaXMgaXMgdGhlIGNvcnJlY3Qga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBlbmFibGluZyBIeXBlci1WIG5ldHdvcmsgc3VwcG9ydCwgYnV0IGxldCdzIGNvbmZpcm0gdGhpcyByaWdvcm91c2x5IGJlZm9yZSBwcm9jZWVkaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBvdmVybG9va2VkIGFueSBudWFuY2VzIGluIHRoZSBkZXBlbmRlbmNpZXMgb3IgY29uZmxpY3Rpbmcgc2V0dGluZ3MgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGludGVuZGVkIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIEh5cGVyLVYgZW52aXJvbm1lbnQuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIEtjb25maWcgZG9jdW1lbnRhdGlvbiBhbmQgYW55IHJlbGV2YW50IGJ1aWxkIGxvZ3Mgc2hvdWxkIGJlIGVub3VnaCB0byBzb2xpZGlmeSB0aGlzIHBhcnRpY3VsYXIgY2hvaWNlLCBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgaW50ZXJhY3Rpb25zIHdpdGggYENPTkZJR19WSVJUSU9fTkVUYCBvciBgQ09ORklHX0UxMDAwRWAuIEl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZSBoZXJlLCBhbmQgYXZvaWQgYW55IHVud2FudGVkIHN1cnByaXNlcyBkb3duIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU2MSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjQ0LjA4MTU4NDU3OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1MTk0MjE2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotLipuZXR2c2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0hZUEVSVl9ORVQpICs9IGh2X25ldHZzYy5vXFxuZHJpdmVycy9uZXQvaHlwZXJ2L01ha2VmaWxlLTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjQ2LjQzMzUzNTE4MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Njk1MTY1NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTmF2aWdhdGluZyB0aGUgSHlwZXItViBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgYENPTkZJR19IWVBFUlZfTkVUYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGUgcGF0Y2ggaXRzZWxmIHRvdWNoZXMgYGRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY2AgYW5kIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AuIE5vdywgYG5ldHZzYy5jYCBJIHJlY29nbml6ZSwgYnV0IGBjaGFubmVsLmNgLi4uIHRoYXQgcmluZ3Mgc29tZSBiZWxscyB3aXRoIHRoZSBicm9hZGVyIEh5cGVyLVYgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB0aGUgVk1CdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0aGlzIHRpZXMgaW4gd2l0aCB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJcyBgY2hhbm5lbC5jYCBwYXJ0IG9mIGBDT05GSUdfSFlQRVJWX1ZNQlVTYCBvciBtYXliZSBqdXN0IHRoZSBnZW5lcmFsIGBDT05GSUdfSFlQRVJWYD8gSSBuZWVkIHRvIGdldCBzb21lIG1vcmUgY29udGV4dCwgc28gSSdsbCBjaGVjayB0aGUgYGRyaXZlcnMvaHYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgcGxhY2VtZW50IG9mIHRoaXMgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgc2NvcGUgb2YgdGhpcyBjaGFuZ2UgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIEh5cGVyLVYgZHJpdmVyIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODY0LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTQ6NTIuMTI4NzAzMDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTM3OTM4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhbm5lbFxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0PTQ5PUVhY2ggY2hhbm5lbCBoYXMgdG8gcHJvdmlkZSB0d28gZnVuY3Rpb25zIHRvIHRoZSBnZW5lcmljIFBQUCBsYXllcixcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMucnN0OjUwOnZpYSB0aGUgcHBwX2NoYW5uZWwub3BzIHBvaW50ZXI6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnJzdC01MS1cXG4tLVxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZT0yPWhvc3QxeC15ID0gXFxcXFxcbi0tXFxuZHJpdmVycy9ncHUvaG9zdDF4L01ha2VmaWxlLTctXFx0Y2RtYS5vIFxcXFxcXG5kcml2ZXJzL2dwdS9ob3N0MXgvTWFrZWZpbGU6ODpcXHRjaGFubmVsLm8gXFxcXFxcbmRyaXZlcnMvZ3B1L2hvc3QxeC9NYWtlZmlsZS05LVxcdGpvYi5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvaHYvTWFrZWZpbGU9MTE9aHZfdm1idXMteSA6PSB2bWJ1c19kcnYubyBcXFxcXFxuZHJpdmVycy9odi9NYWtlZmlsZToxMjpcXHRcXHQgaHYubyBjb25uZWN0aW9uLm8gY2hhbm5lbC5vIFxcXFxcXG5kcml2ZXJzL2h2L01ha2VmaWxlLTEzLVxcdFxcdCBjaGFubmVsX21nbXQubyByaW5nX2J1ZmZlci5vIGh2X3RyYWNlLm9cXG4tLVxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpZHR2L01ha2VmaWxlPTU9ZHZiLXZpZHR2LWJyaWRnZS1vYmpzIDo9IHZpZHR2X2JyaWRnZS5vIHZpZHR2X2NvbW1vbi5vIHZpZHR2X3RzLm8gdmlkdHZfcHNpLm8gXFxcXFxcbmRyaXZlcnMvbWVkaWEvdGVzdC1kcml2ZXJzL3ZpZHR2L01ha2VmaWxlOjY6XFx0XFx0XFx0IHZpZHR2X3Blcy5vIHZpZHR2X3MzMDJtLm8gdmlkdHZfY2hhbm5lbC5vIHZpZHR2X211eC5vXFxuZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMvdmlkdHYvTWFrZWZpbGUtNy1cXG4tLVxcbmRyaXZlcnMvbWlzYy9zZ2kteHAvTWFrZWZpbGU9OT1vYmotJChDT05GSUdfU0dJX1hQKVxcdFxcdCs9IHhwYy5vXFxuZHJpdmVycy9taXNjL3NnaS14cC9NYWtlZmlsZToxMDp4cGMteVxcdFxcdFxcdFxcdDo9IHhwY19tYWluLm8geHBjX2NoYW5uZWwubyB4cGNfcGFydGl0aW9uLm8gXFxcXFxcbmRyaXZlcnMvbWlzYy9zZ2kteHAvTWFrZWZpbGUtMTEtXFx0XFx0XFx0XFx0ICAgeHBjX3V2Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSArPSBtYW5hLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo2Om1hbmEtb2JqcyA6PSBnZG1hX21haW4ubyBzaG1fY2hhbm5lbC5vIGh3X2NoYW5uZWwubyBtYW5hX2VuLm8gbWFuYV9ldGh0b29sLm8gbWFuYV9icGYub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlPTI9YXRoOWsteSArPVxcdGJlYWNvbi5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS05LVxcdFxcdGFudGVubmEubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlOjEwOlxcdFxcdGNoYW5uZWwub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZS0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZT0yMz1icmNtc21hYy15IDo9IFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9NYWtlZmlsZS0yNy1cXHRhbnRzZWwubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlOjI4OlxcdGNoYW5uZWwubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL01ha2VmaWxlLTI5LVxcdG1haW4ubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L01ha2VmaWxlPTExPW10NzYteSA6PSBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZS0xMi1cXHRtbWlvLm8gdXRpbC5vIHRyYWNlLm8gZG1hLm8gbWFjODAyMTEubyBkZWJ1Z2ZzLm8gZWVwcm9tLm8gXFxcXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGU6MTM6XFx0dHgubyBhZ2ctcngubyBtY3UubyB3ZWQubyBzY2FuLm8gY2hhbm5lbC5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZS0xNC1cXG4tLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZT01PW1hYzgwMjExLXkgOj0gXFxcXFxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTExLVxcdHdwYS5vIFxcXFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6MTI6XFx0c2Nhbi5vIG9mZmNoYW5uZWwubyBcXFxcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTEzLVxcdGh0Lm8gYWdnLXR4Lm8gYWdnLXJ4Lm8gXFxcXFxcbi0tXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZT00PXJwY3JkbWEteSA6PSB0cmFuc3BvcnQubyBycGNfcmRtYS5vIHZlcmJzLm8gZnJ3cl9vcHMubyBpYl9jbGllbnQubyBcXFxcXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZTo1OlxcdHN2Y19yZG1hLm8gc3ZjX3JkbWFfYmFja2NoYW5uZWwubyBzdmNfcmRtYV90cmFuc3BvcnQubyBcXFxcXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZS02LVxcdHN2Y19yZG1hX3NlbmR0by5vIHN2Y19yZG1hX3JlY3Zmcm9tLm8gc3ZjX3JkbWFfcncubyBcXFxcXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZS03LVxcdHN2Y19yZG1hX3BjbC5vIG1vZHVsZS5vXFxubmV0L3N1bnJwYy94cHJ0cmRtYS9NYWtlZmlsZTo4OnJwY3JkbWEtJChDT05GSUdfU1VOUlBDX0JBQ0tDSEFOTkVMKSArPSBiYWNrY2hhbm5lbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU0OjU0LjM0MjUwMzkyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzE3OTY0OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHlwZXItViBWTUJ1cyBNb2R1bGUgYW5kIEFzc29jaWF0ZWQgTmV0d29yayBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBodl92bWJ1c2AgbW9kdWxlLCBhbmQgaXQncyBjbGVhcmx5IHRpZWQgdG8gYENPTkZJR19IWVBFUlZgLiBOb3csIGEga2V5IHF1ZXN0aW9uIGlzOiBhcmUgYENPTkZJR19IWVBFUlZgIGFuZCBzcGVjaWZpY2FsbHkgYENPTkZJR19IWVBFUlZfTkVUYCBldmVuIGFjY2Vzc2libGUgd2l0aGluIHRoZSBzeXprYWxsZXIgZW52aXJvbm1lbnQ/IEkga25vdyBzeXprYWxsZXIgaGFzIHBzZXVkby1zeXNjYWxscyBsaWtlIGBzeXpfdm1idXNfZXN0YWJsaXNoX2dwYWRsYCwgd2hpY2ggc3VnZ2VzdHMgdm1idXMgaXMgc3VwcG9ydGVkLiBIbW0sIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IG5vdGUgYWJvdXQgcHNldWRvLXN5c2NhbGxzLiBJdCBzYXlzIEkgY2FuJ3Qgc2VhcmNoIGZvciAnc3l6XycgZXhwcmVzc2lvbnMgYmVjYXVzZSB0aG9zZSBhcmVuJ3QgZGlyZWN0bHkgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIEJ1dCBJIGtub3cgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHZtYnVzIHN1cHBvcnQsIHNvIEkgY2FuIHB1dCB0aGF0IGFzaWRlIGZvciBub3cuXG5cbk5vdywgdGhpcyBgbmV0dnNjYCBpcyB0aGUgbmV0d29yayBkcml2ZXIsIGFuZCB0aGF0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBmdXp6aW5nIGl0IGlmIHRoZSByaWdodCBkZXZpY2UgaXMgcHJlc2VudC5cblxuVGhlIHBhdGNoIHNlZW1zIHRvIGJlIG1vZGlmeWluZyBhIG51bWJlciBvZiBrZXkgZnVuY3Rpb25zOiBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWRgLCBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0YCwgYG5ldHZzY19hbGxvY19idWZfcGFnZXNgLCBgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzYCwgYG5ldHZzY193b3JrcXVldWVfaW5pdGAsIGBuZXR2c2Nfd29ya3F1ZXVlX2Rlc3Ryb3lgLCBhbmQgYG5ldHZzY19kZXZpY2VfYWRkYC4gTG9va3MgbGlrZSBmdW5jdGlvbmFsIGNoYW5nZXMgYWxsIGFyb3VuZC5cblxuTGV0J3MgbmFpbCBkb3duIHdoYXQgdGhlIGltcG9ydGFudCBGb2N1c1N5bWJvbHMgYXJlIGhlcmUuIEknbSBmb2N1c2luZyBvbjogYHZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkYCwgYHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdGAsIGBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzYCwgYG5ldHZzY19mcmVlX2J1Zl9wYWdlc2AsIGBuZXR2c2NfZGV2aWNlX2FkZGAsIGBuZXR2c2NfaW5pdF9idWZgIGFuZCBgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGxgLlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gZGlnIGludG8gYGRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AgYW5kIGBuZXR2c2NfZnJlZV9idWZfcGFnZXNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM5NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNDo1NTowMy42NjA0NzE4NDdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTM4NTYyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0dnNjX2FsbG9jX2J1Zl9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM9MTAxPXN0YXRpYyB2b2lkIG5ldHZzY19zdWJjaGFuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KVxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTEzNi0gKiAgICAgICAgZmFpbGVkIGFsbG9jYXRpb24pXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjEzNzogKiBAY2h1bmtzOiBjaHVua3MgYXJyYXkgZnJvbSBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKCksIG9yIE5VTExcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTM4LSAqIEBjaHVua19jbnQ6IG51bWJlciBvZiBlbnRyaWVzIGluIEBjaHVua3NcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz0xNDU9c3RhdGljIHZvaWQgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzKHZvaWQgKmFkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTcxLS8qXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjE3MjogKiBuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzIC0gYWxsb2NhdGUgYSB2aXJ0dWFsbHktY29udGlndW91cywgaG9zdC12aXNpYmxlXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTE3My0gKiBidWZmZXIgZm9yIHRoZSBuZXR2c2Mgc2VuZC9yZWNlaXZlIGFyZWEuXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtMTg3LSAqL1xcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYzoxODg6c3RhdGljIHZvaWQgKm5ldHZzY19hbGxvY19idWZfcGFnZXMoaW50IG5vZGUsIHUzMiBzaXplLFxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYy0xODktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXR2c2NfYnVmX2NodW5rICoqY2h1bmtzX291dCxcXG4tLVxcbmRyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYz01MDk9c3RhdGljIGludCBuZXR2c2NfaW5pdF9idWYoc3RydWN0IGh2X2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTUzNS1cXHRcXHRuZXRfZGV2aWNlLVxcdTAwM2VyZWN2X2J1ZiA9XFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jOjUzNjpcXHRcXHRcXHRuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzKGNwdV90b19ub2RlKGRldmljZS1cXHUwMDNlY2hhbm5lbC1cXHUwMDNldGFyZ2V0X2NwdSksXFxuZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jLTUzNy1cXHRcXHRcXHRcXHRcXHQgICAgICAgYnVmX3NpemUsXFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNjU1LVxcdFxcdG5ldF9kZXZpY2UtXFx1MDAzZXNlbmRfYnVmID1cXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmM6NjU2OlxcdFxcdFxcdG5ldHZzY19hbGxvY19idWZfcGFnZXMoY3B1X3RvX25vZGUoZGV2aWNlLVxcdTAwM2VjaGFubmVsLVxcdTAwM2V0YXJnZXRfY3B1KSxcXG5kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMtNjU3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBidWZfc2l6ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTU6MDUuMzU0MzMzMTIzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxOTg1MTc3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgZmV3IGNydWNpYWwgZnVuY3Rpb25zIGluIHRoaXMgcHJvY2Vzcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyBtZSB0b3dhcmRzIHRoZXNlOiBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2NhbGxlcl9kZWNyeXB0ZWRgLCBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0YCwgYG5ldHZzY19hbGxvY19idWZfcGFnZXNgLCBgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzYCwgYW5kIGBuZXR2c2NfaW5pdF9idWZgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGZvciB0aGUgZGF0YSB0cmFuc2ZlciBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSB2aXJ0dWFsaXplZCBuZXR3b3JrIGludGVyZmFjZS5cblxuSSdtIHBhcnRpY3VsYXJseSBjdXJpb3VzIGFib3V0IGhvdyB0aGUgR1BBREwgZXN0YWJsaXNobWVudCBhbmQgZGVjcnlwdGlvbiBhcmUgaGFuZGxlZCwgc28gSSdsbCBzdGFydCBieSBjb25maXJtaW5nIHRoZSBsb2NhdGlvbiBvZiBgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0YC4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgSSdtIHByZXR0eSBzdXJlIGl0J3MgaW4gdGhlIGBkcml2ZXJzL2h2L2NoYW5uZWwuY2AgZmlsZSwgYnV0IGl0J3MgYWx3YXlzIGJlc3QgdG8gdmVyaWZ5LiBMZXQncyBtYWtlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODg0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU1OjEyLjU1Mjg1Mzc3M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNDA2NDA2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9odi9jaGFubmVsLmM9NDQ1PXN0YXRpYyBpbnQgX192bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01NDMtLypcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYzo1NDQ6ICogdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0IC0gTWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZlxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTU0NS0gKiBAa2J1ZmZlciBhcm91bmQgYSBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbCgpIGNhbGwuXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01NTItICovXFxuZHJpdmVycy9odi9jaGFubmVsLmM6NTUzOnN0YXRpYyBpbnQgdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsLFxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTU1NC1cXHRcXHRcXHRcXHRcXHQgICAgIGVudW0gaHZfZ3BhZGxfdHlwZSB0eXBlLFxcbi0tXFxuZHJpdmVycy9odi9jaGFubmVsLmM9NTkyPWludCB2bWJ1c19lc3RhYmxpc2hfZ3BhZGwoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwsIHZvaWQgKmtidWZmZXIsXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01OTQte1xcbmRyaXZlcnMvaHYvY2hhbm5lbC5jOjU5NTpcXHRyZXR1cm4gdm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0KGNoYW5uZWwsIEhWX0dQQURMX0JVRkZFUixcXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy01OTYtXFx0XFx0XFx0XFx0XFx0XFx0IGtidWZmZXIsIHNpemUsIDBVLCBncGFkbCk7XFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYz02OTM9c3RhdGljIGludCBfX3ZtYnVzX29wZW4oc3RydWN0IHZtYnVzX2NoYW5uZWwgKm5ld2NoYW5uZWwsXFxuLS1cXG5kcml2ZXJzL2h2L2NoYW5uZWwuYy03MjgtXFxuZHJpdmVycy9odi9jaGFubmVsLmM6NzI5OlxcdGVyciA9IHZtYnVzX2VzdGFibGlzaF9ncGFkbF9hbmRfZGVjcnlwdChuZXdjaGFubmVsLCBIVl9HUEFETF9SSU5HLFxcbmRyaXZlcnMvaHYvY2hhbm5lbC5jLTczMC1cXHRcXHRcXHRcXHRcXHRcXHRwYWdlX2FkZHJlc3MobmV3Y2hhbm5lbC1cXHUwMDNlcmluZ2J1ZmZlcl9wYWdlKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTU6MTQuMTU2OTIxNTc2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MzEwNDE4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2gsIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGRlZmluaXRlbHkgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBIeXBlci1WIG5ldHdvcmtpbmcgYW5kIFZNQnVzIGNvcmUgbG9naWMuIEJhc2VkIG9uIHRoaXMsIEknbSBjb25maWRlbnQgaXQgd2FycmFudHMgYSBmdXp6aW5nIGVmZm9ydC4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCBtb2RpZmllczogSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZGAsIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRgLCBgbmV0dnNjX2FsbG9jX2J1Zl9wYWdlc2AsIGBuZXR2c2NfZnJlZV9idWZfcGFnZXNgLCBgbmV0dnNjX2luaXRfYnVmYCwgYW5kIGBfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbGAuIFRoZXNlIGFyZSB0aGUgYXJlYXMgd2hlcmUgSSdkIGFudGljaXBhdGUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgYW5kIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgaW50ZXJhY3Rpb25zLiBUaGVzZSB3aWxsIGJlIG15IGZvY3VzIHN5bWJvbHMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyB0byBiZSBhY3RpdmUuIEkgc2VlIGl0J3MgbGlua2VkIHRvIGBIWVBFUlZgIGFuZCBgSFlQRVJWX05FVGAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBgSFlQRVJWX05FVGAgaXMgdGhlIG9ubHkgY29uZmlnIGZvciBuZXR2c2MuIFllcywgdGhhdCdzIGNvcnJlY3QuIGBDT05GSUdfSFlQRVJWX05FVGAgaXQgaXMhIEFuZCBgSFlQRVJWYCBpcyBmb3Igdm1idXMuIEknbGwgdGFrZSBhIHF1aWNrIHNjYW4gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSByZWxldmFudCwganVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NjcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTU6MTguOTg3OTY2MTc3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcxMjI1MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIWVBFUlZfTkVUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWc6Mjpjb25maWcgSFlQRVJWX05FVFxcbmRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBIeXBlci1WIHZpcnR1YWwgbmV0d29yayBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE0OjU1OjIwLjY1OTE5NzI0N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODQ4MzUyNjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiB0aGUgSHlwZXItViBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZXJlIGlzbid0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIHRvIGNvbnNpZGVyIGhlcmU7IGl0J3MgYSBmb2N1c2VkIGNoYW5nZS4gTXkgaW1tZWRpYXRlIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHByaW1hcmlseSByZXZvbHZlcyBhcm91bmQgZW5oYW5jZW1lbnRzIGZvciBDb25maWRlbnRpYWwgVk1zIHdpdGhpbiB0aGUgSHlwZXItViBlbnZpcm9ubWVudC4gSXQncyBkcmlsbGluZyBpbnRvIHRoZSBgbmV0dnNjYCBuZXR3b3JrIGRyaXZlciBhbmQgdGhlIFZNQnVzIGNoYW5uZWwgY29kZS4gVGhlIGNvcmUgbG9naWMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBtYW5hZ2luZyB0aGUgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2YgR1BBREwgYnVmZmVycy5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIG5ldyBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgYG5ldHZzY19hbGxvY19idWZfcGFnZXNgIGFuZCBgbmV0dnNjX2ZyZWVfYnVmX3BhZ2VzYCBoYW5kbGUgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBidWZmZXIgcGFnZXMuIFRoYXQncyBwcmV0dHkgc3RhbmRhcmQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBvZiBjb3Vyc2UuIFRoZW4sIHRoaW5ncyBnZXQgbW9yZSBpbnRlcmVzdGluZyB3aXRoIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZGAgYW5kIGB2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRgLiBUaGVzZSBzdHJvbmdseSBzdWdnZXN0IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgd2F5IEdQQURMcyBhcmUgZXN0YWJsaXNoZWQsIGFuZCBkZWNyeXB0aW9uIGlzIG1hbmFnZWQgZm9yIHRoaXMgZHJpdmVyIGxvZ2ljLiBUaGlzIHdvdWxkIGFsbCBiZSByZWFjaGFibGUgZHJpdmVyIGxvZ2ljLCBvZiBjb3Vyc2UsIGFzIHRoZSBmdW5jdGlvbnMgYXJlIGludGVuZGVkIHRvIHBlcmZvcm0gYW4gb3BlcmF0aW9uLiBOb3cgdG8gc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI3OCwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTQ6NTU6MjYuNTA3NTUzMzYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI5MTMzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhZUEVSVlwiLFxuICAgIFwiSFlQRVJWX05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYnVzX2VzdGFibGlzaF9ncGFkbF9jYWxsZXJfZGVjcnlwdGVkXCIsXG4gICAgXCJ2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfYW5kX2RlY3J5cHRcIixcbiAgICBcIm5ldHZzY19hbGxvY19idWZfcGFnZXNcIixcbiAgICBcIm5ldHZzY19mcmVlX2J1Zl9wYWdlc1wiLFxuICAgIFwibmV0dnNjX2luaXRfYnVmXCIsXG4gICAgXCJfX3ZtYnVzX2VzdGFibGlzaF9ncGFkbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIG5ldHdvcmsgZHJpdmVyIChuZXR2c2MpIGFuZCBWTUJ1cyBjaGFubmVsIGNvZGUgdG8gbWFuYWdlIHRoZSBlbmNyeXB0aW9uIGxpZmVjeWNsZSBvZiBHUEFETCBidWZmZXJzLCBwYXJ0aWN1bGFybHkgZm9yIENvbmZpZGVudGlhbCBWTXMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBhbGxvY2F0ZS9mcmVlIGJ1ZmZlcnMgYW5kIGVzdGFibGlzaCBHUEFETHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIWVBFUlZcIixcbiAgICBcIkhZUEVSVl9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bWJ1c19lc3RhYmxpc2hfZ3BhZGxfY2FsbGVyX2RlY3J5cHRlZFwiLFxuICAgIFwidm1idXNfZXN0YWJsaXNoX2dwYWRsX2FuZF9kZWNyeXB0XCIsXG4gICAgXCJuZXR2c2NfYWxsb2NfYnVmX3BhZ2VzXCIsXG4gICAgXCJuZXR2c2NfZnJlZV9idWZfcGFnZXNcIixcbiAgICBcIm5ldHZzY19pbml0X2J1ZlwiLFxuICAgIFwiX192bWJ1c19lc3RhYmxpc2hfZ3BhZGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSHlwZXItViBuZXR3b3JrIGRyaXZlciAobmV0dnNjKSBhbmQgVk1CdXMgY2hhbm5lbCBjb2RlIHRvIG1hbmFnZSB0aGUgZW5jcnlwdGlvbiBsaWZlY3ljbGUgb2YgR1BBREwgYnVmZmVycywgcGFydGljdWxhcmx5IGZvciBDb25maWRlbnRpYWwgVk1zLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gYWxsb2NhdGUvZnJlZSBidWZmZXJzIGFuZCBlc3RhYmxpc2ggR1BBRExzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowtlhjm[1] Phase: Succeeded StartedAt: 2026-07-22 14:56:29 +0000 UTC FinishedAt: 2026-07-22 14:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-22 14:56:29 +0000 UTC FinishedAt: 2026-07-22 14:56:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2] Phase: Succeeded StartedAt: 2026-07-22 14:56:29 +0000 UTC FinishedAt: 2026-07-22 17:35:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-22 14:56:29 +0000 UTC FinishedAt: 2026-07-22 17:35:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-22 14:56:29 +0000 UTC FinishedAt: 2026-07-22 14:56:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-22 14:56:29 +0000 UTC FinishedAt: 2026-07-22 14:56:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtlhjm/series-workflowtlhjm-convert-artifact-3731351980/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-22 14:56:50 +0000 UTC FinishedAt: 2026-07-22 15:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-22 14:56:50 +0000 UTC FinishedAt: 2026-07-22 15:50:48 +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:*ee2df932-8cd2-4f9a-9c84-7f8d8e3dac8e,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-workflowtlhjm/series-workflowtlhjm-convert-artifact-3731351980/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": "b6374bd1-c076-490a-8dc7-14f02efb996f", "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-workflowtlhjm/series-workflowtlhjm-build-action-2821386202/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-22 14:56:50 +0000 UTC FinishedAt: 2026-07-22 15:50:33 +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:*ee2df932-8cd2-4f9a-9c84-7f8d8e3dac8e,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-workflowtlhjm/series-workflowtlhjm-convert-artifact-3731351980/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": "b6374bd1-c076-490a-8dc7-14f02efb996f", "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-workflowtlhjm/series-workflowtlhjm-build-action-2821386202/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-22 15:50:48 +0000 UTC FinishedAt: 2026-07-22 15:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-22 15:50:48 +0000 UTC FinishedAt: 2026-07-22 15:50:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-22 15:50:48 +0000 UTC FinishedAt: 2026-07-22 15:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-22 15:50:48 +0000 UTC FinishedAt: 2026-07-22 15:50:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtlhjm/series-workflowtlhjm-convert-artifact-2288715115/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-22 15:51:06 +0000 UTC FinishedAt: 2026-07-22 15:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-22 15:51:06 +0000 UTC FinishedAt: 2026-07-22 15:53:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b6374bd1-c076-490a-8dc7-14f02efb996f,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-workflowtlhjm/series-workflowtlhjm-build-action-2821386202/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-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-22 15:53:55 +0000 UTC FinishedAt: 2026-07-22 15:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-22 15:53:55 +0000 UTC FinishedAt: 2026-07-22 15:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-22 15:53:55 +0000 UTC FinishedAt: 2026-07-22 16:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-22 15:53:55 +0000 UTC FinishedAt: 2026-07-22 16:43:17 +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:*ee2df932-8cd2-4f9a-9c84-7f8d8e3dac8e,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-workflowtlhjm/series-workflowtlhjm-convert-artifact-2288715115/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": "d582d01b-871a-4ba2-bf04-14274040370d", "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-workflowtlhjm/series-workflowtlhjm-build-action-3869262479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-22 15:53:55 +0000 UTC FinishedAt: 2026-07-22 16:43:07 +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:*ee2df932-8cd2-4f9a-9c84-7f8d8e3dac8e,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-workflowtlhjm/series-workflowtlhjm-convert-artifact-2288715115/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": "d582d01b-871a-4ba2-bf04-14274040370d", "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-workflowtlhjm/series-workflowtlhjm-build-action-3869262479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-22 16:43:17 +0000 UTC FinishedAt: 2026-07-22 16:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-22 16:43:17 +0000 UTC FinishedAt: 2026-07-22 16:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-22 16:43:17 +0000 UTC FinishedAt: 2026-07-22 16:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-22 16:43:17 +0000 UTC FinishedAt: 2026-07-22 16:45:10 +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:*d582d01b-871a-4ba2-bf04-14274040370d,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-workflowtlhjm/series-workflowtlhjm-build-action-3869262479/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-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-22 16:45:24 +0000 UTC FinishedAt: 2026-07-22 17:35:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-22 16:45:24 +0000 UTC FinishedAt: 2026-07-22 17:35: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":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"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:*b6374bd1-c076-490a-8dc7-14f02efb996f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d582d01b-871a-4ba2-bf04-14274040370d,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-workflowtlhjm/series-workflowtlhjm-build-action-2821386202/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-workflowtlhjm/series-workflowtlhjm-build-action-3869262479/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-22 16:45:24 +0000 UTC FinishedAt: 2026-07-22 16:45:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-22 16:45:24 +0000 UTC FinishedAt: 2026-07-22 16:45:29 +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":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"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-workflowtlhjm/series-workflowtlhjm-convert-artifact-469364868/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-22 16:45:24 +0000 UTC FinishedAt: 2026-07-22 16:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-22 16:45:24 +0000 UTC FinishedAt: 2026-07-22 16:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-22 16:45:24 +0000 UTC FinishedAt: 2026-07-22 16:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-22 16:45:36 +0000 UTC FinishedAt: 2026-07-22 17:35:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlhjm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vmbus_establish_gpadl_caller_decrypted","vmbus_establish_gpadl_and_decrypt","netvsc_alloc_buf_pages","netvsc_free_buf_pages","netvsc_init_buf","__vmbus_establish_gpadl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a4ffc59238be84dd1c26bf1c001543e832674fc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["HYPERV","HYPERV_NET"],"series_id":"a63a2468-8286-4d90-a95e-5c8577522acb","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-22 16:45:36 +0000 UTC FinishedAt: 2026-07-22 17:35:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b6374bd1-c076-490a-8dc7-14f02efb996f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d582d01b-871a-4ba2-bf04-14274040370d,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-workflowtlhjm/series-workflowtlhjm-build-action-2821386202/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-workflowtlhjm/series-workflowtlhjm-build-action-3869262479/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-workflowtlhjm/series-workflowtlhjm-convert-artifact-469364868/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,}