Name: series-workfloww2c77 Phase: Succeeded StartedAt: 2026-08-25 09:23:44 +0000 UTC FinishedAt: 2026-08-25 13:26:51 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[0] Phase: Succeeded StartedAt: 2026-08-25 09:23:44 +0000 UTC FinishedAt: 2026-08-25 09:46:35 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 09:23:44 +0000 UTC FinishedAt: 2026-08-25 09:46:35 +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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "MEMCG" ], "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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "MEMCG" ], "series_id": "279b51ba-1933-4e0e-94ce-96fc97800a41" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "arena_vm_fault", "bpf_map_alloc_page_sleepable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJlbmFfdm1fZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJlbmEgcGFnZSBmYXVsdCBoYW5kbGVyIChgYXJlbmFfdm1fZmF1bHRgKSB0byBwcmVhbGxvY2F0ZSBwYWdlcyB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgb3V0c2lkZSBvZiBhIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbmVjZXNzYXJ5LiBUaGUgbmV3IGFsbG9jYXRvciBleHBsaWNpdGx5IHVzZXMgdGhlIGBfX0dGUF9aRVJPYCBmbGFnICh2aWEgYEJQRl9QQUdFX0dGUGApLCBlbnN1cmluZyB0aGF0IGFsbCBuZXdseSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIG1hcHBlZCBpbnRvIHRoZSBhcmVuYS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmFzIChgYXJlbmFfdm1fZmF1bHRgKSB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgb3V0c2lkZSBvZiB0aGUgc3BpbmxvY2suIFRoaXMgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBtZW1vcnkgbGltaXRzIGFyZSBleGNlZWRlZCwgcHJldmVudGluZyBzcHVyaW91cyBTSUdCVVMvU0lHU0VHViBlcnJvcnMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyBpbiB0aGUgQlBGIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNiMzIzZTM1ZmNjYzdlOGNkNzE2ZmEyNzc4YjA2NDM5N2M3MzdlYjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwOTo0MTo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggYjNjZDI4ZDllM2I1NS4uYzgxN2M5OWQyOTA2NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0yNzg0LDYgJiM0MzsyNzg0LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpO1xuIFxuIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCk7XG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIHZvaWQgYnBmX21hcF9tZW1jZ19lbnRlcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm9sZF9tZW1jZyxcbiBcdFx0XHQgc3RydWN0IG1lbV9jZ3JvdXAgKipuZXdfbWVtY2cpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuaW5kZXggN2I2ODQ3MjAwYjQzMS4uZmE0NjJhMGZmMWFkNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNDgxLDcgJiM0Mzs0ODEsOCBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlLCAqbmV3X3BhZ2UgPSBOVUxMO1xuJiM0MztcdHZtX2ZhdWx0X3QgZmF1bHRfcmV0O1xuIFx0bG9uZyBrYmFzZSwga2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHJldDtcbkBAIC00ODksNTkgJiM0Mzs0OTAsMTA2IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0a2Jhc2UgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xuIFx0a2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtXHUwMDNlYWRkcmVzcyk7XG4gXG4tXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxuJiM0MztcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilrYWRkcik7XG4mIzQzO1x0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUHJlYWxsb2NhdGUgb3V0c2lkZSB0aGUgbG9jayB3aXRoIGEgc2xlZXBhYmxlIGFsbG9jYXRvciBzbyBpdFxuJiM0MztcdFx0ICogY2FuIHJlY2xhaW0gYW5kIHJ1biB0aGUgbWVtY2cgT09NIGtpbGxlciwgd2hpY2ggdGhlXG4mIzQzO1x0XHQgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHVuZGVyIGFyZW5hLVx1MDAzZXNwaW5sb2NrIGNhbm5vdC4gQSBOVUxMXG4mIzQzO1x0XHQgKiByZXR1cm4gaXMgbm9uLXJlY292ZXJhYmxlLCBzbyBmYWlsIHdpdGggVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdFx0ICogVk1fRkFVTFRfT09NIHdvdWxkIGJlIHJldHJpZWQgYnkgdGhlIGZhdWx0IHBhdGggYW5kIGNhblxuJiM0MztcdFx0ICogbGl2ZWxvY2sgd2hlbiB0aGUgY2hhcmdlZCBtZW1jZyBpcyBub3QgdGhlIGZhdWx0aW5nIHRhc2smIzM5O3MuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4mIzQzO1x0XHRuZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTtcbiYjNDM7XHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4mIzQzO1x0XHRpZiAoIW5ld19wYWdlKVxuJiM0MztcdFx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24mIzM5O3RcbiBcdFx0ICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dFxuIFx0XHQgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC5cbiBcdFx0ICovXG4mIzQzO1x0XHRpZiAobmV3X3BhZ2UpXG4mIzQzO1x0XHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiBcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbiYjNDM7XHR9XG4gXG4gXHRwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpO1xuIFx0aWYgKHBhZ2UpIHtcbi1cdFx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxuLVx0XHRcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24mIzM5O3QgbGF6eS1hbGxvYyBvdmVyIGl0ICovXG4tXHRcdFx0Z290byBvdXRfc2lnc2VndjtcbiYjNDM7XHRcdGlmIChwYWdlID09IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBIHNjcmF0Y2ggcGFnZSBtYXJrcyBhIGhvbGUuIFNlZ2ZhdWx0IG9ubHkgaWYgdGhlIHVzZXJcbiYjNDM7XHRcdFx0ICogYXNrZWQgZm9yIGl0OyBvdGhlcndpc2Ugd2UgY291bGQgbGF6eS1hbGxvY2F0ZSBidXRcbiYjNDM7XHRcdFx0ICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0ZmF1bHRfcmV0ID0gKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpID9cbiYjNDM7XHRcdFx0XHQgICAgVk1fRkFVTFRfU0lHU0VHViA6IFZNX0ZBVUxUX1NJR0JVUztcbiYjNDM7XHRcdFx0Z290byBvdXRfZXJyX2xvY2tlZDtcbiYjNDM7XHRcdH1cbiBcdFx0LyogYWxyZWFkeSBoYXZlIGEgcGFnZSB2bWFwLWVkICovXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuJiM0MztcdGlmIChhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSB7XG4mIzQzO1x0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuJiM0MztcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHU0VHVjtcbiYjNDM7XHRcdGdvdG8gb3V0X2Vycl9sb2NrZWQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4gXG4tXHRpZiAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcbi1cdFx0LyogVXNlciBzcGFjZSByZXF1ZXN0ZWQgdG8gc2VnZmF1bHQgd2hlbiBwYWdlIGlzIG5vdCBhbGxvY2F0ZWQgYnkgYnBmIHByb2cgKi9cbi1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbiYjNDM7XHRpZiAoIW5ld19wYWdlKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVmVyeSByYXJlIHJhY2U6IHRoZSBicGYgcHJvZ3JhbSBoYWQgYWxsb2NhdGVkIGEgcGFnZSBoZXJlLCBzb1xuJiM0MztcdFx0ICogdGhlIGxvY2tsZXNzIHByb2JlIHNhdyBpdCBhbmQgd2Ugc2tpcHBlZCBwcmVhbGxvY2F0aW9uLCBidXQgaXRcbiYjNDM7XHRcdCAqIGZyZWVkIHRoZSBwYWdlIGJlZm9yZSB3ZSB0b29rIHRoZSBsb2NrLiBOb3cgd2UgZG8gbmVlZCBvbmU7XG4mIzQzO1x0XHQgKiBzbGVlcGluZyBpcyBub3QgYWxsb3dlZCBoZXJlLCBzbyBmYWxsIGJhY2sgdG8gdGhlIG5vbi1ibG9ja2luZ1xuJiM0MztcdFx0ICogYWxsb2NhdG9yIGFuZCBnaXZlIHVwIGlmIGl0IGZhaWxzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgbWFwLVx1MDAzZW51bWFfbm9kZSwgMSwgXHUwMDI2bmV3X3BhZ2UpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4tXG4tXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG4tXHQvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqL1xuLVx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuJiM0MztcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbiBcdH1cbiYjNDM7XHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2bmV3X3BhZ2UsIC5pID0gMCB9O1xuIFxuIFx0cmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBrYWRkciwgUEFHRV9TSVpFLCBhcHBseV9yYW5nZV9zZXRfY2IsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4mIzQzO1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnO1xuIFx0fVxuIFx0Zmx1c2hfdm1hcF9jYWNoZShrYWRkciwgUEFHRV9TSVpFKTtcbiBcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4mIzQzO1x0LyogbmV3X3BhZ2Ugd2FzIGNvbnN1bWVkICovXG4mIzQzO1x0cGFnZSA9IG5ld19wYWdlO1xuJiM0MztcdG5ld19wYWdlID0gTlVMTDtcbiBvdXQ6XG4gXHRwYWdlX3JlZl9hZGQocGFnZSwgMSk7XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAobmV3X3BhZ2UpXG4mIzQzO1x0XHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XG4gXHR2bWYtXHUwMDNlcGFnZSA9IHBhZ2U7XG4gXHRyZXR1cm4gMDtcbi1vdXRfc2lnc2Vndl9tZW1jZzpcbiYjNDM7XG4mIzQzO291dF9lcnJfbG9ja2VkX21lbWNnOlxuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbi1vdXRfc2lnc2VndjpcbiYjNDM7b3V0X2Vycl9sb2NrZWQ6XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbi1cdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xuJiM0MztcdGlmIChuZXdfcGFnZSlcbiYjNDM7XHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiYjNDM7XHRyZXR1cm4gZmF1bHRfcmV0O1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtNjAyLDE1ICYjNDM7NjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKVxuIFx0XHQhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fYnBmX2FsbG9jX3BhZ2UoaW50IG5pZClcbiB7XG4gXHRpZiAoIWNhbl9hbGxvY19wYWdlcygpKVxuIFx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9sb2NrKF9fR0ZQX0FDQ09VTlQsIG5pZCwgMCk7XG4gXG4tXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsXG4tXHRcdFx0XHRHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX0FDQ09VTlRcbi1cdFx0XHRcdHwgX19HRlBfTk9XQVJOLFxuLVx0XHRcdFx0MCk7XG4mIzQzO1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLCBCUEZfUEFHRV9HRlAsIDApO1xuIH1cbiBcbiBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuQEAgLTYzNiw2ICYjNDM7NjM1LDIwIEBAIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRm9yIGNhbGxlcnMgdGhhdCBrbm93IHRoZXkgcnVuIGluIGEgc2xlZXBhYmxlIGNvbnRleHQsIGUuZy4gYSB1c2VyIHBhZ2VcbiYjNDM7ICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGXG4mIzQzOyAqIHByb2dyYW0gY29udGV4dCAtIG5vdGFibHkgaXQgaXMgYWx3YXlzIGZhbHNlIG9uIFBSRUVNUFRfUlQgLSBzbyBnb2luZ1xuJiM0MzsgKiB0aHJvdWdoIGJwZl9tYXBfYWxsb2NfcGFnZXMoKSB0aGVyZSB3b3VsZCBuZWVkbGVzc2x5IHBpY2sgdGhlXG4mIzQzOyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT01cbiYjNDM7ICogbWFjaGluZXJ5LlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbiYjNDM7e1xuJiM0MztcdG1pZ2h0X3NsZWVwKCk7XG4mIzQzO1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobWFwLVx1MDAzZW51bWFfbm9kZSwgQlBGX1BBR0VfR0ZQLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGJ0Zl9maWVsZF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX2ZpZWxkICpmMSA9IGEsICpmMiA9IGI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuQEAgLTE4OCw2ICYjNDM7MTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdHJldHVybiBfX3dyaXRlX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBfX3JlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqY2dyb3VwX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4mIzQzO1x0XHRcdCAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdGNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICYjNDM7IDFdO1xuJiM0MztcdHNzaXplX3QgZ290O1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoZmlsZV9wYXRoLCBzaXplb2YoZmlsZV9wYXRoKSwgXCYjMzQ7JXMvJXNcJiMzNDssIGNncm91cF9wYXRoLCBmaWxlKTtcbiYjNDM7XHRmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRsb2dfZXJyKFwmIzM0O09wZW5pbmcgJXNcJiMzNDssIGZpbGVfcGF0aCk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGdvdCA9IHJlYWQoZmQsIGJ1ZiwgbGVuIC0gMSk7XG4mIzQzO1x0aWYgKGdvdCBcdTAwM2MgMCkge1xuJiM0MztcdFx0bG9nX2VycihcJiMzNDtSZWFkaW5nICVzXCYjMzQ7LCBmaWxlX3BhdGgpO1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcdGJ1Zltnb3RdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiByZWFkX2Nncm91cF9maWxlKCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZVxuJiM0MzsgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpclxuJiM0MzsgKiBAZmlsZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gY2dyb3VwZnMgdG8gcmVhZCBmcm9tXG4mIzQzOyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcbiYjNDM7ICogQGxlbjogU2l6ZSBvZiBAYnVmXG4mIzQzOyAqXG4mIzQzOyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCYjMzk7cyBkaXJlY3RvcnkuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuXG4mIzQzOyAqL1xuJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuJiM0MztcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xuJiM0MztcbiYjNDM7XHRmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpO1xuJiM0MztcdHJldHVybiBfX3JlYWRfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1ZiwgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3NcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtkaXJcbiYjNDM7ICogQHJlbGF0aXZlX3BhdGg6IFRoZSBjZ3JvdXAgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBwcm9jZXNzIHdvcmtkaXJcbiYjNDM7ICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxuJiM0MzsgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzXG4mIzQzOyAqIEBsZW46IFNpemUgb2YgQGJ1ZlxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAmIzM5O3MgZGlyZWN0b3J5IHVuZGVyIHRoZSBwYXJlbnQgcHJvY2Vzc1xuJiM0MzsgKiB3b3JrZGlyLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiBzdWNjZXNzZnVsLCAwIGlzIHJldHVybmVkLlxuJiM0MzsgKi9cbiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4mIzQzO1x0XHRcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xuJiM0MztcbiYjNDM7XHRmb3JtYXRfcGFyZW50X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcbiYjNDM7XHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkgLSBTZXR1cCB0aGUgY2dyb3VwIGVudmlyb25tZW50XG4gICpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5pbmRleCAzODU3MzA0YmU4NzQxLi5kNDJkMmUxMzA0NGU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5AQCAtMTUsNiAmIzQzOzE1LDEwIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuIFx0XHQgICAgICBjb25zdCBjaGFyICpidWYpO1xuIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XG4mIzQzO2ludCByZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4mIzQzO1x0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4mIzQzO2ludCByZWFkX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuJiM0MztcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiBpbnQgY2dyb3VwX3NldHVwX2FuZF9qb2luKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgpO1xuIGludCBnZXRfcm9vdF9jZ3JvdXAodm9pZCk7XG4gaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmNcbkBAIC0wLDAgJiM0MzsxLDE1OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy91c2VyLmhcdTAwM2VcbiYjNDM7I2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNkZWZpbmUgUEFHRV9TSVpFIGdldHBhZ2VzaXplKClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjZ3JvdXBfaGVscGVycy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FyZW5hX21lbWNnLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBDR19QQVRIXHRcdFwmIzM0Oy9hcmVuYV9tZW1jZ1wmIzM0O1xuJiM0MztcbiYjNDM7LyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi9cbiYjNDM7I2RlZmluZSBBUkVOQV9CVURHRVRcdCg2NCAqIDEwMjQgKiAxMDI0KVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZHVtcF9tZW1jZyhpbnQgKCpyZCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzUxMl07XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5XG4mIzQzO1x0ICogY2FycmllcyBpbmZvcm1hdGlvbiB3aGVuIGR1bXBlZCBmcm9tIHRoZSBsaXZlIGNoaWxkOyBtZW1vcnkucGVhayBhbmRcbiYjNDM7XHQgKiBtZW1vcnkuZXZlbnRzIHN1cnZpdmUgdGhlIGNoaWxkIGFuZCB0ZWxsIHRoZSBzdG9yeSBlaXRoZXIgd2F5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcmQoQ0dfUEFUSCwgXCYjMzQ7bWVtb3J5LmN1cnJlbnRcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5jdXJyZW50OiAlc1wmIzM0OywgYnVmKTtcbiYjNDM7XHRpZiAoIXJkKENHX1BBVEgsIFwmIzM0O21lbW9yeS5tYXhcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5tYXg6ICVzXCYjMzQ7LCBidWYpO1xuJiM0MztcdGlmICghcmQoQ0dfUEFUSCwgXCYjMzQ7bWVtb3J5LnBlYWtcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5wZWFrOiAlc1wmIzM0OywgYnVmKTtcbiYjNDM7XHRpZiAoIXJkKENHX1BBVEgsIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5ldmVudHM6XFxuJXNcJiMzNDssIGJ1Zik7XG4mIzQzO1x0ZmZsdXNoKHN0ZGVycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiBcJiMzNDtvb21fa2lsbFwmIzM0OyBpbiBtZW1vcnkuZXZlbnRzLiAqL1xuJiM0MztzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbNTEyXSwgKnA7XG4mIzQzO1xuJiM0MztcdGlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRwID0gc3Ryc3RyKGJ1Ziwga2V5KTtcbiYjNDM7XHRpZiAoIXApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmV0dXJuIHN0cnRvbChwICYjNDM7IHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7XG4mIzQzO1x0Y29uc3QgbG9uZyBwcyA9IFBBR0VfU0laRTtcbiYjNDM7XHRjaGFyIGJ1Zls2NF07XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldHVwX2Nncm91cF9lbnZpcm9ubWVudFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNncm91cF9mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChDR19QQVRIKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwmIzM0O2NyZWF0ZV9hbmRfZ2V0X2Nncm91cFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gbWVtb3J5IGNvbnRyb2xsZXIgLVx1MDAzZSBub3RoaW5nIHRvIHRlc3QuICovXG4mIzQzO1x0aWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgXCYjMzQ7bWVtb3J5LmN1cnJlbnRcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7JXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcJiMzNDtmb3JrXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmIChwaWQgPT0gMCkge1xuJiM0MztcdFx0c3RydWN0IGFyZW5hX21lbWNnICpjc2tlbDtcbiYjNDM7XHRcdF9fdTMyIGksIG5wYWdlcztcbiYjNDM7XHRcdGNoYXIgKmJhc2U7XG4mIzQzO1x0XHRzaXplX3Qgc3o7XG4mIzQzO1x0XHRsb25nIGN1cjtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRG8gZXZlcnl0aGluZyBmcm9tIHRoZSBjaGlsZDogdGhlIGFyZW5hIHZtYSBpcyBWTV9ET05UQ09QWSBzb1xuJiM0MztcdFx0ICogaXQgd291bGQgbm90IHN1cnZpdmUgZm9yaygpLCBvbmx5IHRoZSBjaGlsZCBzaG91bGQgYmUgdW5kZXIgdGhlXG4mIzQzO1x0XHQgKiBsaW1pdCBzbyB0aGF0IGEgbWVtY2cgT09NIGNhbm5vdCBwaWNrIHRlc3RfcHJvZ3MsIGFuZCBhIG1hcCBpc1xuJiM0MztcdFx0ICogY2hhcmdlZCB0byB0aGUgbWVtY2cgb2YgdGhlIHRhc2sgdGhhdCBjcmVhdGVzIGl0IC0gc28gam9pblxuJiM0MztcdFx0ICogYmVmb3JlIGxvYWQuIFRoZSBjZ3JvdXAgd29yayBkaXIgYmVsb25ncyB0byB0aGUgcGFyZW50IHRoYXQgc2V0XG4mIzQzO1x0XHQgKiB0aGUgZW52aXJvbm1lbnQgdXAsIHNvIHJlYWNoIGl0IHdpdGggdGhlIF9wYXJlbnQoKSBoZWxwZXJzLlxuJiM0MztcdFx0ICogRXJyb3JzIGFyZSByZXBvcnRlZCB0byB0aGUgcGFyZW50IHRocm91Z2ggdGhlIGV4aXQgY29kZSwgc2luY2VcbiYjNDM7XHRcdCAqIEFTU0VSVF8qIGluIGEgZm9ya2VkIGNoaWxkIGRvZXMgbm90IHJlYWNoIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslZFwmIzM0OywgZ2V0cGlkKCkpO1xuJiM0MztcdFx0aWYgKHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcJiMzNDtjZ3JvdXAucHJvY3NcJiMzNDssIGJ1ZikpXG4mIzQzO1x0XHRcdF9leGl0KDIpO1xuJiM0MztcbiYjNDM7XHRcdGNza2VsID0gYXJlbmFfbWVtY2dfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRcdGlmICghY3NrZWwpXG4mIzQzO1x0XHRcdF9leGl0KDMpO1xuJiM0MztcbiYjNDM7XHRcdGJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKGNza2VsLVx1MDAzZW1hcHMuYXJlbmEsIFx1MDAyNnN6KTtcbiYjNDM7XHRcdGlmICghYmFzZSlcbiYjNDM7XHRcdFx0X2V4aXQoNCk7XG4mIzQzO1x0XHRucGFnZXMgPSBicGZfbWFwX19tYXhfZW50cmllcyhjc2tlbC1cdTAwM2VtYXBzLmFyZW5hKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ2FwIG9ubHkgbm93LCBhZnRlciBsb2FkOiBldmVyeXRoaW5nIGJ1dCB0aGUgZmF1bHQtaW4gaXNcbiYjNDM7XHRcdCAqIGNoYXJnZWQsIHNvIHRoZSBhcmVuYSBnZXRzIGEgZml4ZWQgYnVkZ2V0IHJlZ2FyZGxlc3Mgb2Ygd2hhdFxuJiM0MztcdFx0ICogdGhlIGxvYWQgaXRzZWxmIGNvc3QsIGFuZCB0aGUgbG9hZCBjYW4gbmV2ZXIgaGl0IHRoZSBsaW1pdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFwmIzM0O21lbW9yeS5jdXJyZW50XCYjMzQ7LCBidWYsIHNpemVvZihidWYpKSlcbiYjNDM7XHRcdFx0X2V4aXQoNSk7XG4mIzQzO1x0XHRjdXIgPSBzdHJ0b2woYnVmLCBOVUxMLCAxMCk7XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslbGRcJiMzNDssIGN1ciAmIzQzOyBBUkVOQV9CVURHRVQpO1xuJiM0MztcdFx0aWYgKHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcJiMzNDttZW1vcnkubWF4XCYjMzQ7LCBidWYpKVxuJiM0MztcdFx0XHRfZXhpdCg2KTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRiYXNlWyhzaXplX3QpaSAqIHBzXSA9IDE7XG4mIzQzO1x0XHQvKiBGYXVsdGVkIGV2ZXJ5dGhpbmcgd2l0aG91dCBkeWluZzogZHVtcCB3aHkgKG9ubHkgdW5kZXIgLXYpLiAqL1xuJiM0MztcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlX3BhcmVudCk7XG4mIzQzO1x0XHRfZXhpdCgwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApLCBwaWQsIFwmIzM0O3dhaXRwaWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIEEgbm9uLXplcm8gZXhpdCBtZWFucyB0aGUgY2hpbGQgZmFpbGVkIHRvIHNldCB1cDsgdGhlIGNvZGUgc2F5cyB3aGVyZS4gKi9cbiYjNDM7XHRpZiAoV0lGRVhJVEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykpIHtcbiYjNDM7XHRcdEFTU0VSVF9PSyhXRVhJVFNUQVRVUyhzdGF0dXMpLCBcJiMzNDtjaGlsZCBzZXR1cFwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRmF1bHRpbmcgYSB2YWxpZCBhcmVuYSBhZGRyZXNzIHVudGlsIG1lbW9yeS5tYXggaXMgaGl0IG11c3Qgbm90IGxvb2tcbiYjNDM7XHQgKiBsaWtlIGFuIGludmFsaWQgYWNjZXNzLiBXaXRob3V0IHRoZSBmaXggdGhlIGZhdWx0IHBhdGggYWxsb2NhdGVkIHdpdGhcbiYjNDM7XHQgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHVixcbiYjNDM7XHQgKiBhbmQgdGhlIGNoaWxkIGRpZWQgd2l0aCBTSUdTRUdWIG9uIGEgdmFsaWQgYWRkcmVzczsgbm93IGl0IGlzIGhhbmRsZWRcbiYjNDM7XHQgKiBieSB0aGUgbWVtY2cgT09NIHBhdGggaW5zdGVhZC4gQSBTSUdLSUxMIGFsb25lIHdvdWxkIG5vdCBwcm92ZSB0aGVcbiYjNDM7XHQgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvXG4mIzQzO1x0ICoga2lsbCB0aGUgY2hpbGQpLCBzbyBjaGVjayBtZW1vcnkuZXZlbnRzLm9vbV9raWxsLCB3aGljaCByZWNvcmRzIHRoZVxuJiM0MztcdCAqIG1lbWNnIE9PTSBhbmQgc3Vydml2ZXMgdGhlIGNoaWxkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghQVNTRVJUX1RSVUUoV0lGU0lHTkFMRUQoc3RhdHVzKSwgXCYjMzQ7Y2hpbGQga2lsbGVkIGJ5IHNpZ25hbFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb21fa2lsbFwmIzM0OyksIDEsXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7bWVtY2cgb29tX2tpbGxcJiMzNDspKVxuJiM0MztcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTtcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChjZ3JvdXBfZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoY2dyb3VwX2ZkKTtcbiYjNDM7XHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg4MjU5Y2ZlYTA2YjZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jXG5AQCAtMCwwICYjNDM7MSwyNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9hcmVuYV9jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCA1MDAwMCk7IC8qIG51bWJlciBvZiBwYWdlcyAqL1xuJiM0MzsjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuJiM0MztcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDMyKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuJiM0MzsjZWxzZVxuJiM0MztcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuJiM0MzsjZW5kaWZcbiYjNDM7fSBhcmVuYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO2ludCBub29wKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyZW5hX3ZtX2ZhdWx0JiMzNDssCiAgICAmIzM0O2JwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gdXNlIGEgc2xlZXBhYmxlIHBhZ2UgYWxsb2NhdG9yIChgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWApIG91dHNpZGUgb2YgdGhlIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbWVtb3J5IGxpbWl0cyBhcmUgZXhjZWVkZWQsIHByZXZlbnRpbmcgc3B1cmlvdXMgU0lHQlVTL1NJR1NFR1YgZXJyb3JzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGNoYW5nZXMgaW4gdGhlIEJQRiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYjMyM2UzNWZjY2M3ZThjZDcxNmZhMjc3OGIwNjQzOTdjNzM3ZWI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDk6NDE6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCBiM2NkMjhkOWUzYjU1Li5jODE3Yzk5ZDI5MDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTI3ODQsNiAmIzQzOzI3ODQsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2dldF9jdXJyX29yX25leHQodTMyICppZCk7CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCiAJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpOwomIzQzO3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApOwogI2lmZGVmIENPTkZJR19NRU1DRwogdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLAogCQkJIHN0cnVjdCBtZW1fY2dyb3VwICoqbmV3X21lbWNnKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuYwppbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jCkBAIC00ODEsNyAmIzQzOzQ4MSw4IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtJmd0O3ZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnOwotCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSwgKm5ld19wYWdlID0gTlVMTDsKJiM0MzsJdm1fZmF1bHRfdCBmYXVsdF9yZXQ7CiAJbG9uZyBrYmFzZSwga2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwpAQCAtNDg5LDU5ICYjNDM7NDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlrYmFzZSA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7CiAJa2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtJmd0O2FkZHJlc3MpOwogCi0JaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkKJiM0MzsJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTsKJiM0MzsJaWYgKCFwYWdlICZhbXA7JmFtcDsgIShhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFByZWFsbG9jYXRlIG91dHNpZGUgdGhlIGxvY2sgd2l0aCBhIHNsZWVwYWJsZSBhbGxvY2F0b3Igc28gaXQKJiM0MzsJCSAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZQomIzQzOwkJICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciB1bmRlciBhcmVuYS0mZ3Q7c3BpbmxvY2sgY2Fubm90LiBBIE5VTEwKJiM0MzsJCSAqIHJldHVybiBpcyBub24tcmVjb3ZlcmFibGUsIHNvIGZhaWwgd2l0aCBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQkgKiBWTV9GQVVMVF9PT00gd291bGQgYmUgcmV0cmllZCBieSB0aGUgZmF1bHQgcGF0aCBhbmQgY2FuCiYjNDM7CQkgKiBsaXZlbG9jayB3aGVuIHRoZSBjaGFyZ2VkIG1lbWNnIGlzIG5vdCB0aGUgZmF1bHRpbmcgdGFzayYjMzk7cy4KJiM0MzsJCSAqLwomIzQzOwkJYnBmX21hcF9tZW1jZ19lbnRlcigmYW1wO2FyZW5hLSZndDttYXAsICZhbXA7b2xkX21lbWNnLCAmYW1wO25ld19tZW1jZyk7CiYjNDM7CQluZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTsKJiM0MzsJCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CQlpZiAoIW5ld19wYWdlKQomIzQzOwkJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkgewogCQkvKgogCQkgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24mIzM5O3QKIAkJICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dAogCQkgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC4KIAkJICovCiYjNDM7CQlpZiAobmV3X3BhZ2UpCiYjNDM7CQkJZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApOwogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwl9CiAKIAlwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpOwogCWlmIChwYWdlKSB7Ci0JCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpCi0JCQkvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJiMzOTt0IGxhenktYWxsb2Mgb3ZlciBpdCAqLwotCQkJZ290byBvdXRfc2lnc2VndjsKJiM0MzsJCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgc2NyYXRjaCBwYWdlIG1hcmtzIGEgaG9sZS4gU2VnZmF1bHQgb25seSBpZiB0aGUgdXNlcgomIzQzOwkJCSAqIGFza2VkIGZvciBpdDsgb3RoZXJ3aXNlIHdlIGNvdWxkIGxhenktYWxsb2NhdGUgYnV0CiYjNDM7CQkJICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLgomIzQzOwkJCSAqLwomIzQzOwkJCWZhdWx0X3JldCA9IChhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSA/CiYjNDM7CQkJCSAgICBWTV9GQVVMVF9TSUdTRUdWIDogVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWQ7CiYjNDM7CQl9CiAJCS8qIGFscmVhZHkgaGF2ZSBhIHBhZ2Ugdm1hcC1lZCAqLwogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpIHsKJiM0MzsJCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwkJZ290byBvdXRfZXJyX2xvY2tlZDsKJiM0MzsJfQomIzQzOwogCWJwZl9tYXBfbWVtY2dfZW50ZXIoJmFtcDthcmVuYS0mZ3Q7bWFwLCAmYW1wO29sZF9tZW1jZywgJmFtcDtuZXdfbWVtY2cpOwogCi0JaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpCi0JCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CWlmICghbmV3X3BhZ2UpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvCiYjNDM7CQkgKiB0aGUgbG9ja2xlc3MgcHJvYmUgc2F3IGl0IGFuZCB3ZSBza2lwcGVkIHByZWFsbG9jYXRpb24sIGJ1dCBpdAomIzQzOwkJICogZnJlZWQgdGhlIHBhZ2UgYmVmb3JlIHdlIHRvb2sgdGhlIGxvY2suIE5vdyB3ZSBkbyBuZWVkIG9uZTsKJiM0MzsJCSAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nCiYjNDM7CQkgKiBhbGxvY2F0b3IgYW5kIGdpdmUgdXAgaWYgaXQgZmFpbHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtJmd0O251bWFfbm9kZSwgMSwgJmFtcDtuZXdfcGFnZSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7CiYjNDM7CQl9CiYjNDM7CX0KIAogCXJldCA9IHJhbmdlX3RyZWVfY2xlYXIoJmFtcDthcmVuYS0mZ3Q7cnQsIHZtZi0mZ3Q7cGdvZmYsIDEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7Ci0KLQlzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gJmFtcDtwYWdlLCAuaSA9IDAgfTsKLQkvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqLwotCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsICZhbXA7cGFnZSk7CiAJaWYgKHJldCkgewotCQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgdm1mLSZndDtwZ29mZiwgMSk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KJiM0MzsJc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9ICZhbXA7bmV3X3BhZ2UsIC5pID0gMCB9OwogCiAJcmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGthZGRyLCBQQUdFX1NJWkUsIGFwcGx5X3JhbmdlX3NldF9jYiwgJmFtcDtkYXRhKTsKIAlpZiAocmV0KSB7CiAJCXJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCB2bWYtJmd0O3Bnb2ZmLCAxKTsKLQkJZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KIAlmbHVzaF92bWFwX2NhY2hlKGthZGRyLCBQQUdFX1NJWkUpOwogCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CS8qIG5ld19wYWdlIHdhcyBjb25zdW1lZCAqLwomIzQzOwlwYWdlID0gbmV3X3BhZ2U7CiYjNDM7CW5ld19wYWdlID0gTlVMTDsKIG91dDoKIAlwYWdlX3JlZl9hZGQocGFnZSwgMSk7CiAJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiYjNDM7CWlmIChuZXdfcGFnZSkKJiM0MzsJCWZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTsKIAl2bWYtJmd0O3BhZ2UgPSBwYWdlOwogCXJldHVybiAwOwotb3V0X3NpZ3NlZ3ZfbWVtY2c6CiYjNDM7CiYjNDM7b3V0X2Vycl9sb2NrZWRfbWVtY2c6CiAJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKLW91dF9zaWdzZWd2OgomIzQzO291dF9lcnJfbG9ja2VkOgogCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwotCXJldHVybiBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwlpZiAobmV3X3BhZ2UpCiYjNDM7CQlmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7CiYjNDM7CXJldHVybiBmYXVsdF9yZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtNjAyLDE1ICYjNDM7NjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKQogCQkhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7CiB9CiAKJiM0MzsjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKQomIzQzOwogc3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpCiB7CiAJaWYgKCFjYW5fYWxsb2NfcGFnZXMoKSkKIAkJcmV0dXJuIGFsbG9jX3BhZ2VzX25vbG9jayhfX0dGUF9BQ0NPVU5ULCBuaWQsIDApOwogCi0JcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLAotCQkJCUdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVAotCQkJCXwgX19HRlBfTk9XQVJOLAotCQkJCTApOwomIzQzOwlyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEJQRl9QQUdFX0dGUCwgMCk7CiB9CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCkBAIC02MzYsNiAmIzQzOzYzNSwyMCBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlCiYjNDM7ICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGCiYjNDM7ICogcHJvZ3JhbSBjb250ZXh0IC0gbm90YWJseSBpdCBpcyBhbHdheXMgZmFsc2Ugb24gUFJFRU1QVF9SVCAtIHNvIGdvaW5nCiYjNDM7ICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZQomIzQzOyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT00KJiM0MzsgKiBtYWNoaW5lcnkuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCkKJiM0Mzt7CiYjNDM7CW1pZ2h0X3NsZWVwKCk7CiYjNDM7CXJldHVybiBhbGxvY19wYWdlc19ub2RlKG1hcC0mZ3Q7bnVtYV9ub2RlLCBCUEZfUEFHRV9HRlAsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogewogCWNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKQEAgLTE4OCw2ICYjNDM7MTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKIAlyZXR1cm4gX193cml0ZV9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgX19yZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKmNncm91cF9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJCSAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICYjNDM7IDFdOwomIzQzOwlzc2l6ZV90IGdvdDsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlzbnByaW50ZihmaWxlX3BhdGgsIHNpemVvZihmaWxlX3BhdGgpLCAmIzM0OyVzLyVzJiMzNDssIGNncm91cF9wYXRoLCBmaWxlKTsKJiM0MzsJZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlsb2dfZXJyKCYjMzQ7T3BlbmluZyAlcyYjMzQ7LCBmaWxlX3BhdGgpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZ290ID0gcmVhZChmZCwgYnVmLCBsZW4gLSAxKTsKJiM0MzsJaWYgKGdvdCAmbHQ7IDApIHsKJiM0MzsJCWxvZ19lcnIoJiMzNDtSZWFkaW5nICVzJiMzNDssIGZpbGVfcGF0aCk7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwlidWZbZ290XSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmVhZF9jZ3JvdXBfZmlsZSgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGUKJiM0MzsgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpcgomIzQzOyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzCiYjNDM7ICogQGxlbjogU2l6ZSBvZiBAYnVmCiYjNDM7ICoKJiM0MzsgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAmIzM5O3MgZGlyZWN0b3J5LgomIzQzOyAqCiYjNDM7ICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC4KJiM0MzsgKi8KJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwljaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdOwomIzQzOwomIzQzOwlmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3MKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpcgomIzQzOyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyCiYjNDM7ICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3MKJiM0MzsgKiBAbGVuOiBTaXplIG9mIEBidWYKJiM0MzsgKgomIzQzOyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCYjMzk7cyBkaXJlY3RvcnkgdW5kZXIgdGhlIHBhcmVudCBwcm9jZXNzCiYjNDM7ICogd29ya2Rpci4KJiM0MzsgKgomIzQzOyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuCiYjNDM7ICovCiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiYjNDM7CQkJICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07CiYjNDM7CiYjNDM7CWZvcm1hdF9wYXJlbnRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSAtIFNldHVwIHRoZSBjZ3JvdXAgZW52aXJvbm1lbnQKICAqCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCmluZGV4IDM4NTczMDRiZTg3NDEuLmQ0MmQyZTEzMDQ0ZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCkBAIC0xNSw2ICYjNDM7MTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiBpbnQgd3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCSAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIGludCBjZ3JvdXBfc2V0dXBfYW5kX2pvaW4oY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7CiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpOwogaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCkBAIC0wLDAgJiM0MzsxLDE1OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdXNlci5oJmd0OwomIzQzOyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqLwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjZ3JvdXBfaGVscGVycy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FyZW5hX21lbWNnLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBDR19QQVRICQkmIzM0Oy9hcmVuYV9tZW1jZyYjMzQ7CiYjNDM7CiYjNDM7LyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi8KJiM0MzsjZGVmaW5lIEFSRU5BX0JVREdFVAkoNjQgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkdW1wX21lbWNnKGludCAoKnJkKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpKQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5CiYjNDM7CSAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kCiYjNDM7CSAqIG1lbW9yeS5ldmVudHMgc3Vydml2ZSB0aGUgY2hpbGQgYW5kIHRlbGwgdGhlIHN0b3J5IGVpdGhlciB3YXkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LmN1cnJlbnQmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuY3VycmVudDogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5tYXgmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkubWF4OiAlcyYjMzQ7LCBidWYpOwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LnBlYWsmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkucGVhazogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuZXZlbnRzOlxuJXMmIzM0OywgYnVmKTsKJiM0MzsJZmZsdXNoKHN0ZGVycik7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiAmIzM0O29vbV9raWxsJiMzNDsgaW4gbWVtb3J5LmV2ZW50cy4gKi8KJiM0MztzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXSwgKnA7CiYjNDM7CiYjNDM7CWlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcCA9IHN0cnN0cihidWYsIGtleSk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIHN0cnRvbChwICYjNDM7IHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7CiYjNDM7CWNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7CiYjNDM7CWNoYXIgYnVmWzY0XTsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwllcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldHVwX2Nncm91cF9lbnZpcm9ubWVudCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2dyb3VwX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKENHX1BBVEgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsICYjMzQ7Y3JlYXRlX2FuZF9nZXRfY2dyb3VwJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIE5vIG1lbW9yeSBjb250cm9sbGVyIC0mZ3Q7IG5vdGhpbmcgdG8gdGVzdC4gKi8KJiM0MzsJaWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7LCBidWYsIHNpemVvZihidWYpKSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7JXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocGlkLCAwLCAmIzM0O2ZvcmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlzdHJ1Y3QgYXJlbmFfbWVtY2cgKmNza2VsOwomIzQzOwkJX191MzIgaSwgbnBhZ2VzOwomIzQzOwkJY2hhciAqYmFzZTsKJiM0MzsJCXNpemVfdCBzejsKJiM0MzsJCWxvbmcgY3VyOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERvIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2hpbGQ6IHRoZSBhcmVuYSB2bWEgaXMgVk1fRE9OVENPUFkgc28KJiM0MzsJCSAqIGl0IHdvdWxkIG5vdCBzdXJ2aXZlIGZvcmsoKSwgb25seSB0aGUgY2hpbGQgc2hvdWxkIGJlIHVuZGVyIHRoZQomIzQzOwkJICogbGltaXQgc28gdGhhdCBhIG1lbWNnIE9PTSBjYW5ub3QgcGljayB0ZXN0X3Byb2dzLCBhbmQgYSBtYXAgaXMKJiM0MzsJCSAqIGNoYXJnZWQgdG8gdGhlIG1lbWNnIG9mIHRoZSB0YXNrIHRoYXQgY3JlYXRlcyBpdCAtIHNvIGpvaW4KJiM0MzsJCSAqIGJlZm9yZSBsb2FkLiBUaGUgY2dyb3VwIHdvcmsgZGlyIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0aGF0IHNldAomIzQzOwkJICogdGhlIGVudmlyb25tZW50IHVwLCBzbyByZWFjaCBpdCB3aXRoIHRoZSBfcGFyZW50KCkgaGVscGVycy4KJiM0MzsJCSAqIEVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHBhcmVudCB0aHJvdWdoIHRoZSBleGl0IGNvZGUsIHNpbmNlCiYjNDM7CQkgKiBBU1NFUlRfKiBpbiBhIGZvcmtlZCBjaGlsZCBkb2VzIG5vdCByZWFjaCBpdC4KJiM0MzsJCSAqLwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslZCYjMzQ7LCBnZXRwaWQoKSk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7Y2dyb3VwLnByb2NzJiMzNDssIGJ1ZikpCiYjNDM7CQkJX2V4aXQoMik7CiYjNDM7CiYjNDM7CQljc2tlbCA9IGFyZW5hX21lbWNnX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CQlpZiAoIWNza2VsKQomIzQzOwkJCV9leGl0KDMpOwomIzQzOwomIzQzOwkJYmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoY3NrZWwtJmd0O21hcHMuYXJlbmEsICZhbXA7c3opOwomIzQzOwkJaWYgKCFiYXNlKQomIzQzOwkJCV9leGl0KDQpOwomIzQzOwkJbnBhZ2VzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoY3NrZWwtJmd0O21hcHMuYXJlbmEpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcCBvbmx5IG5vdywgYWZ0ZXIgbG9hZDogZXZlcnl0aGluZyBidXQgdGhlIGZhdWx0LWluIGlzCiYjNDM7CQkgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXQKJiM0MzsJCSAqIHRoZSBsb2FkIGl0c2VsZiBjb3N0LCBhbmQgdGhlIGxvYWQgY2FuIG5ldmVyIGhpdCB0aGUgbGltaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCAmIzM0O21lbW9yeS5jdXJyZW50JiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQomIzQzOwkJCV9leGl0KDUpOwomIzQzOwkJY3VyID0gc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslbGQmIzM0OywgY3VyICYjNDM7IEFSRU5BX0JVREdFVCk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7bWVtb3J5Lm1heCYjMzQ7LCBidWYpKQomIzQzOwkJCV9leGl0KDYpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5wYWdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJYmFzZVsoc2l6ZV90KWkgKiBwc10gPSAxOwomIzQzOwkJLyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi8KJiM0MzsJCWR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQpOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKSwgcGlkLCAmIzM0O3dhaXRwaWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogQSBub24temVybyBleGl0IG1lYW5zIHRoZSBjaGlsZCBmYWlsZWQgdG8gc2V0IHVwOyB0aGUgY29kZSBzYXlzIHdoZXJlLiAqLwomIzQzOwlpZiAoV0lGRVhJVEVEKHN0YXR1cykgJmFtcDsmYW1wOyBXRVhJVFNUQVRVUyhzdGF0dXMpKSB7CiYjNDM7CQlBU1NFUlRfT0soV0VYSVRTVEFUVVMoc3RhdHVzKSwgJiMzNDtjaGlsZCBzZXR1cCYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZhdWx0aW5nIGEgdmFsaWQgYXJlbmEgYWRkcmVzcyB1bnRpbCBtZW1vcnkubWF4IGlzIGhpdCBtdXN0IG5vdCBsb29rCiYjNDM7CSAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aAomIzQzOwkgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHViwKJiM0MzsJICogYW5kIHRoZSBjaGlsZCBkaWVkIHdpdGggU0lHU0VHViBvbiBhIHZhbGlkIGFkZHJlc3M7IG5vdyBpdCBpcyBoYW5kbGVkCiYjNDM7CSAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZQomIzQzOwkgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvCiYjNDM7CSAqIGtpbGwgdGhlIGNoaWxkKSwgc28gY2hlY2sgbWVtb3J5LmV2ZW50cy5vb21fa2lsbCwgd2hpY2ggcmVjb3JkcyB0aGUKJiM0MzsJICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cyksICYjMzQ7Y2hpbGQga2lsbGVkIGJ5IHNpZ25hbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb21fa2lsbCYjMzQ7KSwgMSwKJiM0MzsJCSAgICAgICAmIzM0O21lbWNnIG9vbV9raWxsJiMzNDspKQomIzQzOwkJZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTsKJiM0MztvdXQ6CiYjNDM7CWlmIChjZ3JvdXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGNncm91cF9mZCk7CiYjNDM7CWNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi44ODI1OWNmZWEwNmI2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMKQEAgLTAsMCAmIzQzOzEsMjQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2FyZW5hX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDUwMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovCiYjNDM7I2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjQKJiM0MzsJX191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCAmbHQ7Jmx0OyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi8KJiM0MzsjZWxzZQomIzQzOwlfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsICZsdDsmbHQ7IDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwomIzQzOyNlbmRpZgomIzQzO30gYXJlbmEgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBub29wKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQXJlbmEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSBzZWxmdGVzdHMsIHdoaWNoIGlzIGdvb2QuIEJ1dCBtb3JlIGltcG9ydGFudGx5LCBpdCYjMzk7cyBjaGFuZ2luZyBob3cgcGFnZXMgYXJlIGFsbG9jYXRlZCB3aXRoaW4gdGhlIEJQRiBhcmVuYSwgc3BlY2lmaWNhbGx5IGluIHRoZSBgYXJlbmFfdm1fZmF1bHRgIGZ1bmN0aW9uLCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCwgd2hpY2ggaXMgdXNpbmcgYSBzbGVlcGFibGUgYWxsb2NhdG9yIG5vdywgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyB0aGUgbWVtY2cgT09NIGtpbGxlciwgaW5zdGVhZCBvZiBqdXN0IHRoZSBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHRoYXQgd2FzIHVuZGVyIGEgc3BpbmxvY2suCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogaXMgdGhpcyBldmVuIHJlYWNoYWJsZT8gSXMgdGhpcyBjaGFuZ2Ugd29ydGggc3BlbmRpbmcgdGhlIGVmZm9ydCB0byBmdXp6IGl0PyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGVzZSBtb2RpZmllZCBmdW5jdGlvbnMsIGBhcmVuYV92bV9mYXVsdGAgYW5kIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCwgYXJlIGFjdHVhbGx5IGNhbGxlZC4KCmBhcmVuYV92bV9mYXVsdGAgaXMsIGFzIEkgcmVjYWxsLCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmEgbWFwcy4gVGhlIG90aGVyIGZ1bmN0aW9uLCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAsIGlzIHRoZSBuZXcgZnVuY3Rpb24gdGhhdCYjMzk7cyAqYmVpbmcqIGNhbGxlZCBmcm9tIGBhcmVuYV92bV9mYXVsdGAuIFNpbXBsZSBlbm91Z2guCgpUaW1lIHRvIHNlYXJjaCB0aGUgY29kZS4gSSBuZWVkIHRvIGZpbmQgd2hlcmUgYGFyZW5hX3ZtX2ZhdWx0YCBhbmQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGFyZSB1c2VkLiBPa2F5LCBgYXJlbmFfdm1fZmF1bHRgIGlzIHVzZWQgaW4gYGFyZW5hX3ZtX29wc2AsIHdoaWNoIEkgYmV0IGlzIHNldCBzb21ld2hlcmUgd2l0aGluIGBhcmVuYV9tYXBfbW1hcGAuIEkmIzM5O2xsIGdvIGNoZWNrIGBrZXJuZWwvYnBmL2FyZW5hLmNgIHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYV92bV9mYXVsdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9NDY0PXN0YXRpYyB2b2lkIGFyZW5hX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NzgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDc5OnN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxua2VybmVsL2JwZi9hcmVuYS5jLTQ4MC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTU5NT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk5LVx0LmNsb3NlXHRcdD0gYXJlbmFfdm1fY2xvc2UsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjAwOlx0LmZhdWx0ICAgICAgICAgID0gYXJlbmFfdm1fZmF1bHQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjAxLX07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM9NDg9dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1fdXNhZ2Uodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy05OS1cdCAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzoxMDA6XHQgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xMDEtXHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI1NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmVuYV92bV9mYXVsdGAsIHdoaWNoIGlzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgc3BlY2lmaWNhbGx5IGZvciBCUEYgYXJlbmFzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgYWRkaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGRlZmluaXRlbHkgYSBmdW5jdGlvbiB0byBiZSBhd2FyZSBvZi4mIzM0OwoKVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBpbiB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIG1ha2VzIGl0IGluaGVyZW50bHkgcmVhY2hhYmxlLCBhbmQgbXkgZnV6emluZyBpbnN0aW5jdHMgYXJlIGFscmVhZHkga2lja2luZyBpbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc3BvdCB3b3J0aCBpbnZlc3Rpbmcgc29tZSB0aW1lIGFuZCBlZmZvcnQgdG8gdGVzdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBCUEYgYXJlbmFzIHNvIEkgY2FuIGVuc3VyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgcHJvcGVybHkgZW5hYmxlZCBhbmQgSSBjYW4gYnVpbGQgYSBwcm9wZXIgdGVzdCBlbnZpcm9ubWVudC4gTGV0IG1lIGZpbmQgdGhvc2UgY29uZmlnIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0FSRU5BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTAxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIEJQRiBBcmVuYSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgQlBGX0FSRU5BYCBjb25maWd1cmF0aW9uIG9wdGlvbiBsaXZlcy4gSXQmIzM5O3Mgbm90IHNvbWV0aGluZyBJIGNhbiBqdXN0IGludHVpdGl2ZWx5IHJlY2FsbCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTXkgZ3V0IHNheXMgaXQmIzM5O3MgcHJvYmFibHkgZGVmaW5lZCBpbiBlaXRoZXIgYEtjb25maWdgIG9yIGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbG9jYXRpb24gZm9yIGEgQlBGLXNwZWNpZmljIGZlYXR1cmUuIEkmIzM5O2xsIHNlYXJjaCBmb3IgaXQgdGhlcmUuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIGFwcHJvYWNoIHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jPTcxPXN0YXRpYyBpbnQgc2N4X2FyZW5hX2dyb3coc3RydWN0IHNjeF9zY2hlZCAqc2NoLCB1MzIgcGFnZV9jbnQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg2LVx0dWFkZHIzMiA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpcDtcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYzo4NzpcdC8qIGFyZW5hLm8sIHdoaWNoIGRlZmluZXMgdGhlc2UsIGlzIGJ1aWx0IG9ubHkgb24gTU1VIFx1MDAyNlx1MDAyNiA2NEJJVCAqL1xua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg4LSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgwNjU9c3RhdGljIGludCBzY3hfYXJlbmFfc2Nhbl9wcm9nKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNjktXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwNzA6XHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcdTAwMjZcdTAwMjYgNjRCSVQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA3MS0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlPTk5Mz0kKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm86ICQoT1VUUFVUKS94ZHBfbGJfYmVuY2guc2tlbC5oIGJlbmNoX2JwZl90aW1pbmcuaFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjk5NDokKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubzogJChMSUJBUkVOQV9CRU5DSF9TS0VMKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTk5NS0kKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmhcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU9OTk4PSQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtMTAyMS1cdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjEwMjI6XHRcdCAkKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTEwMjMtXHRcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGJwZiBhcmVuYSBjb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBhcmVuYS5vYCBvYmplY3QgZmlsZSwgYW5kIGl0IHNlZW1zIGxpa2UgaXQgZ2V0cyBidWlsdCBvbmx5IHVuZGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19NTVVgLCBhbmQgYENPTkZJR182NEJJVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCBhbmQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc28gdGhlcmUgYXJlIGxpa2VseSByZWxhdGVkIGNoYW5nZXMgaW4gdGhlIGNvcmUgQlBGIHN0cnVjdHVyZXMgYW5kIHRoZSBzeXNjYWxsIGludGVyZmFjZS4KCk15IGluaXRpYWwgZm9jdXMgc3ltYm9scyB3ZXJlIGBhcmVuYV92bV9mYXVsdGAgYW5kIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4gSG9sZCBvbiwgdGhvdWdoLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBJcyBgYXJlbmFfdm1fZmF1bHRgIHN0YXRpYz8gWXVwLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilgLiBIbSwgdGhhdCBtaWdodCBiZSBwcm9ibGVtYXRpYy4gVGhlIGd1aWRhbmNlIHByZWZlcnMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSBvZnRlbiBpbmxpbmVkLCBtYWtpbmcgdGhlbSBoYXJkZXIgdG8gdGFyZ2V0LiBIb3dldmVyLCBpdCAqaXMqIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgYXJlbmFfdm1fb3BzYCwgc28gaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIEl0ICpzaG91bGQqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBkZXNwaXRlIGJlaW5nIHN0YXRpYy4KCkJ1dCwgdGhlIHByb21wdCBzdWdnZXN0cyBwcmlvcml0aXppbmcgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgYmV0dGVyIGNhbmRpZGF0ZXMuIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyBub24tc3RhdGljLCBzbyBsZXQmIzM5O3MgbG9vayBmb3Igb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0cnVjdCBicGZfbWFwIFxcKmFyZW5hX21hcF9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTk0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgYXJlbmEuY2AgZm9yIEJQRiBTaGVuYW5pZ2FucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIEJQRiBhcmVuYS4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoaXMgc3BlY2lmaWMgYXJlbmEgaW1wbGVtZW50YXRpb24sIHNvIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgYGtlcm5lbC9icGYvYXJlbmEuY2AuIE15IHByaW1hcnkgaW50ZXJlc3QgaGVyZSBpcyBob3cgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCB1c2VkLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhpcyBmaWxlIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucy4gSSYjMzk7bSBhc3N1bWluZyB0aGUgKnN0YXRpYyogb25lcyBhcmUgbGlrZWx5IGludGVybmFsIHRvIHRoZSBhcmVuYSBtb2R1bGUuIFRoZSBub24tc3RhdGljIG9uZXMgYXJlIHdoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQ6IHRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGNhbGxpbmcgaW50by4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UgdGhhdCBhcmVuYS5jIGV4cG9zZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKiBhcmVuYV9tYXBfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTM0PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfVVNFUl9SSU5HQlVGLCB1c2VyX3JpbmdidWZfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTM1OkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQVJFTkEsIGFyZW5hX21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEzNi1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTEwPXN0cnVjdCBicGZfbWFwICpicGZfcHJvZ19hcmVuYShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTExNi1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMTc6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3BlZWtfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTgte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMjEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTIyOnN0YXRpYyBsb25nIGFyZW5hX21hcF9wdXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjMte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMjYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTI3OnN0YXRpYyBsb25nIGFyZW5hX21hcF9wb3BfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjgte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMzEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTMyOnN0YXRpYyBsb25nIGFyZW5hX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcbmtlcm5lbC9icGYvYXJlbmEuYy0xMzMte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMzYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTM3OnN0YXRpYyBpbnQgYXJlbmFfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxua2VybmVsL2JwZi9hcmVuYS5jLTEzOC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTM0Mz1zdGF0aWMgaW50IGV4aXN0aW5nX3BhZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzY5LVxua2VybmVsL2JwZi9hcmVuYS5jOjM3MDpzdGF0aWMgdm9pZCBhcmVuYV9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9hcmVuYS5jLTM3MS17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTQwMT1zdGF0aWMgdm9pZCAqYXJlbmFfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDA1LVxua2VybmVsL2JwZi9hcmVuYS5jOjQwNjpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxua2VybmVsL2JwZi9hcmVuYS5jLTQwNy1cdFx0XHRcdCAgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDExLVxua2VybmVsL2JwZi9hcmVuYS5jOjQxMjpzdGF0aWMgaW50IGFyZW5hX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxua2VybmVsL2JwZi9hcmVuYS5jLTQxMy1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00MTctXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDE4OnN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9hcmVuYS5jLTQxOS17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTYwMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBhcmVuYV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02MzYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjM3OnN0YXRpYyBpbnQgYXJlbmFfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjM4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjc2LVxua2VybmVsL2JwZi9hcmVuYS5jOjY3NzpzdGF0aWMgaW50IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcbmtlcm5lbC9icGYvYXJlbmEuYy02Nzgte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02ODc9QlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9hcmVuYV9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfYXJlbmEpXG5rZXJuZWwvYnBmL2FyZW5hLmM6Njg4OmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9hcmVuYS5jLTY4OS1cdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDEwPXU2NCBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8oc3RydWN0IGJwZl90aW1lZF9tYXlfZ290byAqcClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDI4LS8qIGZvciBjb25maWdzIHdpdGhvdXQgTU1VIG9yIDMyLWJpdCAqL1xua2VybmVsL2JwZi9jb3JlLmM6MzQyOTpfX3dlYWsgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFyZW5hX21hcF9vcHM7XG5rZXJuZWwvYnBmL2NvcmUuYy0zNDMwLV9fd2VhayB1NjQgYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU2NQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWFwIE9wZXJhdGlvbnMgYW5kIEFsbG9jYXRpb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiBhIGZldyBjcnVjaWFsIHBvaW50cy4gVGhlIGBhcmVuYV9tYXBfb3BzYCBzdHJ1Y3R1cmUsIHdoaWNoIEkgc2VlIGlzIHVzZWQgZm9yIHRoZSBtYXAgb3BlcmF0aW9ucywgaXMgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYy4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgdG8gbm90ZS4gTm93LCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgYXBwZWFyIHRvIGJlIGBhcmVuYV92bV9mYXVsdGAgYW5kIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4gYGFyZW5hX3ZtX2ZhdWx0YCBpcyBwcm9iYWJseSBub3QgdGhlIG1haW4gaXNzdWUgaGVyZS4gVGhlIHNlY29uZCBmdW5jdGlvbiwgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgICwgaXMgYWxzbyBub24tc3RhdGljOyBhbmQgc2VlbXMgdG8gYmUgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IGl0IGlzbiYjMzk7dCBzdGF0aWMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBhY3R1YWxseSBleHBvcnRlZCBhbmQgdmlzaWJsZT8mIzM0OyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIFRoYXQmIzM5O3MgbXkgbmV4dCBzdGVwLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgY29uZmlybSBpdHMgdmlzaWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTI3ODU9aW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjc4Ni1cdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9icGYuaDoyNzg3OnN0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApO1xuaW5jbHVkZS9saW51eC9icGYuaC0yNzg4LSNpZmRlZiBDT05GSUdfTUVNQ0dcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MDMtXHRcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTA0Olx0XHRuZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MDUtXHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjE1PWludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1LSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ2OnN0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgTWFwIEFsbG9jYXRpb24gYW5kIFZNIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhpbmtpbmcsIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBgYXJlbmFfdm1fZmF1bHRgIGlzIHN0YXRpYywgYnV0IGhvbGQgb24uLi4gaXQmIzM5O3MgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgYXJlbmFfdm1fb3BzYC4gU2luY2UgaXQmIzM5O3MgYSBmdW5jdGlvbiBwb2ludGVyIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBpbmxpbmVkLiBUaGF0JiMzOTtzIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMuCgpXYWl0IGEgbWludXRlLCBJIG5lZWQgdG8ga2VlcCB0aGVzZSBzdHJhaWdodC4gYGFyZW5hX21hcF9vcHNgIGhhbmRsZXMgdGhlIG1hcCBvcGVyYXRpb25zIGFuZCBgYXJlbmFfdm1fb3BzYCBoYW5kbGVzIHRoZSBWTSBvcGVyYXRpb25zLiBSaWdodC4gT2theSwgbGV0JiMzOTtzIHJlZm9jdXMuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGFyZW5hX3ZtX29wc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGF0JiMzOTtzIHdvcmtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hX3ZtX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01OTQtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xua2VybmVsL2JwZi9hcmVuYS5jLTU5Ni1cdC5vcGVuXHRcdD0gYXJlbmFfdm1fb3Blbixcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM3PXN0YXRpYyBpbnQgYXJlbmFfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY3Mi1cdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05UQ09QWSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjczOlx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNmFyZW5hX3ZtX29wcztcbmtlcm5lbC9icGYvYXJlbmEuYy02NzQtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MDYKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIGZvciBTZWxlY3RpbmcgRm9jdXMgU3ltYm9scyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgU3l6a2FsbGVyLCBnaXZlbiB0aGUgY29uc3RyYWludHMuIGBhcmVuYV92bV9mYXVsdGAgaXMgYSBjYWxsYmFjaywgc28gaXQmIzM5O3Mgbm90IGlubGluZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgZ2l2ZXMgaXQgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gSXQgaXMgYWxzbyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggY291bGQgYmUgYW4gaXNzdWUgZm9yIFN5emthbGxlciBpZiBpdCBjYW4mIzM5O3QgcGFyc2Uga2FsbHN5bXMuIEhvd2V2ZXIsIHRoZSBkb2N1bWVudGF0aW9uIHN0cmVzc2VzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCBzbyBpdCBzaG91bGQgYmUgZWFzaWx5IHRhcmdldGFibGUuCgpBbmQgaG9sZCBvbi4uLiBhcmVuJiMzOTt0IHdlIGZvY3VzaW5nIG9uIHN5c2NhbGxzPyBSaWdodCwgU3l6a2FsbGVyIHRhcmdldHMgc3lzY2FsbHMuIFRoZSBCUEYgc3lzY2FsbCAqaXMqIHRoZSBlbnRyeSBwb2ludCEgU28sIHRoZSBnb2FsIGlzIHRvIHRhcmdldCBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGFyZSBtb2RpZmllZCBhbmQgcmVhY2hhYmxlIGZyb20gaXQuCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBhdmFpbGFibGUgaW5mb3JtYXRpb24sIEkmIzM5O2xsIGluY2x1ZGUgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGFuZCBgYXJlbmFfdm1fZmF1bHRgIGluIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4gVGhleSBhcmUgbm90IGlubGluZWQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciBDT05GSUcgb3B0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBtdXN0LWhhdmUsIG9idmlvdXNseS4gVGhlIGBhcmVuYS5vYCBtb2R1bGUgc3BlY2lmaWNhbGx5IHNlZW1zIHRvIHJlcXVpcmUgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCB0byBiZSBidWlsdC4gSXQmIzM5O3MgdGltZSB0byBkb3VibGUtY2hlY2sgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gYWxsIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jPTcxPXN0YXRpYyBpbnQgc2N4X2FyZW5hX2dyb3coc3RydWN0IHNjeF9zY2hlZCAqc2NoLCB1MzIgcGFnZV9jbnQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg2LVx0dWFkZHIzMiA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpcDtcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYzo4NzpcdC8qIGFyZW5hLm8sIHdoaWNoIGRlZmluZXMgdGhlc2UsIGlzIGJ1aWx0IG9ubHkgb24gTU1VIFx1MDAyNlx1MDAyNiA2NEJJVCAqL1xua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg4LSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgwNjU9c3RhdGljIGludCBzY3hfYXJlbmFfc2Nhbl9wcm9nKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNjktXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwNzA6XHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcdTAwMjZcdTAwMjYgNjRCSVQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA3MS0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlPTk5Mz0kKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm86ICQoT1VUUFVUKS94ZHBfbGJfYmVuY2guc2tlbC5oIGJlbmNoX2JwZl90aW1pbmcuaFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjk5NDokKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubzogJChMSUJBUkVOQV9CRU5DSF9TS0VMKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTk5NS0kKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmhcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU9OTk4PSQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtMTAyMS1cdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjEwMjI6XHRcdCAkKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTEwMjMtXHRcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNTMKCQkJCQkJCW91dHB1dDogMTQ3CgkJCQkJCQl0aG91Z2h0czogNjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJlcXVpcmVkIEtlcm5lbCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBrbm93IHRoYXQgZm9yIHN5emthbGxlciB0YXJnZXRzIChsaWtlIHg4Nl82NCBhbmQgYXJtNjQpLCBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfNjRCSVRgIGFyZSBwcmV0dHkgbXVjaCBnaXZlbnMsIHNvIHRob3NlIGFyZSBhbHJlYWR5IGFzc3VtZWQuIFRoZSBjcnVjaWFsIHBhcnQgaXMgZmlndXJpbmcgb3V0IGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgbm93IG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXRjaC4KClRoZSBwYXRjaCBtZW50aW9ucyBgQ09ORklHX01FTUNHYCBpbiBgaW5jbHVkZS9saW51eC9icGYuaGAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBicGZfbWFwX21lbWNnX2VudGVyYCBmdW5jdGlvbi4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCBgQ09ORklHX01FTUNHYCBtaWdodCBvbmx5IGNoYW5nZSBiZWhhdmlvciB3aXRob3V0IGJlaW5nIHN0cmljdGx5IHJlcXVpcmVkLiBCdXQsIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBleHBsaWNpdGx5IGhpZ2hsaWdodHMgdGhlIHVzZSBvZiBhICYjMzQ7c2xlZXBhYmxlIGFsbG9jYXRvciYjMzQ7IHRvIGFsbG93IHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJlY2xhaW0gbWVtb3J5IGFuZCBydW4sIHdoaWNoIHRoZSBleGlzdGluZyBub24tYmxvY2tpbmcgYWxsb2NhdG9yIGNvdWxkbiYjMzk7dC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBgQ09ORklHX01FTUNHYCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBiZWluZyBtYWRlLiBUaGVyZWZvcmUsIGBNRU1DR2AgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gVGhlIG90aGVyIG9idmlvdXMgb25lIGlzIGBCUEZfU1lTQ0FMTGAsIGJlY2F1c2UgdGhlIGNvZGUgbWFrZXMgdXNlIG9mIHRoZSBCUEYgc3lzdGVtIGNhbGwuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBhdCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAuIFRoZSBjb2RlIHNob3dzIGBtaWdodF9zbGVlcCgpYCBhbmQgdXNlcyBgYWxsb2NfcGFnZXNfbm9kZWAsIHdoaWNoIGNvbmZpcm1zIHRoaXMgaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4KClNvLCB0byBzdW1tYXJpemUsIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZTogYEJQRl9TWVNDQUxMYCBhbmQgYE1FTUNHYC4KCk15IGZvY3VzIGluIHRoZSBjb2RlIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgZnVuY3Rpb24gYW5kIGFsc28gYGFyZW5hX3ZtX2ZhdWx0YC4gRG91YmxlLWNoZWNraW5nIHRoYXQgdGhlIHNlY29uZCBmdW5jdGlvbiBuYW1lIGlzIGNvcnJlY3QsIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBhcmVuYV92bV9mYXVsdGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IG5hbWUgYXMgc2hvd24gaW4gdGhlIGRlZmluaXRpb24gYHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKWAuCgpJIGFsc28gY2hlY2tlZCBgYnBmX21hcF9hbGxvY19wYWdlc2AgZm9yIG90aGVyIHJlcXVpcmVkIHN5bWJvbHMuIFRoZSBjaGFuZ2UgdG8gdXNlIGBCUEZfUEFHRV9HRlBgIGlzIGEgbWlub3IgaW1wbGVtZW50YXRpb24gZGV0YWlsLgoKU28gaXQmIzM5O3MgYGFyZW5hX3ZtX2ZhdWx0YCBhbmQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIHRoYXQgcmVwcmVzZW50IHRoZSBtZWF0IG9mIHRoaXMgY29kZSBjaGFuZ2UuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJlbmFfdm1fZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmFzIChgYXJlbmFfdm1fZmF1bHRgKSB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgb3V0c2lkZSBvZiB0aGUgc3BpbmxvY2suIFRoaXMgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBtZW1vcnkgbGltaXRzIGFyZSBleGNlZWRlZCwgcHJldmVudGluZyBzcHVyaW91cyBTSUdCVVMvU0lHU0VHViBlcnJvcnMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyBpbiB0aGUgQlBGIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmVuYV92bV9mYXVsdCYjMzQ7LAogICAgJiMzNDticGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYXMgKGBhcmVuYV92bV9mYXVsdGApIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKSBvdXRzaWRlIG9mIHRoZSBzcGlubG9jay4gVGhpcyBhbGxvd3MgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG1lbW9yeSBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBwcmV2ZW50aW5nIHNwdXJpb3VzIFNJR0JVUy9TSUdTRUdWIGVycm9ycy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjaGFuZ2VzIGluIHRoZSBCUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJlbmEgcGFnZSBmYXVsdCBoYW5kbGVyIChgYXJlbmFfdm1fZmF1bHRgKSB0byBwcmVhbGxvY2F0ZSBwYWdlcyB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgb3V0c2lkZSBvZiBhIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbmVjZXNzYXJ5LiBUaGUgbmV3IGFsbG9jYXRvciBleHBsaWNpdGx5IHVzZXMgdGhlIGBfX0dGUF9aRVJPYCBmbGFnICh2aWEgYEJQRl9QQUdFX0dGUGApLCBlbnN1cmluZyB0aGF0IGFsbCBuZXdseSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIG1hcHBlZCBpbnRvIHRoZSBhcmVuYS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYjMyM2UzNWZjY2M3ZThjZDcxNmZhMjc3OGIwNjQzOTdjNzM3ZWI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDk6NDE6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCBiM2NkMjhkOWUzYjU1Li5jODE3Yzk5ZDI5MDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTI3ODQsNiAmIzQzOzI3ODQsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2dldF9jdXJyX29yX25leHQodTMyICppZCk7CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCiAJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpOwomIzQzO3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApOwogI2lmZGVmIENPTkZJR19NRU1DRwogdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLAogCQkJIHN0cnVjdCBtZW1fY2dyb3VwICoqbmV3X21lbWNnKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuYwppbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jCkBAIC00ODEsNyAmIzQzOzQ4MSw4IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtJmd0O3ZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnOwotCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSwgKm5ld19wYWdlID0gTlVMTDsKJiM0MzsJdm1fZmF1bHRfdCBmYXVsdF9yZXQ7CiAJbG9uZyBrYmFzZSwga2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwpAQCAtNDg5LDU5ICYjNDM7NDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlrYmFzZSA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7CiAJa2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtJmd0O2FkZHJlc3MpOwogCi0JaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkKJiM0MzsJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTsKJiM0MzsJaWYgKCFwYWdlICZhbXA7JmFtcDsgIShhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFByZWFsbG9jYXRlIG91dHNpZGUgdGhlIGxvY2sgd2l0aCBhIHNsZWVwYWJsZSBhbGxvY2F0b3Igc28gaXQKJiM0MzsJCSAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZQomIzQzOwkJICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciB1bmRlciBhcmVuYS0mZ3Q7c3BpbmxvY2sgY2Fubm90LiBBIE5VTEwKJiM0MzsJCSAqIHJldHVybiBpcyBub24tcmVjb3ZlcmFibGUsIHNvIGZhaWwgd2l0aCBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQkgKiBWTV9GQVVMVF9PT00gd291bGQgYmUgcmV0cmllZCBieSB0aGUgZmF1bHQgcGF0aCBhbmQgY2FuCiYjNDM7CQkgKiBsaXZlbG9jayB3aGVuIHRoZSBjaGFyZ2VkIG1lbWNnIGlzIG5vdCB0aGUgZmF1bHRpbmcgdGFzayYjMzk7cy4KJiM0MzsJCSAqLwomIzQzOwkJYnBmX21hcF9tZW1jZ19lbnRlcigmYW1wO2FyZW5hLSZndDttYXAsICZhbXA7b2xkX21lbWNnLCAmYW1wO25ld19tZW1jZyk7CiYjNDM7CQluZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTsKJiM0MzsJCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CQlpZiAoIW5ld19wYWdlKQomIzQzOwkJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkgewogCQkvKgogCQkgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24mIzM5O3QKIAkJICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dAogCQkgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC4KIAkJICovCiYjNDM7CQlpZiAobmV3X3BhZ2UpCiYjNDM7CQkJZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApOwogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwl9CiAKIAlwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpOwogCWlmIChwYWdlKSB7Ci0JCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpCi0JCQkvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJiMzOTt0IGxhenktYWxsb2Mgb3ZlciBpdCAqLwotCQkJZ290byBvdXRfc2lnc2VndjsKJiM0MzsJCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgc2NyYXRjaCBwYWdlIG1hcmtzIGEgaG9sZS4gU2VnZmF1bHQgb25seSBpZiB0aGUgdXNlcgomIzQzOwkJCSAqIGFza2VkIGZvciBpdDsgb3RoZXJ3aXNlIHdlIGNvdWxkIGxhenktYWxsb2NhdGUgYnV0CiYjNDM7CQkJICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLgomIzQzOwkJCSAqLwomIzQzOwkJCWZhdWx0X3JldCA9IChhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSA/CiYjNDM7CQkJCSAgICBWTV9GQVVMVF9TSUdTRUdWIDogVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWQ7CiYjNDM7CQl9CiAJCS8qIGFscmVhZHkgaGF2ZSBhIHBhZ2Ugdm1hcC1lZCAqLwogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpIHsKJiM0MzsJCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwkJZ290byBvdXRfZXJyX2xvY2tlZDsKJiM0MzsJfQomIzQzOwogCWJwZl9tYXBfbWVtY2dfZW50ZXIoJmFtcDthcmVuYS0mZ3Q7bWFwLCAmYW1wO29sZF9tZW1jZywgJmFtcDtuZXdfbWVtY2cpOwogCi0JaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpCi0JCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CWlmICghbmV3X3BhZ2UpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvCiYjNDM7CQkgKiB0aGUgbG9ja2xlc3MgcHJvYmUgc2F3IGl0IGFuZCB3ZSBza2lwcGVkIHByZWFsbG9jYXRpb24sIGJ1dCBpdAomIzQzOwkJICogZnJlZWQgdGhlIHBhZ2UgYmVmb3JlIHdlIHRvb2sgdGhlIGxvY2suIE5vdyB3ZSBkbyBuZWVkIG9uZTsKJiM0MzsJCSAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nCiYjNDM7CQkgKiBhbGxvY2F0b3IgYW5kIGdpdmUgdXAgaWYgaXQgZmFpbHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtJmd0O251bWFfbm9kZSwgMSwgJmFtcDtuZXdfcGFnZSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7CiYjNDM7CQl9CiYjNDM7CX0KIAogCXJldCA9IHJhbmdlX3RyZWVfY2xlYXIoJmFtcDthcmVuYS0mZ3Q7cnQsIHZtZi0mZ3Q7cGdvZmYsIDEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7Ci0KLQlzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gJmFtcDtwYWdlLCAuaSA9IDAgfTsKLQkvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqLwotCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsICZhbXA7cGFnZSk7CiAJaWYgKHJldCkgewotCQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgdm1mLSZndDtwZ29mZiwgMSk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KJiM0MzsJc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9ICZhbXA7bmV3X3BhZ2UsIC5pID0gMCB9OwogCiAJcmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGthZGRyLCBQQUdFX1NJWkUsIGFwcGx5X3JhbmdlX3NldF9jYiwgJmFtcDtkYXRhKTsKIAlpZiAocmV0KSB7CiAJCXJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCB2bWYtJmd0O3Bnb2ZmLCAxKTsKLQkJZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KIAlmbHVzaF92bWFwX2NhY2hlKGthZGRyLCBQQUdFX1NJWkUpOwogCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CS8qIG5ld19wYWdlIHdhcyBjb25zdW1lZCAqLwomIzQzOwlwYWdlID0gbmV3X3BhZ2U7CiYjNDM7CW5ld19wYWdlID0gTlVMTDsKIG91dDoKIAlwYWdlX3JlZl9hZGQocGFnZSwgMSk7CiAJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiYjNDM7CWlmIChuZXdfcGFnZSkKJiM0MzsJCWZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTsKIAl2bWYtJmd0O3BhZ2UgPSBwYWdlOwogCXJldHVybiAwOwotb3V0X3NpZ3NlZ3ZfbWVtY2c6CiYjNDM7CiYjNDM7b3V0X2Vycl9sb2NrZWRfbWVtY2c6CiAJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKLW91dF9zaWdzZWd2OgomIzQzO291dF9lcnJfbG9ja2VkOgogCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwotCXJldHVybiBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwlpZiAobmV3X3BhZ2UpCiYjNDM7CQlmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7CiYjNDM7CXJldHVybiBmYXVsdF9yZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtNjAyLDE1ICYjNDM7NjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKQogCQkhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7CiB9CiAKJiM0MzsjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKQomIzQzOwogc3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpCiB7CiAJaWYgKCFjYW5fYWxsb2NfcGFnZXMoKSkKIAkJcmV0dXJuIGFsbG9jX3BhZ2VzX25vbG9jayhfX0dGUF9BQ0NPVU5ULCBuaWQsIDApOwogCi0JcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLAotCQkJCUdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVAotCQkJCXwgX19HRlBfTk9XQVJOLAotCQkJCTApOwomIzQzOwlyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEJQRl9QQUdFX0dGUCwgMCk7CiB9CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCkBAIC02MzYsNiAmIzQzOzYzNSwyMCBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlCiYjNDM7ICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGCiYjNDM7ICogcHJvZ3JhbSBjb250ZXh0IC0gbm90YWJseSBpdCBpcyBhbHdheXMgZmFsc2Ugb24gUFJFRU1QVF9SVCAtIHNvIGdvaW5nCiYjNDM7ICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZQomIzQzOyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT00KJiM0MzsgKiBtYWNoaW5lcnkuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCkKJiM0Mzt7CiYjNDM7CW1pZ2h0X3NsZWVwKCk7CiYjNDM7CXJldHVybiBhbGxvY19wYWdlc19ub2RlKG1hcC0mZ3Q7bnVtYV9ub2RlLCBCUEZfUEFHRV9HRlAsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogewogCWNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKQEAgLTE4OCw2ICYjNDM7MTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKIAlyZXR1cm4gX193cml0ZV9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgX19yZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKmNncm91cF9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJCSAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICYjNDM7IDFdOwomIzQzOwlzc2l6ZV90IGdvdDsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlzbnByaW50ZihmaWxlX3BhdGgsIHNpemVvZihmaWxlX3BhdGgpLCAmIzM0OyVzLyVzJiMzNDssIGNncm91cF9wYXRoLCBmaWxlKTsKJiM0MzsJZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlsb2dfZXJyKCYjMzQ7T3BlbmluZyAlcyYjMzQ7LCBmaWxlX3BhdGgpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZ290ID0gcmVhZChmZCwgYnVmLCBsZW4gLSAxKTsKJiM0MzsJaWYgKGdvdCAmbHQ7IDApIHsKJiM0MzsJCWxvZ19lcnIoJiMzNDtSZWFkaW5nICVzJiMzNDssIGZpbGVfcGF0aCk7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwlidWZbZ290XSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmVhZF9jZ3JvdXBfZmlsZSgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGUKJiM0MzsgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpcgomIzQzOyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzCiYjNDM7ICogQGxlbjogU2l6ZSBvZiBAYnVmCiYjNDM7ICoKJiM0MzsgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAmIzM5O3MgZGlyZWN0b3J5LgomIzQzOyAqCiYjNDM7ICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC4KJiM0MzsgKi8KJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwljaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdOwomIzQzOwomIzQzOwlmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3MKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpcgomIzQzOyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyCiYjNDM7ICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3MKJiM0MzsgKiBAbGVuOiBTaXplIG9mIEBidWYKJiM0MzsgKgomIzQzOyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCYjMzk7cyBkaXJlY3RvcnkgdW5kZXIgdGhlIHBhcmVudCBwcm9jZXNzCiYjNDM7ICogd29ya2Rpci4KJiM0MzsgKgomIzQzOyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuCiYjNDM7ICovCiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiYjNDM7CQkJICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07CiYjNDM7CiYjNDM7CWZvcm1hdF9wYXJlbnRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSAtIFNldHVwIHRoZSBjZ3JvdXAgZW52aXJvbm1lbnQKICAqCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCmluZGV4IDM4NTczMDRiZTg3NDEuLmQ0MmQyZTEzMDQ0ZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCkBAIC0xNSw2ICYjNDM7MTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiBpbnQgd3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCSAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIGludCBjZ3JvdXBfc2V0dXBfYW5kX2pvaW4oY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7CiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpOwogaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCkBAIC0wLDAgJiM0MzsxLDE1OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdXNlci5oJmd0OwomIzQzOyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqLwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjZ3JvdXBfaGVscGVycy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FyZW5hX21lbWNnLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBDR19QQVRICQkmIzM0Oy9hcmVuYV9tZW1jZyYjMzQ7CiYjNDM7CiYjNDM7LyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi8KJiM0MzsjZGVmaW5lIEFSRU5BX0JVREdFVAkoNjQgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkdW1wX21lbWNnKGludCAoKnJkKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpKQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5CiYjNDM7CSAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kCiYjNDM7CSAqIG1lbW9yeS5ldmVudHMgc3Vydml2ZSB0aGUgY2hpbGQgYW5kIHRlbGwgdGhlIHN0b3J5IGVpdGhlciB3YXkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LmN1cnJlbnQmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuY3VycmVudDogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5tYXgmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkubWF4OiAlcyYjMzQ7LCBidWYpOwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LnBlYWsmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkucGVhazogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuZXZlbnRzOlxuJXMmIzM0OywgYnVmKTsKJiM0MzsJZmZsdXNoKHN0ZGVycik7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiAmIzM0O29vbV9raWxsJiMzNDsgaW4gbWVtb3J5LmV2ZW50cy4gKi8KJiM0MztzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXSwgKnA7CiYjNDM7CiYjNDM7CWlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcCA9IHN0cnN0cihidWYsIGtleSk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIHN0cnRvbChwICYjNDM7IHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7CiYjNDM7CWNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7CiYjNDM7CWNoYXIgYnVmWzY0XTsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwllcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldHVwX2Nncm91cF9lbnZpcm9ubWVudCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2dyb3VwX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKENHX1BBVEgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsICYjMzQ7Y3JlYXRlX2FuZF9nZXRfY2dyb3VwJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIE5vIG1lbW9yeSBjb250cm9sbGVyIC0mZ3Q7IG5vdGhpbmcgdG8gdGVzdC4gKi8KJiM0MzsJaWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7LCBidWYsIHNpemVvZihidWYpKSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7JXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocGlkLCAwLCAmIzM0O2ZvcmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlzdHJ1Y3QgYXJlbmFfbWVtY2cgKmNza2VsOwomIzQzOwkJX191MzIgaSwgbnBhZ2VzOwomIzQzOwkJY2hhciAqYmFzZTsKJiM0MzsJCXNpemVfdCBzejsKJiM0MzsJCWxvbmcgY3VyOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERvIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2hpbGQ6IHRoZSBhcmVuYSB2bWEgaXMgVk1fRE9OVENPUFkgc28KJiM0MzsJCSAqIGl0IHdvdWxkIG5vdCBzdXJ2aXZlIGZvcmsoKSwgb25seSB0aGUgY2hpbGQgc2hvdWxkIGJlIHVuZGVyIHRoZQomIzQzOwkJICogbGltaXQgc28gdGhhdCBhIG1lbWNnIE9PTSBjYW5ub3QgcGljayB0ZXN0X3Byb2dzLCBhbmQgYSBtYXAgaXMKJiM0MzsJCSAqIGNoYXJnZWQgdG8gdGhlIG1lbWNnIG9mIHRoZSB0YXNrIHRoYXQgY3JlYXRlcyBpdCAtIHNvIGpvaW4KJiM0MzsJCSAqIGJlZm9yZSBsb2FkLiBUaGUgY2dyb3VwIHdvcmsgZGlyIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0aGF0IHNldAomIzQzOwkJICogdGhlIGVudmlyb25tZW50IHVwLCBzbyByZWFjaCBpdCB3aXRoIHRoZSBfcGFyZW50KCkgaGVscGVycy4KJiM0MzsJCSAqIEVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHBhcmVudCB0aHJvdWdoIHRoZSBleGl0IGNvZGUsIHNpbmNlCiYjNDM7CQkgKiBBU1NFUlRfKiBpbiBhIGZvcmtlZCBjaGlsZCBkb2VzIG5vdCByZWFjaCBpdC4KJiM0MzsJCSAqLwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslZCYjMzQ7LCBnZXRwaWQoKSk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7Y2dyb3VwLnByb2NzJiMzNDssIGJ1ZikpCiYjNDM7CQkJX2V4aXQoMik7CiYjNDM7CiYjNDM7CQljc2tlbCA9IGFyZW5hX21lbWNnX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CQlpZiAoIWNza2VsKQomIzQzOwkJCV9leGl0KDMpOwomIzQzOwomIzQzOwkJYmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoY3NrZWwtJmd0O21hcHMuYXJlbmEsICZhbXA7c3opOwomIzQzOwkJaWYgKCFiYXNlKQomIzQzOwkJCV9leGl0KDQpOwomIzQzOwkJbnBhZ2VzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoY3NrZWwtJmd0O21hcHMuYXJlbmEpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcCBvbmx5IG5vdywgYWZ0ZXIgbG9hZDogZXZlcnl0aGluZyBidXQgdGhlIGZhdWx0LWluIGlzCiYjNDM7CQkgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXQKJiM0MzsJCSAqIHRoZSBsb2FkIGl0c2VsZiBjb3N0LCBhbmQgdGhlIGxvYWQgY2FuIG5ldmVyIGhpdCB0aGUgbGltaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCAmIzM0O21lbW9yeS5jdXJyZW50JiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQomIzQzOwkJCV9leGl0KDUpOwomIzQzOwkJY3VyID0gc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslbGQmIzM0OywgY3VyICYjNDM7IEFSRU5BX0JVREdFVCk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7bWVtb3J5Lm1heCYjMzQ7LCBidWYpKQomIzQzOwkJCV9leGl0KDYpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5wYWdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJYmFzZVsoc2l6ZV90KWkgKiBwc10gPSAxOwomIzQzOwkJLyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi8KJiM0MzsJCWR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQpOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKSwgcGlkLCAmIzM0O3dhaXRwaWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogQSBub24temVybyBleGl0IG1lYW5zIHRoZSBjaGlsZCBmYWlsZWQgdG8gc2V0IHVwOyB0aGUgY29kZSBzYXlzIHdoZXJlLiAqLwomIzQzOwlpZiAoV0lGRVhJVEVEKHN0YXR1cykgJmFtcDsmYW1wOyBXRVhJVFNUQVRVUyhzdGF0dXMpKSB7CiYjNDM7CQlBU1NFUlRfT0soV0VYSVRTVEFUVVMoc3RhdHVzKSwgJiMzNDtjaGlsZCBzZXR1cCYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZhdWx0aW5nIGEgdmFsaWQgYXJlbmEgYWRkcmVzcyB1bnRpbCBtZW1vcnkubWF4IGlzIGhpdCBtdXN0IG5vdCBsb29rCiYjNDM7CSAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aAomIzQzOwkgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHViwKJiM0MzsJICogYW5kIHRoZSBjaGlsZCBkaWVkIHdpdGggU0lHU0VHViBvbiBhIHZhbGlkIGFkZHJlc3M7IG5vdyBpdCBpcyBoYW5kbGVkCiYjNDM7CSAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZQomIzQzOwkgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvCiYjNDM7CSAqIGtpbGwgdGhlIGNoaWxkKSwgc28gY2hlY2sgbWVtb3J5LmV2ZW50cy5vb21fa2lsbCwgd2hpY2ggcmVjb3JkcyB0aGUKJiM0MzsJICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cyksICYjMzQ7Y2hpbGQga2lsbGVkIGJ5IHNpZ25hbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb21fa2lsbCYjMzQ7KSwgMSwKJiM0MzsJCSAgICAgICAmIzM0O21lbWNnIG9vbV9raWxsJiMzNDspKQomIzQzOwkJZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTsKJiM0MztvdXQ6CiYjNDM7CWlmIChjZ3JvdXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGNncm91cF9mZCk7CiYjNDM7CWNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi44ODI1OWNmZWEwNmI2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMKQEAgLTAsMCAmIzQzOzEsMjQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2FyZW5hX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDUwMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovCiYjNDM7I2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjQKJiM0MzsJX191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCAmbHQ7Jmx0OyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi8KJiM0MzsjZWxzZQomIzQzOwlfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsICZsdDsmbHQ7IDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwomIzQzOyNlbmRpZgomIzQzO30gYXJlbmEgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBub29wKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjE5CgkJCQkJCQlvdXRwdXQ6IDIxMwoJCQkJCQkJdGhvdWdodHM6IDExMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQ6IEJQRiBBcmVuYSBTbGVlcGFibGUgQWxsb2NhdG9yKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBwYXRjaCBzZXJpZXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFpbWluZyB0byBpbnRyb2R1Y2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgZm9yIEJQRiBhcmVuYSBwYWdlIGZhdWx0cy4gVGhlcmUmIzM5O3MgYWxzbyBhIG5ldyBzZWxmdGVzdCBmb3IgQlBGIGFyZW5hIG1lbWNnIGxpbWl0cyBhZGRlZC4gVGhlIGtleSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uPwoKRmlyc3QsIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGludHJvZHVjZWQuIEl0IGludGVybmFsbHkgY2FsbHMgYGFsbG9jX3BhZ2VzX25vZGVgLCBidXQgY3J1Y2lhbGx5LCBpdCB1c2VzIGBCUEZfUEFHRV9HRlBgLCB3aGljaCAqaW5jbHVkZXMqIGBfX0dGUF9aRVJPYC4gVGhpcyBtZWFucyB0aGUgbmV3bHkgYWxsb2NhdGVkIHBhZ2UgKndpbGwqIGJlIHplcm9lZC4gQWx3YXlzIGEgZ29vZCBzaWduLgoKTm93LCBpbnRvIGBrZXJuZWwvYnBmL2FyZW5hLmNgLiBgYXJlbmFfdm1fZmF1bHRgIGlzIG1vZGlmaWVkIHRvIHVzZSB0aGlzIG5ldyBzbGVlcGFibGUgYWxsb2NhdG9yLiBUaGUgcmVsZXZhbnQgY29kZSBwcmVhbGxvY2F0ZXMgYSBwYWdlIG91dHNpZGUgdGhlIHNwaW5sb2NrIHVzaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4gSWYgdGhlIHByZWFsbG9jYXRlZCBwYWdlIGlzbiYjMzk7dCBuZWVkZWQsIGl0JiMzOTtzIGZyZWVkLiBJZiBpdCAqaXMqIHVzZWQsIGl0JiMzOTtzIG1hcHBlZC4gQWdhaW4sIHNpbmNlIGBfX0dGUF9aRVJPYCBpcyBpbiB0aGUgZmxhZ3MsIHRoZSBwYWdlIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gemVybyBiZWZvcmUgbWFwcGluZy4gV2UmIzM5O3JlIGV4cGxpY2l0bHkgaW5pdGlhbGl6aW5nIHRoZSBtZW1vcnksIHNvIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MuCgpUaGUgcHJlc2VuY2Ugb2YgbmV3IHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNgIGlzIGdvb2QsIGJ1dCBkb2VzbiYjMzk7dCBzd2F5IG91ciBkZWNpc2lvbiBvbiB0aGlzIEtNU0FOIGFzc2Vzc21lbnQuCgpPa2F5LCBsZXQmIzM5O3MgdmVyaWZ5IGFnYWluLiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZSBjaGVjayBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAsIHdoaWNoIGV4cGxpY2l0bHkgY2FsbHMgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYEJQRl9QQUdFX0dGUGAsIGFuZCAqdGhhdCogaW5jbHVkZXMgYF9fR0ZQX1pFUk9gLiBJJiMzOTtsbCBkbyB0aGUgc2FtZSBmb3IgYGFyZW5hX3ZtX2ZhdWx0YCwgYW5kIEkgc2VlIHRoZSBleGFjdCBzYW1lIHRoaW5nOyB0aGF0IGEgcGFnZSBhbGxvY2F0ZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBmcmVlZCBpZiBpdCBpcyBub3QgdXNlZCwgYW5kIGl0IGlzIGEgemVyb2VkIHBhZ2Ugd2hlbiBpdCBpcyBtYXBwZWQuIFNvLCBldmVuIGlmIHRoZSBwYWdlIGlzIG1hcHBlZCwgaXQmIzM5O3Mgc3RhcnRpbmcgZnJvbSBhIGtub3duIHN0YXRlLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgbmV3bHkgYWxsb2NhdGVkIHBhZ2VzIGFyZSB6ZXJvZWQsIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0aGF0IGludHJvZHVjZSBuZXcgZmllbGRzIHRvIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCB0aGUgbG9naWMgaXMgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWVtY2cgYWNjb3VudGluZy4gVGhlIHBvdGVudGlhbCBpc3N1ZXMgaGVyZSBhcmUgcmVsYXRlZCB0byBsb2NraW5nLCBtZW1vcnkgbGVha3MsIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGFuZCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4KClRoZXJlZm9yZSwgYmFzZWQgb24gbXkgYW5hbHlzaXMgb2YgdGhlIGNvZGUsIEkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24mIzM5O3QganVzdGlmaWVkIGhlcmUuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGEgY29udGV4dCBzd2l0Y2ggZnJvbSBhIG5vbi1zbGVlcGFibGUgdG8gYSBzbGVlcGFibGUgbWVtb3J5IGFsbG9jYXRvciwgd2hpbGUgbWFpbnRhaW5pbmcgYSBzYWZlIGluaXRpYWwgbWVtb3J5IHN0YXRlIGFuZCBpcyB3ZWxsLWNvdmVyZWQgYnkgb3VyIGV4aXN0aW5nIGZ1enppbmcgYW5kIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGlzIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJlbmEgcGFnZSBmYXVsdCBoYW5kbGVyIChgYXJlbmFfdm1fZmF1bHRgKSB0byBwcmVhbGxvY2F0ZSBwYWdlcyB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgb3V0c2lkZSBvZiBhIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbmVjZXNzYXJ5LiBUaGUgbmV3IGFsbG9jYXRvciBleHBsaWNpdGx5IHVzZXMgdGhlIGBfX0dGUF9aRVJPYCBmbGFnICh2aWEgYEJQRl9QQUdFX0dGUGApLCBlbnN1cmluZyB0aGF0IGFsbCBuZXdseSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIG1hcHBlZCBpbnRvIHRoZSBhcmVuYS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBhcmVuYSBwYWdlIGZhdWx0IGhhbmRsZXIgKGBhcmVuYV92bV9mYXVsdGApIHRvIHByZWFsbG9jYXRlIHBhZ2VzIHVzaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKSBvdXRzaWRlIG9mIGEgc3BpbmxvY2suIFRoaXMgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBuZWNlc3NhcnkuIFRoZSBuZXcgYWxsb2NhdG9yIGV4cGxpY2l0bHkgdXNlcyB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcgKHZpYSBgQlBGX1BBR0VfR0ZQYCksIGVuc3VyaW5nIHRoYXQgYWxsIG5ld2x5IGFsbG9jYXRlZCBwYWdlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgbWFwcGVkIGludG8gdGhlIGFyZW5hLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQxOjU1LjE0MTA3MDA5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzIwNTg5ODYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmVuYV92bV9mYXVsdFwiLFxuICAgIFwiYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBhcmVuYSBwYWdlIGZhdWx0IGhhbmRsZXIgKGBhcmVuYV92bV9mYXVsdGApIHRvIHByZWFsbG9jYXRlIHBhZ2VzIHVzaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKSBvdXRzaWRlIG9mIGEgc3BpbmxvY2suIFRoaXMgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBuZWNlc3NhcnkuIFRoZSBuZXcgYWxsb2NhdG9yIGV4cGxpY2l0bHkgdXNlcyB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcgKHZpYSBgQlBGX1BBR0VfR0ZQYCksIGVuc3VyaW5nIHRoYXQgYWxsIG5ld2x5IGFsbG9jYXRlZCBwYWdlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgbWFwcGVkIGludG8gdGhlIGFyZW5hLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gdXNlIGEgc2xlZXBhYmxlIHBhZ2UgYWxsb2NhdG9yIChgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWApIG91dHNpZGUgb2YgdGhlIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbWVtb3J5IGxpbWl0cyBhcmUgZXhjZWVkZWQsIHByZXZlbnRpbmcgc3B1cmlvdXMgU0lHQlVTL1NJR1NFR1YgZXJyb3JzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGNoYW5nZXMgaW4gdGhlIEJQRiBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQxOjU1LjE0MTA3ODA0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwNzE0MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2IzMjNlMzVmY2NjN2U4Y2Q3MTZmYTI3NzhiMDY0Mzk3YzczN2ViOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwOTo0MTo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbmluZGV4IGIzY2QyOGQ5ZTNiNTUuLmM4MTdjOTlkMjkwNjYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5AQCAtMjc4NCw2ICsyNzg0LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpO1xcbiBcXG4gaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG4rc3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCk7XFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLFxcbiBcXHRcXHRcXHQgc3RydWN0IG1lbV9jZ3JvdXAgKipuZXdfbWVtY2cpO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcXG5pbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xcbkBAIC00ODEsNyArNDgxLDggQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXFx1MDAzZXZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiBcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICpuZXdfbWVtY2csICpvbGRfbWVtY2c7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZSwgKm5ld19wYWdlID0gTlVMTDtcXG4rXFx0dm1fZmF1bHRfdCBmYXVsdF9yZXQ7XFxuIFxcdGxvbmcga2Jhc2UsIGthZGRyO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRpbnQgcmV0O1xcbkBAIC00ODksNTkgKzQ5MCwxMDYgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdGtiYXNlID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcXG4gXFx0a2FkZHIgPSBrYmFzZSArICh1MzIpKHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxuIFxcbi1cXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncykpXFxuK1xcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilrYWRkcik7XFxuK1xcdGlmICghcGFnZSBcXHUwMDI2XFx1MDAyNiAhKGFyZW5hLVxcdTAwM2VtYXAubWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUHJlYWxsb2NhdGUgb3V0c2lkZSB0aGUgbG9jayB3aXRoIGEgc2xlZXBhYmxlIGFsbG9jYXRvciBzbyBpdFxcbitcXHRcXHQgKiBjYW4gcmVjbGFpbSBhbmQgcnVuIHRoZSBtZW1jZyBPT00ga2lsbGVyLCB3aGljaCB0aGVcXG4rXFx0XFx0ICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciB1bmRlciBhcmVuYS1cXHUwMDNlc3BpbmxvY2sgY2Fubm90LiBBIE5VTExcXG4rXFx0XFx0ICogcmV0dXJuIGlzIG5vbi1yZWNvdmVyYWJsZSwgc28gZmFpbCB3aXRoIFZNX0ZBVUxUX1NJR0JVUztcXG4rXFx0XFx0ICogVk1fRkFVTFRfT09NIHdvdWxkIGJlIHJldHJpZWQgYnkgdGhlIGZhdWx0IHBhdGggYW5kIGNhblxcbitcXHRcXHQgKiBsaXZlbG9jayB3aGVuIHRoZSBjaGFyZ2VkIG1lbWNnIGlzIG5vdCB0aGUgZmF1bHRpbmcgdGFzaydzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0YnBmX21hcF9tZW1jZ19lbnRlcihcXHUwMDI2YXJlbmEtXFx1MDAzZW1hcCwgXFx1MDAyNm9sZF9tZW1jZywgXFx1MDAyNm5ld19tZW1jZyk7XFxuK1xcdFxcdG5ld19wYWdlID0gYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShtYXApO1xcbitcXHRcXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xcbitcXHRcXHRpZiAoIW5ld19wYWdlKVxcbitcXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncykpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQSBmYWlsZWQgbG9jayBtZWFucyBhIHBvc3NpYmxlIGRlYWRsb2NrIHdhcyBkZXRlY3RlZC4gRG9uJ3RcXG4gXFx0XFx0ICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dFxcbiBcXHRcXHQgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC5cXG4gXFx0XFx0ICovXFxuK1xcdFxcdGlmIChuZXdfcGFnZSlcXG4rXFx0XFx0XFx0ZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApO1xcbiBcXHRcXHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xcbitcXHR9XFxuIFxcbiBcXHRwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpO1xcbiBcXHRpZiAocGFnZSkge1xcbi1cXHRcXHRpZiAocGFnZSA9PSBhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKVxcbi1cXHRcXHRcXHQvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJ3QgbGF6eS1hbGxvYyBvdmVyIGl0ICovXFxuLVxcdFxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3Y7XFxuK1xcdFxcdGlmIChwYWdlID09IGFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQSBzY3JhdGNoIHBhZ2UgbWFya3MgYSBob2xlLiBTZWdmYXVsdCBvbmx5IGlmIHRoZSB1c2VyXFxuK1xcdFxcdFxcdCAqIGFza2VkIGZvciBpdDsgb3RoZXJ3aXNlIHdlIGNvdWxkIGxhenktYWxsb2NhdGUgYnV0XFxuK1xcdFxcdFxcdCAqIGNob29zZSBub3QgdG8gb3ZlciBhIGhvbGUsIHNvIHJlcG9ydCBhIGJ1cyBlcnJvci5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGZhdWx0X3JldCA9IChhcmVuYS1cXHUwMDNlbWFwLm1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpID9cXG4rXFx0XFx0XFx0XFx0ICAgIFZNX0ZBVUxUX1NJR1NFR1YgOiBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X2Vycl9sb2NrZWQ7XFxuK1xcdFxcdH1cXG4gXFx0XFx0LyogYWxyZWFkeSBoYXZlIGEgcGFnZSB2bWFwLWVkICovXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoYXJlbmEtXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSB7XFxuK1xcdFxcdC8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovXFxuK1xcdFxcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR1NFR1Y7XFxuK1xcdFxcdGdvdG8gb3V0X2Vycl9sb2NrZWQ7XFxuK1xcdH1cXG4rXFxuIFxcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIFxcdTAwMjZvbGRfbWVtY2csIFxcdTAwMjZuZXdfbWVtY2cpO1xcbiBcXG4tXFx0aWYgKGFyZW5hLVxcdTAwM2VtYXAubWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcXG4tXFx0XFx0LyogVXNlciBzcGFjZSByZXF1ZXN0ZWQgdG8gc2VnZmF1bHQgd2hlbiBwYWdlIGlzIG5vdCBhbGxvY2F0ZWQgYnkgYnBmIHByb2cgKi9cXG4tXFx0XFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcXG4rXFx0aWYgKCFuZXdfcGFnZSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvXFxuK1xcdFxcdCAqIHRoZSBsb2NrbGVzcyBwcm9iZSBzYXcgaXQgYW5kIHdlIHNraXBwZWQgcHJlYWxsb2NhdGlvbiwgYnV0IGl0XFxuK1xcdFxcdCAqIGZyZWVkIHRoZSBwYWdlIGJlZm9yZSB3ZSB0b29rIHRoZSBsb2NrLiBOb3cgd2UgZG8gbmVlZCBvbmU7XFxuK1xcdFxcdCAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nXFxuK1xcdFxcdCAqIGFsbG9jYXRvciBhbmQgZ2l2ZSB1cCBpZiBpdCBmYWlscy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtXFx1MDAzZW51bWFfbm9kZSwgMSwgXFx1MDAyNm5ld19wYWdlKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcXG4tXFxuLVxcdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5hcmVuYSA9IGFyZW5hLCAucGFnZXMgPSBcXHUwMDI2cGFnZSwgLmkgPSAwIH07XFxuLVxcdC8qIEFjY291bnQgaW50byBtZW1jZyBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgYnBmX2FyZW5hICovXFxuLVxcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsIFxcdTAwMjZwYWdlKTtcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG4tXFx0XFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcXG4rXFx0XFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xcbitcXHRcXHRnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnO1xcbiBcXHR9XFxuK1xcdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5hcmVuYSA9IGFyZW5hLCAucGFnZXMgPSBcXHUwMDI2bmV3X3BhZ2UsIC5pID0gMCB9O1xcbiBcXG4gXFx0cmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwga2FkZHIsIFBBR0VfU0laRSwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBcXHUwMDI2ZGF0YSk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0cmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgdm1mLVxcdTAwM2VwZ29mZiwgMSk7XFxuLVxcdFxcdGZyZWVfcGFnZXNfbm9sb2NrKHBhZ2UsIDApO1xcbi1cXHRcXHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xcbitcXHRcXHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdFxcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XFxuIFxcdH1cXG4gXFx0Zmx1c2hfdm1hcF9jYWNoZShrYWRkciwgUEFHRV9TSVpFKTtcXG4gXFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG4rXFx0LyogbmV3X3BhZ2Ugd2FzIGNvbnN1bWVkICovXFxuK1xcdHBhZ2UgPSBuZXdfcGFnZTtcXG4rXFx0bmV3X3BhZ2UgPSBOVUxMO1xcbiBvdXQ6XFxuIFxcdHBhZ2VfcmVmX2FkZChwYWdlLCAxKTtcXG4gXFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG4rXFx0aWYgKG5ld19wYWdlKVxcbitcXHRcXHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XFxuIFxcdHZtZi1cXHUwMDNlcGFnZSA9IHBhZ2U7XFxuIFxcdHJldHVybiAwO1xcbi1vdXRfc2lnc2Vndl9tZW1jZzpcXG4rXFxuK291dF9lcnJfbG9ja2VkX21lbWNnOlxcbiBcXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xcbi1vdXRfc2lnc2VndjpcXG4rb3V0X2Vycl9sb2NrZWQ6XFxuIFxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxuLVxcdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xcbitcXHRpZiAobmV3X3BhZ2UpXFxuK1xcdFxcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcXG4rXFx0cmV0dXJuIGZhdWx0X3JldDtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhcmVuYV92bV9vcHMgPSB7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5pbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5AQCAtNjAyLDE1ICs2MDIsMTQgQEAgc3RhdGljIGJvb2wgY2FuX2FsbG9jX3BhZ2VzKHZvaWQpXFxuIFxcdFxcdCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKTtcXG4gfVxcbiBcXG4rI2RlZmluZSBCUEZfUEFHRV9HRlAgKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTilcXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19icGZfYWxsb2NfcGFnZShpbnQgbmlkKVxcbiB7XFxuIFxcdGlmICghY2FuX2FsbG9jX3BhZ2VzKCkpXFxuIFxcdFxcdHJldHVybiBhbGxvY19wYWdlc19ub2xvY2soX19HRlBfQUNDT1VOVCwgbmlkLCAwKTtcXG4gXFxuLVxcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5pZCxcXG4tXFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UXFxuLVxcdFxcdFxcdFxcdHwgX19HRlBfTk9XQVJOLFxcbi1cXHRcXHRcXHRcXHQwKTtcXG4rXFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLCBCUEZfUEFHRV9HRlAsIDApO1xcbiB9XFxuIFxcbiBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxcbkBAIC02MzYsNiArNjM1LDIwIEBAIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlXFxuKyAqIGZhdWx0IGhhbmRsZXIuIGNhbl9hbGxvY19wYWdlcygpIGlzIGEgY29uc2VydmF0aXZlIGd1ZXNzIG1hZGUgZm9yIEJQRlxcbisgKiBwcm9ncmFtIGNvbnRleHQgLSBub3RhYmx5IGl0IGlzIGFsd2F5cyBmYWxzZSBvbiBQUkVFTVBUX1JUIC0gc28gZ29pbmdcXG4rICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZVxcbisgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yLCB3aGljaCBuZXZlciByZWNsYWltcyBhbmQgbmV2ZXIgZW5nYWdlcyB0aGUgT09NXFxuKyAqIG1hY2hpbmVyeS5cXG4rICovXFxuK3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxuK3tcXG4rXFx0bWlnaHRfc2xlZXAoKTtcXG4rXFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobWFwLVxcdTAwM2VudW1hX25vZGUsIEJQRl9QQUdFX0dGUCwgMCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xcbmluZGV4IDQ1Y2QwYjQ3OWZlMzUuLjQxODNmZjYxNTBjMjggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xcbkBAIC0xODgsNiArMTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcXG4gXFx0cmV0dXJuIF9fd3JpdGVfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1Zik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgX19yZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKmNncm91cF9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbitcXHRcXHRcXHQgICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0Y2hhciBmaWxlX3BhdGhbUEFUSF9NQVggKyAxXTtcXG4rXFx0c3NpemVfdCBnb3Q7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdHNucHJpbnRmKGZpbGVfcGF0aCwgc2l6ZW9mKGZpbGVfcGF0aCksIFxcXCIlcy8lc1xcXCIsIGNncm91cF9wYXRoLCBmaWxlKTtcXG4rXFx0ZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19SRE9OTFkpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGxvZ19lcnIoXFxcIk9wZW5pbmcgJXNcXFwiLCBmaWxlX3BhdGgpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0Z290ID0gcmVhZChmZCwgYnVmLCBsZW4gLSAxKTtcXG4rXFx0aWYgKGdvdCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0bG9nX2VycihcXFwiUmVhZGluZyAlc1xcXCIsIGZpbGVfcGF0aCk7XFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFx0YnVmW2dvdF0gPSAnXFxcXDAnO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogcmVhZF9jZ3JvdXBfZmlsZSgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGVcXG4rICogQHJlbGF0aXZlX3BhdGg6IFRoZSBjZ3JvdXAgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHdvcmtkaXJcXG4rICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxcbisgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzXFxuKyAqIEBsZW46IFNpemUgb2YgQGJ1ZlxcbisgKlxcbisgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAncyBkaXJlY3RvcnkuXFxuKyAqXFxuKyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuXFxuKyAqL1xcbitpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbitcXHRcXHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xcbitcXG4rXFx0Zm9ybWF0X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcXG4rXFx0cmV0dXJuIF9fcmVhZF9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmLCBsZW4pO1xcbit9XFxuK1xcbisvKipcXG4rICogcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoKSAtIFJlYWQgZnJvbSBhIGNncm91cCBmaWxlIGluIHRoZSBwYXJlbnQgcHJvY2Vzc1xcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpclxcbisgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IHByb2Nlc3Mgd29ya2RpclxcbisgKiBAZmlsZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gY2dyb3VwZnMgdG8gcmVhZCBmcm9tXFxuKyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcXG4rICogQGxlbjogU2l6ZSBvZiBAYnVmXFxuKyAqXFxuKyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCdzIGRpcmVjdG9yeSB1bmRlciB0aGUgcGFyZW50IHByb2Nlc3NcXG4rICogd29ya2Rpci5cXG4rICpcXG4rICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC5cXG4rICovXFxuK2ludCByZWFkX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbitcXHRcXHRcXHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdGNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07XFxuK1xcbitcXHRmb3JtYXRfcGFyZW50X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcXG4rXFx0cmV0dXJuIF9fcmVhZF9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmLCBsZW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkgLSBTZXR1cCB0aGUgY2dyb3VwIGVudmlyb25tZW50XFxuICAqXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcXG5pbmRleCAzODU3MzA0YmU4NzQxLi5kNDJkMmUxMzA0NGU1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcXG5AQCAtMTUsNiArMTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXFxuIFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XFxuIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcXG4gXFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYpO1xcbitpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbitcXHRcXHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XFxuK2ludCByZWFkX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbitcXHRcXHRcXHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4gaW50IGNncm91cF9zZXR1cF9hbmRfam9pbihjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcXG4gaW50IGdldF9yb290X2Nncm91cCh2b2lkKTtcXG4gaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY1xcbkBAIC0wLDAgKzEsMTU4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy91c2VyLmhcXHUwMDNlXFxuKyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNkZWZpbmUgUEFHRV9TSVpFIGdldHBhZ2VzaXplKClcXG4rI2VuZGlmXFxuK1xcbisjaW5jbHVkZSBcXFwiY2dyb3VwX2hlbHBlcnMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImFyZW5hX21lbWNnLnNrZWwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgQ0dfUEFUSFxcdFxcdFxcXCIvYXJlbmFfbWVtY2dcXFwiXFxuK1xcbisvKiBCdWRnZXQgdGhlIGFyZW5hIGdldHMgb24gdG9wIG9mIHdoYXRldmVyIGlzIGFscmVhZHkgY2hhcmdlZCBhZnRlciBsb2FkLiAqL1xcbisjZGVmaW5lIEFSRU5BX0JVREdFVFxcdCg2NCAqIDEwMjQgKiAxMDI0KVxcbitcXG4rc3RhdGljIHZvaWQgZHVtcF9tZW1jZyhpbnQgKCpyZCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KSlcXG4re1xcbitcXHRjaGFyIGJ1Zls1MTJdO1xcbitcXG4rXFx0LypcXG4rXFx0ICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5XFxuK1xcdCAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kXFxuK1xcdCAqIG1lbW9yeS5ldmVudHMgc3Vydml2ZSB0aGUgY2hpbGQgYW5kIHRlbGwgdGhlIHN0b3J5IGVpdGhlciB3YXkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJkKENHX1BBVEgsIFxcXCJtZW1vcnkuY3VycmVudFxcXCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIm1lbW9yeS5jdXJyZW50OiAlc1xcXCIsIGJ1Zik7XFxuK1xcdGlmICghcmQoQ0dfUEFUSCwgXFxcIm1lbW9yeS5tYXhcXFwiLCBidWYsIHNpemVvZihidWYpKSlcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtZW1vcnkubWF4OiAlc1xcXCIsIGJ1Zik7XFxuK1xcdGlmICghcmQoQ0dfUEFUSCwgXFxcIm1lbW9yeS5wZWFrXFxcIiwgYnVmLCBzaXplb2YoYnVmKSkpXFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibWVtb3J5LnBlYWs6ICVzXFxcIiwgYnVmKTtcXG4rXFx0aWYgKCFyZChDR19QQVRILCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIm1lbW9yeS5ldmVudHM6XFxcXG4lc1xcXCIsIGJ1Zik7XFxuK1xcdGZmbHVzaChzdGRlcnIpO1xcbit9XFxuK1xcbisvKiBSZWFkIG9uZSBrZXkgZnJvbSBhIGZsYXQga2V5ZWQgY2dyb3VwIGZpbGUsIGUuZy4gXFxcIm9vbV9raWxsXFxcIiBpbiBtZW1vcnkuZXZlbnRzLiAqL1xcbitzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KVxcbit7XFxuK1xcdGNoYXIgYnVmWzUxMl0sICpwO1xcbitcXG4rXFx0aWYgKHJlYWRfY2dyb3VwX2ZpbGUoY2csIGZpbGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdHAgPSBzdHJzdHIoYnVmLCBrZXkpO1xcbitcXHRpZiAoIXApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0dXJuIHN0cnRvbChwICsgc3RybGVuKGtleSksIE5VTEwsIDEwKTtcXG4rfVxcbitcXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1jZyh2b2lkKVxcbit7XFxuK1xcdGludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7XFxuK1xcdGNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7XFxuK1xcdGNoYXIgYnVmWzY0XTtcXG4rXFx0cGlkX3QgcGlkO1xcbitcXG4rXFx0ZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldHVwX2Nncm91cF9lbnZpcm9ubWVudFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjZ3JvdXBfZmQgPSBjcmVhdGVfYW5kX2dldF9jZ3JvdXAoQ0dfUEFUSCk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKGNncm91cF9mZCwgXFxcImNyZWF0ZV9hbmRfZ2V0X2Nncm91cFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIE5vIG1lbW9yeSBjb250cm9sbGVyIC1cXHUwMDNlIG5vdGhpbmcgdG8gdGVzdC4gKi9cXG4rXFx0aWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgXFxcIm1lbW9yeS5jdXJyZW50XFxcIiwgYnVmLCBzaXplb2YoYnVmKSkpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCIlczpTS0lQOm5vIG1lbW9yeSBjb250cm9sbGVyXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHBpZCA9IGZvcmsoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcXFwiZm9ya1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdHN0cnVjdCBhcmVuYV9tZW1jZyAqY3NrZWw7XFxuK1xcdFxcdF9fdTMyIGksIG5wYWdlcztcXG4rXFx0XFx0Y2hhciAqYmFzZTtcXG4rXFx0XFx0c2l6ZV90IHN6O1xcbitcXHRcXHRsb25nIGN1cjtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIERvIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2hpbGQ6IHRoZSBhcmVuYSB2bWEgaXMgVk1fRE9OVENPUFkgc29cXG4rXFx0XFx0ICogaXQgd291bGQgbm90IHN1cnZpdmUgZm9yaygpLCBvbmx5IHRoZSBjaGlsZCBzaG91bGQgYmUgdW5kZXIgdGhlXFxuK1xcdFxcdCAqIGxpbWl0IHNvIHRoYXQgYSBtZW1jZyBPT00gY2Fubm90IHBpY2sgdGVzdF9wcm9ncywgYW5kIGEgbWFwIGlzXFxuK1xcdFxcdCAqIGNoYXJnZWQgdG8gdGhlIG1lbWNnIG9mIHRoZSB0YXNrIHRoYXQgY3JlYXRlcyBpdCAtIHNvIGpvaW5cXG4rXFx0XFx0ICogYmVmb3JlIGxvYWQuIFRoZSBjZ3JvdXAgd29yayBkaXIgYmVsb25ncyB0byB0aGUgcGFyZW50IHRoYXQgc2V0XFxuK1xcdFxcdCAqIHRoZSBlbnZpcm9ubWVudCB1cCwgc28gcmVhY2ggaXQgd2l0aCB0aGUgX3BhcmVudCgpIGhlbHBlcnMuXFxuK1xcdFxcdCAqIEVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHBhcmVudCB0aHJvdWdoIHRoZSBleGl0IGNvZGUsIHNpbmNlXFxuK1xcdFxcdCAqIEFTU0VSVF8qIGluIGEgZm9ya2VkIGNoaWxkIGRvZXMgbm90IHJlYWNoIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIiVkXFxcIiwgZ2V0cGlkKCkpO1xcbitcXHRcXHRpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFxcXCJjZ3JvdXAucHJvY3NcXFwiLCBidWYpKVxcbitcXHRcXHRcXHRfZXhpdCgyKTtcXG4rXFxuK1xcdFxcdGNza2VsID0gYXJlbmFfbWVtY2dfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0XFx0aWYgKCFjc2tlbClcXG4rXFx0XFx0XFx0X2V4aXQoMyk7XFxuK1xcbitcXHRcXHRiYXNlID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShjc2tlbC1cXHUwMDNlbWFwcy5hcmVuYSwgXFx1MDAyNnN6KTtcXG4rXFx0XFx0aWYgKCFiYXNlKVxcbitcXHRcXHRcXHRfZXhpdCg0KTtcXG4rXFx0XFx0bnBhZ2VzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoY3NrZWwtXFx1MDAzZW1hcHMuYXJlbmEpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ2FwIG9ubHkgbm93LCBhZnRlciBsb2FkOiBldmVyeXRoaW5nIGJ1dCB0aGUgZmF1bHQtaW4gaXNcXG4rXFx0XFx0ICogY2hhcmdlZCwgc28gdGhlIGFyZW5hIGdldHMgYSBmaXhlZCBidWRnZXQgcmVnYXJkbGVzcyBvZiB3aGF0XFxuK1xcdFxcdCAqIHRoZSBsb2FkIGl0c2VsZiBjb3N0LCBhbmQgdGhlIGxvYWQgY2FuIG5ldmVyIGhpdCB0aGUgbGltaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXFxcIm1lbW9yeS5jdXJyZW50XFxcIiwgYnVmLCBzaXplb2YoYnVmKSkpXFxuK1xcdFxcdFxcdF9leGl0KDUpO1xcbitcXHRcXHRjdXIgPSBzdHJ0b2woYnVmLCBOVUxMLCAxMCk7XFxuK1xcdFxcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIlbGRcXFwiLCBjdXIgKyBBUkVOQV9CVURHRVQpO1xcbitcXHRcXHRpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFxcXCJtZW1vcnkubWF4XFxcIiwgYnVmKSlcXG4rXFx0XFx0XFx0X2V4aXQoNik7XFxuK1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnBhZ2VzOyBpKyspXFxuK1xcdFxcdFxcdGJhc2VbKHNpemVfdClpICogcHNdID0gMTtcXG4rXFx0XFx0LyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi9cXG4rXFx0XFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlX3BhcmVudCk7XFxuK1xcdFxcdF9leGl0KDApO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXFx1MDAyNnN0YXR1cywgMCksIHBpZCwgXFxcIndhaXRwaWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBBIG5vbi16ZXJvIGV4aXQgbWVhbnMgdGhlIGNoaWxkIGZhaWxlZCB0byBzZXQgdXA7IHRoZSBjb2RlIHNheXMgd2hlcmUuICovXFxuK1xcdGlmIChXSUZFWElURUQoc3RhdHVzKSBcXHUwMDI2XFx1MDAyNiBXRVhJVFNUQVRVUyhzdGF0dXMpKSB7XFxuK1xcdFxcdEFTU0VSVF9PSyhXRVhJVFNUQVRVUyhzdGF0dXMpLCBcXFwiY2hpbGQgc2V0dXBcXFwiKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZhdWx0aW5nIGEgdmFsaWQgYXJlbmEgYWRkcmVzcyB1bnRpbCBtZW1vcnkubWF4IGlzIGhpdCBtdXN0IG5vdCBsb29rXFxuK1xcdCAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aFxcbitcXHQgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHVixcXG4rXFx0ICogYW5kIHRoZSBjaGlsZCBkaWVkIHdpdGggU0lHU0VHViBvbiBhIHZhbGlkIGFkZHJlc3M7IG5vdyBpdCBpcyBoYW5kbGVkXFxuK1xcdCAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZVxcbitcXHQgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvXFxuK1xcdCAqIGtpbGwgdGhlIGNoaWxkKSwgc28gY2hlY2sgbWVtb3J5LmV2ZW50cy5vb21fa2lsbCwgd2hpY2ggcmVjb3JkcyB0aGVcXG4rXFx0ICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cyksIFxcXCJjaGlsZCBraWxsZWQgYnkgc2lnbmFsXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb21fa2lsbFxcXCIpLCAxLFxcbitcXHRcXHQgICAgICAgXFxcIm1lbWNnIG9vbV9raWxsXFxcIikpXFxuK1xcdFxcdGR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZSk7XFxuK291dDpcXG4rXFx0aWYgKGNncm91cF9mZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShjZ3JvdXBfZmQpO1xcbitcXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg4MjU5Y2ZlYTA2YjZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNcXG5AQCAtMCwwICsxLDI0IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfYXJlbmFfY29tbW9uLmhcXFwiXFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcXG4rXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDUwMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovXFxuKyNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0XFxuK1xcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXFx1MDAzY1xcdTAwM2MgMzIpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuKyNlbHNlXFxuK1xcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXFx1MDAzY1xcdTAwM2MgNDQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuKyNlbmRpZlxcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBub29wKHZvaWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQxOjU1LjczMjgyODA4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI1MjM2Njc4NTk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmVuYV92bV9mYXVsdFwiLFxuICAgIFwiYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYXMgKGBhcmVuYV92bV9mYXVsdGApIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKSBvdXRzaWRlIG9mIHRoZSBzcGlubG9jay4gVGhpcyBhbGxvd3MgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG1lbW9yeSBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBwcmV2ZW50aW5nIHNwdXJpb3VzIFNJR0JVUy9TSUdTRUdWIGVycm9ycy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjaGFuZ2VzIGluIHRoZSBCUEYgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYjMyM2UzNWZjY2M3ZThjZDcxNmZhMjc3OGIwNjQzOTdjNzM3ZWI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDk6NDE6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggYjNjZDI4ZDllM2I1NS4uYzgxN2M5OWQyOTA2NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0yNzg0LDYgKzI3ODQsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2dldF9jdXJyX29yX25leHQodTMyICppZCk7XG4gXG4gaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbiBcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuK3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApO1xuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiB2b2lkIGJwZl9tYXBfbWVtY2dfZW50ZXIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IG1lbV9jZ3JvdXAgKipvbGRfbWVtY2csXG4gXHRcdFx0IHN0cnVjdCBtZW1fY2dyb3VwICoqbmV3X21lbWNnKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDdiNjg0NzIwMGI0MzEuLmZhNDYyYTBmZjFhZDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTQ4MSw3ICs0ODEsOCBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2UsICpuZXdfcGFnZSA9IE5VTEw7XG4rXHR2bV9mYXVsdF90IGZhdWx0X3JldDtcbiBcdGxvbmcga2Jhc2UsIGthZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCByZXQ7XG5AQCAtNDg5LDU5ICs0OTAsMTA2IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0a2Jhc2UgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xuIFx0a2FkZHIgPSBrYmFzZSArICh1MzIpKHZtZi1cdTAwM2VhZGRyZXNzKTtcbiBcbi1cdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG4rXHRwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpO1xuK1x0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFByZWFsbG9jYXRlIG91dHNpZGUgdGhlIGxvY2sgd2l0aCBhIHNsZWVwYWJsZSBhbGxvY2F0b3Igc28gaXRcbitcdFx0ICogY2FuIHJlY2xhaW0gYW5kIHJ1biB0aGUgbWVtY2cgT09NIGtpbGxlciwgd2hpY2ggdGhlXG4rXHRcdCAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IgdW5kZXIgYXJlbmEtXHUwMDNlc3BpbmxvY2sgY2Fubm90LiBBIE5VTExcbitcdFx0ICogcmV0dXJuIGlzIG5vbi1yZWNvdmVyYWJsZSwgc28gZmFpbCB3aXRoIFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0ICogVk1fRkFVTFRfT09NIHdvdWxkIGJlIHJldHJpZWQgYnkgdGhlIGZhdWx0IHBhdGggYW5kIGNhblxuK1x0XHQgKiBsaXZlbG9jayB3aGVuIHRoZSBjaGFyZ2VkIG1lbWNnIGlzIG5vdCB0aGUgZmF1bHRpbmcgdGFzaydzLlxuK1x0XHQgKi9cbitcdFx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbitcdFx0bmV3X3BhZ2UgPSBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKG1hcCk7XG4rXHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4rXHRcdGlmICghbmV3X3BhZ2UpXG4rXHRcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbitcdH1cbitcbitcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpIHtcbiBcdFx0LypcbiBcdFx0ICogQSBmYWlsZWQgbG9jayBtZWFucyBhIHBvc3NpYmxlIGRlYWRsb2NrIHdhcyBkZXRlY3RlZC4gRG9uJ3RcbiBcdFx0ICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dFxuIFx0XHQgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC5cbiBcdFx0ICovXG4rXHRcdGlmIChuZXdfcGFnZSlcbitcdFx0XHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XG4gXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4rXHR9XG4gXG4gXHRwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpO1xuIFx0aWYgKHBhZ2UpIHtcbi1cdFx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxuLVx0XHRcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24ndCBsYXp5LWFsbG9jIG92ZXIgaXQgKi9cbi1cdFx0XHRnb3RvIG91dF9zaWdzZWd2O1xuK1x0XHRpZiAocGFnZSA9PSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEEgc2NyYXRjaCBwYWdlIG1hcmtzIGEgaG9sZS4gU2VnZmF1bHQgb25seSBpZiB0aGUgdXNlclxuK1x0XHRcdCAqIGFza2VkIGZvciBpdDsgb3RoZXJ3aXNlIHdlIGNvdWxkIGxhenktYWxsb2NhdGUgYnV0XG4rXHRcdFx0ICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGZhdWx0X3JldCA9IChhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSA/XG4rXHRcdFx0XHQgICAgVk1fRkFVTFRfU0lHU0VHViA6IFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0XHRnb3RvIG91dF9lcnJfbG9ja2VkO1xuK1x0XHR9XG4gXHRcdC8qIGFscmVhZHkgaGF2ZSBhIHBhZ2Ugdm1hcC1lZCAqL1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdGlmIChhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSB7XG4rXHRcdC8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovXG4rXHRcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR1NFR1Y7XG4rXHRcdGdvdG8gb3V0X2Vycl9sb2NrZWQ7XG4rXHR9XG4rXG4gXHRicGZfbWFwX21lbWNnX2VudGVyKFx1MDAyNmFyZW5hLVx1MDAzZW1hcCwgXHUwMDI2b2xkX21lbWNnLCBcdTAwMjZuZXdfbWVtY2cpO1xuIFxuLVx0aWYgKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpXG4tXHRcdC8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovXG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4rXHRpZiAoIW5ld19wYWdlKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFZlcnkgcmFyZSByYWNlOiB0aGUgYnBmIHByb2dyYW0gaGFkIGFsbG9jYXRlZCBhIHBhZ2UgaGVyZSwgc29cbitcdFx0ICogdGhlIGxvY2tsZXNzIHByb2JlIHNhdyBpdCBhbmQgd2Ugc2tpcHBlZCBwcmVhbGxvY2F0aW9uLCBidXQgaXRcbitcdFx0ICogZnJlZWQgdGhlIHBhZ2UgYmVmb3JlIHdlIHRvb2sgdGhlIGxvY2suIE5vdyB3ZSBkbyBuZWVkIG9uZTtcbitcdFx0ICogc2xlZXBpbmcgaXMgbm90IGFsbG93ZWQgaGVyZSwgc28gZmFsbCBiYWNrIHRvIHRoZSBub24tYmxvY2tpbmdcbitcdFx0ICogYWxsb2NhdG9yIGFuZCBnaXZlIHVwIGlmIGl0IGZhaWxzLlxuK1x0XHQgKi9cbitcdFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIG1hcC1cdTAwM2VudW1hX25vZGUsIDEsIFx1MDAyNm5ld19wYWdlKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0XHRnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRyZXQgPSByYW5nZV90cmVlX2NsZWFyKFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xuLVx0aWYgKHJldClcbi1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbi1cbi1cdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5hcmVuYSA9IGFyZW5hLCAucGFnZXMgPSBcdTAwMjZwYWdlLCAuaSA9IDAgfTtcbi1cdC8qIEFjY291bnQgaW50byBtZW1jZyBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgYnBmX2FyZW5hICovXG4tXHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgTlVNQV9OT19OT0RFLCAxLCBcdTAwMjZwYWdlKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHZtZi1cdTAwM2VwZ29mZiwgMSk7XG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4rXHRcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbiBcdH1cbitcdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5hcmVuYSA9IGFyZW5hLCAucGFnZXMgPSBcdTAwMjZuZXdfcGFnZSwgLmkgPSAwIH07XG4gXG4gXHRyZXQgPSBhcHBseV90b19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGthZGRyLCBQQUdFX1NJWkUsIGFwcGx5X3JhbmdlX3NldF9jYiwgXHUwMDI2ZGF0YSk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xuLVx0XHRmcmVlX3BhZ2VzX25vbG9jayhwYWdlLCAwKTtcbi1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbitcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuK1x0XHRnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnO1xuIFx0fVxuIFx0Zmx1c2hfdm1hcF9jYWNoZShrYWRkciwgUEFHRV9TSVpFKTtcbiBcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4rXHQvKiBuZXdfcGFnZSB3YXMgY29uc3VtZWQgKi9cbitcdHBhZ2UgPSBuZXdfcGFnZTtcbitcdG5ld19wYWdlID0gTlVMTDtcbiBvdXQ6XG4gXHRwYWdlX3JlZl9hZGQocGFnZSwgMSk7XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbitcdGlmIChuZXdfcGFnZSlcbitcdFx0ZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApO1xuIFx0dm1mLVx1MDAzZXBhZ2UgPSBwYWdlO1xuIFx0cmV0dXJuIDA7XG4tb3V0X3NpZ3NlZ3ZfbWVtY2c6XG4rXG4rb3V0X2Vycl9sb2NrZWRfbWVtY2c6XG4gXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuLW91dF9zaWdzZWd2OlxuK291dF9lcnJfbG9ja2VkOlxuIFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4tXHRyZXR1cm4gVk1fRkFVTFRfU0lHU0VHVjtcbitcdGlmIChuZXdfcGFnZSlcbitcdFx0ZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApO1xuK1x0cmV0dXJuIGZhdWx0X3JldDtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhcmVuYV92bV9vcHMgPSB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNjg3NGJhMTQyNGFmMC4uZjliODE2MzhlNTM3YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTYwMiwxNSArNjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKVxuIFx0XHQhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7XG4gfVxuIFxuKyNkZWZpbmUgQlBGX1BBR0VfR0ZQIChHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pXG4rXG4gc3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpXG4ge1xuIFx0aWYgKCFjYW5fYWxsb2NfcGFnZXMoKSlcbiBcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vbG9jayhfX0dGUF9BQ0NPVU5ULCBuaWQsIDApO1xuIFxuLVx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLFxuLVx0XHRcdFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UXG4tXHRcdFx0XHR8IF9fR0ZQX05PV0FSTixcbi1cdFx0XHRcdDApO1xuK1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLCBCUEZfUEFHRV9HRlAsIDApO1xuIH1cbiBcbiBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuQEAgLTYzNiw2ICs2MzUsMjAgQEAgaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qXG4rICogRm9yIGNhbGxlcnMgdGhhdCBrbm93IHRoZXkgcnVuIGluIGEgc2xlZXBhYmxlIGNvbnRleHQsIGUuZy4gYSB1c2VyIHBhZ2VcbisgKiBmYXVsdCBoYW5kbGVyLiBjYW5fYWxsb2NfcGFnZXMoKSBpcyBhIGNvbnNlcnZhdGl2ZSBndWVzcyBtYWRlIGZvciBCUEZcbisgKiBwcm9ncmFtIGNvbnRleHQgLSBub3RhYmx5IGl0IGlzIGFsd2F5cyBmYWxzZSBvbiBQUkVFTVBUX1JUIC0gc28gZ29pbmdcbisgKiB0aHJvdWdoIGJwZl9tYXBfYWxsb2NfcGFnZXMoKSB0aGVyZSB3b3VsZCBuZWVkbGVzc2x5IHBpY2sgdGhlXG4rICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgd2hpY2ggbmV2ZXIgcmVjbGFpbXMgYW5kIG5ldmVyIGVuZ2FnZXMgdGhlIE9PTVxuKyAqIG1hY2hpbmVyeS5cbisgKi9cbitzdHJ1Y3QgcGFnZSAqYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuK3tcbitcdG1pZ2h0X3NsZWVwKCk7XG4rXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShtYXAtXHUwMDNlbnVtYV9ub2RlLCBCUEZfUEFHRV9HRlAsIDApO1xuK31cbitcbiBzdGF0aWMgaW50IGJ0Zl9maWVsZF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX2ZpZWxkICpmMSA9IGEsICpmMiA9IGI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuQEAgLTE4OCw2ICsxODgsNzMgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuIFx0cmV0dXJuIF9fd3JpdGVfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1Zik7XG4gfVxuIFxuK3N0YXRpYyBpbnQgX19yZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKmNncm91cF9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuK1x0XHRcdCAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRjaGFyIGZpbGVfcGF0aFtQQVRIX01BWCArIDFdO1xuK1x0c3NpemVfdCBnb3Q7XG4rXHRpbnQgZmQ7XG4rXG4rXHRzbnByaW50ZihmaWxlX3BhdGgsIHNpemVvZihmaWxlX3BhdGgpLCBcIiVzLyVzXCIsIGNncm91cF9wYXRoLCBmaWxlKTtcbitcdGZkID0gb3BlbihmaWxlX3BhdGgsIE9fUkRPTkxZKTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRsb2dfZXJyKFwiT3BlbmluZyAlc1wiLCBmaWxlX3BhdGgpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcbitcdGdvdCA9IHJlYWQoZmQsIGJ1ZiwgbGVuIC0gMSk7XG4rXHRpZiAoZ290IFx1MDAzYyAwKSB7XG4rXHRcdGxvZ19lcnIoXCJSZWFkaW5nICVzXCIsIGZpbGVfcGF0aCk7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXHRidWZbZ290XSA9ICdcXDAnO1xuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHJlYWRfY2dyb3VwX2ZpbGUoKSAtIFJlYWQgZnJvbSBhIGNncm91cCBmaWxlXG4rICogQHJlbGF0aXZlX3BhdGg6IFRoZSBjZ3JvdXAgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHdvcmtkaXJcbisgKiBAZmlsZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gY2dyb3VwZnMgdG8gcmVhZCBmcm9tXG4rICogQGJ1ZjogQnVmZmVyIHRvIHJlYWQgaW50bywgTlVMLXRlcm1pbmF0ZWQgb24gc3VjY2Vzc1xuKyAqIEBsZW46IFNpemUgb2YgQGJ1ZlxuKyAqXG4rICogUmVhZCBmcm9tIGEgZmlsZSBpbiB0aGUgZ2l2ZW4gY2dyb3VwJ3MgZGlyZWN0b3J5LlxuKyAqXG4rICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC5cbisgKi9cbitpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuK1x0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xuK1xuK1x0Zm9ybWF0X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcbitcdHJldHVybiBfX3JlYWRfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1ZiwgbGVuKTtcbit9XG4rXG4rLyoqXG4rICogcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoKSAtIFJlYWQgZnJvbSBhIGNncm91cCBmaWxlIGluIHRoZSBwYXJlbnQgcHJvY2Vzc1xuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZGlyXG4rICogQHJlbGF0aXZlX3BhdGg6IFRoZSBjZ3JvdXAgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBwcm9jZXNzIHdvcmtkaXJcbisgKiBAZmlsZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gY2dyb3VwZnMgdG8gcmVhZCBmcm9tXG4rICogQGJ1ZjogQnVmZmVyIHRvIHJlYWQgaW50bywgTlVMLXRlcm1pbmF0ZWQgb24gc3VjY2Vzc1xuKyAqIEBsZW46IFNpemUgb2YgQGJ1ZlxuKyAqXG4rICogUmVhZCBmcm9tIGEgZmlsZSBpbiB0aGUgZ2l2ZW4gY2dyb3VwJ3MgZGlyZWN0b3J5IHVuZGVyIHRoZSBwYXJlbnQgcHJvY2Vzc1xuKyAqIHdvcmtkaXIuXG4rICpcbisgKiBJZiBzdWNjZXNzZnVsLCAwIGlzIHJldHVybmVkLlxuKyAqL1xuK2ludCByZWFkX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuK1x0XHRcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciBjZ3JvdXBfcGF0aFtQQVRIX01BWCAtIDI0XTtcbitcbitcdGZvcm1hdF9wYXJlbnRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpO1xuK1x0cmV0dXJuIF9fcmVhZF9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmLCBsZW4pO1xuK31cbitcbiAvKipcbiAgKiBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSAtIFNldHVwIHRoZSBjZ3JvdXAgZW52aXJvbm1lbnRcbiAgKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcbmluZGV4IDM4NTczMDRiZTg3NDEuLmQ0MmQyZTEzMDQ0ZTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcbkBAIC0xNSw2ICsxNSwxMCBAQCBpbnQgd3JpdGVfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdFx0ICAgICAgY29uc3QgY2hhciAqYnVmKTtcbiBpbnQgd3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4gXHRcdFx0ICAgICBjb25zdCBjaGFyICpidWYpO1xuK2ludCByZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4rXHRcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbitpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiBpbnQgY2dyb3VwX3NldHVwX2FuZF9qb2luKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgpO1xuIGludCBnZXRfcm9vdF9jZ3JvdXAodm9pZCk7XG4gaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmNcbkBAIC0wLDAgKzEsMTU4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3VzZXIuaFx1MDAzZVxuKyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqL1xuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2RlZmluZSBQQUdFX1NJWkUgZ2V0cGFnZXNpemUoKVxuKyNlbmRpZlxuK1xuKyNpbmNsdWRlIFwiY2dyb3VwX2hlbHBlcnMuaFwiXG4rI2luY2x1ZGUgXCJhcmVuYV9tZW1jZy5za2VsLmhcIlxuK1xuKyNkZWZpbmUgQ0dfUEFUSFx0XHRcIi9hcmVuYV9tZW1jZ1wiXG4rXG4rLyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi9cbisjZGVmaW5lIEFSRU5BX0JVREdFVFx0KDY0ICogMTAyNCAqIDEwMjQpXG4rXG4rc3RhdGljIHZvaWQgZHVtcF9tZW1jZyhpbnQgKCpyZCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KSlcbit7XG4rXHRjaGFyIGJ1Zls1MTJdO1xuK1xuK1x0LypcbitcdCAqIG1lbW9yeS5jdXJyZW50IHJlYWRzIDAgb25jZSB0aGUgY2hpbGQgaGFzIGxlZnQgdGhlIGNncm91cCwgc28gaXQgb25seVxuK1x0ICogY2FycmllcyBpbmZvcm1hdGlvbiB3aGVuIGR1bXBlZCBmcm9tIHRoZSBsaXZlIGNoaWxkOyBtZW1vcnkucGVhayBhbmRcbitcdCAqIG1lbW9yeS5ldmVudHMgc3Vydml2ZSB0aGUgY2hpbGQgYW5kIHRlbGwgdGhlIHN0b3J5IGVpdGhlciB3YXkuXG4rXHQgKi9cbitcdGlmICghcmQoQ0dfUEFUSCwgXCJtZW1vcnkuY3VycmVudFwiLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwibWVtb3J5LmN1cnJlbnQ6ICVzXCIsIGJ1Zik7XG4rXHRpZiAoIXJkKENHX1BBVEgsIFwibWVtb3J5Lm1heFwiLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwibWVtb3J5Lm1heDogJXNcIiwgYnVmKTtcbitcdGlmICghcmQoQ0dfUEFUSCwgXCJtZW1vcnkucGVha1wiLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwibWVtb3J5LnBlYWs6ICVzXCIsIGJ1Zik7XG4rXHRpZiAoIXJkKENHX1BBVEgsIFwibWVtb3J5LmV2ZW50c1wiLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwibWVtb3J5LmV2ZW50czpcXG4lc1wiLCBidWYpO1xuK1x0ZmZsdXNoKHN0ZGVycik7XG4rfVxuK1xuKy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiBcIm9vbV9raWxsXCIgaW4gbWVtb3J5LmV2ZW50cy4gKi9cbitzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KVxuK3tcbitcdGNoYXIgYnVmWzUxMl0sICpwO1xuK1xuK1x0aWYgKHJlYWRfY2dyb3VwX2ZpbGUoY2csIGZpbGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRwID0gc3Ryc3RyKGJ1Ziwga2V5KTtcbitcdGlmICghcClcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIHN0cnRvbChwICsgc3RybGVuKGtleSksIE5VTEwsIDEwKTtcbit9XG4rXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1jZyh2b2lkKVxuK3tcbitcdGludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7XG4rXHRjb25zdCBsb25nIHBzID0gUEFHRV9TSVpFO1xuK1x0Y2hhciBidWZbNjRdO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0ZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwic2V0dXBfY2dyb3VwX2Vudmlyb25tZW50XCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjZ3JvdXBfZmQgPSBjcmVhdGVfYW5kX2dldF9jZ3JvdXAoQ0dfUEFUSCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwiY3JlYXRlX2FuZF9nZXRfY2dyb3VwXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIE5vIG1lbW9yeSBjb250cm9sbGVyIC1cdTAwM2Ugbm90aGluZyB0byB0ZXN0LiAqL1xuK1x0aWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgXCJtZW1vcnkuY3VycmVudFwiLCBidWYsIHNpemVvZihidWYpKSkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCIlczpTS0lQOm5vIG1lbW9yeSBjb250cm9sbGVyXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHBpZCA9IGZvcmsoKTtcbitcdGlmICghQVNTRVJUX0dFKHBpZCwgMCwgXCJmb3JrXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmIChwaWQgPT0gMCkge1xuK1x0XHRzdHJ1Y3QgYXJlbmFfbWVtY2cgKmNza2VsO1xuK1x0XHRfX3UzMiBpLCBucGFnZXM7XG4rXHRcdGNoYXIgKmJhc2U7XG4rXHRcdHNpemVfdCBzejtcbitcdFx0bG9uZyBjdXI7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIERvIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2hpbGQ6IHRoZSBhcmVuYSB2bWEgaXMgVk1fRE9OVENPUFkgc29cbitcdFx0ICogaXQgd291bGQgbm90IHN1cnZpdmUgZm9yaygpLCBvbmx5IHRoZSBjaGlsZCBzaG91bGQgYmUgdW5kZXIgdGhlXG4rXHRcdCAqIGxpbWl0IHNvIHRoYXQgYSBtZW1jZyBPT00gY2Fubm90IHBpY2sgdGVzdF9wcm9ncywgYW5kIGEgbWFwIGlzXG4rXHRcdCAqIGNoYXJnZWQgdG8gdGhlIG1lbWNnIG9mIHRoZSB0YXNrIHRoYXQgY3JlYXRlcyBpdCAtIHNvIGpvaW5cbitcdFx0ICogYmVmb3JlIGxvYWQuIFRoZSBjZ3JvdXAgd29yayBkaXIgYmVsb25ncyB0byB0aGUgcGFyZW50IHRoYXQgc2V0XG4rXHRcdCAqIHRoZSBlbnZpcm9ubWVudCB1cCwgc28gcmVhY2ggaXQgd2l0aCB0aGUgX3BhcmVudCgpIGhlbHBlcnMuXG4rXHRcdCAqIEVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHBhcmVudCB0aHJvdWdoIHRoZSBleGl0IGNvZGUsIHNpbmNlXG4rXHRcdCAqIEFTU0VSVF8qIGluIGEgZm9ya2VkIGNoaWxkIGRvZXMgbm90IHJlYWNoIGl0LlxuK1x0XHQgKi9cbitcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlZFwiLCBnZXRwaWQoKSk7XG4rXHRcdGlmICh3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXCJjZ3JvdXAucHJvY3NcIiwgYnVmKSlcbitcdFx0XHRfZXhpdCgyKTtcbitcbitcdFx0Y3NrZWwgPSBhcmVuYV9tZW1jZ19fb3Blbl9hbmRfbG9hZCgpO1xuK1x0XHRpZiAoIWNza2VsKVxuK1x0XHRcdF9leGl0KDMpO1xuK1xuK1x0XHRiYXNlID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShjc2tlbC1cdTAwM2VtYXBzLmFyZW5hLCBcdTAwMjZzeik7XG4rXHRcdGlmICghYmFzZSlcbitcdFx0XHRfZXhpdCg0KTtcbitcdFx0bnBhZ2VzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoY3NrZWwtXHUwMDNlbWFwcy5hcmVuYSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIENhcCBvbmx5IG5vdywgYWZ0ZXIgbG9hZDogZXZlcnl0aGluZyBidXQgdGhlIGZhdWx0LWluIGlzXG4rXHRcdCAqIGNoYXJnZWQsIHNvIHRoZSBhcmVuYSBnZXRzIGEgZml4ZWQgYnVkZ2V0IHJlZ2FyZGxlc3Mgb2Ygd2hhdFxuK1x0XHQgKiB0aGUgbG9hZCBpdHNlbGYgY29zdCwgYW5kIHRoZSBsb2FkIGNhbiBuZXZlciBoaXQgdGhlIGxpbWl0LlxuK1x0XHQgKi9cbitcdFx0aWYgKHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFwibWVtb3J5LmN1cnJlbnRcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdFx0X2V4aXQoNSk7XG4rXHRcdGN1ciA9IHN0cnRvbChidWYsIE5VTEwsIDEwKTtcbitcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlbGRcIiwgY3VyICsgQVJFTkFfQlVER0VUKTtcbitcdFx0aWYgKHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcIm1lbW9yeS5tYXhcIiwgYnVmKSlcbitcdFx0XHRfZXhpdCg2KTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhZ2VzOyBpKyspXG4rXHRcdFx0YmFzZVsoc2l6ZV90KWkgKiBwc10gPSAxO1xuK1x0XHQvKiBGYXVsdGVkIGV2ZXJ5dGhpbmcgd2l0aG91dCBkeWluZzogZHVtcCB3aHkgKG9ubHkgdW5kZXIgLXYpLiAqL1xuK1x0XHRkdW1wX21lbWNnKHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KTtcbitcdFx0X2V4aXQoMCk7XG4rXHR9XG4rXG4rXHRpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCAwKSwgcGlkLCBcIndhaXRwaWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogQSBub24temVybyBleGl0IG1lYW5zIHRoZSBjaGlsZCBmYWlsZWQgdG8gc2V0IHVwOyB0aGUgY29kZSBzYXlzIHdoZXJlLiAqL1xuK1x0aWYgKFdJRkVYSVRFRChzdGF0dXMpIFx1MDAyNlx1MDAyNiBXRVhJVFNUQVRVUyhzdGF0dXMpKSB7XG4rXHRcdEFTU0VSVF9PSyhXRVhJVFNUQVRVUyhzdGF0dXMpLCBcImNoaWxkIHNldHVwXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBGYXVsdGluZyBhIHZhbGlkIGFyZW5hIGFkZHJlc3MgdW50aWwgbWVtb3J5Lm1heCBpcyBoaXQgbXVzdCBub3QgbG9va1xuK1x0ICogbGlrZSBhbiBpbnZhbGlkIGFjY2Vzcy4gV2l0aG91dCB0aGUgZml4IHRoZSBmYXVsdCBwYXRoIGFsbG9jYXRlZCB3aXRoXG4rXHQgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHVixcbitcdCAqIGFuZCB0aGUgY2hpbGQgZGllZCB3aXRoIFNJR1NFR1Ygb24gYSB2YWxpZCBhZGRyZXNzOyBub3cgaXQgaXMgaGFuZGxlZFxuK1x0ICogYnkgdGhlIG1lbWNnIE9PTSBwYXRoIGluc3RlYWQuIEEgU0lHS0lMTCBhbG9uZSB3b3VsZCBub3QgcHJvdmUgdGhlXG4rXHQgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvXG4rXHQgKiBraWxsIHRoZSBjaGlsZCksIHNvIGNoZWNrIG1lbW9yeS5ldmVudHMub29tX2tpbGwsIHdoaWNoIHJlY29yZHMgdGhlXG4rXHQgKiBtZW1jZyBPT00gYW5kIHN1cnZpdmVzIHRoZSBjaGlsZC5cbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfVFJVRShXSUZTSUdOQUxFRChzdGF0dXMpLCBcImNoaWxkIGtpbGxlZCBieSBzaWduYWxcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfR0UoY2dfcmVhZF9rZXkoQ0dfUEFUSCwgXCJtZW1vcnkuZXZlbnRzXCIsIFwib29tX2tpbGxcIiksIDEsXG4rXHRcdCAgICAgICBcIm1lbWNnIG9vbV9raWxsXCIpKVxuK1x0XHRkdW1wX21lbWNnKHJlYWRfY2dyb3VwX2ZpbGUpO1xuK291dDpcbitcdGlmIChjZ3JvdXBfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShjZ3JvdXBfZmQpO1xuK1x0Y2xlYW51cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg4MjU5Y2ZlYTA2YjZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jXG5AQCAtMCwwICsxLDI0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2FyZW5hX2NvbW1vbi5oXCJcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4rXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDUwMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovXG4rI2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjRcbitcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDMyKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuKyNlbHNlXG4rXHRfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsIFx1MDAzY1x1MDAzYyA0NCk7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbisjZW5kaWZcbit9IGFyZW5hIFNFQyhcIi5tYXBzXCIpO1xuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgbm9vcCh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQxOjU1LjczMjgzMDM2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODc3MjUxMDk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBzb21lIHNlbGZ0ZXN0cywgd2hpY2ggaXMgZ29vZC4gQnV0IG1vcmUgaW1wb3J0YW50bHksIGl0J3MgY2hhbmdpbmcgaG93IHBhZ2VzIGFyZSBhbGxvY2F0ZWQgd2l0aGluIHRoZSBCUEYgYXJlbmEsIHNwZWNpZmljYWxseSBpbiB0aGUgYGFyZW5hX3ZtX2ZhdWx0YCBmdW5jdGlvbiwgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlci4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGludHJvZHVjaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCwgd2hpY2ggaXMgdXNpbmcgYSBzbGVlcGFibGUgYWxsb2NhdG9yIG5vdywgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyB0aGUgbWVtY2cgT09NIGtpbGxlciwgaW5zdGVhZCBvZiBqdXN0IHRoZSBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHRoYXQgd2FzIHVuZGVyIGEgc3BpbmxvY2suXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlPyBJcyB0aGlzIGNoYW5nZSB3b3J0aCBzcGVuZGluZyB0aGUgZWZmb3J0IHRvIGZ1enogaXQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYGFyZW5hX3ZtX2ZhdWx0YCBhbmQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLCBhcmUgYWN0dWFsbHkgY2FsbGVkLlxuXG5gYXJlbmFfdm1fZmF1bHRgIGlzLCBhcyBJIHJlY2FsbCwgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hIG1hcHMuIFRoZSBvdGhlciBmdW5jdGlvbiwgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLCBpcyB0aGUgbmV3IGZ1bmN0aW9uIHRoYXQncyAqYmVpbmcqIGNhbGxlZCBmcm9tIGBhcmVuYV92bV9mYXVsdGAuIFNpbXBsZSBlbm91Z2guXG5cblRpbWUgdG8gc2VhcmNoIHRoZSBjb2RlLiBJIG5lZWQgdG8gZmluZCB3aGVyZSBgYXJlbmFfdm1fZmF1bHRgIGFuZCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgYXJlIHVzZWQuIE9rYXksIGBhcmVuYV92bV9mYXVsdGAgaXMgdXNlZCBpbiBgYXJlbmFfdm1fb3BzYCwgd2hpY2ggSSBiZXQgaXMgc2V0IHNvbWV3aGVyZSB3aXRoaW4gYGFyZW5hX21hcF9tbWFwYC4gSSdsbCBnbyBjaGVjayBga2VybmVsL2JwZi9hcmVuYS5jYCB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMjIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NDoyNC41MDUzNDYwNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk3MjUzNzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX3ZtX2ZhdWx0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz00NjQ9c3RhdGljIHZvaWQgYXJlbmFfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDc4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0Nzk6c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4MC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NTk1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU5OS1cXHQuY2xvc2VcXHRcXHQ9IGFyZW5hX3ZtX2Nsb3NlLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MDA6XFx0LmZhdWx0ICAgICAgICAgID0gYXJlbmFfdm1fZmF1bHQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTYwMS19O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM9NDg9dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1fdXNhZ2Uodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTk5LVxcdCAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM6MTAwOlxcdCAqIHRocm91Z2ggYXJlbmFfdm1fZmF1bHQoKS4gbGliYnBmIG1tYXAoKXMgdGhlIGFyZW5hIGF0IG1hcF9leHRyYSBkdXJpbmdcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xMDEtXFx0ICogbG9hZCwgc28gYnBmX21hcF9faW5pdGlhbF92YWx1ZSgpIGhhbmRzIGJhY2sgdGhhdCBiYXNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NDoyOS4wMDI2MDc2MzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjM5NzA0NDA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmVuYV92bV9mYXVsdGAsIHdoaWNoIGlzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgc3BlY2lmaWNhbGx5IGZvciBCUEYgYXJlbmFzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgYWRkaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgZGVmaW5pdGVseSBhIGZ1bmN0aW9uIHRvIGJlIGF3YXJlIG9mLlwiXG5cblRoZSBmYWN0IHRoYXQgaXQncyBpbiB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIG1ha2VzIGl0IGluaGVyZW50bHkgcmVhY2hhYmxlLCBhbmQgbXkgZnV6emluZyBpbnN0aW5jdHMgYXJlIGFscmVhZHkga2lja2luZyBpbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc3BvdCB3b3J0aCBpbnZlc3Rpbmcgc29tZSB0aW1lIGFuZCBlZmZvcnQgdG8gdGVzdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBCUEYgYXJlbmFzIHNvIEkgY2FuIGVuc3VyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgcHJvcGVybHkgZW5hYmxlZCBhbmQgSSBjYW4gYnVpbGQgYSBwcm9wZXIgdGVzdCBlbnZpcm9ubWVudC4gTGV0IG1lIGZpbmQgdGhvc2UgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NDo0MS4zOTk2NTYwNzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MTk2NjUxNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9BUkVOQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDk6NDQ6NDYuMDYxNjMxNTg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzMjE0MjM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIEJQRiBBcmVuYSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBCUEZfQVJFTkFgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpdmVzLiBJdCdzIG5vdCBzb21ldGhpbmcgSSBjYW4ganVzdCBpbnR1aXRpdmVseSByZWNhbGwsIHNvIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGd1dCBzYXlzIGl0J3MgcHJvYmFibHkgZGVmaW5lZCBpbiBlaXRoZXIgYEtjb25maWdgIG9yIGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbG9jYXRpb24gZm9yIGEgQlBGLXNwZWNpZmljIGZlYXR1cmUuIEknbGwgc2VhcmNoIGZvciBpdCB0aGVyZS4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgYXBwcm9hY2ggd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6OTUwMSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQ0OjQ5LjU5Mzc3NzcwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUwNTQzMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hXFxcXC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM9NzE9c3RhdGljIGludCBzY3hfYXJlbmFfZ3JvdyhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHUzMiBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy04Ni1cXHR1YWRkcjMyID0gKHUzMikodW5zaWduZWQgbG9uZylwO1xcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYzo4NzpcXHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcXHUwMDI2XFx1MDAyNiA2NEJJVCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy04OC0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODA2NT1zdGF0aWMgaW50IHNjeF9hcmVuYV9zY2FuX3Byb2coc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDY5LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODA3MDpcXHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcXHUwMDI2XFx1MDAyNiA2NEJJVCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA3MS0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZT05OTM9JChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vOiAkKE9VVFBVVCkveGRwX2xiX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU6OTk0OiQoT1VUUFVUKS9iZW5jaF9saWJhcmVuYS5vOiAkKExJQkFSRU5BX0JFTkNIX1NLRUwpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTk5NS0kKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmhcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZT05OTg9JChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtMTAyMS1cXHRcXHQgJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU6MTAyMjpcXHRcXHQgJChPVVRQVVQpL2JlbmNoX2xpYmFyZW5hLm8gXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZS0xMDIzLVxcdFxcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NDo1NC4wNDQzMjgzMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTMwMzcwOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYnBmIGFyZW5hIGNvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhcmVuYS5vYCBvYmplY3QgZmlsZSwgYW5kIGl0IHNlZW1zIGxpa2UgaXQgZ2V0cyBidWlsdCBvbmx5IHVuZGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19NTVVgLCBhbmQgYENPTkZJR182NEJJVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGluY2x1ZGUvbGludXgvYnBmLmhgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBzbyB0aGVyZSBhcmUgbGlrZWx5IHJlbGF0ZWQgY2hhbmdlcyBpbiB0aGUgY29yZSBCUEYgc3RydWN0dXJlcyBhbmQgdGhlIHN5c2NhbGwgaW50ZXJmYWNlLlxuXG5NeSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgd2VyZSBgYXJlbmFfdm1fZmF1bHRgIGFuZCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAuIEhvbGQgb24sIHRob3VnaC4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSXMgYGFyZW5hX3ZtX2ZhdWx0YCBzdGF0aWM/IFl1cCwgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilgLiBIbSwgdGhhdCBtaWdodCBiZSBwcm9ibGVtYXRpYy4gVGhlIGd1aWRhbmNlIHByZWZlcnMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSBvZnRlbiBpbmxpbmVkLCBtYWtpbmcgdGhlbSBoYXJkZXIgdG8gdGFyZ2V0LiBIb3dldmVyLCBpdCAqaXMqIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgYXJlbmFfdm1fb3BzYCwgc28gaXQgd29uJ3QgYmUgaW5saW5lZC4gSXQgKnNob3VsZCogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzIGRlc3BpdGUgYmVpbmcgc3RhdGljLlxuXG5CdXQsIHRoZSBwcm9tcHQgc3VnZ2VzdHMgcHJpb3JpdGl6aW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzbyBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIGJldHRlciBjYW5kaWRhdGVzLiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaXMgbm9uLXN0YXRpYywgc28gbGV0J3MgbG9vayBmb3Igb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjk1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQ1OjAwLjU3NDcwMTkxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwOTY1NzQ3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0cnVjdCBicGZfbWFwIFxcXFwqYXJlbmFfbWFwX2FsbG9jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NTowNS4xODQzNjc5MjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMjYzMDM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgYXJlbmEuY2AgZm9yIEJQRiBTaGVuYW5pZ2FucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoZSBCUEYgYXJlbmEuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoaXMgc3BlY2lmaWMgYXJlbmEgaW1wbGVtZW50YXRpb24sIHNvIEknbSBnb2luZyB0byBjaGVjayBga2VybmVsL2JwZi9hcmVuYS5jYC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBoZXJlIGlzIGhvdyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIHVzZWQuIEknbSBnb2luZyB0byBzY2FuIHRoaXMgZmlsZSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMuIEknbSBhc3N1bWluZyB0aGUgKnN0YXRpYyogb25lcyBhcmUgbGlrZWx5IGludGVybmFsIHRvIHRoZSBhcmVuYSBtb2R1bGUuIFRoZSBub24tc3RhdGljIG9uZXMgYXJlIHdoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQ6IHRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGNhbGxpbmcgaW50by4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UgdGhhdCBhcmVuYS5jIGV4cG9zZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTk0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDk6NDU6MDguNTE3MDAwODc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUxMjkwMzE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLiogYXJlbmFfbWFwX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzND1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1VTRVJfUklOR0JVRiwgdXNlcl9yaW5nYnVmX21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoxMzU6QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9BUkVOQSwgYXJlbmFfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEzNi1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMTA9c3RydWN0IGJwZl9tYXAgKmJwZl9wcm9nX2FyZW5hKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjExNzpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcGVla19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEyMS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTIyOnN0YXRpYyBsb25nIGFyZW5hX21hcF9wdXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTIzLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEyNzpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcG9wX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpXFxua2VybmVsL2JwZi9hcmVuYS5jLTEyOC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTMxLVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMzI6c3RhdGljIGxvbmcgYXJlbmFfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMzMte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEzNi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTM3OnN0YXRpYyBpbnQgYXJlbmFfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMzgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTM0Mz1zdGF0aWMgaW50IGV4aXN0aW5nX3BhZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zNjktXFxua2VybmVsL2JwZi9hcmVuYS5jOjM3MDpzdGF0aWMgdm9pZCBhcmVuYV9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zNzEte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTQwMT1zdGF0aWMgdm9pZCAqYXJlbmFfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MDUtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQwNjpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbmtlcm5lbC9icGYvYXJlbmEuYy00MDctXFx0XFx0XFx0XFx0ICB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxMS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDEyOnN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxMy1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxNy1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDE4OnN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MTkte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTYwMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBhcmVuYV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTYzNi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjM3OnN0YXRpYyBpbnQgYXJlbmFfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTYzOC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjc2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2Nzc6c3RhdGljIGludCBhcmVuYV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpXFxua2VybmVsL2JwZi9hcmVuYS5jLTY3OC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9Njg3PUJURl9JRF9MSVNUX1NJTkdMRShicGZfYXJlbmFfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX2FyZW5hKVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2ODg6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFyZW5hX21hcF9vcHMgPSB7XFxua2VybmVsL2JwZi9hcmVuYS5jLTY4OS1cXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDEwPXU2NCBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8oc3RydWN0IGJwZl90aW1lZF9tYXlfZ290byAqcClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MjgtLyogZm9yIGNvbmZpZ3Mgd2l0aG91dCBNTVUgb3IgMzItYml0ICovXFxua2VybmVsL2JwZi9jb3JlLmM6MzQyOTpfX3dlYWsgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFyZW5hX21hcF9vcHM7XFxua2VybmVsL2JwZi9jb3JlLmMtMzQzMC1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfdXNlcl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDk6NDU6MjkuMDI5OTA5MzA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTU2NjIyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNYXAgT3BlcmF0aW9ucyBhbmQgQWxsb2NhdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiBhIGZldyBjcnVjaWFsIHBvaW50cy4gVGhlIGBhcmVuYV9tYXBfb3BzYCBzdHJ1Y3R1cmUsIHdoaWNoIEkgc2VlIGlzIHVzZWQgZm9yIHRoZSBtYXAgb3BlcmF0aW9ucywgaXMgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYy4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBub3RlLiBOb3csIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBhcHBlYXIgdG8gYmUgYGFyZW5hX3ZtX2ZhdWx0YCBhbmQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLiBgYXJlbmFfdm1fZmF1bHRgIGlzIHByb2JhYmx5IG5vdCB0aGUgbWFpbiBpc3N1ZSBoZXJlLiBUaGUgc2Vjb25kIGZ1bmN0aW9uLCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgLCBpcyBhbHNvIG5vbi1zdGF0aWM7IGFuZCBzZWVtcyB0byBiZSBleHBvcnRlZCwgb3IgYXQgbGVhc3QgaXQgaXNuJ3Qgc3RhdGljLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIHZpc2libGU/XCIgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBUaGF0J3MgbXkgbmV4dCBzdGVwLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBjb25maXJtIGl0cyB2aXNpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU2NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQ1OjMzLjIyNTU3NTM4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxMTk3NDQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9Mjc4NT1pbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjc4Ni1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6Mjc4NzpzdHJ1Y3QgcGFnZSAqYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI3ODgtI2lmZGVmIENPTkZJR19NRU1DR1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTQ3OT1zdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01MDMtXFx0XFx0YnBmX21hcF9tZW1jZ19lbnRlcihcXHUwMDI2YXJlbmEtXFx1MDAzZW1hcCwgXFx1MDAyNm9sZF9tZW1jZywgXFx1MDAyNm5ld19tZW1jZyk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjUwNDpcXHRcXHRuZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTA1LVxcdFxcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MTU9aW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NS0gKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDY6c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NTozNy40Mzc1NTUwOTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzMTg4Mjg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIE1hcCBBbGxvY2F0aW9uIGFuZCBWTSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGlua2luZywgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzbid0IHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBgYXJlbmFfdm1fZmF1bHRgIGlzIHN0YXRpYywgYnV0IGhvbGQgb24uLi4gaXQncyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBhcmVuYV92bV9vcHNgLiBTaW5jZSBpdCdzIGEgZnVuY3Rpb24gcG9pbnRlciBpdCdzIHByb2JhYmx5IG5vdCBpbmxpbmVkLiBUaGF0J3MgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy5cblxuV2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGtlZXAgdGhlc2Ugc3RyYWlnaHQuIGBhcmVuYV9tYXBfb3BzYCBoYW5kbGVzIHRoZSBtYXAgb3BlcmF0aW9ucyBhbmQgYGFyZW5hX3ZtX29wc2AgaGFuZGxlcyB0aGUgVk0gb3BlcmF0aW9ucy4gUmlnaHQuIE9rYXksIGxldCdzIHJlZm9jdXMuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGFyZW5hX3ZtX29wc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGF0J3Mgd29ya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NTo0MS45Njk0NDE5NThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjkxNTc2NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFfdm1fb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz00Nzk9c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1OTU6c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhcmVuYV92bV9vcHMgPSB7XFxua2VybmVsL2JwZi9hcmVuYS5jLTU5Ni1cXHQub3BlblxcdFxcdD0gYXJlbmFfdm1fb3BlbixcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz02Mzc9c3RhdGljIGludCBhcmVuYV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02NzItXFx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlRDT1BZKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjczOlxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNmFyZW5hX3ZtX29wcztcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjc0LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NTo0Ni4xMzg2MDUzNjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4NTAxMTM0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgZm9yIFNlbGVjdGluZyBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBmb3IgdGhlIGJlc3QgZW50cnkgcG9pbnRzIGZvciBTeXprYWxsZXIsIGdpdmVuIHRoZSBjb25zdHJhaW50cy4gYGFyZW5hX3ZtX2ZhdWx0YCBpcyBhIGNhbGxiYWNrLCBzbyBpdCdzIG5vdCBpbmxpbmVkLCB3aGljaCBpcyBnb29kLiBUaGF0IGdpdmVzIGl0IGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIEl0IGlzIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGNvdWxkIGJlIGFuIGlzc3VlIGZvciBTeXprYWxsZXIgaWYgaXQgY2FuJ3QgcGFyc2Uga2FsbHN5bXMuIEhvd2V2ZXIsIHRoZSBkb2N1bWVudGF0aW9uIHN0cmVzc2VzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCBzbyBpdCBzaG91bGQgYmUgZWFzaWx5IHRhcmdldGFibGUuXG5cbkFuZCBob2xkIG9uLi4uIGFyZW4ndCB3ZSBmb2N1c2luZyBvbiBzeXNjYWxscz8gUmlnaHQsIFN5emthbGxlciB0YXJnZXRzIHN5c2NhbGxzLiBUaGUgQlBGIHN5c2NhbGwgKmlzKiB0aGUgZW50cnkgcG9pbnQhIFNvLCB0aGUgZ29hbCBpcyB0byB0YXJnZXQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhcmUgbW9kaWZpZWQgYW5kIHJlYWNoYWJsZSBmcm9tIGl0LlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBhdmFpbGFibGUgaW5mb3JtYXRpb24sIEknbGwgaW5jbHVkZSBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgYW5kIGBhcmVuYV92bV9mYXVsdGAgaW4gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBUaGV5IGFyZSBub3QgaW5saW5lZC5cblxuTm93LCBsZXQncyBjb25zaWRlciBDT05GSUcgb3B0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBtdXN0LWhhdmUsIG9idmlvdXNseS4gVGhlIGBhcmVuYS5vYCBtb2R1bGUgc3BlY2lmaWNhbGx5IHNlZW1zIHRvIHJlcXVpcmUgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCB0byBiZSBidWlsdC4gSXQncyB0aW1lIHRvIGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gY29uZmlybSBhbGwgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MDYsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDk6NDU6NTIuMTIzNjE5OTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzg3MzM4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xOT1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYz03MT1zdGF0aWMgaW50IHNjeF9hcmVuYV9ncm93KHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgdTMyIHBhZ2VfY250KVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg2LVxcdHVhZGRyMzIgPSAodTMyKSh1bnNpZ25lZCBsb25nKXA7XFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjg3OlxcdC8qIGFyZW5hLm8sIHdoaWNoIGRlZmluZXMgdGhlc2UsIGlzIGJ1aWx0IG9ubHkgb24gTU1VIFxcdTAwMjZcXHUwMDI2IDY0QklUICovXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg4LSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDY1PXN0YXRpYyBpbnQgc2N4X2FyZW5hX3NjYW5fcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNjktXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDcwOlxcdC8qIGFyZW5hLm8sIHdoaWNoIGRlZmluZXMgdGhlc2UsIGlzIGJ1aWx0IG9ubHkgb24gTU1VIFxcdTAwMjZcXHUwMDI2IDY0QklUICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDcxLSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlPTk5Mz0kKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm86ICQoT1VUUFVUKS94ZHBfbGJfYmVuY2guc2tlbC5oIGJlbmNoX2JwZl90aW1pbmcuaFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZTo5OTQ6JChPVVRQVVQpL2JlbmNoX2xpYmFyZW5hLm86ICQoTElCQVJFTkFfQkVOQ0hfU0tFTClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtOTk1LSQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm86IGJlbmNoX2JwZl90aW1pbmcuaFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlPTk5OD0kKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXFxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZS0xMDIxLVxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm8gXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZToxMDIyOlxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubyBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTEwMjMtXFx0XFx0ICQoT1VUUFVUKS91c2R0XzEubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQ1OjU2LjUwMjM1OTUxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTM4NzU3ODk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBSZXF1aXJlZCBLZXJuZWwgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIGtub3cgdGhhdCBmb3Igc3l6a2FsbGVyIHRhcmdldHMgKGxpa2UgeDg2XzY0IGFuZCBhcm02NCksIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAgYXJlIHByZXR0eSBtdWNoIGdpdmVucywgc28gdGhvc2UgYXJlIGFscmVhZHkgYXNzdW1lZC4gVGhlIGNydWNpYWwgcGFydCBpcyBmaWd1cmluZyBvdXQgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBub3cgbmVjZXNzYXJ5IGZvciB0aGlzIHBhdGNoLlxuXG5UaGUgcGF0Y2ggbWVudGlvbnMgYENPTkZJR19NRU1DR2AgaW4gYGluY2x1ZGUvbGludXgvYnBmLmhgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYnBmX21hcF9tZW1jZ19lbnRlcmAgZnVuY3Rpb24uIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoYXQgYENPTkZJR19NRU1DR2AgbWlnaHQgb25seSBjaGFuZ2UgYmVoYXZpb3Igd2l0aG91dCBiZWluZyBzdHJpY3RseSByZXF1aXJlZC4gQnV0LCB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gZXhwbGljaXRseSBoaWdobGlnaHRzIHRoZSB1c2Ugb2YgYSBcInNsZWVwYWJsZSBhbGxvY2F0b3JcIiB0byBhbGxvdyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byByZWNsYWltIG1lbW9yeSBhbmQgcnVuLCB3aGljaCB0aGUgZXhpc3Rpbmcgbm9uLWJsb2NraW5nIGFsbG9jYXRvciBjb3VsZG4ndC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBgQ09ORklHX01FTUNHYCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBiZWluZyBtYWRlLiBUaGVyZWZvcmUsIGBNRU1DR2AgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gVGhlIG90aGVyIG9idmlvdXMgb25lIGlzIGBCUEZfU1lTQ0FMTGAsIGJlY2F1c2UgdGhlIGNvZGUgbWFrZXMgdXNlIG9mIHRoZSBCUEYgc3lzdGVtIGNhbGwuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgYXQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLiBUaGUgY29kZSBzaG93cyBgbWlnaHRfc2xlZXAoKWAgYW5kIHVzZXMgYGFsbG9jX3BhZ2VzX25vZGVgLCB3aGljaCBjb25maXJtcyB0aGlzIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZTogYEJQRl9TWVNDQUxMYCBhbmQgYE1FTUNHYC5cblxuTXkgZm9jdXMgaW4gdGhlIGNvZGUgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBmdW5jdGlvbiBhbmQgYWxzbyBgYXJlbmFfdm1fZmF1bHRgLiBEb3VibGUtY2hlY2tpbmcgdGhhdCB0aGUgc2Vjb25kIGZ1bmN0aW9uIG5hbWUgaXMgY29ycmVjdCwgSSd2ZSBjb25maXJtZWQgdGhhdCBgYXJlbmFfdm1fZmF1bHRgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBuYW1lIGFzIHNob3duIGluIHRoZSBkZWZpbml0aW9uIGBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilgLlxuXG5JIGFsc28gY2hlY2tlZCBgYnBmX21hcF9hbGxvY19wYWdlc2AgZm9yIG90aGVyIHJlcXVpcmVkIHN5bWJvbHMuIFRoZSBjaGFuZ2UgdG8gdXNlIGBCUEZfUEFHRV9HRlBgIGlzIGEgbWlub3IgaW1wbGVtZW50YXRpb24gZGV0YWlsLlxuXG5TbyBpdCdzIGBhcmVuYV92bV9mYXVsdGAgYW5kIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCB0aGF0IHJlcHJlc2VudCB0aGUgbWVhdCBvZiB0aGlzIGNvZGUgY2hhbmdlLiBJJ20gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwNTMsIk91dHB1dFRva2VucyI6MTQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQ2OjA3Ljg4OTk0MjMyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NjY4MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmVuYV92bV9mYXVsdFwiLFxuICAgIFwiYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYXMgKGBhcmVuYV92bV9mYXVsdGApIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKSBvdXRzaWRlIG9mIHRoZSBzcGlubG9jay4gVGhpcyBhbGxvd3MgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG1lbW9yeSBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBwcmV2ZW50aW5nIHNwdXJpb3VzIFNJR0JVUy9TSUdTRUdWIGVycm9ycy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjaGFuZ2VzIGluIHRoZSBCUEYgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyZW5hX3ZtX2ZhdWx0XCIsXG4gICAgXCJicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gdXNlIGEgc2xlZXBhYmxlIHBhZ2UgYWxsb2NhdG9yIChgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWApIG91dHNpZGUgb2YgdGhlIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbWVtb3J5IGxpbWl0cyBhcmUgZXhjZWVkZWQsIHByZXZlbnRpbmcgc3B1cmlvdXMgU0lHQlVTL1NJR1NFR1YgZXJyb3JzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGNoYW5nZXMgaW4gdGhlIEJQRiBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQ2OjA4LjA5OTYxODg0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNDczMzcxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NjowOC4xMDA1NTAxMzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQyNDY0MDA1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJlbmEgcGFnZSBmYXVsdCBoYW5kbGVyIChgYXJlbmFfdm1fZmF1bHRgKSB0byBwcmVhbGxvY2F0ZSBwYWdlcyB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgb3V0c2lkZSBvZiBhIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbmVjZXNzYXJ5LiBUaGUgbmV3IGFsbG9jYXRvciBleHBsaWNpdGx5IHVzZXMgdGhlIGBfX0dGUF9aRVJPYCBmbGFnICh2aWEgYEJQRl9QQUdFX0dGUGApLCBlbnN1cmluZyB0aGF0IGFsbCBuZXdseSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIG1hcHBlZCBpbnRvIHRoZSBhcmVuYS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNiMzIzZTM1ZmNjYzdlOGNkNzE2ZmEyNzc4YjA2NDM5N2M3MzdlYjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwOTo0MTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCBiM2NkMjhkOWUzYjU1Li5jODE3Yzk5ZDI5MDY2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTI3ODQsNiArMjc4NCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKTtcbiBcbiBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XG4rc3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCk7XG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIHZvaWQgYnBmX21hcF9tZW1jZ19lbnRlcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm9sZF9tZW1jZyxcbiBcdFx0XHQgc3RydWN0IG1lbV9jZ3JvdXAgKipuZXdfbWVtY2cpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuaW5kZXggN2I2ODQ3MjAwYjQzMS4uZmE0NjJhMGZmMWFkNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuKysrIGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNDgxLDcgKzQ4MSw4IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnO1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZSwgKm5ld19wYWdlID0gTlVMTDtcbitcdHZtX2ZhdWx0X3QgZmF1bHRfcmV0O1xuIFx0bG9uZyBrYmFzZSwga2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHJldDtcbkBAIC00ODksNTkgKzQ5MCwxMDYgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRrYmFzZSA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XG4gXHRrYWRkciA9IGtiYXNlICsgKHUzMikodm1mLVx1MDAzZWFkZHJlc3MpO1xuIFxuLVx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSlcbitcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilrYWRkcik7XG4rXHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkpIHtcbitcdFx0LypcbitcdFx0ICogUHJlYWxsb2NhdGUgb3V0c2lkZSB0aGUgbG9jayB3aXRoIGEgc2xlZXBhYmxlIGFsbG9jYXRvciBzbyBpdFxuK1x0XHQgKiBjYW4gcmVjbGFpbSBhbmQgcnVuIHRoZSBtZW1jZyBPT00ga2lsbGVyLCB3aGljaCB0aGVcbitcdFx0ICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciB1bmRlciBhcmVuYS1cdTAwM2VzcGlubG9jayBjYW5ub3QuIEEgTlVMTFxuK1x0XHQgKiByZXR1cm4gaXMgbm9uLXJlY292ZXJhYmxlLCBzbyBmYWlsIHdpdGggVk1fRkFVTFRfU0lHQlVTO1xuK1x0XHQgKiBWTV9GQVVMVF9PT00gd291bGQgYmUgcmV0cmllZCBieSB0aGUgZmF1bHQgcGF0aCBhbmQgY2FuXG4rXHRcdCAqIGxpdmVsb2NrIHdoZW4gdGhlIGNoYXJnZWQgbWVtY2cgaXMgbm90IHRoZSBmYXVsdGluZyB0YXNrJ3MuXG4rXHRcdCAqL1xuK1x0XHRicGZfbWFwX21lbWNnX2VudGVyKFx1MDAyNmFyZW5hLVx1MDAzZW1hcCwgXHUwMDI2b2xkX21lbWNnLCBcdTAwMjZuZXdfbWVtY2cpO1xuK1x0XHRuZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTtcbitcdFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbitcdFx0aWYgKCFuZXdfcGFnZSlcbitcdFx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuK1x0fVxuK1xuK1x0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24ndFxuIFx0XHQgKiByZXR1cm4gVk1fRkFVTFRfUkVUUlk6IHRoaXMgaGFuZGxlciBuZXZlciB0b29rIG1tYXBfbG9jaywgYnV0XG4gXHRcdCAqIHRoZSBmYXVsdCBwYXRoIHdvdWxkIHJlLXRha2UgaXQgb24gcmV0cnkgYW5kIGRlYWRsb2NrLiBGYWlsLlxuIFx0XHQgKi9cbitcdFx0aWYgKG5ld19wYWdlKVxuK1x0XHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiBcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbitcdH1cbiBcbiBcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilrYWRkcik7XG4gXHRpZiAocGFnZSkge1xuLVx0XHRpZiAocGFnZSA9PSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpXG4tXHRcdFx0LyogQlBGIHRyaWdnZXJlZCBzY3JhdGNoIGhlcmU7IGRvbid0IGxhenktYWxsb2Mgb3ZlciBpdCAqL1xuLVx0XHRcdGdvdG8gb3V0X3NpZ3NlZ3Y7XG4rXHRcdGlmIChwYWdlID09IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQSBzY3JhdGNoIHBhZ2UgbWFya3MgYSBob2xlLiBTZWdmYXVsdCBvbmx5IGlmIHRoZSB1c2VyXG4rXHRcdFx0ICogYXNrZWQgZm9yIGl0OyBvdGhlcndpc2Ugd2UgY291bGQgbGF6eS1hbGxvY2F0ZSBidXRcbitcdFx0XHQgKiBjaG9vc2Ugbm90IHRvIG92ZXIgYSBob2xlLCBzbyByZXBvcnQgYSBidXMgZXJyb3IuXG4rXHRcdFx0ICovXG4rXHRcdFx0ZmF1bHRfcmV0ID0gKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpID9cbitcdFx0XHRcdCAgICBWTV9GQVVMVF9TSUdTRUdWIDogVk1fRkFVTFRfU0lHQlVTO1xuK1x0XHRcdGdvdG8gb3V0X2Vycl9sb2NrZWQ7XG4rXHRcdH1cbiBcdFx0LyogYWxyZWFkeSBoYXZlIGEgcGFnZSB2bWFwLWVkICovXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0aWYgKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpIHtcbitcdFx0LyogVXNlciBzcGFjZSByZXF1ZXN0ZWQgdG8gc2VnZmF1bHQgd2hlbiBwYWdlIGlzIG5vdCBhbGxvY2F0ZWQgYnkgYnBmIHByb2cgKi9cbitcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHU0VHVjtcbitcdFx0Z290byBvdXRfZXJyX2xvY2tlZDtcbitcdH1cbitcbiBcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4gXG4tXHRpZiAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcbi1cdFx0LyogVXNlciBzcGFjZSByZXF1ZXN0ZWQgdG8gc2VnZmF1bHQgd2hlbiBwYWdlIGlzIG5vdCBhbGxvY2F0ZWQgYnkgYnBmIHByb2cgKi9cbi1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbitcdGlmICghbmV3X3BhZ2UpIHtcbitcdFx0LypcbitcdFx0ICogVmVyeSByYXJlIHJhY2U6IHRoZSBicGYgcHJvZ3JhbSBoYWQgYWxsb2NhdGVkIGEgcGFnZSBoZXJlLCBzb1xuK1x0XHQgKiB0aGUgbG9ja2xlc3MgcHJvYmUgc2F3IGl0IGFuZCB3ZSBza2lwcGVkIHByZWFsbG9jYXRpb24sIGJ1dCBpdFxuK1x0XHQgKiBmcmVlZCB0aGUgcGFnZSBiZWZvcmUgd2UgdG9vayB0aGUgbG9jay4gTm93IHdlIGRvIG5lZWQgb25lO1xuK1x0XHQgKiBzbGVlcGluZyBpcyBub3QgYWxsb3dlZCBoZXJlLCBzbyBmYWxsIGJhY2sgdG8gdGhlIG5vbi1ibG9ja2luZ1xuK1x0XHQgKiBhbGxvY2F0b3IgYW5kIGdpdmUgdXAgaWYgaXQgZmFpbHMuXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgbWFwLVx1MDAzZW51bWFfbm9kZSwgMSwgXHUwMDI2bmV3X3BhZ2UpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuK1x0XHRcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XG4rXHRcdH1cbitcdH1cbiBcbiBcdHJldCA9IHJhbmdlX3RyZWVfY2xlYXIoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHZtZi1cdTAwM2VwZ29mZiwgMSk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuLVxuLVx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFx1MDAyNnBhZ2UsIC5pID0gMCB9O1xuLVx0LyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi9cbi1cdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsIFx1MDAyNnBhZ2UpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbitcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuK1x0XHRnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnO1xuIFx0fVxuK1x0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFx1MDAyNm5ld19wYWdlLCAuaSA9IDAgfTtcbiBcbiBcdHJldCA9IGFwcGx5X3RvX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwga2FkZHIsIFBBR0VfU0laRSwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBcdTAwMjZkYXRhKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHZtZi1cdTAwM2VwZ29mZiwgMSk7XG4tXHRcdGZyZWVfcGFnZXNfbm9sb2NrKHBhZ2UsIDApO1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuK1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XG4gXHR9XG4gXHRmbHVzaF92bWFwX2NhY2hlKGthZGRyLCBQQUdFX1NJWkUpO1xuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbitcdC8qIG5ld19wYWdlIHdhcyBjb25zdW1lZCAqL1xuK1x0cGFnZSA9IG5ld19wYWdlO1xuK1x0bmV3X3BhZ2UgPSBOVUxMO1xuIG91dDpcbiBcdHBhZ2VfcmVmX2FkZChwYWdlLCAxKTtcbiBcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuK1x0aWYgKG5ld19wYWdlKVxuK1x0XHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XG4gXHR2bWYtXHUwMDNlcGFnZSA9IHBhZ2U7XG4gXHRyZXR1cm4gMDtcbi1vdXRfc2lnc2Vndl9tZW1jZzpcbitcbitvdXRfZXJyX2xvY2tlZF9tZW1jZzpcbiBcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4tb3V0X3NpZ3NlZ3Y6XG4rb3V0X2Vycl9sb2NrZWQ6XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbi1cdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xuK1x0aWYgKG5ld19wYWdlKVxuK1x0XHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XG4rXHRyZXR1cm4gZmF1bHRfcmV0O1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtNjAyLDE1ICs2MDIsMTQgQEAgc3RhdGljIGJvb2wgY2FuX2FsbG9jX3BhZ2VzKHZvaWQpXG4gXHRcdCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKTtcbiB9XG4gXG4rI2RlZmluZSBCUEZfUEFHRV9HRlAgKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTilcbitcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fYnBmX2FsbG9jX3BhZ2UoaW50IG5pZClcbiB7XG4gXHRpZiAoIWNhbl9hbGxvY19wYWdlcygpKVxuIFx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9sb2NrKF9fR0ZQX0FDQ09VTlQsIG5pZCwgMCk7XG4gXG4tXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsXG4tXHRcdFx0XHRHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX0FDQ09VTlRcbi1cdFx0XHRcdHwgX19HRlBfTk9XQVJOLFxuLVx0XHRcdFx0MCk7XG4rXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEJQRl9QQUdFX0dGUCwgMCk7XG4gfVxuIFxuIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG5AQCAtNjM2LDYgKzYzNSwyMCBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLypcbisgKiBGb3IgY2FsbGVycyB0aGF0IGtub3cgdGhleSBydW4gaW4gYSBzbGVlcGFibGUgY29udGV4dCwgZS5nLiBhIHVzZXIgcGFnZVxuKyAqIGZhdWx0IGhhbmRsZXIuIGNhbl9hbGxvY19wYWdlcygpIGlzIGEgY29uc2VydmF0aXZlIGd1ZXNzIG1hZGUgZm9yIEJQRlxuKyAqIHByb2dyYW0gY29udGV4dCAtIG5vdGFibHkgaXQgaXMgYWx3YXlzIGZhbHNlIG9uIFBSRUVNUFRfUlQgLSBzbyBnb2luZ1xuKyAqIHRocm91Z2ggYnBmX21hcF9hbGxvY19wYWdlcygpIHRoZXJlIHdvdWxkIG5lZWRsZXNzbHkgcGljayB0aGVcbisgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yLCB3aGljaCBuZXZlciByZWNsYWltcyBhbmQgbmV2ZXIgZW5nYWdlcyB0aGUgT09NXG4rICogbWFjaGluZXJ5LlxuKyAqL1xuK3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4re1xuK1x0bWlnaHRfc2xlZXAoKTtcbitcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG1hcC1cdTAwM2VudW1hX25vZGUsIEJQRl9QQUdFX0dGUCwgMCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXG5pbmRleCA0NWNkMGI0NzlmZTM1Li40MTgzZmY2MTUwYzI4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXG5AQCAtMTg4LDYgKzE4OCw3MyBAQCBpbnQgd3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4gXHRyZXR1cm4gX193cml0ZV9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmKTtcbiB9XG4gXG4rc3RhdGljIGludCBfX3JlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqY2dyb3VwX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4rXHRcdFx0ICAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdGNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICsgMV07XG4rXHRzc2l6ZV90IGdvdDtcbitcdGludCBmZDtcbitcbitcdHNucHJpbnRmKGZpbGVfcGF0aCwgc2l6ZW9mKGZpbGVfcGF0aCksIFwiJXMvJXNcIiwgY2dyb3VwX3BhdGgsIGZpbGUpO1xuK1x0ZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4rXHRcdGxvZ19lcnIoXCJPcGVuaW5nICVzXCIsIGZpbGVfcGF0aCk7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0Z290ID0gcmVhZChmZCwgYnVmLCBsZW4gLSAxKTtcbitcdGlmIChnb3QgXHUwMDNjIDApIHtcbitcdFx0bG9nX2VycihcIlJlYWRpbmcgJXNcIiwgZmlsZV9wYXRoKTtcbitcdFx0Y2xvc2UoZmQpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcdGJ1Zltnb3RdID0gJ1xcMCc7XG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogcmVhZF9jZ3JvdXBfZmlsZSgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGVcbisgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpclxuKyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb21cbisgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzXG4rICogQGxlbjogU2l6ZSBvZiBAYnVmXG4rICpcbisgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAncyBkaXJlY3RvcnkuXG4rICpcbisgKiBJZiBzdWNjZXNzZnVsLCAwIGlzIHJldHVybmVkLlxuKyAqL1xuK2ludCByZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4rXHRcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdGNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07XG4rXG4rXHRmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpO1xuK1x0cmV0dXJuIF9fcmVhZF9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmLCBsZW4pO1xuK31cbitcbisvKipcbisgKiByZWFkX2Nncm91cF9maWxlX3BhcmVudCgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGUgaW4gdGhlIHBhcmVudCBwcm9jZXNzXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtkaXJcbisgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IHByb2Nlc3Mgd29ya2RpclxuKyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb21cbisgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzXG4rICogQGxlbjogU2l6ZSBvZiBAYnVmXG4rICpcbisgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAncyBkaXJlY3RvcnkgdW5kZXIgdGhlIHBhcmVudCBwcm9jZXNzXG4rICogd29ya2Rpci5cbisgKlxuKyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuXG4rICovXG4raW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4rXHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xuK1xuK1x0Zm9ybWF0X3BhcmVudF9jZ3JvdXBfcGF0aChjZ3JvdXBfcGF0aCwgcmVsYXRpdmVfcGF0aCk7XG4rXHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XG4rfVxuK1xuIC8qKlxuICAqIHNldHVwX2Nncm91cF9lbnZpcm9ubWVudCgpIC0gU2V0dXAgdGhlIGNncm91cCBlbnZpcm9ubWVudFxuICAqXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaFxuaW5kZXggMzg1NzMwNGJlODc0MS4uZDQyZDJlMTMwNDRlNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaFxuQEAgLTE1LDYgKzE1LDEwIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuIFx0XHQgICAgICBjb25zdCBjaGFyICpidWYpO1xuIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XG4raW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuK2ludCByZWFkX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuK1x0XHRcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuIGludCBjZ3JvdXBfc2V0dXBfYW5kX2pvaW4oY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7XG4gaW50IGdldF9yb290X2Nncm91cCh2b2lkKTtcbiBpbnQgY3JlYXRlX2FuZF9nZXRfY2dyb3VwKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzU3Yjk4NDk0Y2ZhYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY1xuQEAgLTAsMCArMSwxNTggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdXNlci5oXHUwMDNlXG4rI2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpXG4rI2VuZGlmXG4rXG4rI2luY2x1ZGUgXCJjZ3JvdXBfaGVscGVycy5oXCJcbisjaW5jbHVkZSBcImFyZW5hX21lbWNnLnNrZWwuaFwiXG4rXG4rI2RlZmluZSBDR19QQVRIXHRcdFwiL2FyZW5hX21lbWNnXCJcbitcbisvKiBCdWRnZXQgdGhlIGFyZW5hIGdldHMgb24gdG9wIG9mIHdoYXRldmVyIGlzIGFscmVhZHkgY2hhcmdlZCBhZnRlciBsb2FkLiAqL1xuKyNkZWZpbmUgQVJFTkFfQlVER0VUXHQoNjQgKiAxMDI0ICogMTAyNClcbitcbitzdGF0aWMgdm9pZCBkdW1wX21lbWNnKGludCAoKnJkKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpKVxuK3tcbitcdGNoYXIgYnVmWzUxMl07XG4rXG4rXHQvKlxuK1x0ICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5XG4rXHQgKiBjYXJyaWVzIGluZm9ybWF0aW9uIHdoZW4gZHVtcGVkIGZyb20gdGhlIGxpdmUgY2hpbGQ7IG1lbW9yeS5wZWFrIGFuZFxuK1x0ICogbWVtb3J5LmV2ZW50cyBzdXJ2aXZlIHRoZSBjaGlsZCBhbmQgdGVsbCB0aGUgc3RvcnkgZWl0aGVyIHdheS5cbitcdCAqL1xuK1x0aWYgKCFyZChDR19QQVRILCBcIm1lbW9yeS5jdXJyZW50XCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtZW1vcnkuY3VycmVudDogJXNcIiwgYnVmKTtcbitcdGlmICghcmQoQ0dfUEFUSCwgXCJtZW1vcnkubWF4XCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtZW1vcnkubWF4OiAlc1wiLCBidWYpO1xuK1x0aWYgKCFyZChDR19QQVRILCBcIm1lbW9yeS5wZWFrXCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtZW1vcnkucGVhazogJXNcIiwgYnVmKTtcbitcdGlmICghcmQoQ0dfUEFUSCwgXCJtZW1vcnkuZXZlbnRzXCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtZW1vcnkuZXZlbnRzOlxcbiVzXCIsIGJ1Zik7XG4rXHRmZmx1c2goc3RkZXJyKTtcbit9XG4rXG4rLyogUmVhZCBvbmUga2V5IGZyb20gYSBmbGF0IGtleWVkIGNncm91cCBmaWxlLCBlLmcuIFwib29tX2tpbGxcIiBpbiBtZW1vcnkuZXZlbnRzLiAqL1xuK3N0YXRpYyBsb25nIGNnX3JlYWRfa2V5KGNvbnN0IGNoYXIgKmNnLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICprZXkpXG4re1xuK1x0Y2hhciBidWZbNTEyXSwgKnA7XG4rXG4rXHRpZiAocmVhZF9jZ3JvdXBfZmlsZShjZywgZmlsZSwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdHJldHVybiAtMTtcbitcdHAgPSBzdHJzdHIoYnVmLCBrZXkpO1xuK1x0aWYgKCFwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXR1cm4gc3RydG9sKHAgKyBzdHJsZW4oa2V5KSwgTlVMTCwgMTApO1xuK31cbitcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbWNnKHZvaWQpXG4re1xuK1x0aW50IGNncm91cF9mZCA9IC0xLCBzdGF0dXMsIGVycjtcbitcdGNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7XG4rXHRjaGFyIGJ1Zls2NF07XG4rXHRwaWRfdCBwaWQ7XG4rXG4rXHRlcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGNncm91cF9mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChDR19QQVRIKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKGNncm91cF9mZCwgXCJjcmVhdGVfYW5kX2dldF9jZ3JvdXBcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogTm8gbWVtb3J5IGNvbnRyb2xsZXIgLVx1MDAzZSBub3RoaW5nIHRvIHRlc3QuICovXG4rXHRpZiAocmVhZF9jZ3JvdXBfZmlsZShDR19QQVRILCBcIm1lbW9yeS5jdXJyZW50XCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIiVzOlNLSVA6bm8gbWVtb3J5IGNvbnRyb2xsZXJcXG5cIiwgX19mdW5jX18pO1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcImZvcmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdHN0cnVjdCBhcmVuYV9tZW1jZyAqY3NrZWw7XG4rXHRcdF9fdTMyIGksIG5wYWdlcztcbitcdFx0Y2hhciAqYmFzZTtcbitcdFx0c2l6ZV90IHN6O1xuK1x0XHRsb25nIGN1cjtcbitcbitcdFx0LypcbitcdFx0ICogRG8gZXZlcnl0aGluZyBmcm9tIHRoZSBjaGlsZDogdGhlIGFyZW5hIHZtYSBpcyBWTV9ET05UQ09QWSBzb1xuK1x0XHQgKiBpdCB3b3VsZCBub3Qgc3Vydml2ZSBmb3JrKCksIG9ubHkgdGhlIGNoaWxkIHNob3VsZCBiZSB1bmRlciB0aGVcbitcdFx0ICogbGltaXQgc28gdGhhdCBhIG1lbWNnIE9PTSBjYW5ub3QgcGljayB0ZXN0X3Byb2dzLCBhbmQgYSBtYXAgaXNcbitcdFx0ICogY2hhcmdlZCB0byB0aGUgbWVtY2cgb2YgdGhlIHRhc2sgdGhhdCBjcmVhdGVzIGl0IC0gc28gam9pblxuK1x0XHQgKiBiZWZvcmUgbG9hZC4gVGhlIGNncm91cCB3b3JrIGRpciBiZWxvbmdzIHRvIHRoZSBwYXJlbnQgdGhhdCBzZXRcbitcdFx0ICogdGhlIGVudmlyb25tZW50IHVwLCBzbyByZWFjaCBpdCB3aXRoIHRoZSBfcGFyZW50KCkgaGVscGVycy5cbitcdFx0ICogRXJyb3JzIGFyZSByZXBvcnRlZCB0byB0aGUgcGFyZW50IHRocm91Z2ggdGhlIGV4aXQgY29kZSwgc2luY2VcbitcdFx0ICogQVNTRVJUXyogaW4gYSBmb3JrZWQgY2hpbGQgZG9lcyBub3QgcmVhY2ggaXQuXG4rXHRcdCAqL1xuK1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVkXCIsIGdldHBpZCgpKTtcbitcdFx0aWYgKHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcImNncm91cC5wcm9jc1wiLCBidWYpKVxuK1x0XHRcdF9leGl0KDIpO1xuK1xuK1x0XHRjc2tlbCA9IGFyZW5hX21lbWNnX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRcdGlmICghY3NrZWwpXG4rXHRcdFx0X2V4aXQoMyk7XG4rXG4rXHRcdGJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKGNza2VsLVx1MDAzZW1hcHMuYXJlbmEsIFx1MDAyNnN6KTtcbitcdFx0aWYgKCFiYXNlKVxuK1x0XHRcdF9leGl0KDQpO1xuK1x0XHRucGFnZXMgPSBicGZfbWFwX19tYXhfZW50cmllcyhjc2tlbC1cdTAwM2VtYXBzLmFyZW5hKTtcbitcbitcdFx0LypcbitcdFx0ICogQ2FwIG9ubHkgbm93LCBhZnRlciBsb2FkOiBldmVyeXRoaW5nIGJ1dCB0aGUgZmF1bHQtaW4gaXNcbitcdFx0ICogY2hhcmdlZCwgc28gdGhlIGFyZW5hIGdldHMgYSBmaXhlZCBidWRnZXQgcmVnYXJkbGVzcyBvZiB3aGF0XG4rXHRcdCAqIHRoZSBsb2FkIGl0c2VsZiBjb3N0LCBhbmQgdGhlIGxvYWQgY2FuIG5ldmVyIGhpdCB0aGUgbGltaXQuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXCJtZW1vcnkuY3VycmVudFwiLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0XHRfZXhpdCg1KTtcbitcdFx0Y3VyID0gc3RydG9sKGJ1ZiwgTlVMTCwgMTApO1xuK1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVsZFwiLCBjdXIgKyBBUkVOQV9CVURHRVQpO1xuK1x0XHRpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFwibWVtb3J5Lm1heFwiLCBidWYpKVxuK1x0XHRcdF9leGl0KDYpO1xuK1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IGkrKylcbitcdFx0XHRiYXNlWyhzaXplX3QpaSAqIHBzXSA9IDE7XG4rXHRcdC8qIEZhdWx0ZWQgZXZlcnl0aGluZyB3aXRob3V0IGR5aW5nOiBkdW1wIHdoeSAob25seSB1bmRlciAtdikuICovXG4rXHRcdGR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQpO1xuK1x0XHRfZXhpdCgwKTtcbitcdH1cbitcbitcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApLCBwaWQsIFwid2FpdHBpZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBBIG5vbi16ZXJvIGV4aXQgbWVhbnMgdGhlIGNoaWxkIGZhaWxlZCB0byBzZXQgdXA7IHRoZSBjb2RlIHNheXMgd2hlcmUuICovXG4rXHRpZiAoV0lGRVhJVEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykpIHtcbitcdFx0QVNTRVJUX09LKFdFWElUU1RBVFVTKHN0YXR1cyksIFwiY2hpbGQgc2V0dXBcIik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEZhdWx0aW5nIGEgdmFsaWQgYXJlbmEgYWRkcmVzcyB1bnRpbCBtZW1vcnkubWF4IGlzIGhpdCBtdXN0IG5vdCBsb29rXG4rXHQgKiBsaWtlIGFuIGludmFsaWQgYWNjZXNzLiBXaXRob3V0IHRoZSBmaXggdGhlIGZhdWx0IHBhdGggYWxsb2NhdGVkIHdpdGhcbitcdCAqIHRoZSBub24tYmxvY2tpbmcgYWxsb2NhdG9yLCB0dXJuZWQgaXRzIC1FTk9NRU0gaW50byBWTV9GQVVMVF9TSUdTRUdWLFxuK1x0ICogYW5kIHRoZSBjaGlsZCBkaWVkIHdpdGggU0lHU0VHViBvbiBhIHZhbGlkIGFkZHJlc3M7IG5vdyBpdCBpcyBoYW5kbGVkXG4rXHQgKiBieSB0aGUgbWVtY2cgT09NIHBhdGggaW5zdGVhZC4gQSBTSUdLSUxMIGFsb25lIHdvdWxkIG5vdCBwcm92ZSB0aGVcbitcdCAqIG1lbWNnIE9PTSBraWxsZXIgZGlkIGl0IChhIGdsb2JhbCBPT00gb3IgYW4gdW5yZWxhdGVkIGNyYXNoIGNvdWxkIGFsc29cbitcdCAqIGtpbGwgdGhlIGNoaWxkKSwgc28gY2hlY2sgbWVtb3J5LmV2ZW50cy5vb21fa2lsbCwgd2hpY2ggcmVjb3JkcyB0aGVcbitcdCAqIG1lbWNnIE9PTSBhbmQgc3Vydml2ZXMgdGhlIGNoaWxkLlxuK1x0ICovXG4rXHRpZiAoIUFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cyksIFwiY2hpbGQga2lsbGVkIGJ5IHNpZ25hbFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCBcIm1lbW9yeS5ldmVudHNcIiwgXCJvb21fa2lsbFwiKSwgMSxcbitcdFx0ICAgICAgIFwibWVtY2cgb29tX2tpbGxcIikpXG4rXHRcdGR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZSk7XG4rb3V0OlxuK1x0aWYgKGNncm91cF9mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGNncm91cF9mZCk7XG4rXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODgyNTljZmVhMDZiNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNcbkBAIC0wLDAgKzEsMjQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfYXJlbmFfY29tbW9uLmhcIlxuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbitcdF9fdWludChtYXhfZW50cmllcywgNTAwMDApOyAvKiBudW1iZXIgb2YgcGFnZXMgKi9cbisjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuK1x0X191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCBcdTAwM2NcdTAwM2MgMzIpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4rI2Vsc2VcbitcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuKyNlbmRpZlxuK30gYXJlbmEgU0VDKFwiLm1hcHNcIik7XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBub29wKHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDk6NDY6MDguMTAwNTUyMDY1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MjQ2MzcxOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50OiBCUEYgQXJlbmEgU2xlZXBhYmxlIEFsbG9jYXRvcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyB0b3VjaGluZyBga2VybmVsL2JwZi9hcmVuYS5jYCBhbmQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYWltaW5nIHRvIGludHJvZHVjZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKSBmb3IgQlBGIGFyZW5hIHBhZ2UgZmF1bHRzLiBUaGVyZSdzIGFsc28gYSBuZXcgc2VsZnRlc3QgZm9yIEJQRiBhcmVuYSBtZW1jZyBsaW1pdHMgYWRkZWQuIFRoZSBrZXkgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbj9cblxuRmlyc3QsIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGludHJvZHVjZWQuIEl0IGludGVybmFsbHkgY2FsbHMgYGFsbG9jX3BhZ2VzX25vZGVgLCBidXQgY3J1Y2lhbGx5LCBpdCB1c2VzIGBCUEZfUEFHRV9HRlBgLCB3aGljaCAqaW5jbHVkZXMqIGBfX0dGUF9aRVJPYC4gVGhpcyBtZWFucyB0aGUgbmV3bHkgYWxsb2NhdGVkIHBhZ2UgKndpbGwqIGJlIHplcm9lZC4gQWx3YXlzIGEgZ29vZCBzaWduLlxuXG5Ob3csIGludG8gYGtlcm5lbC9icGYvYXJlbmEuY2AuIGBhcmVuYV92bV9mYXVsdGAgaXMgbW9kaWZpZWQgdG8gdXNlIHRoaXMgbmV3IHNsZWVwYWJsZSBhbGxvY2F0b3IuIFRoZSByZWxldmFudCBjb2RlIHByZWFsbG9jYXRlcyBhIHBhZ2Ugb3V0c2lkZSB0aGUgc3BpbmxvY2sgdXNpbmcgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLiBJZiB0aGUgcHJlYWxsb2NhdGVkIHBhZ2UgaXNuJ3QgbmVlZGVkLCBpdCdzIGZyZWVkLiBJZiBpdCAqaXMqIHVzZWQsIGl0J3MgbWFwcGVkLiBBZ2Fpbiwgc2luY2UgYF9fR0ZQX1pFUk9gIGlzIGluIHRoZSBmbGFncywgdGhlIHBhZ2UgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB0byB6ZXJvIGJlZm9yZSBtYXBwaW5nLiBXZSdyZSBleHBsaWNpdGx5IGluaXRpYWxpemluZyB0aGUgbWVtb3J5LCBzbyBubyBpbW1lZGlhdGUgcmVkIGZsYWdzLlxuXG5UaGUgcHJlc2VuY2Ugb2YgbmV3IHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNgIGlzIGdvb2QsIGJ1dCBkb2Vzbid0IHN3YXkgb3VyIGRlY2lzaW9uIG9uIHRoaXMgS01TQU4gYXNzZXNzbWVudC5cblxuT2theSwgbGV0J3MgdmVyaWZ5IGFnYWluLiBJJ20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCwgd2hpY2ggZXhwbGljaXRseSBjYWxscyBgYWxsb2NfcGFnZXNfbm9kZWAgd2l0aCBgQlBGX1BBR0VfR0ZQYCwgYW5kICp0aGF0KiBpbmNsdWRlcyBgX19HRlBfWkVST2AuIEknbGwgZG8gdGhlIHNhbWUgZm9yIGBhcmVuYV92bV9mYXVsdGAsIGFuZCBJIHNlZSB0aGUgZXhhY3Qgc2FtZSB0aGluZzsgdGhhdCBhIHBhZ2UgYWxsb2NhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgZnJlZWQgaWYgaXQgaXMgbm90IHVzZWQsIGFuZCBpdCBpcyBhIHplcm9lZCBwYWdlIHdoZW4gaXQgaXMgbWFwcGVkLiBTbywgZXZlbiBpZiB0aGUgcGFnZSBpcyBtYXBwZWQsIGl0J3Mgc3RhcnRpbmcgZnJvbSBhIGtub3duIHN0YXRlLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoZSBuZXdseSBhbGxvY2F0ZWQgcGFnZXMgYXJlIHplcm9lZCwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBmaWVsZHMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIHRoZSBsb2dpYyBpcyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBtZW1jZyBhY2NvdW50aW5nLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBoZXJlIGFyZSByZWxhdGVkIHRvIGxvY2tpbmcsIG1lbW9yeSBsZWFrcywgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgYW5kIGFyZSB3ZWxsIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLlxuXG5UaGVyZWZvcmUsIGJhc2VkIG9uIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlLCBJIGNvbmNsdWRlIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJ3QganVzdGlmaWVkIGhlcmUuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGEgY29udGV4dCBzd2l0Y2ggZnJvbSBhIG5vbi1zbGVlcGFibGUgdG8gYSBzbGVlcGFibGUgbWVtb3J5IGFsbG9jYXRvciwgd2hpbGUgbWFpbnRhaW5pbmcgYSBzYWZlIGluaXRpYWwgbWVtb3J5IHN0YXRlIGFuZCBpcyB3ZWxsLWNvdmVyZWQgYnkgb3VyIGV4aXN0aW5nIGZ1enppbmcgYW5kIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIEknbSBjb21mb3J0YWJsZSB3aXRoIHRoaXMgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIxOSwiT3V0cHV0VG9rZW5zIjoyMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDk6NDY6MjIuMzQ2OTI4NDI0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIHBhZ2UgZmF1bHQgaGFuZGxlciAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gcHJlYWxsb2NhdGUgcGFnZXMgdXNpbmcgYSBzbGVlcGFibGUgYWxsb2NhdG9yIChgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWApIG91dHNpZGUgb2YgYSBzcGlubG9jay4gVGhpcyBhbGxvd3MgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG5lY2Vzc2FyeS4gVGhlIG5ldyBhbGxvY2F0b3IgZXhwbGljaXRseSB1c2VzIHRoZSBgX19HRlBfWkVST2AgZmxhZyAodmlhIGBCUEZfUEFHRV9HRlBgKSwgZW5zdXJpbmcgdGhhdCBhbGwgbmV3bHkgYWxsb2NhdGVkIHBhZ2VzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBtYXBwZWQgaW50byB0aGUgYXJlbmEuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIHBhZ2UgZmF1bHQgaGFuZGxlciAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gcHJlYWxsb2NhdGUgcGFnZXMgdXNpbmcgYSBzbGVlcGFibGUgYWxsb2NhdG9yIChgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWApIG91dHNpZGUgb2YgYSBzcGlubG9jay4gVGhpcyBhbGxvd3MgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG5lY2Vzc2FyeS4gVGhlIG5ldyBhbGxvY2F0b3IgZXhwbGljaXRseSB1c2VzIHRoZSBgX19HRlBfWkVST2AgZmxhZyAodmlhIGBCUEZfUEFHRV9HRlBgKSwgZW5zdXJpbmcgdGhhdCBhbGwgbmV3bHkgYWxsb2NhdGVkIHBhZ2VzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBtYXBwZWQgaW50byB0aGUgYXJlbmEuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2c77[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 09:23:44 +0000 UTC FinishedAt: 2026-08-25 09:46:23 +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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "MEMCG" ], "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": "5e289c5a4a526e870efac0ca658635c47138593a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "MEMCG" ], "series_id": "279b51ba-1933-4e0e-94ce-96fc97800a41" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "arena_vm_fault", "bpf_map_alloc_page_sleepable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJlbmFfdm1fZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJlbmEgcGFnZSBmYXVsdCBoYW5kbGVyIChgYXJlbmFfdm1fZmF1bHRgKSB0byBwcmVhbGxvY2F0ZSBwYWdlcyB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgb3V0c2lkZSBvZiBhIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbmVjZXNzYXJ5LiBUaGUgbmV3IGFsbG9jYXRvciBleHBsaWNpdGx5IHVzZXMgdGhlIGBfX0dGUF9aRVJPYCBmbGFnICh2aWEgYEJQRl9QQUdFX0dGUGApLCBlbnN1cmluZyB0aGF0IGFsbCBuZXdseSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIG1hcHBlZCBpbnRvIHRoZSBhcmVuYS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmFzIChgYXJlbmFfdm1fZmF1bHRgKSB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgb3V0c2lkZSBvZiB0aGUgc3BpbmxvY2suIFRoaXMgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBtZW1vcnkgbGltaXRzIGFyZSBleGNlZWRlZCwgcHJldmVudGluZyBzcHVyaW91cyBTSUdCVVMvU0lHU0VHViBlcnJvcnMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyBpbiB0aGUgQlBGIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNiMzIzZTM1ZmNjYzdlOGNkNzE2ZmEyNzc4YjA2NDM5N2M3MzdlYjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwOTo0MTo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggYjNjZDI4ZDllM2I1NS4uYzgxN2M5OWQyOTA2NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0yNzg0LDYgJiM0MzsyNzg0LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpO1xuIFxuIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcbiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCk7XG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIHZvaWQgYnBmX21hcF9tZW1jZ19lbnRlcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm9sZF9tZW1jZyxcbiBcdFx0XHQgc3RydWN0IG1lbV9jZ3JvdXAgKipuZXdfbWVtY2cpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuaW5kZXggN2I2ODQ3MjAwYjQzMS4uZmE0NjJhMGZmMWFkNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNDgxLDcgJiM0Mzs0ODEsOCBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlLCAqbmV3X3BhZ2UgPSBOVUxMO1xuJiM0MztcdHZtX2ZhdWx0X3QgZmF1bHRfcmV0O1xuIFx0bG9uZyBrYmFzZSwga2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHJldDtcbkBAIC00ODksNTkgJiM0Mzs0OTAsMTA2IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0a2Jhc2UgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xuIFx0a2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtXHUwMDNlYWRkcmVzcyk7XG4gXG4tXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxuJiM0MztcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilrYWRkcik7XG4mIzQzO1x0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUHJlYWxsb2NhdGUgb3V0c2lkZSB0aGUgbG9jayB3aXRoIGEgc2xlZXBhYmxlIGFsbG9jYXRvciBzbyBpdFxuJiM0MztcdFx0ICogY2FuIHJlY2xhaW0gYW5kIHJ1biB0aGUgbWVtY2cgT09NIGtpbGxlciwgd2hpY2ggdGhlXG4mIzQzO1x0XHQgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHVuZGVyIGFyZW5hLVx1MDAzZXNwaW5sb2NrIGNhbm5vdC4gQSBOVUxMXG4mIzQzO1x0XHQgKiByZXR1cm4gaXMgbm9uLXJlY292ZXJhYmxlLCBzbyBmYWlsIHdpdGggVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdFx0ICogVk1fRkFVTFRfT09NIHdvdWxkIGJlIHJldHJpZWQgYnkgdGhlIGZhdWx0IHBhdGggYW5kIGNhblxuJiM0MztcdFx0ICogbGl2ZWxvY2sgd2hlbiB0aGUgY2hhcmdlZCBtZW1jZyBpcyBub3QgdGhlIGZhdWx0aW5nIHRhc2smIzM5O3MuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4mIzQzO1x0XHRuZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTtcbiYjNDM7XHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4mIzQzO1x0XHRpZiAoIW5ld19wYWdlKVxuJiM0MztcdFx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24mIzM5O3RcbiBcdFx0ICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dFxuIFx0XHQgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC5cbiBcdFx0ICovXG4mIzQzO1x0XHRpZiAobmV3X3BhZ2UpXG4mIzQzO1x0XHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiBcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbiYjNDM7XHR9XG4gXG4gXHRwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpO1xuIFx0aWYgKHBhZ2UpIHtcbi1cdFx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxuLVx0XHRcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24mIzM5O3QgbGF6eS1hbGxvYyBvdmVyIGl0ICovXG4tXHRcdFx0Z290byBvdXRfc2lnc2VndjtcbiYjNDM7XHRcdGlmIChwYWdlID09IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBIHNjcmF0Y2ggcGFnZSBtYXJrcyBhIGhvbGUuIFNlZ2ZhdWx0IG9ubHkgaWYgdGhlIHVzZXJcbiYjNDM7XHRcdFx0ICogYXNrZWQgZm9yIGl0OyBvdGhlcndpc2Ugd2UgY291bGQgbGF6eS1hbGxvY2F0ZSBidXRcbiYjNDM7XHRcdFx0ICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0ZmF1bHRfcmV0ID0gKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpID9cbiYjNDM7XHRcdFx0XHQgICAgVk1fRkFVTFRfU0lHU0VHViA6IFZNX0ZBVUxUX1NJR0JVUztcbiYjNDM7XHRcdFx0Z290byBvdXRfZXJyX2xvY2tlZDtcbiYjNDM7XHRcdH1cbiBcdFx0LyogYWxyZWFkeSBoYXZlIGEgcGFnZSB2bWFwLWVkICovXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuJiM0MztcdGlmIChhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSB7XG4mIzQzO1x0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuJiM0MztcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHU0VHVjtcbiYjNDM7XHRcdGdvdG8gb3V0X2Vycl9sb2NrZWQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4gXG4tXHRpZiAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcbi1cdFx0LyogVXNlciBzcGFjZSByZXF1ZXN0ZWQgdG8gc2VnZmF1bHQgd2hlbiBwYWdlIGlzIG5vdCBhbGxvY2F0ZWQgYnkgYnBmIHByb2cgKi9cbi1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbiYjNDM7XHRpZiAoIW5ld19wYWdlKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVmVyeSByYXJlIHJhY2U6IHRoZSBicGYgcHJvZ3JhbSBoYWQgYWxsb2NhdGVkIGEgcGFnZSBoZXJlLCBzb1xuJiM0MztcdFx0ICogdGhlIGxvY2tsZXNzIHByb2JlIHNhdyBpdCBhbmQgd2Ugc2tpcHBlZCBwcmVhbGxvY2F0aW9uLCBidXQgaXRcbiYjNDM7XHRcdCAqIGZyZWVkIHRoZSBwYWdlIGJlZm9yZSB3ZSB0b29rIHRoZSBsb2NrLiBOb3cgd2UgZG8gbmVlZCBvbmU7XG4mIzQzO1x0XHQgKiBzbGVlcGluZyBpcyBub3QgYWxsb3dlZCBoZXJlLCBzbyBmYWxsIGJhY2sgdG8gdGhlIG5vbi1ibG9ja2luZ1xuJiM0MztcdFx0ICogYWxsb2NhdG9yIGFuZCBnaXZlIHVwIGlmIGl0IGZhaWxzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgbWFwLVx1MDAzZW51bWFfbm9kZSwgMSwgXHUwMDI2bmV3X3BhZ2UpO1xuJiM0MztcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuIFxuIFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4tXG4tXHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG4tXHQvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqL1xuLVx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG4gXHRpZiAocmV0KSB7XG4tXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuJiM0MztcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbiBcdH1cbiYjNDM7XHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2bmV3X3BhZ2UsIC5pID0gMCB9O1xuIFxuIFx0cmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBrYWRkciwgUEFHRV9TSVpFLCBhcHBseV9yYW5nZV9zZXRfY2IsIFx1MDAyNmRhdGEpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4mIzQzO1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnO1xuIFx0fVxuIFx0Zmx1c2hfdm1hcF9jYWNoZShrYWRkciwgUEFHRV9TSVpFKTtcbiBcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4mIzQzO1x0LyogbmV3X3BhZ2Ugd2FzIGNvbnN1bWVkICovXG4mIzQzO1x0cGFnZSA9IG5ld19wYWdlO1xuJiM0MztcdG5ld19wYWdlID0gTlVMTDtcbiBvdXQ6XG4gXHRwYWdlX3JlZl9hZGQocGFnZSwgMSk7XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRpZiAobmV3X3BhZ2UpXG4mIzQzO1x0XHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XG4gXHR2bWYtXHUwMDNlcGFnZSA9IHBhZ2U7XG4gXHRyZXR1cm4gMDtcbi1vdXRfc2lnc2Vndl9tZW1jZzpcbiYjNDM7XG4mIzQzO291dF9lcnJfbG9ja2VkX21lbWNnOlxuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbi1vdXRfc2lnc2VndjpcbiYjNDM7b3V0X2Vycl9sb2NrZWQ6XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbi1cdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xuJiM0MztcdGlmIChuZXdfcGFnZSlcbiYjNDM7XHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiYjNDM7XHRyZXR1cm4gZmF1bHRfcmV0O1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtNjAyLDE1ICYjNDM7NjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKVxuIFx0XHQhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7XG4gfVxuIFxuJiM0MzsjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fYnBmX2FsbG9jX3BhZ2UoaW50IG5pZClcbiB7XG4gXHRpZiAoIWNhbl9hbGxvY19wYWdlcygpKVxuIFx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9sb2NrKF9fR0ZQX0FDQ09VTlQsIG5pZCwgMCk7XG4gXG4tXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsXG4tXHRcdFx0XHRHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX0FDQ09VTlRcbi1cdFx0XHRcdHwgX19HRlBfTk9XQVJOLFxuLVx0XHRcdFx0MCk7XG4mIzQzO1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLCBCUEZfUEFHRV9HRlAsIDApO1xuIH1cbiBcbiBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuQEAgLTYzNiw2ICYjNDM7NjM1LDIwIEBAIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogRm9yIGNhbGxlcnMgdGhhdCBrbm93IHRoZXkgcnVuIGluIGEgc2xlZXBhYmxlIGNvbnRleHQsIGUuZy4gYSB1c2VyIHBhZ2VcbiYjNDM7ICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGXG4mIzQzOyAqIHByb2dyYW0gY29udGV4dCAtIG5vdGFibHkgaXQgaXMgYWx3YXlzIGZhbHNlIG9uIFBSRUVNUFRfUlQgLSBzbyBnb2luZ1xuJiM0MzsgKiB0aHJvdWdoIGJwZl9tYXBfYWxsb2NfcGFnZXMoKSB0aGVyZSB3b3VsZCBuZWVkbGVzc2x5IHBpY2sgdGhlXG4mIzQzOyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT01cbiYjNDM7ICogbWFjaGluZXJ5LlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbiYjNDM7e1xuJiM0MztcdG1pZ2h0X3NsZWVwKCk7XG4mIzQzO1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobWFwLVx1MDAzZW51bWFfbm9kZSwgQlBGX1BBR0VfR0ZQLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGJ0Zl9maWVsZF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX2ZpZWxkICpmMSA9IGEsICpmMiA9IGI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuQEAgLTE4OCw2ICYjNDM7MTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdHJldHVybiBfX3dyaXRlX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBfX3JlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqY2dyb3VwX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4mIzQzO1x0XHRcdCAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjNDM7e1xuJiM0MztcdGNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICYjNDM7IDFdO1xuJiM0MztcdHNzaXplX3QgZ290O1xuJiM0MztcdGludCBmZDtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoZmlsZV9wYXRoLCBzaXplb2YoZmlsZV9wYXRoKSwgXCYjMzQ7JXMvJXNcJiMzNDssIGNncm91cF9wYXRoLCBmaWxlKTtcbiYjNDM7XHRmZCA9IG9wZW4oZmlsZV9wYXRoLCBPX1JET05MWSk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRsb2dfZXJyKFwmIzM0O09wZW5pbmcgJXNcJiMzNDssIGZpbGVfcGF0aCk7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGdvdCA9IHJlYWQoZmQsIGJ1ZiwgbGVuIC0gMSk7XG4mIzQzO1x0aWYgKGdvdCBcdTAwM2MgMCkge1xuJiM0MztcdFx0bG9nX2VycihcJiMzNDtSZWFkaW5nICVzXCYjMzQ7LCBmaWxlX3BhdGgpO1xuJiM0MztcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0fVxuJiM0MztcdGJ1Zltnb3RdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiByZWFkX2Nncm91cF9maWxlKCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZVxuJiM0MzsgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpclxuJiM0MzsgKiBAZmlsZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gY2dyb3VwZnMgdG8gcmVhZCBmcm9tXG4mIzQzOyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcbiYjNDM7ICogQGxlbjogU2l6ZSBvZiBAYnVmXG4mIzQzOyAqXG4mIzQzOyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCYjMzk7cyBkaXJlY3RvcnkuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuXG4mIzQzOyAqL1xuJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuJiM0MztcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xuJiM0MztcbiYjNDM7XHRmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpO1xuJiM0MztcdHJldHVybiBfX3JlYWRfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1ZiwgbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3NcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtkaXJcbiYjNDM7ICogQHJlbGF0aXZlX3BhdGg6IFRoZSBjZ3JvdXAgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBwcm9jZXNzIHdvcmtkaXJcbiYjNDM7ICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxuJiM0MzsgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzXG4mIzQzOyAqIEBsZW46IFNpemUgb2YgQGJ1ZlxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAmIzM5O3MgZGlyZWN0b3J5IHVuZGVyIHRoZSBwYXJlbnQgcHJvY2Vzc1xuJiM0MzsgKiB3b3JrZGlyLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiBzdWNjZXNzZnVsLCAwIGlzIHJldHVybmVkLlxuJiM0MzsgKi9cbiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4mIzQzO1x0XHRcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xuJiM0MztcbiYjNDM7XHRmb3JtYXRfcGFyZW50X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcbiYjNDM7XHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkgLSBTZXR1cCB0aGUgY2dyb3VwIGVudmlyb25tZW50XG4gICpcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5pbmRleCAzODU3MzA0YmU4NzQxLi5kNDJkMmUxMzA0NGU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG5AQCAtMTUsNiAmIzQzOzE1LDEwIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuIFx0XHQgICAgICBjb25zdCBjaGFyICpidWYpO1xuIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XG4mIzQzO2ludCByZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4mIzQzO1x0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG4mIzQzO2ludCByZWFkX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuJiM0MztcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiBpbnQgY2dyb3VwX3NldHVwX2FuZF9qb2luKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgpO1xuIGludCBnZXRfcm9vdF9jZ3JvdXAodm9pZCk7XG4gaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmNcbkBAIC0wLDAgJiM0MzsxLDE1OCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL21tYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy91c2VyLmhcdTAwM2VcbiYjNDM7I2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNkZWZpbmUgUEFHRV9TSVpFIGdldHBhZ2VzaXplKClcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjZ3JvdXBfaGVscGVycy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FyZW5hX21lbWNnLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBDR19QQVRIXHRcdFwmIzM0Oy9hcmVuYV9tZW1jZ1wmIzM0O1xuJiM0MztcbiYjNDM7LyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi9cbiYjNDM7I2RlZmluZSBBUkVOQV9CVURHRVRcdCg2NCAqIDEwMjQgKiAxMDI0KVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZHVtcF9tZW1jZyhpbnQgKCpyZCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmWzUxMl07XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5XG4mIzQzO1x0ICogY2FycmllcyBpbmZvcm1hdGlvbiB3aGVuIGR1bXBlZCBmcm9tIHRoZSBsaXZlIGNoaWxkOyBtZW1vcnkucGVhayBhbmRcbiYjNDM7XHQgKiBtZW1vcnkuZXZlbnRzIHN1cnZpdmUgdGhlIGNoaWxkIGFuZCB0ZWxsIHRoZSBzdG9yeSBlaXRoZXIgd2F5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcmQoQ0dfUEFUSCwgXCYjMzQ7bWVtb3J5LmN1cnJlbnRcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5jdXJyZW50OiAlc1wmIzM0OywgYnVmKTtcbiYjNDM7XHRpZiAoIXJkKENHX1BBVEgsIFwmIzM0O21lbW9yeS5tYXhcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5tYXg6ICVzXCYjMzQ7LCBidWYpO1xuJiM0MztcdGlmICghcmQoQ0dfUEFUSCwgXCYjMzQ7bWVtb3J5LnBlYWtcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5wZWFrOiAlc1wmIzM0OywgYnVmKTtcbiYjNDM7XHRpZiAoIXJkKENHX1BBVEgsIFwmIzM0O21lbW9yeS5ldmVudHNcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O21lbW9yeS5ldmVudHM6XFxuJXNcJiMzNDssIGJ1Zik7XG4mIzQzO1x0ZmZsdXNoKHN0ZGVycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiBcJiMzNDtvb21fa2lsbFwmIzM0OyBpbiBtZW1vcnkuZXZlbnRzLiAqL1xuJiM0MztzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBidWZbNTEyXSwgKnA7XG4mIzQzO1xuJiM0MztcdGlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XHRwID0gc3Ryc3RyKGJ1Ziwga2V5KTtcbiYjNDM7XHRpZiAoIXApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0cmV0dXJuIHN0cnRvbChwICYjNDM7IHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7XG4mIzQzO1x0Y29uc3QgbG9uZyBwcyA9IFBBR0VfU0laRTtcbiYjNDM7XHRjaGFyIGJ1Zls2NF07XG4mIzQzO1x0cGlkX3QgcGlkO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldHVwX2Nncm91cF9lbnZpcm9ubWVudFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNncm91cF9mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChDR19QQVRIKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwmIzM0O2NyZWF0ZV9hbmRfZ2V0X2Nncm91cFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gbWVtb3J5IGNvbnRyb2xsZXIgLVx1MDAzZSBub3RoaW5nIHRvIHRlc3QuICovXG4mIzQzO1x0aWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgXCYjMzQ7bWVtb3J5LmN1cnJlbnRcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7JXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxcblwmIzM0OywgX19mdW5jX18pO1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwaWQgPSBmb3JrKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcJiMzNDtmb3JrXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmIChwaWQgPT0gMCkge1xuJiM0MztcdFx0c3RydWN0IGFyZW5hX21lbWNnICpjc2tlbDtcbiYjNDM7XHRcdF9fdTMyIGksIG5wYWdlcztcbiYjNDM7XHRcdGNoYXIgKmJhc2U7XG4mIzQzO1x0XHRzaXplX3Qgc3o7XG4mIzQzO1x0XHRsb25nIGN1cjtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRG8gZXZlcnl0aGluZyBmcm9tIHRoZSBjaGlsZDogdGhlIGFyZW5hIHZtYSBpcyBWTV9ET05UQ09QWSBzb1xuJiM0MztcdFx0ICogaXQgd291bGQgbm90IHN1cnZpdmUgZm9yaygpLCBvbmx5IHRoZSBjaGlsZCBzaG91bGQgYmUgdW5kZXIgdGhlXG4mIzQzO1x0XHQgKiBsaW1pdCBzbyB0aGF0IGEgbWVtY2cgT09NIGNhbm5vdCBwaWNrIHRlc3RfcHJvZ3MsIGFuZCBhIG1hcCBpc1xuJiM0MztcdFx0ICogY2hhcmdlZCB0byB0aGUgbWVtY2cgb2YgdGhlIHRhc2sgdGhhdCBjcmVhdGVzIGl0IC0gc28gam9pblxuJiM0MztcdFx0ICogYmVmb3JlIGxvYWQuIFRoZSBjZ3JvdXAgd29yayBkaXIgYmVsb25ncyB0byB0aGUgcGFyZW50IHRoYXQgc2V0XG4mIzQzO1x0XHQgKiB0aGUgZW52aXJvbm1lbnQgdXAsIHNvIHJlYWNoIGl0IHdpdGggdGhlIF9wYXJlbnQoKSBoZWxwZXJzLlxuJiM0MztcdFx0ICogRXJyb3JzIGFyZSByZXBvcnRlZCB0byB0aGUgcGFyZW50IHRocm91Z2ggdGhlIGV4aXQgY29kZSwgc2luY2VcbiYjNDM7XHRcdCAqIEFTU0VSVF8qIGluIGEgZm9ya2VkIGNoaWxkIGRvZXMgbm90IHJlYWNoIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslZFwmIzM0OywgZ2V0cGlkKCkpO1xuJiM0MztcdFx0aWYgKHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcJiMzNDtjZ3JvdXAucHJvY3NcJiMzNDssIGJ1ZikpXG4mIzQzO1x0XHRcdF9leGl0KDIpO1xuJiM0MztcbiYjNDM7XHRcdGNza2VsID0gYXJlbmFfbWVtY2dfX29wZW5fYW5kX2xvYWQoKTtcbiYjNDM7XHRcdGlmICghY3NrZWwpXG4mIzQzO1x0XHRcdF9leGl0KDMpO1xuJiM0MztcbiYjNDM7XHRcdGJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKGNza2VsLVx1MDAzZW1hcHMuYXJlbmEsIFx1MDAyNnN6KTtcbiYjNDM7XHRcdGlmICghYmFzZSlcbiYjNDM7XHRcdFx0X2V4aXQoNCk7XG4mIzQzO1x0XHRucGFnZXMgPSBicGZfbWFwX19tYXhfZW50cmllcyhjc2tlbC1cdTAwM2VtYXBzLmFyZW5hKTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQ2FwIG9ubHkgbm93LCBhZnRlciBsb2FkOiBldmVyeXRoaW5nIGJ1dCB0aGUgZmF1bHQtaW4gaXNcbiYjNDM7XHRcdCAqIGNoYXJnZWQsIHNvIHRoZSBhcmVuYSBnZXRzIGEgZml4ZWQgYnVkZ2V0IHJlZ2FyZGxlc3Mgb2Ygd2hhdFxuJiM0MztcdFx0ICogdGhlIGxvYWQgaXRzZWxmIGNvc3QsIGFuZCB0aGUgbG9hZCBjYW4gbmV2ZXIgaGl0IHRoZSBsaW1pdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFwmIzM0O21lbW9yeS5jdXJyZW50XCYjMzQ7LCBidWYsIHNpemVvZihidWYpKSlcbiYjNDM7XHRcdFx0X2V4aXQoNSk7XG4mIzQzO1x0XHRjdXIgPSBzdHJ0b2woYnVmLCBOVUxMLCAxMCk7XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslbGRcJiMzNDssIGN1ciAmIzQzOyBBUkVOQV9CVURHRVQpO1xuJiM0MztcdFx0aWYgKHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcJiMzNDttZW1vcnkubWF4XCYjMzQ7LCBidWYpKVxuJiM0MztcdFx0XHRfZXhpdCg2KTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRiYXNlWyhzaXplX3QpaSAqIHBzXSA9IDE7XG4mIzQzO1x0XHQvKiBGYXVsdGVkIGV2ZXJ5dGhpbmcgd2l0aG91dCBkeWluZzogZHVtcCB3aHkgKG9ubHkgdW5kZXIgLXYpLiAqL1xuJiM0MztcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlX3BhcmVudCk7XG4mIzQzO1x0XHRfZXhpdCgwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApLCBwaWQsIFwmIzM0O3dhaXRwaWRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIEEgbm9uLXplcm8gZXhpdCBtZWFucyB0aGUgY2hpbGQgZmFpbGVkIHRvIHNldCB1cDsgdGhlIGNvZGUgc2F5cyB3aGVyZS4gKi9cbiYjNDM7XHRpZiAoV0lGRVhJVEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykpIHtcbiYjNDM7XHRcdEFTU0VSVF9PSyhXRVhJVFNUQVRVUyhzdGF0dXMpLCBcJiMzNDtjaGlsZCBzZXR1cFwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRmF1bHRpbmcgYSB2YWxpZCBhcmVuYSBhZGRyZXNzIHVudGlsIG1lbW9yeS5tYXggaXMgaGl0IG11c3Qgbm90IGxvb2tcbiYjNDM7XHQgKiBsaWtlIGFuIGludmFsaWQgYWNjZXNzLiBXaXRob3V0IHRoZSBmaXggdGhlIGZhdWx0IHBhdGggYWxsb2NhdGVkIHdpdGhcbiYjNDM7XHQgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHVixcbiYjNDM7XHQgKiBhbmQgdGhlIGNoaWxkIGRpZWQgd2l0aCBTSUdTRUdWIG9uIGEgdmFsaWQgYWRkcmVzczsgbm93IGl0IGlzIGhhbmRsZWRcbiYjNDM7XHQgKiBieSB0aGUgbWVtY2cgT09NIHBhdGggaW5zdGVhZC4gQSBTSUdLSUxMIGFsb25lIHdvdWxkIG5vdCBwcm92ZSB0aGVcbiYjNDM7XHQgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvXG4mIzQzO1x0ICoga2lsbCB0aGUgY2hpbGQpLCBzbyBjaGVjayBtZW1vcnkuZXZlbnRzLm9vbV9raWxsLCB3aGljaCByZWNvcmRzIHRoZVxuJiM0MztcdCAqIG1lbWNnIE9PTSBhbmQgc3Vydml2ZXMgdGhlIGNoaWxkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghQVNTRVJUX1RSVUUoV0lGU0lHTkFMRUQoc3RhdHVzKSwgXCYjMzQ7Y2hpbGQga2lsbGVkIGJ5IHNpZ25hbFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCBcJiMzNDttZW1vcnkuZXZlbnRzXCYjMzQ7LCBcJiMzNDtvb21fa2lsbFwmIzM0OyksIDEsXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7bWVtY2cgb29tX2tpbGxcJiMzNDspKVxuJiM0MztcdFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTtcbiYjNDM7b3V0OlxuJiM0MztcdGlmIChjZ3JvdXBfZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UoY2dyb3VwX2ZkKTtcbiYjNDM7XHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg4MjU5Y2ZlYTA2YjZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jXG5AQCAtMCwwICYjNDM7MSwyNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9hcmVuYV9jb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCA1MDAwMCk7IC8qIG51bWJlciBvZiBwYWdlcyAqL1xuJiM0MzsjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuJiM0MztcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDMyKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuJiM0MzsjZWxzZVxuJiM0MztcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuJiM0MzsjZW5kaWZcbiYjNDM7fSBhcmVuYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO2ludCBub29wKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyZW5hX3ZtX2ZhdWx0JiMzNDssCiAgICAmIzM0O2JwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gdXNlIGEgc2xlZXBhYmxlIHBhZ2UgYWxsb2NhdG9yIChgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWApIG91dHNpZGUgb2YgdGhlIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbWVtb3J5IGxpbWl0cyBhcmUgZXhjZWVkZWQsIHByZXZlbnRpbmcgc3B1cmlvdXMgU0lHQlVTL1NJR1NFR1YgZXJyb3JzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGNoYW5nZXMgaW4gdGhlIEJQRiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYjMyM2UzNWZjY2M3ZThjZDcxNmZhMjc3OGIwNjQzOTdjNzM3ZWI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDk6NDE6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCBiM2NkMjhkOWUzYjU1Li5jODE3Yzk5ZDI5MDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTI3ODQsNiAmIzQzOzI3ODQsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2dldF9jdXJyX29yX25leHQodTMyICppZCk7CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCiAJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpOwomIzQzO3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApOwogI2lmZGVmIENPTkZJR19NRU1DRwogdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLAogCQkJIHN0cnVjdCBtZW1fY2dyb3VwICoqbmV3X21lbWNnKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuYwppbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jCkBAIC00ODEsNyAmIzQzOzQ4MSw4IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtJmd0O3ZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnOwotCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSwgKm5ld19wYWdlID0gTlVMTDsKJiM0MzsJdm1fZmF1bHRfdCBmYXVsdF9yZXQ7CiAJbG9uZyBrYmFzZSwga2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwpAQCAtNDg5LDU5ICYjNDM7NDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlrYmFzZSA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7CiAJa2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtJmd0O2FkZHJlc3MpOwogCi0JaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkKJiM0MzsJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTsKJiM0MzsJaWYgKCFwYWdlICZhbXA7JmFtcDsgIShhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFByZWFsbG9jYXRlIG91dHNpZGUgdGhlIGxvY2sgd2l0aCBhIHNsZWVwYWJsZSBhbGxvY2F0b3Igc28gaXQKJiM0MzsJCSAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZQomIzQzOwkJICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciB1bmRlciBhcmVuYS0mZ3Q7c3BpbmxvY2sgY2Fubm90LiBBIE5VTEwKJiM0MzsJCSAqIHJldHVybiBpcyBub24tcmVjb3ZlcmFibGUsIHNvIGZhaWwgd2l0aCBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQkgKiBWTV9GQVVMVF9PT00gd291bGQgYmUgcmV0cmllZCBieSB0aGUgZmF1bHQgcGF0aCBhbmQgY2FuCiYjNDM7CQkgKiBsaXZlbG9jayB3aGVuIHRoZSBjaGFyZ2VkIG1lbWNnIGlzIG5vdCB0aGUgZmF1bHRpbmcgdGFzayYjMzk7cy4KJiM0MzsJCSAqLwomIzQzOwkJYnBmX21hcF9tZW1jZ19lbnRlcigmYW1wO2FyZW5hLSZndDttYXAsICZhbXA7b2xkX21lbWNnLCAmYW1wO25ld19tZW1jZyk7CiYjNDM7CQluZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTsKJiM0MzsJCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CQlpZiAoIW5ld19wYWdlKQomIzQzOwkJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkgewogCQkvKgogCQkgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24mIzM5O3QKIAkJICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dAogCQkgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC4KIAkJICovCiYjNDM7CQlpZiAobmV3X3BhZ2UpCiYjNDM7CQkJZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApOwogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwl9CiAKIAlwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpOwogCWlmIChwYWdlKSB7Ci0JCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpCi0JCQkvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJiMzOTt0IGxhenktYWxsb2Mgb3ZlciBpdCAqLwotCQkJZ290byBvdXRfc2lnc2VndjsKJiM0MzsJCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgc2NyYXRjaCBwYWdlIG1hcmtzIGEgaG9sZS4gU2VnZmF1bHQgb25seSBpZiB0aGUgdXNlcgomIzQzOwkJCSAqIGFza2VkIGZvciBpdDsgb3RoZXJ3aXNlIHdlIGNvdWxkIGxhenktYWxsb2NhdGUgYnV0CiYjNDM7CQkJICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLgomIzQzOwkJCSAqLwomIzQzOwkJCWZhdWx0X3JldCA9IChhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSA/CiYjNDM7CQkJCSAgICBWTV9GQVVMVF9TSUdTRUdWIDogVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWQ7CiYjNDM7CQl9CiAJCS8qIGFscmVhZHkgaGF2ZSBhIHBhZ2Ugdm1hcC1lZCAqLwogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpIHsKJiM0MzsJCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwkJZ290byBvdXRfZXJyX2xvY2tlZDsKJiM0MzsJfQomIzQzOwogCWJwZl9tYXBfbWVtY2dfZW50ZXIoJmFtcDthcmVuYS0mZ3Q7bWFwLCAmYW1wO29sZF9tZW1jZywgJmFtcDtuZXdfbWVtY2cpOwogCi0JaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpCi0JCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CWlmICghbmV3X3BhZ2UpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvCiYjNDM7CQkgKiB0aGUgbG9ja2xlc3MgcHJvYmUgc2F3IGl0IGFuZCB3ZSBza2lwcGVkIHByZWFsbG9jYXRpb24sIGJ1dCBpdAomIzQzOwkJICogZnJlZWQgdGhlIHBhZ2UgYmVmb3JlIHdlIHRvb2sgdGhlIGxvY2suIE5vdyB3ZSBkbyBuZWVkIG9uZTsKJiM0MzsJCSAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nCiYjNDM7CQkgKiBhbGxvY2F0b3IgYW5kIGdpdmUgdXAgaWYgaXQgZmFpbHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtJmd0O251bWFfbm9kZSwgMSwgJmFtcDtuZXdfcGFnZSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7CiYjNDM7CQl9CiYjNDM7CX0KIAogCXJldCA9IHJhbmdlX3RyZWVfY2xlYXIoJmFtcDthcmVuYS0mZ3Q7cnQsIHZtZi0mZ3Q7cGdvZmYsIDEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7Ci0KLQlzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gJmFtcDtwYWdlLCAuaSA9IDAgfTsKLQkvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqLwotCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsICZhbXA7cGFnZSk7CiAJaWYgKHJldCkgewotCQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgdm1mLSZndDtwZ29mZiwgMSk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KJiM0MzsJc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9ICZhbXA7bmV3X3BhZ2UsIC5pID0gMCB9OwogCiAJcmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGthZGRyLCBQQUdFX1NJWkUsIGFwcGx5X3JhbmdlX3NldF9jYiwgJmFtcDtkYXRhKTsKIAlpZiAocmV0KSB7CiAJCXJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCB2bWYtJmd0O3Bnb2ZmLCAxKTsKLQkJZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KIAlmbHVzaF92bWFwX2NhY2hlKGthZGRyLCBQQUdFX1NJWkUpOwogCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CS8qIG5ld19wYWdlIHdhcyBjb25zdW1lZCAqLwomIzQzOwlwYWdlID0gbmV3X3BhZ2U7CiYjNDM7CW5ld19wYWdlID0gTlVMTDsKIG91dDoKIAlwYWdlX3JlZl9hZGQocGFnZSwgMSk7CiAJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiYjNDM7CWlmIChuZXdfcGFnZSkKJiM0MzsJCWZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTsKIAl2bWYtJmd0O3BhZ2UgPSBwYWdlOwogCXJldHVybiAwOwotb3V0X3NpZ3NlZ3ZfbWVtY2c6CiYjNDM7CiYjNDM7b3V0X2Vycl9sb2NrZWRfbWVtY2c6CiAJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKLW91dF9zaWdzZWd2OgomIzQzO291dF9lcnJfbG9ja2VkOgogCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwotCXJldHVybiBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwlpZiAobmV3X3BhZ2UpCiYjNDM7CQlmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7CiYjNDM7CXJldHVybiBmYXVsdF9yZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtNjAyLDE1ICYjNDM7NjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKQogCQkhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7CiB9CiAKJiM0MzsjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKQomIzQzOwogc3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpCiB7CiAJaWYgKCFjYW5fYWxsb2NfcGFnZXMoKSkKIAkJcmV0dXJuIGFsbG9jX3BhZ2VzX25vbG9jayhfX0dGUF9BQ0NPVU5ULCBuaWQsIDApOwogCi0JcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLAotCQkJCUdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVAotCQkJCXwgX19HRlBfTk9XQVJOLAotCQkJCTApOwomIzQzOwlyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEJQRl9QQUdFX0dGUCwgMCk7CiB9CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCkBAIC02MzYsNiAmIzQzOzYzNSwyMCBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlCiYjNDM7ICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGCiYjNDM7ICogcHJvZ3JhbSBjb250ZXh0IC0gbm90YWJseSBpdCBpcyBhbHdheXMgZmFsc2Ugb24gUFJFRU1QVF9SVCAtIHNvIGdvaW5nCiYjNDM7ICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZQomIzQzOyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT00KJiM0MzsgKiBtYWNoaW5lcnkuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCkKJiM0Mzt7CiYjNDM7CW1pZ2h0X3NsZWVwKCk7CiYjNDM7CXJldHVybiBhbGxvY19wYWdlc19ub2RlKG1hcC0mZ3Q7bnVtYV9ub2RlLCBCUEZfUEFHRV9HRlAsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogewogCWNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKQEAgLTE4OCw2ICYjNDM7MTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKIAlyZXR1cm4gX193cml0ZV9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgX19yZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKmNncm91cF9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJCSAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICYjNDM7IDFdOwomIzQzOwlzc2l6ZV90IGdvdDsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlzbnByaW50ZihmaWxlX3BhdGgsIHNpemVvZihmaWxlX3BhdGgpLCAmIzM0OyVzLyVzJiMzNDssIGNncm91cF9wYXRoLCBmaWxlKTsKJiM0MzsJZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlsb2dfZXJyKCYjMzQ7T3BlbmluZyAlcyYjMzQ7LCBmaWxlX3BhdGgpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZ290ID0gcmVhZChmZCwgYnVmLCBsZW4gLSAxKTsKJiM0MzsJaWYgKGdvdCAmbHQ7IDApIHsKJiM0MzsJCWxvZ19lcnIoJiMzNDtSZWFkaW5nICVzJiMzNDssIGZpbGVfcGF0aCk7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwlidWZbZ290XSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmVhZF9jZ3JvdXBfZmlsZSgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGUKJiM0MzsgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpcgomIzQzOyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzCiYjNDM7ICogQGxlbjogU2l6ZSBvZiBAYnVmCiYjNDM7ICoKJiM0MzsgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAmIzM5O3MgZGlyZWN0b3J5LgomIzQzOyAqCiYjNDM7ICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC4KJiM0MzsgKi8KJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwljaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdOwomIzQzOwomIzQzOwlmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3MKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpcgomIzQzOyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyCiYjNDM7ICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3MKJiM0MzsgKiBAbGVuOiBTaXplIG9mIEBidWYKJiM0MzsgKgomIzQzOyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCYjMzk7cyBkaXJlY3RvcnkgdW5kZXIgdGhlIHBhcmVudCBwcm9jZXNzCiYjNDM7ICogd29ya2Rpci4KJiM0MzsgKgomIzQzOyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuCiYjNDM7ICovCiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiYjNDM7CQkJICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07CiYjNDM7CiYjNDM7CWZvcm1hdF9wYXJlbnRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSAtIFNldHVwIHRoZSBjZ3JvdXAgZW52aXJvbm1lbnQKICAqCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCmluZGV4IDM4NTczMDRiZTg3NDEuLmQ0MmQyZTEzMDQ0ZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCkBAIC0xNSw2ICYjNDM7MTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiBpbnQgd3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCSAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIGludCBjZ3JvdXBfc2V0dXBfYW5kX2pvaW4oY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7CiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpOwogaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCkBAIC0wLDAgJiM0MzsxLDE1OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdXNlci5oJmd0OwomIzQzOyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqLwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjZ3JvdXBfaGVscGVycy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FyZW5hX21lbWNnLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBDR19QQVRICQkmIzM0Oy9hcmVuYV9tZW1jZyYjMzQ7CiYjNDM7CiYjNDM7LyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi8KJiM0MzsjZGVmaW5lIEFSRU5BX0JVREdFVAkoNjQgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkdW1wX21lbWNnKGludCAoKnJkKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpKQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5CiYjNDM7CSAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kCiYjNDM7CSAqIG1lbW9yeS5ldmVudHMgc3Vydml2ZSB0aGUgY2hpbGQgYW5kIHRlbGwgdGhlIHN0b3J5IGVpdGhlciB3YXkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LmN1cnJlbnQmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuY3VycmVudDogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5tYXgmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkubWF4OiAlcyYjMzQ7LCBidWYpOwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LnBlYWsmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkucGVhazogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuZXZlbnRzOlxuJXMmIzM0OywgYnVmKTsKJiM0MzsJZmZsdXNoKHN0ZGVycik7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiAmIzM0O29vbV9raWxsJiMzNDsgaW4gbWVtb3J5LmV2ZW50cy4gKi8KJiM0MztzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXSwgKnA7CiYjNDM7CiYjNDM7CWlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcCA9IHN0cnN0cihidWYsIGtleSk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIHN0cnRvbChwICYjNDM7IHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7CiYjNDM7CWNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7CiYjNDM7CWNoYXIgYnVmWzY0XTsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwllcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldHVwX2Nncm91cF9lbnZpcm9ubWVudCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2dyb3VwX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKENHX1BBVEgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsICYjMzQ7Y3JlYXRlX2FuZF9nZXRfY2dyb3VwJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIE5vIG1lbW9yeSBjb250cm9sbGVyIC0mZ3Q7IG5vdGhpbmcgdG8gdGVzdC4gKi8KJiM0MzsJaWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7LCBidWYsIHNpemVvZihidWYpKSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7JXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocGlkLCAwLCAmIzM0O2ZvcmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlzdHJ1Y3QgYXJlbmFfbWVtY2cgKmNza2VsOwomIzQzOwkJX191MzIgaSwgbnBhZ2VzOwomIzQzOwkJY2hhciAqYmFzZTsKJiM0MzsJCXNpemVfdCBzejsKJiM0MzsJCWxvbmcgY3VyOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERvIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2hpbGQ6IHRoZSBhcmVuYSB2bWEgaXMgVk1fRE9OVENPUFkgc28KJiM0MzsJCSAqIGl0IHdvdWxkIG5vdCBzdXJ2aXZlIGZvcmsoKSwgb25seSB0aGUgY2hpbGQgc2hvdWxkIGJlIHVuZGVyIHRoZQomIzQzOwkJICogbGltaXQgc28gdGhhdCBhIG1lbWNnIE9PTSBjYW5ub3QgcGljayB0ZXN0X3Byb2dzLCBhbmQgYSBtYXAgaXMKJiM0MzsJCSAqIGNoYXJnZWQgdG8gdGhlIG1lbWNnIG9mIHRoZSB0YXNrIHRoYXQgY3JlYXRlcyBpdCAtIHNvIGpvaW4KJiM0MzsJCSAqIGJlZm9yZSBsb2FkLiBUaGUgY2dyb3VwIHdvcmsgZGlyIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0aGF0IHNldAomIzQzOwkJICogdGhlIGVudmlyb25tZW50IHVwLCBzbyByZWFjaCBpdCB3aXRoIHRoZSBfcGFyZW50KCkgaGVscGVycy4KJiM0MzsJCSAqIEVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHBhcmVudCB0aHJvdWdoIHRoZSBleGl0IGNvZGUsIHNpbmNlCiYjNDM7CQkgKiBBU1NFUlRfKiBpbiBhIGZvcmtlZCBjaGlsZCBkb2VzIG5vdCByZWFjaCBpdC4KJiM0MzsJCSAqLwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslZCYjMzQ7LCBnZXRwaWQoKSk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7Y2dyb3VwLnByb2NzJiMzNDssIGJ1ZikpCiYjNDM7CQkJX2V4aXQoMik7CiYjNDM7CiYjNDM7CQljc2tlbCA9IGFyZW5hX21lbWNnX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CQlpZiAoIWNza2VsKQomIzQzOwkJCV9leGl0KDMpOwomIzQzOwomIzQzOwkJYmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoY3NrZWwtJmd0O21hcHMuYXJlbmEsICZhbXA7c3opOwomIzQzOwkJaWYgKCFiYXNlKQomIzQzOwkJCV9leGl0KDQpOwomIzQzOwkJbnBhZ2VzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoY3NrZWwtJmd0O21hcHMuYXJlbmEpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcCBvbmx5IG5vdywgYWZ0ZXIgbG9hZDogZXZlcnl0aGluZyBidXQgdGhlIGZhdWx0LWluIGlzCiYjNDM7CQkgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXQKJiM0MzsJCSAqIHRoZSBsb2FkIGl0c2VsZiBjb3N0LCBhbmQgdGhlIGxvYWQgY2FuIG5ldmVyIGhpdCB0aGUgbGltaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCAmIzM0O21lbW9yeS5jdXJyZW50JiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQomIzQzOwkJCV9leGl0KDUpOwomIzQzOwkJY3VyID0gc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslbGQmIzM0OywgY3VyICYjNDM7IEFSRU5BX0JVREdFVCk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7bWVtb3J5Lm1heCYjMzQ7LCBidWYpKQomIzQzOwkJCV9leGl0KDYpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5wYWdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJYmFzZVsoc2l6ZV90KWkgKiBwc10gPSAxOwomIzQzOwkJLyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi8KJiM0MzsJCWR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQpOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKSwgcGlkLCAmIzM0O3dhaXRwaWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogQSBub24temVybyBleGl0IG1lYW5zIHRoZSBjaGlsZCBmYWlsZWQgdG8gc2V0IHVwOyB0aGUgY29kZSBzYXlzIHdoZXJlLiAqLwomIzQzOwlpZiAoV0lGRVhJVEVEKHN0YXR1cykgJmFtcDsmYW1wOyBXRVhJVFNUQVRVUyhzdGF0dXMpKSB7CiYjNDM7CQlBU1NFUlRfT0soV0VYSVRTVEFUVVMoc3RhdHVzKSwgJiMzNDtjaGlsZCBzZXR1cCYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZhdWx0aW5nIGEgdmFsaWQgYXJlbmEgYWRkcmVzcyB1bnRpbCBtZW1vcnkubWF4IGlzIGhpdCBtdXN0IG5vdCBsb29rCiYjNDM7CSAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aAomIzQzOwkgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHViwKJiM0MzsJICogYW5kIHRoZSBjaGlsZCBkaWVkIHdpdGggU0lHU0VHViBvbiBhIHZhbGlkIGFkZHJlc3M7IG5vdyBpdCBpcyBoYW5kbGVkCiYjNDM7CSAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZQomIzQzOwkgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvCiYjNDM7CSAqIGtpbGwgdGhlIGNoaWxkKSwgc28gY2hlY2sgbWVtb3J5LmV2ZW50cy5vb21fa2lsbCwgd2hpY2ggcmVjb3JkcyB0aGUKJiM0MzsJICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cyksICYjMzQ7Y2hpbGQga2lsbGVkIGJ5IHNpZ25hbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb21fa2lsbCYjMzQ7KSwgMSwKJiM0MzsJCSAgICAgICAmIzM0O21lbWNnIG9vbV9raWxsJiMzNDspKQomIzQzOwkJZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTsKJiM0MztvdXQ6CiYjNDM7CWlmIChjZ3JvdXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGNncm91cF9mZCk7CiYjNDM7CWNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi44ODI1OWNmZWEwNmI2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMKQEAgLTAsMCAmIzQzOzEsMjQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2FyZW5hX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDUwMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovCiYjNDM7I2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjQKJiM0MzsJX191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCAmbHQ7Jmx0OyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi8KJiM0MzsjZWxzZQomIzQzOwlfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsICZsdDsmbHQ7IDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwomIzQzOyNlbmRpZgomIzQzO30gYXJlbmEgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBub29wKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQXJlbmEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSBzZWxmdGVzdHMsIHdoaWNoIGlzIGdvb2QuIEJ1dCBtb3JlIGltcG9ydGFudGx5LCBpdCYjMzk7cyBjaGFuZ2luZyBob3cgcGFnZXMgYXJlIGFsbG9jYXRlZCB3aXRoaW4gdGhlIEJQRiBhcmVuYSwgc3BlY2lmaWNhbGx5IGluIHRoZSBgYXJlbmFfdm1fZmF1bHRgIGZ1bmN0aW9uLCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGludHJvZHVjaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCwgd2hpY2ggaXMgdXNpbmcgYSBzbGVlcGFibGUgYWxsb2NhdG9yIG5vdywgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyB0aGUgbWVtY2cgT09NIGtpbGxlciwgaW5zdGVhZCBvZiBqdXN0IHRoZSBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHRoYXQgd2FzIHVuZGVyIGEgc3BpbmxvY2suCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpczogaXMgdGhpcyBldmVuIHJlYWNoYWJsZT8gSXMgdGhpcyBjaGFuZ2Ugd29ydGggc3BlbmRpbmcgdGhlIGVmZm9ydCB0byBmdXp6IGl0PyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGVzZSBtb2RpZmllZCBmdW5jdGlvbnMsIGBhcmVuYV92bV9mYXVsdGAgYW5kIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCwgYXJlIGFjdHVhbGx5IGNhbGxlZC4KCmBhcmVuYV92bV9mYXVsdGAgaXMsIGFzIEkgcmVjYWxsLCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmEgbWFwcy4gVGhlIG90aGVyIGZ1bmN0aW9uLCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAsIGlzIHRoZSBuZXcgZnVuY3Rpb24gdGhhdCYjMzk7cyAqYmVpbmcqIGNhbGxlZCBmcm9tIGBhcmVuYV92bV9mYXVsdGAuIFNpbXBsZSBlbm91Z2guCgpUaW1lIHRvIHNlYXJjaCB0aGUgY29kZS4gSSBuZWVkIHRvIGZpbmQgd2hlcmUgYGFyZW5hX3ZtX2ZhdWx0YCBhbmQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGFyZSB1c2VkLiBPa2F5LCBgYXJlbmFfdm1fZmF1bHRgIGlzIHVzZWQgaW4gYGFyZW5hX3ZtX29wc2AsIHdoaWNoIEkgYmV0IGlzIHNldCBzb21ld2hlcmUgd2l0aGluIGBhcmVuYV9tYXBfbW1hcGAuIEkmIzM5O2xsIGdvIGNoZWNrIGBrZXJuZWwvYnBmL2FyZW5hLmNgIHRvIGNvbmZpcm0gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYV92bV9mYXVsdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9NDY0PXN0YXRpYyB2b2lkIGFyZW5hX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NzgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDc5OnN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxua2VybmVsL2JwZi9hcmVuYS5jLTQ4MC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTU5NT1zdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk5LVx0LmNsb3NlXHRcdD0gYXJlbmFfdm1fY2xvc2UsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjAwOlx0LmZhdWx0ICAgICAgICAgID0gYXJlbmFfdm1fZmF1bHQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjAxLX07XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM9NDg9dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1fdXNhZ2Uodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy05OS1cdCAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYzoxMDA6XHQgKiB0aHJvdWdoIGFyZW5hX3ZtX2ZhdWx0KCkuIGxpYmJwZiBtbWFwKClzIHRoZSBhcmVuYSBhdCBtYXBfZXh0cmEgZHVyaW5nXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xMDEtXHQgKiBsb2FkLCBzbyBicGZfbWFwX19pbml0aWFsX3ZhbHVlKCkgaGFuZHMgYmFjayB0aGF0IGJhc2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDk6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI1NAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gVGhpcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmVuYV92bV9mYXVsdGAsIHdoaWNoIGlzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgc3BlY2lmaWNhbGx5IGZvciBCUEYgYXJlbmFzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgYWRkaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGRlZmluaXRlbHkgYSBmdW5jdGlvbiB0byBiZSBhd2FyZSBvZi4mIzM0OwoKVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBpbiB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIG1ha2VzIGl0IGluaGVyZW50bHkgcmVhY2hhYmxlLCBhbmQgbXkgZnV6emluZyBpbnN0aW5jdHMgYXJlIGFscmVhZHkga2lja2luZyBpbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc3BvdCB3b3J0aCBpbnZlc3Rpbmcgc29tZSB0aW1lIGFuZCBlZmZvcnQgdG8gdGVzdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBCUEYgYXJlbmFzIHNvIEkgY2FuIGVuc3VyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgcHJvcGVybHkgZW5hYmxlZCBhbmQgSSBjYW4gYnVpbGQgYSBwcm9wZXIgdGVzdCBlbnZpcm9ubWVudC4gTGV0IG1lIGZpbmQgdGhvc2UgY29uZmlnIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDk6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX0FSRU5BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTAxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIEJQRiBBcmVuYSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgQlBGX0FSRU5BYCBjb25maWd1cmF0aW9uIG9wdGlvbiBsaXZlcy4gSXQmIzM5O3Mgbm90IHNvbWV0aGluZyBJIGNhbiBqdXN0IGludHVpdGl2ZWx5IHJlY2FsbCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gTXkgZ3V0IHNheXMgaXQmIzM5O3MgcHJvYmFibHkgZGVmaW5lZCBpbiBlaXRoZXIgYEtjb25maWdgIG9yIGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbG9jYXRpb24gZm9yIGEgQlBGLXNwZWNpZmljIGZlYXR1cmUuIEkmIzM5O2xsIHNlYXJjaCBmb3IgaXQgdGhlcmUuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIGFwcHJvYWNoIHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jPTcxPXN0YXRpYyBpbnQgc2N4X2FyZW5hX2dyb3coc3RydWN0IHNjeF9zY2hlZCAqc2NoLCB1MzIgcGFnZV9jbnQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg2LVx0dWFkZHIzMiA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpcDtcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYzo4NzpcdC8qIGFyZW5hLm8sIHdoaWNoIGRlZmluZXMgdGhlc2UsIGlzIGJ1aWx0IG9ubHkgb24gTU1VIFx1MDAyNlx1MDAyNiA2NEJJVCAqL1xua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg4LSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgwNjU9c3RhdGljIGludCBzY3hfYXJlbmFfc2Nhbl9wcm9nKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNjktXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwNzA6XHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcdTAwMjZcdTAwMjYgNjRCSVQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA3MS0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlPTk5Mz0kKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm86ICQoT1VUUFVUKS94ZHBfbGJfYmVuY2guc2tlbC5oIGJlbmNoX2JwZl90aW1pbmcuaFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjk5NDokKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubzogJChMSUJBUkVOQV9CRU5DSF9TS0VMKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTk5NS0kKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmhcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU9OTk4PSQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtMTAyMS1cdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjEwMjI6XHRcdCAkKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTEwMjMtXHRcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGJwZiBhcmVuYSBjb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBhcmVuYS5vYCBvYmplY3QgZmlsZSwgYW5kIGl0IHNlZW1zIGxpa2UgaXQgZ2V0cyBidWlsdCBvbmx5IHVuZGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19NTVVgLCBhbmQgYENPTkZJR182NEJJVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBpbmNsdWRlL2xpbnV4L2JwZi5oYCBhbmQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgc28gdGhlcmUgYXJlIGxpa2VseSByZWxhdGVkIGNoYW5nZXMgaW4gdGhlIGNvcmUgQlBGIHN0cnVjdHVyZXMgYW5kIHRoZSBzeXNjYWxsIGludGVyZmFjZS4KCk15IGluaXRpYWwgZm9jdXMgc3ltYm9scyB3ZXJlIGBhcmVuYV92bV9mYXVsdGAgYW5kIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4gSG9sZCBvbiwgdGhvdWdoLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBJcyBgYXJlbmFfdm1fZmF1bHRgIHN0YXRpYz8gWXVwLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilgLiBIbSwgdGhhdCBtaWdodCBiZSBwcm9ibGVtYXRpYy4gVGhlIGd1aWRhbmNlIHByZWZlcnMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSBvZnRlbiBpbmxpbmVkLCBtYWtpbmcgdGhlbSBoYXJkZXIgdG8gdGFyZ2V0LiBIb3dldmVyLCBpdCAqaXMqIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgYXJlbmFfdm1fb3BzYCwgc28gaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIEl0ICpzaG91bGQqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBkZXNwaXRlIGJlaW5nIHN0YXRpYy4KCkJ1dCwgdGhlIHByb21wdCBzdWdnZXN0cyBwcmlvcml0aXppbmcgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHNvIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgYmV0dGVyIGNhbmRpZGF0ZXMuIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpcyBub24tc3RhdGljLCBzbyBsZXQmIzM5O3MgbG9vayBmb3Igb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0cnVjdCBicGZfbWFwIFxcKmFyZW5hX21hcF9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTk0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgYXJlbmEuY2AgZm9yIEJQRiBTaGVuYW5pZ2FucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gaW4gdGhlIEJQRiBhcmVuYS4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoaXMgc3BlY2lmaWMgYXJlbmEgaW1wbGVtZW50YXRpb24sIHNvIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgYGtlcm5lbC9icGYvYXJlbmEuY2AuIE15IHByaW1hcnkgaW50ZXJlc3QgaGVyZSBpcyBob3cgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCB1c2VkLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhpcyBmaWxlIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucy4gSSYjMzk7bSBhc3N1bWluZyB0aGUgKnN0YXRpYyogb25lcyBhcmUgbGlrZWx5IGludGVybmFsIHRvIHRoZSBhcmVuYSBtb2R1bGUuIFRoZSBub24tc3RhdGljIG9uZXMgYXJlIHdoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQ6IHRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGNhbGxpbmcgaW50by4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UgdGhhdCBhcmVuYS5jIGV4cG9zZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKiBhcmVuYV9tYXBfJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg9MTM0PUJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfVVNFUl9SSU5HQlVGLCB1c2VyX3JpbmdidWZfbWFwX29wcylcbmluY2x1ZGUvbGludXgvYnBmX3R5cGVzLmg6MTM1OkJQRl9NQVBfVFlQRShCUEZfTUFQX1RZUEVfQVJFTkEsIGFyZW5hX21hcF9vcHMpXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEzNi1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTEwPXN0cnVjdCBicGZfbWFwICpicGZfcHJvZ19hcmVuYShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTExNi1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMTc6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3BlZWtfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTgte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMjEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTIyOnN0YXRpYyBsb25nIGFyZW5hX21hcF9wdXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjMte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMjYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTI3OnN0YXRpYyBsb25nIGFyZW5hX21hcF9wb3BfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjgte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMzEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTMyOnN0YXRpYyBsb25nIGFyZW5hX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcbmtlcm5lbC9icGYvYXJlbmEuYy0xMzMte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMzYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTM3OnN0YXRpYyBpbnQgYXJlbmFfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxua2VybmVsL2JwZi9hcmVuYS5jLTEzOC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTM0Mz1zdGF0aWMgaW50IGV4aXN0aW5nX3BhZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzY5LVxua2VybmVsL2JwZi9hcmVuYS5jOjM3MDpzdGF0aWMgdm9pZCBhcmVuYV9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9hcmVuYS5jLTM3MS17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTQwMT1zdGF0aWMgdm9pZCAqYXJlbmFfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDA1LVxua2VybmVsL2JwZi9hcmVuYS5jOjQwNjpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxua2VybmVsL2JwZi9hcmVuYS5jLTQwNy1cdFx0XHRcdCAgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDExLVxua2VybmVsL2JwZi9hcmVuYS5jOjQxMjpzdGF0aWMgaW50IGFyZW5hX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxua2VybmVsL2JwZi9hcmVuYS5jLTQxMy1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00MTctXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDE4OnN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9hcmVuYS5jLTQxOS17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTYwMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBhcmVuYV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02MzYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjM3OnN0YXRpYyBpbnQgYXJlbmFfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjM4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjc2LVxua2VybmVsL2JwZi9hcmVuYS5jOjY3NzpzdGF0aWMgaW50IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcbmtlcm5lbC9icGYvYXJlbmEuYy02Nzgte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02ODc9QlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9hcmVuYV9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfYXJlbmEpXG5rZXJuZWwvYnBmL2FyZW5hLmM6Njg4OmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9hcmVuYS5jLTY4OS1cdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDEwPXU2NCBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8oc3RydWN0IGJwZl90aW1lZF9tYXlfZ290byAqcClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDI4LS8qIGZvciBjb25maWdzIHdpdGhvdXQgTU1VIG9yIDMyLWJpdCAqL1xua2VybmVsL2JwZi9jb3JlLmM6MzQyOTpfX3dlYWsgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFyZW5hX21hcF9vcHM7XG5rZXJuZWwvYnBmL2NvcmUuYy0zNDMwLV9fd2VhayB1NjQgYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU2NQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWFwIE9wZXJhdGlvbnMgYW5kIEFsbG9jYXRpb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiBhIGZldyBjcnVjaWFsIHBvaW50cy4gVGhlIGBhcmVuYV9tYXBfb3BzYCBzdHJ1Y3R1cmUsIHdoaWNoIEkgc2VlIGlzIHVzZWQgZm9yIHRoZSBtYXAgb3BlcmF0aW9ucywgaXMgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYy4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgdG8gbm90ZS4gTm93LCB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgYXBwZWFyIHRvIGJlIGBhcmVuYV92bV9mYXVsdGAgYW5kIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4gYGFyZW5hX3ZtX2ZhdWx0YCBpcyBwcm9iYWJseSBub3QgdGhlIG1haW4gaXNzdWUgaGVyZS4gVGhlIHNlY29uZCBmdW5jdGlvbiwgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgICwgaXMgYWxzbyBub24tc3RhdGljOyBhbmQgc2VlbXMgdG8gYmUgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IGl0IGlzbiYjMzk7dCBzdGF0aWMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0lzIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBhY3R1YWxseSBleHBvcnRlZCBhbmQgdmlzaWJsZT8mIzM0OyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIFRoYXQmIzM5O3MgbXkgbmV4dCBzdGVwLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgY29uZmlybSBpdHMgdmlzaWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oPTI3ODU9aW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjc4Ni1cdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuaW5jbHVkZS9saW51eC9icGYuaDoyNzg3OnN0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApO1xuaW5jbHVkZS9saW51eC9icGYuaC0yNzg4LSNpZmRlZiBDT05GSUdfTUVNQ0dcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MDMtXHRcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTA0Olx0XHRuZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MDUtXHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjE1PWludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ1LSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQ2OnN0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgTWFwIEFsbG9jYXRpb24gYW5kIFZNIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhpbmtpbmcsIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBgYXJlbmFfdm1fZmF1bHRgIGlzIHN0YXRpYywgYnV0IGhvbGQgb24uLi4gaXQmIzM5O3MgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgYXJlbmFfdm1fb3BzYC4gU2luY2UgaXQmIzM5O3MgYSBmdW5jdGlvbiBwb2ludGVyIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBpbmxpbmVkLiBUaGF0JiMzOTtzIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMuCgpXYWl0IGEgbWludXRlLCBJIG5lZWQgdG8ga2VlcCB0aGVzZSBzdHJhaWdodC4gYGFyZW5hX21hcF9vcHNgIGhhbmRsZXMgdGhlIG1hcCBvcGVyYXRpb25zIGFuZCBgYXJlbmFfdm1fb3BzYCBoYW5kbGVzIHRoZSBWTSBvcGVyYXRpb25zLiBSaWdodC4gT2theSwgbGV0JiMzOTtzIHJlZm9jdXMuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGFyZW5hX3ZtX29wc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGF0JiMzOTtzIHdvcmtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hX3ZtX29wcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2FyZW5hLmM9NDc5PXN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01OTQtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xua2VybmVsL2JwZi9hcmVuYS5jLTU5Ni1cdC5vcGVuXHRcdD0gYXJlbmFfdm1fb3Blbixcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjM3PXN0YXRpYyBpbnQgYXJlbmFfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY3Mi1cdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05UQ09QWSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjczOlx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNmFyZW5hX3ZtX29wcztcbmtlcm5lbC9icGYvYXJlbmEuYy02NzQtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MDYKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIGZvciBTZWxlY3RpbmcgRm9jdXMgU3ltYm9scyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBiZXN0IGVudHJ5IHBvaW50cyBmb3IgU3l6a2FsbGVyLCBnaXZlbiB0aGUgY29uc3RyYWludHMuIGBhcmVuYV92bV9mYXVsdGAgaXMgYSBjYWxsYmFjaywgc28gaXQmIzM5O3Mgbm90IGlubGluZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgZ2l2ZXMgaXQgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4gSXQgaXMgYWxzbyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggY291bGQgYmUgYW4gaXNzdWUgZm9yIFN5emthbGxlciBpZiBpdCBjYW4mIzM5O3QgcGFyc2Uga2FsbHN5bXMuIEhvd2V2ZXIsIHRoZSBkb2N1bWVudGF0aW9uIHN0cmVzc2VzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCBzbyBpdCBzaG91bGQgYmUgZWFzaWx5IHRhcmdldGFibGUuCgpBbmQgaG9sZCBvbi4uLiBhcmVuJiMzOTt0IHdlIGZvY3VzaW5nIG9uIHN5c2NhbGxzPyBSaWdodCwgU3l6a2FsbGVyIHRhcmdldHMgc3lzY2FsbHMuIFRoZSBCUEYgc3lzY2FsbCAqaXMqIHRoZSBlbnRyeSBwb2ludCEgU28sIHRoZSBnb2FsIGlzIHRvIHRhcmdldCBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgQlBGIHN1YnN5c3RlbSB0aGF0IGFyZSBtb2RpZmllZCBhbmQgcmVhY2hhYmxlIGZyb20gaXQuCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBhdmFpbGFibGUgaW5mb3JtYXRpb24sIEkmIzM5O2xsIGluY2x1ZGUgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGFuZCBgYXJlbmFfdm1fZmF1bHRgIGluIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4gVGhleSBhcmUgbm90IGlubGluZWQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciBDT05GSUcgb3B0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBtdXN0LWhhdmUsIG9idmlvdXNseS4gVGhlIGBhcmVuYS5vYCBtb2R1bGUgc3BlY2lmaWNhbGx5IHNlZW1zIHRvIHJlcXVpcmUgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCB0byBiZSBidWlsdC4gSXQmIzM5O3MgdGltZSB0byBkb3VibGUtY2hlY2sgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gYWxsIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jPTcxPXN0YXRpYyBpbnQgc2N4X2FyZW5hX2dyb3coc3RydWN0IHNjeF9zY2hlZCAqc2NoLCB1MzIgcGFnZV9jbnQpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg2LVx0dWFkZHIzMiA9ICh1MzIpKHVuc2lnbmVkIGxvbmcpcDtcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYzo4NzpcdC8qIGFyZW5hLm8sIHdoaWNoIGRlZmluZXMgdGhlc2UsIGlzIGJ1aWx0IG9ubHkgb24gTU1VIFx1MDAyNlx1MDAyNiA2NEJJVCAqL1xua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg4LSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTgwNjU9c3RhdGljIGludCBzY3hfYXJlbmFfc2Nhbl9wcm9nKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNjktXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjgwNzA6XHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcdTAwMjZcdTAwMjYgNjRCSVQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA3MS0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfNjRCSVQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlPTk5Mz0kKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm86ICQoT1VUUFVUKS94ZHBfbGJfYmVuY2guc2tlbC5oIGJlbmNoX2JwZl90aW1pbmcuaFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjk5NDokKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubzogJChMSUJBUkVOQV9CRU5DSF9TS0VMKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTk5NS0kKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmhcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU9OTk4PSQoT1VUUFVUKS9iZW5jaDogJChPVVRQVVQpL2JlbmNoLm8gXFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtMTAyMS1cdFx0ICQoT1VUUFVUKS9iZW5jaF94ZHBfbGIubyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlOjEwMjI6XHRcdCAkKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTEwMjMtXHRcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNTMKCQkJCQkJCW91dHB1dDogMTQ3CgkJCQkJCQl0aG91Z2h0czogNjM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFJlcXVpcmVkIEtlcm5lbCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBrbm93IHRoYXQgZm9yIHN5emthbGxlciB0YXJnZXRzIChsaWtlIHg4Nl82NCBhbmQgYXJtNjQpLCBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfNjRCSVRgIGFyZSBwcmV0dHkgbXVjaCBnaXZlbnMsIHNvIHRob3NlIGFyZSBhbHJlYWR5IGFzc3VtZWQuIFRoZSBjcnVjaWFsIHBhcnQgaXMgZmlndXJpbmcgb3V0IGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgbm93IG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXRjaC4KClRoZSBwYXRjaCBtZW50aW9ucyBgQ09ORklHX01FTUNHYCBpbiBgaW5jbHVkZS9saW51eC9icGYuaGAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBicGZfbWFwX21lbWNnX2VudGVyYCBmdW5jdGlvbi4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCBgQ09ORklHX01FTUNHYCBtaWdodCBvbmx5IGNoYW5nZSBiZWhhdmlvciB3aXRob3V0IGJlaW5nIHN0cmljdGx5IHJlcXVpcmVkLiBCdXQsIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBleHBsaWNpdGx5IGhpZ2hsaWdodHMgdGhlIHVzZSBvZiBhICYjMzQ7c2xlZXBhYmxlIGFsbG9jYXRvciYjMzQ7IHRvIGFsbG93IHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJlY2xhaW0gbWVtb3J5IGFuZCBydW4sIHdoaWNoIHRoZSBleGlzdGluZyBub24tYmxvY2tpbmcgYWxsb2NhdG9yIGNvdWxkbiYjMzk7dC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBgQ09ORklHX01FTUNHYCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBiZWluZyBtYWRlLiBUaGVyZWZvcmUsIGBNRU1DR2AgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gVGhlIG90aGVyIG9idmlvdXMgb25lIGlzIGBCUEZfU1lTQ0FMTGAsIGJlY2F1c2UgdGhlIGNvZGUgbWFrZXMgdXNlIG9mIHRoZSBCUEYgc3lzdGVtIGNhbGwuCgpOb3csIGxldCYjMzk7cyBkaWcgaW50byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBhdCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAuIFRoZSBjb2RlIHNob3dzIGBtaWdodF9zbGVlcCgpYCBhbmQgdXNlcyBgYWxsb2NfcGFnZXNfbm9kZWAsIHdoaWNoIGNvbmZpcm1zIHRoaXMgaXMgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4KClNvLCB0byBzdW1tYXJpemUsIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZTogYEJQRl9TWVNDQUxMYCBhbmQgYE1FTUNHYC4KCk15IGZvY3VzIGluIHRoZSBjb2RlIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgZnVuY3Rpb24gYW5kIGFsc28gYGFyZW5hX3ZtX2ZhdWx0YC4gRG91YmxlLWNoZWNraW5nIHRoYXQgdGhlIHNlY29uZCBmdW5jdGlvbiBuYW1lIGlzIGNvcnJlY3QsIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBhcmVuYV92bV9mYXVsdGAgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IG5hbWUgYXMgc2hvd24gaW4gdGhlIGRlZmluaXRpb24gYHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKWAuCgpJIGFsc28gY2hlY2tlZCBgYnBmX21hcF9hbGxvY19wYWdlc2AgZm9yIG90aGVyIHJlcXVpcmVkIHN5bWJvbHMuIFRoZSBjaGFuZ2UgdG8gdXNlIGBCUEZfUEFHRV9HRlBgIGlzIGEgbWlub3IgaW1wbGVtZW50YXRpb24gZGV0YWlsLgoKU28gaXQmIzM5O3MgYGFyZW5hX3ZtX2ZhdWx0YCBhbmQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIHRoYXQgcmVwcmVzZW50IHRoZSBtZWF0IG9mIHRoaXMgY29kZSBjaGFuZ2UuIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJlbmFfdm1fZmF1bHQmIzM0OywKICAgICYjMzQ7YnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIGZvciBCUEYgYXJlbmFzIChgYXJlbmFfdm1fZmF1bHRgKSB0byB1c2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgb3V0c2lkZSBvZiB0aGUgc3BpbmxvY2suIFRoaXMgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBtZW1vcnkgbGltaXRzIGFyZSBleGNlZWRlZCwgcHJldmVudGluZyBzcHVyaW91cyBTSUdCVVMvU0lHU0VHViBlcnJvcnMuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgY2hhbmdlcyBpbiB0aGUgQlBGIHN1YnN5c3RlbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmVuYV92bV9mYXVsdCYjMzQ7LAogICAgJiMzNDticGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYXMgKGBhcmVuYV92bV9mYXVsdGApIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKSBvdXRzaWRlIG9mIHRoZSBzcGlubG9jay4gVGhpcyBhbGxvd3MgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG1lbW9yeSBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBwcmV2ZW50aW5nIHNwdXJpb3VzIFNJR0JVUy9TSUdTRUdWIGVycm9ycy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjaGFuZ2VzIGluIHRoZSBCUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJlbmEgcGFnZSBmYXVsdCBoYW5kbGVyIChgYXJlbmFfdm1fZmF1bHRgKSB0byBwcmVhbGxvY2F0ZSBwYWdlcyB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgb3V0c2lkZSBvZiBhIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbmVjZXNzYXJ5LiBUaGUgbmV3IGFsbG9jYXRvciBleHBsaWNpdGx5IHVzZXMgdGhlIGBfX0dGUF9aRVJPYCBmbGFnICh2aWEgYEJQRl9QQUdFX0dGUGApLCBlbnN1cmluZyB0aGF0IGFsbCBuZXdseSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIG1hcHBlZCBpbnRvIHRoZSBhcmVuYS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYjMyM2UzNWZjY2M3ZThjZDcxNmZhMjc3OGIwNjQzOTdjNzM3ZWI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDk6NDE6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaAppbmRleCBiM2NkMjhkOWUzYjU1Li5jODE3Yzk5ZDI5MDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JwZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmLmgKQEAgLTI3ODQsNiAmIzQzOzI3ODQsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2dldF9jdXJyX29yX25leHQodTMyICppZCk7CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCiAJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpOwomIzQzO3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApOwogI2lmZGVmIENPTkZJR19NRU1DRwogdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLAogCQkJIHN0cnVjdCBtZW1fY2dyb3VwICoqbmV3X21lbWNnKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuYwppbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jCkBAIC00ODEsNyAmIzQzOzQ4MSw4IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtJmd0O3ZtYS0mZ3Q7dm1fZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnOwotCXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSwgKm5ld19wYWdlID0gTlVMTDsKJiM0MzsJdm1fZmF1bHRfdCBmYXVsdF9yZXQ7CiAJbG9uZyBrYmFzZSwga2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwpAQCAtNDg5LDU5ICYjNDM7NDkwLDEwNiBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAlrYmFzZSA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7CiAJa2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtJmd0O2FkZHJlc3MpOwogCi0JaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkKJiM0MzsJcGFnZSA9IHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWthZGRyKTsKJiM0MzsJaWYgKCFwYWdlICZhbXA7JmFtcDsgIShhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFByZWFsbG9jYXRlIG91dHNpZGUgdGhlIGxvY2sgd2l0aCBhIHNsZWVwYWJsZSBhbGxvY2F0b3Igc28gaXQKJiM0MzsJCSAqIGNhbiByZWNsYWltIGFuZCBydW4gdGhlIG1lbWNnIE9PTSBraWxsZXIsIHdoaWNoIHRoZQomIzQzOwkJICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciB1bmRlciBhcmVuYS0mZ3Q7c3BpbmxvY2sgY2Fubm90LiBBIE5VTEwKJiM0MzsJCSAqIHJldHVybiBpcyBub24tcmVjb3ZlcmFibGUsIHNvIGZhaWwgd2l0aCBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQkgKiBWTV9GQVVMVF9PT00gd291bGQgYmUgcmV0cmllZCBieSB0aGUgZmF1bHQgcGF0aCBhbmQgY2FuCiYjNDM7CQkgKiBsaXZlbG9jayB3aGVuIHRoZSBjaGFyZ2VkIG1lbWNnIGlzIG5vdCB0aGUgZmF1bHRpbmcgdGFzayYjMzk7cy4KJiM0MzsJCSAqLwomIzQzOwkJYnBmX21hcF9tZW1jZ19lbnRlcigmYW1wO2FyZW5hLSZndDttYXAsICZhbXA7b2xkX21lbWNnLCAmYW1wO25ld19tZW1jZyk7CiYjNDM7CQluZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTsKJiM0MzsJCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CQlpZiAoIW5ld19wYWdlKQomIzQzOwkJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDthcmVuYS0mZ3Q7c3BpbmxvY2ssIGZsYWdzKSkgewogCQkvKgogCQkgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24mIzM5O3QKIAkJICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dAogCQkgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC4KIAkJICovCiYjNDM7CQlpZiAobmV3X3BhZ2UpCiYjNDM7CQkJZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApOwogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwl9CiAKIAlwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpOwogCWlmIChwYWdlKSB7Ci0JCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpCi0JCQkvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJiMzOTt0IGxhenktYWxsb2Mgb3ZlciBpdCAqLwotCQkJZ290byBvdXRfc2lnc2VndjsKJiM0MzsJCWlmIChwYWdlID09IGFyZW5hLSZndDtzY3JhdGNoX3BhZ2UpIHsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEEgc2NyYXRjaCBwYWdlIG1hcmtzIGEgaG9sZS4gU2VnZmF1bHQgb25seSBpZiB0aGUgdXNlcgomIzQzOwkJCSAqIGFza2VkIGZvciBpdDsgb3RoZXJ3aXNlIHdlIGNvdWxkIGxhenktYWxsb2NhdGUgYnV0CiYjNDM7CQkJICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLgomIzQzOwkJCSAqLwomIzQzOwkJCWZhdWx0X3JldCA9IChhcmVuYS0mZ3Q7bWFwLm1hcF9mbGFncyAmYW1wOyBCUEZfRl9TRUdWX09OX0ZBVUxUKSA/CiYjNDM7CQkJCSAgICBWTV9GQVVMVF9TSUdTRUdWIDogVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWQ7CiYjNDM7CQl9CiAJCS8qIGFscmVhZHkgaGF2ZSBhIHBhZ2Ugdm1hcC1lZCAqLwogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpIHsKJiM0MzsJCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwkJZ290byBvdXRfZXJyX2xvY2tlZDsKJiM0MzsJfQomIzQzOwogCWJwZl9tYXBfbWVtY2dfZW50ZXIoJmFtcDthcmVuYS0mZ3Q7bWFwLCAmYW1wO29sZF9tZW1jZywgJmFtcDtuZXdfbWVtY2cpOwogCi0JaWYgKGFyZW5hLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX1NFR1ZfT05fRkFVTFQpCi0JCS8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CWlmICghbmV3X3BhZ2UpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvCiYjNDM7CQkgKiB0aGUgbG9ja2xlc3MgcHJvYmUgc2F3IGl0IGFuZCB3ZSBza2lwcGVkIHByZWFsbG9jYXRpb24sIGJ1dCBpdAomIzQzOwkJICogZnJlZWQgdGhlIHBhZ2UgYmVmb3JlIHdlIHRvb2sgdGhlIGxvY2suIE5vdyB3ZSBkbyBuZWVkIG9uZTsKJiM0MzsJCSAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nCiYjNDM7CQkgKiBhbGxvY2F0b3IgYW5kIGdpdmUgdXAgaWYgaXQgZmFpbHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtJmd0O251bWFfbm9kZSwgMSwgJmFtcDtuZXdfcGFnZSk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJCWdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7CiYjNDM7CQl9CiYjNDM7CX0KIAogCXJldCA9IHJhbmdlX3RyZWVfY2xlYXIoJmFtcDthcmVuYS0mZ3Q7cnQsIHZtZi0mZ3Q7cGdvZmYsIDEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7Ci0KLQlzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gJmFtcDtwYWdlLCAuaSA9IDAgfTsKLQkvKiBBY2NvdW50IGludG8gbWVtY2cgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIGJwZl9hcmVuYSAqLwotCXJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsICZhbXA7cGFnZSk7CiAJaWYgKHJldCkgewotCQlyYW5nZV90cmVlX3NldCgmYW1wO2FyZW5hLSZndDtydCwgdm1mLSZndDtwZ29mZiwgMSk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KJiM0MzsJc3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9ICZhbXA7bmV3X3BhZ2UsIC5pID0gMCB9OwogCiAJcmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZSgmYW1wO2luaXRfbW0sIGthZGRyLCBQQUdFX1NJWkUsIGFwcGx5X3JhbmdlX3NldF9jYiwgJmFtcDtkYXRhKTsKIAlpZiAocmV0KSB7CiAJCXJhbmdlX3RyZWVfc2V0KCZhbXA7YXJlbmEtJmd0O3J0LCB2bWYtJmd0O3Bnb2ZmLCAxKTsKLQkJZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7Ci0JCWdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7CiYjNDM7CQlmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CQlnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnOwogCX0KIAlmbHVzaF92bWFwX2NhY2hlKGthZGRyLCBQQUdFX1NJWkUpOwogCWJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7CiYjNDM7CS8qIG5ld19wYWdlIHdhcyBjb25zdW1lZCAqLwomIzQzOwlwYWdlID0gbmV3X3BhZ2U7CiYjNDM7CW5ld19wYWdlID0gTlVMTDsKIG91dDoKIAlwYWdlX3JlZl9hZGQocGFnZSwgMSk7CiAJcmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7YXJlbmEtJmd0O3NwaW5sb2NrLCBmbGFncyk7CiYjNDM7CWlmIChuZXdfcGFnZSkKJiM0MzsJCWZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTsKIAl2bWYtJmd0O3BhZ2UgPSBwYWdlOwogCXJldHVybiAwOwotb3V0X3NpZ3NlZ3ZfbWVtY2c6CiYjNDM7CiYjNDM7b3V0X2Vycl9sb2NrZWRfbWVtY2c6CiAJYnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTsKLW91dF9zaWdzZWd2OgomIzQzO291dF9lcnJfbG9ja2VkOgogCXJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2FyZW5hLSZndDtzcGlubG9jaywgZmxhZ3MpOwotCXJldHVybiBWTV9GQVVMVF9TSUdTRUdWOwomIzQzOwlpZiAobmV3X3BhZ2UpCiYjNDM7CQlmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7CiYjNDM7CXJldHVybiBmYXVsdF9yZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtNjAyLDE1ICYjNDM7NjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKQogCQkhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7CiB9CiAKJiM0MzsjZGVmaW5lIEJQRl9QQUdFX0dGUCAoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UIHwgX19HRlBfTk9XQVJOKQomIzQzOwogc3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpCiB7CiAJaWYgKCFjYW5fYWxsb2NfcGFnZXMoKSkKIAkJcmV0dXJuIGFsbG9jX3BhZ2VzX25vbG9jayhfX0dGUF9BQ0NPVU5ULCBuaWQsIDApOwogCi0JcmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLAotCQkJCUdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVAotCQkJCXwgX19HRlBfTk9XQVJOLAotCQkJCTApOwomIzQzOwlyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEJQRl9QQUdFX0dGUCwgMCk7CiB9CiAKIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsCkBAIC02MzYsNiAmIzQzOzYzNSwyMCBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlCiYjNDM7ICogZmF1bHQgaGFuZGxlci4gY2FuX2FsbG9jX3BhZ2VzKCkgaXMgYSBjb25zZXJ2YXRpdmUgZ3Vlc3MgbWFkZSBmb3IgQlBGCiYjNDM7ICogcHJvZ3JhbSBjb250ZXh0IC0gbm90YWJseSBpdCBpcyBhbHdheXMgZmFsc2Ugb24gUFJFRU1QVF9SVCAtIHNvIGdvaW5nCiYjNDM7ICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZQomIzQzOyAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IsIHdoaWNoIG5ldmVyIHJlY2xhaW1zIGFuZCBuZXZlciBlbmdhZ2VzIHRoZSBPT00KJiM0MzsgKiBtYWNoaW5lcnkuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCkKJiM0Mzt7CiYjNDM7CW1pZ2h0X3NsZWVwKCk7CiYjNDM7CXJldHVybiBhbGxvY19wYWdlc19ub2RlKG1hcC0mZ3Q7bnVtYV9ub2RlLCBCUEZfUEFHRV9HRlAsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQogewogCWNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMKQEAgLTE4OCw2ICYjNDM7MTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKIAlyZXR1cm4gX193cml0ZV9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgX19yZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKmNncm91cF9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJCSAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICYjNDM7IDFdOwomIzQzOwlzc2l6ZV90IGdvdDsKJiM0MzsJaW50IGZkOwomIzQzOwomIzQzOwlzbnByaW50ZihmaWxlX3BhdGgsIHNpemVvZihmaWxlX3BhdGgpLCAmIzM0OyVzLyVzJiMzNDssIGNncm91cF9wYXRoLCBmaWxlKTsKJiM0MzsJZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19SRE9OTFkpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlsb2dfZXJyKCYjMzQ7T3BlbmluZyAlcyYjMzQ7LCBmaWxlX3BhdGgpOwomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZ290ID0gcmVhZChmZCwgYnVmLCBsZW4gLSAxKTsKJiM0MzsJaWYgKGdvdCAmbHQ7IDApIHsKJiM0MzsJCWxvZ19lcnIoJiMzNDtSZWFkaW5nICVzJiMzNDssIGZpbGVfcGF0aCk7CiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsJfQomIzQzOwlidWZbZ290XSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmVhZF9jZ3JvdXBfZmlsZSgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGUKJiM0MzsgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpcgomIzQzOyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb20KJiM0MzsgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzCiYjNDM7ICogQGxlbjogU2l6ZSBvZiBAYnVmCiYjNDM7ICoKJiM0MzsgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAmIzM5O3MgZGlyZWN0b3J5LgomIzQzOyAqCiYjNDM7ICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC4KJiM0MzsgKi8KJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLAomIzQzOwkJICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pCiYjNDM7ewomIzQzOwljaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdOwomIzQzOwomIzQzOwlmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KCkgLSBSZWFkIGZyb20gYSBjZ3JvdXAgZmlsZSBpbiB0aGUgcGFyZW50IHByb2Nlc3MKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpcgomIzQzOyAqIEByZWxhdGl2ZV9wYXRoOiBUaGUgY2dyb3VwIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgcHJvY2VzcyB3b3JrZGlyCiYjNDM7ICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbQomIzQzOyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3MKJiM0MzsgKiBAbGVuOiBTaXplIG9mIEBidWYKJiM0MzsgKgomIzQzOyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCYjMzk7cyBkaXJlY3RvcnkgdW5kZXIgdGhlIHBhcmVudCBwcm9jZXNzCiYjNDM7ICogd29ya2Rpci4KJiM0MzsgKgomIzQzOyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuCiYjNDM7ICovCiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiYjNDM7CQkJICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKJiM0Mzt7CiYjNDM7CWNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07CiYjNDM7CiYjNDM7CWZvcm1hdF9wYXJlbnRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpOwomIzQzOwlyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSAtIFNldHVwIHRoZSBjZ3JvdXAgZW52aXJvbm1lbnQKICAqCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCmluZGV4IDM4NTczMDRiZTg3NDEuLmQ0MmQyZTEzMDQ0ZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oCkBAIC0xNSw2ICYjNDM7MTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiBpbnQgd3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsCiAJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Zik7CiYjNDM7aW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCSAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKJiM0MztpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSwKJiM0MzsJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIGludCBjZ3JvdXBfc2V0dXBfYW5kX2pvaW4oY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7CiBpbnQgZ2V0X3Jvb3RfY2dyb3VwKHZvaWQpOwogaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jCkBAIC0wLDAgJiM0MzsxLDE1OCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3N5cy93YWl0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdXNlci5oJmd0OwomIzQzOyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqLwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpCiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjZ3JvdXBfaGVscGVycy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FyZW5hX21lbWNnLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBDR19QQVRICQkmIzM0Oy9hcmVuYV9tZW1jZyYjMzQ7CiYjNDM7CiYjNDM7LyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi8KJiM0MzsjZGVmaW5lIEFSRU5BX0JVREdFVAkoNjQgKiAxMDI0ICogMTAyNCkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBkdW1wX21lbWNnKGludCAoKnJkKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpKQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5CiYjNDM7CSAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kCiYjNDM7CSAqIG1lbW9yeS5ldmVudHMgc3Vydml2ZSB0aGUgY2hpbGQgYW5kIHRlbGwgdGhlIHN0b3J5IGVpdGhlciB3YXkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LmN1cnJlbnQmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuY3VycmVudDogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5tYXgmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkubWF4OiAlcyYjMzQ7LCBidWYpOwomIzQzOwlpZiAoIXJkKENHX1BBVEgsICYjMzQ7bWVtb3J5LnBlYWsmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkucGVhazogJXMmIzM0OywgYnVmKTsKJiM0MzsJaWYgKCFyZChDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgYnVmLCBzaXplb2YoYnVmKSkpCiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDttZW1vcnkuZXZlbnRzOlxuJXMmIzM0OywgYnVmKTsKJiM0MzsJZmZsdXNoKHN0ZGVycik7CiYjNDM7fQomIzQzOwomIzQzOy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiAmIzM0O29vbV9raWxsJiMzNDsgaW4gbWVtb3J5LmV2ZW50cy4gKi8KJiM0MztzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KQomIzQzO3sKJiM0MzsJY2hhciBidWZbNTEyXSwgKnA7CiYjNDM7CiYjNDM7CWlmIChyZWFkX2Nncm91cF9maWxlKGNnLCBmaWxlLCBidWYsIHNpemVvZihidWYpKSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcCA9IHN0cnN0cihidWYsIGtleSk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsJcmV0dXJuIHN0cnRvbChwICYjNDM7IHN0cmxlbihrZXkpLCBOVUxMLCAxMCk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2VyaWFsX3Rlc3RfYXJlbmFfbWVtY2codm9pZCkKJiM0Mzt7CiYjNDM7CWludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7CiYjNDM7CWNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7CiYjNDM7CWNoYXIgYnVmWzY0XTsKJiM0MzsJcGlkX3QgcGlkOwomIzQzOwomIzQzOwllcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3NldHVwX2Nncm91cF9lbnZpcm9ubWVudCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY2dyb3VwX2ZkID0gY3JlYXRlX2FuZF9nZXRfY2dyb3VwKENHX1BBVEgpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsICYjMzQ7Y3JlYXRlX2FuZF9nZXRfY2dyb3VwJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIE5vIG1lbW9yeSBjb250cm9sbGVyIC0mZ3Q7IG5vdGhpbmcgdG8gdGVzdC4gKi8KJiM0MzsJaWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgJiMzNDttZW1vcnkuY3VycmVudCYjMzQ7LCBidWYsIHNpemVvZihidWYpKSkgewomIzQzOwkJZnByaW50ZihzdGRlcnIsICYjMzQ7JXM6U0tJUDpubyBtZW1vcnkgY29udHJvbGxlclxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBpZCA9IGZvcmsoKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocGlkLCAwLCAmIzM0O2ZvcmsmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKHBpZCA9PSAwKSB7CiYjNDM7CQlzdHJ1Y3QgYXJlbmFfbWVtY2cgKmNza2VsOwomIzQzOwkJX191MzIgaSwgbnBhZ2VzOwomIzQzOwkJY2hhciAqYmFzZTsKJiM0MzsJCXNpemVfdCBzejsKJiM0MzsJCWxvbmcgY3VyOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIERvIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2hpbGQ6IHRoZSBhcmVuYSB2bWEgaXMgVk1fRE9OVENPUFkgc28KJiM0MzsJCSAqIGl0IHdvdWxkIG5vdCBzdXJ2aXZlIGZvcmsoKSwgb25seSB0aGUgY2hpbGQgc2hvdWxkIGJlIHVuZGVyIHRoZQomIzQzOwkJICogbGltaXQgc28gdGhhdCBhIG1lbWNnIE9PTSBjYW5ub3QgcGljayB0ZXN0X3Byb2dzLCBhbmQgYSBtYXAgaXMKJiM0MzsJCSAqIGNoYXJnZWQgdG8gdGhlIG1lbWNnIG9mIHRoZSB0YXNrIHRoYXQgY3JlYXRlcyBpdCAtIHNvIGpvaW4KJiM0MzsJCSAqIGJlZm9yZSBsb2FkLiBUaGUgY2dyb3VwIHdvcmsgZGlyIGJlbG9uZ3MgdG8gdGhlIHBhcmVudCB0aGF0IHNldAomIzQzOwkJICogdGhlIGVudmlyb25tZW50IHVwLCBzbyByZWFjaCBpdCB3aXRoIHRoZSBfcGFyZW50KCkgaGVscGVycy4KJiM0MzsJCSAqIEVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHBhcmVudCB0aHJvdWdoIHRoZSBleGl0IGNvZGUsIHNpbmNlCiYjNDM7CQkgKiBBU1NFUlRfKiBpbiBhIGZvcmtlZCBjaGlsZCBkb2VzIG5vdCByZWFjaCBpdC4KJiM0MzsJCSAqLwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslZCYjMzQ7LCBnZXRwaWQoKSk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7Y2dyb3VwLnByb2NzJiMzNDssIGJ1ZikpCiYjNDM7CQkJX2V4aXQoMik7CiYjNDM7CiYjNDM7CQljc2tlbCA9IGFyZW5hX21lbWNnX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CQlpZiAoIWNza2VsKQomIzQzOwkJCV9leGl0KDMpOwomIzQzOwomIzQzOwkJYmFzZSA9IGJwZl9tYXBfX2luaXRpYWxfdmFsdWUoY3NrZWwtJmd0O21hcHMuYXJlbmEsICZhbXA7c3opOwomIzQzOwkJaWYgKCFiYXNlKQomIzQzOwkJCV9leGl0KDQpOwomIzQzOwkJbnBhZ2VzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoY3NrZWwtJmd0O21hcHMuYXJlbmEpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcCBvbmx5IG5vdywgYWZ0ZXIgbG9hZDogZXZlcnl0aGluZyBidXQgdGhlIGZhdWx0LWluIGlzCiYjNDM7CQkgKiBjaGFyZ2VkLCBzbyB0aGUgYXJlbmEgZ2V0cyBhIGZpeGVkIGJ1ZGdldCByZWdhcmRsZXNzIG9mIHdoYXQKJiM0MzsJCSAqIHRoZSBsb2FkIGl0c2VsZiBjb3N0LCBhbmQgdGhlIGxvYWQgY2FuIG5ldmVyIGhpdCB0aGUgbGltaXQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChyZWFkX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCAmIzM0O21lbW9yeS5jdXJyZW50JiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQomIzQzOwkJCV9leGl0KDUpOwomIzQzOwkJY3VyID0gc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDslbGQmIzM0OywgY3VyICYjNDM7IEFSRU5BX0JVREdFVCk7CiYjNDM7CQlpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsICYjMzQ7bWVtb3J5Lm1heCYjMzQ7LCBidWYpKQomIzQzOwkJCV9leGl0KDYpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5wYWdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJYmFzZVsoc2l6ZV90KWkgKiBwc10gPSAxOwomIzQzOwkJLyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi8KJiM0MzsJCWR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQpOwomIzQzOwkJX2V4aXQoMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfRVEod2FpdHBpZChwaWQsICZhbXA7c3RhdHVzLCAwKSwgcGlkLCAmIzM0O3dhaXRwaWQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogQSBub24temVybyBleGl0IG1lYW5zIHRoZSBjaGlsZCBmYWlsZWQgdG8gc2V0IHVwOyB0aGUgY29kZSBzYXlzIHdoZXJlLiAqLwomIzQzOwlpZiAoV0lGRVhJVEVEKHN0YXR1cykgJmFtcDsmYW1wOyBXRVhJVFNUQVRVUyhzdGF0dXMpKSB7CiYjNDM7CQlBU1NFUlRfT0soV0VYSVRTVEFUVVMoc3RhdHVzKSwgJiMzNDtjaGlsZCBzZXR1cCYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZhdWx0aW5nIGEgdmFsaWQgYXJlbmEgYWRkcmVzcyB1bnRpbCBtZW1vcnkubWF4IGlzIGhpdCBtdXN0IG5vdCBsb29rCiYjNDM7CSAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aAomIzQzOwkgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHViwKJiM0MzsJICogYW5kIHRoZSBjaGlsZCBkaWVkIHdpdGggU0lHU0VHViBvbiBhIHZhbGlkIGFkZHJlc3M7IG5vdyBpdCBpcyBoYW5kbGVkCiYjNDM7CSAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZQomIzQzOwkgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvCiYjNDM7CSAqIGtpbGwgdGhlIGNoaWxkKSwgc28gY2hlY2sgbWVtb3J5LmV2ZW50cy5vb21fa2lsbCwgd2hpY2ggcmVjb3JkcyB0aGUKJiM0MzsJICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIUFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cyksICYjMzQ7Y2hpbGQga2lsbGVkIGJ5IHNpZ25hbCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwlpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCAmIzM0O21lbW9yeS5ldmVudHMmIzM0OywgJiMzNDtvb21fa2lsbCYjMzQ7KSwgMSwKJiM0MzsJCSAgICAgICAmIzM0O21lbWNnIG9vbV9raWxsJiMzNDspKQomIzQzOwkJZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlKTsKJiM0MztvdXQ6CiYjNDM7CWlmIChjZ3JvdXBfZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGNncm91cF9mZCk7CiYjNDM7CWNsZWFudXBfY2dyb3VwX2Vudmlyb25tZW50KCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi44ODI1OWNmZWEwNmI2Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMKQEAgLTAsMCAmIzQzOzEsMjQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7YnBmX2FyZW5hX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTsKJiM0MzsJX191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDUwMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovCiYjNDM7I2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjQKJiM0MzsJX191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCAmbHQ7Jmx0OyAzMik7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi8KJiM0MzsjZWxzZQomIzQzOwlfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsICZsdDsmbHQ7IDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwomIzQzOyNlbmRpZgomIzQzO30gYXJlbmEgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO2ludCBub29wKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjE5CgkJCQkJCQlvdXRwdXQ6IDIxMwoJCQkJCQkJdGhvdWdodHM6IDExMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQ6IEJQRiBBcmVuYSBTbGVlcGFibGUgQWxsb2NhdG9yKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBwYXRjaCBzZXJpZXMgdG91Y2hpbmcgYGtlcm5lbC9icGYvYXJlbmEuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIGFpbWluZyB0byBpbnRyb2R1Y2UgYSBzbGVlcGFibGUgcGFnZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgZm9yIEJQRiBhcmVuYSBwYWdlIGZhdWx0cy4gVGhlcmUmIzM5O3MgYWxzbyBhIG5ldyBzZWxmdGVzdCBmb3IgQlBGIGFyZW5hIG1lbWNnIGxpbWl0cyBhZGRlZC4gVGhlIGtleSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uPwoKRmlyc3QsIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGludHJvZHVjZWQuIEl0IGludGVybmFsbHkgY2FsbHMgYGFsbG9jX3BhZ2VzX25vZGVgLCBidXQgY3J1Y2lhbGx5LCBpdCB1c2VzIGBCUEZfUEFHRV9HRlBgLCB3aGljaCAqaW5jbHVkZXMqIGBfX0dGUF9aRVJPYC4gVGhpcyBtZWFucyB0aGUgbmV3bHkgYWxsb2NhdGVkIHBhZ2UgKndpbGwqIGJlIHplcm9lZC4gQWx3YXlzIGEgZ29vZCBzaWduLgoKTm93LCBpbnRvIGBrZXJuZWwvYnBmL2FyZW5hLmNgLiBgYXJlbmFfdm1fZmF1bHRgIGlzIG1vZGlmaWVkIHRvIHVzZSB0aGlzIG5ldyBzbGVlcGFibGUgYWxsb2NhdG9yLiBUaGUgcmVsZXZhbnQgY29kZSBwcmVhbGxvY2F0ZXMgYSBwYWdlIG91dHNpZGUgdGhlIHNwaW5sb2NrIHVzaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4gSWYgdGhlIHByZWFsbG9jYXRlZCBwYWdlIGlzbiYjMzk7dCBuZWVkZWQsIGl0JiMzOTtzIGZyZWVkLiBJZiBpdCAqaXMqIHVzZWQsIGl0JiMzOTtzIG1hcHBlZC4gQWdhaW4sIHNpbmNlIGBfX0dGUF9aRVJPYCBpcyBpbiB0aGUgZmxhZ3MsIHRoZSBwYWdlIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gemVybyBiZWZvcmUgbWFwcGluZy4gV2UmIzM5O3JlIGV4cGxpY2l0bHkgaW5pdGlhbGl6aW5nIHRoZSBtZW1vcnksIHNvIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MuCgpUaGUgcHJlc2VuY2Ugb2YgbmV3IHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNgIGlzIGdvb2QsIGJ1dCBkb2VzbiYjMzk7dCBzd2F5IG91ciBkZWNpc2lvbiBvbiB0aGlzIEtNU0FOIGFzc2Vzc21lbnQuCgpPa2F5LCBsZXQmIzM5O3MgdmVyaWZ5IGFnYWluLiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZSBjaGVjayBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAsIHdoaWNoIGV4cGxpY2l0bHkgY2FsbHMgYGFsbG9jX3BhZ2VzX25vZGVgIHdpdGggYEJQRl9QQUdFX0dGUGAsIGFuZCAqdGhhdCogaW5jbHVkZXMgYF9fR0ZQX1pFUk9gLiBJJiMzOTtsbCBkbyB0aGUgc2FtZSBmb3IgYGFyZW5hX3ZtX2ZhdWx0YCwgYW5kIEkgc2VlIHRoZSBleGFjdCBzYW1lIHRoaW5nOyB0aGF0IGEgcGFnZSBhbGxvY2F0ZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBmcmVlZCBpZiBpdCBpcyBub3QgdXNlZCwgYW5kIGl0IGlzIGEgemVyb2VkIHBhZ2Ugd2hlbiBpdCBpcyBtYXBwZWQuIFNvLCBldmVuIGlmIHRoZSBwYWdlIGlzIG1hcHBlZCwgaXQmIzM5O3Mgc3RhcnRpbmcgZnJvbSBhIGtub3duIHN0YXRlLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgbmV3bHkgYWxsb2NhdGVkIHBhZ2VzIGFyZSB6ZXJvZWQsIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0aGF0IGludHJvZHVjZSBuZXcgZmllbGRzIHRvIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSB3aXRob3V0IGluaXRpYWxpemF0aW9uLCB0aGUgbG9naWMgaXMgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWVtY2cgYWNjb3VudGluZy4gVGhlIHBvdGVudGlhbCBpc3N1ZXMgaGVyZSBhcmUgcmVsYXRlZCB0byBsb2NraW5nLCBtZW1vcnkgbGVha3MsIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIGFuZCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4KClRoZXJlZm9yZSwgYmFzZWQgb24gbXkgYW5hbHlzaXMgb2YgdGhlIGNvZGUsIEkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGBmYWxzZWAuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24mIzM5O3QganVzdGlmaWVkIGhlcmUuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGEgY29udGV4dCBzd2l0Y2ggZnJvbSBhIG5vbi1zbGVlcGFibGUgdG8gYSBzbGVlcGFibGUgbWVtb3J5IGFsbG9jYXRvciwgd2hpbGUgbWFpbnRhaW5pbmcgYSBzYWZlIGluaXRpYWwgbWVtb3J5IHN0YXRlIGFuZCBpcyB3ZWxsLWNvdmVyZWQgYnkgb3VyIGV4aXN0aW5nIGZ1enppbmcgYW5kIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gY29tZm9ydGFibGUgd2l0aCB0aGlzIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJlbmEgcGFnZSBmYXVsdCBoYW5kbGVyIChgYXJlbmFfdm1fZmF1bHRgKSB0byBwcmVhbGxvY2F0ZSBwYWdlcyB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgb3V0c2lkZSBvZiBhIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbmVjZXNzYXJ5LiBUaGUgbmV3IGFsbG9jYXRvciBleHBsaWNpdGx5IHVzZXMgdGhlIGBfX0dGUF9aRVJPYCBmbGFnICh2aWEgYEJQRl9QQUdFX0dGUGApLCBlbnN1cmluZyB0aGF0IGFsbCBuZXdseSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIG1hcHBlZCBpbnRvIHRoZSBhcmVuYS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBhcmVuYSBwYWdlIGZhdWx0IGhhbmRsZXIgKGBhcmVuYV92bV9mYXVsdGApIHRvIHByZWFsbG9jYXRlIHBhZ2VzIHVzaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKSBvdXRzaWRlIG9mIGEgc3BpbmxvY2suIFRoaXMgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBuZWNlc3NhcnkuIFRoZSBuZXcgYWxsb2NhdG9yIGV4cGxpY2l0bHkgdXNlcyB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcgKHZpYSBgQlBGX1BBR0VfR0ZQYCksIGVuc3VyaW5nIHRoYXQgYWxsIG5ld2x5IGFsbG9jYXRlZCBwYWdlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgbWFwcGVkIGludG8gdGhlIGFyZW5hLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQxOjU1LjE0MTA3MDA5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzIwNTg5ODYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmVuYV92bV9mYXVsdFwiLFxuICAgIFwiYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiBhcmVuYSBwYWdlIGZhdWx0IGhhbmRsZXIgKGBhcmVuYV92bV9mYXVsdGApIHRvIHByZWFsbG9jYXRlIHBhZ2VzIHVzaW5nIGEgc2xlZXBhYmxlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKSBvdXRzaWRlIG9mIGEgc3BpbmxvY2suIFRoaXMgYWxsb3dzIHRoZSBtZW1jZyBPT00ga2lsbGVyIHRvIHJ1biBpZiBuZWNlc3NhcnkuIFRoZSBuZXcgYWxsb2NhdG9yIGV4cGxpY2l0bHkgdXNlcyB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcgKHZpYSBgQlBGX1BBR0VfR0ZQYCksIGVuc3VyaW5nIHRoYXQgYWxsIG5ld2x5IGFsbG9jYXRlZCBwYWdlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgYmVpbmcgbWFwcGVkIGludG8gdGhlIGFyZW5hLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gdXNlIGEgc2xlZXBhYmxlIHBhZ2UgYWxsb2NhdG9yIChgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWApIG91dHNpZGUgb2YgdGhlIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbWVtb3J5IGxpbWl0cyBhcmUgZXhjZWVkZWQsIHByZXZlbnRpbmcgc3B1cmlvdXMgU0lHQlVTL1NJR1NFR1YgZXJyb3JzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGNoYW5nZXMgaW4gdGhlIEJQRiBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQxOjU1LjE0MTA3ODA0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwNzE0MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2IzMjNlMzVmY2NjN2U4Y2Q3MTZmYTI3NzhiMDY0Mzk3YzczN2ViOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwOTo0MTo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxcbmluZGV4IGIzY2QyOGQ5ZTNiNTUuLmM4MTdjOTlkMjkwNjYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcXG5AQCAtMjc4NCw2ICsyNzg0LDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZ19nZXRfY3Vycl9vcl9uZXh0KHUzMiAqaWQpO1xcbiBcXG4gaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcXG4gXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5KTtcXG4rc3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCk7XFxuICNpZmRlZiBDT05GSUdfTUVNQ0dcXG4gdm9pZCBicGZfbWFwX21lbWNnX2VudGVyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBtZW1fY2dyb3VwICoqb2xkX21lbWNnLFxcbiBcXHRcXHRcXHQgc3RydWN0IG1lbV9jZ3JvdXAgKipuZXdfbWVtY2cpO1xcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcXG5pbmRleCA3YjY4NDcyMDBiNDMxLi5mYTQ2MmEwZmYxYWQ2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xcbkBAIC00ODEsNyArNDgxLDggQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXFx1MDAzZXZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiBcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICpuZXdfbWVtY2csICpvbGRfbWVtY2c7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZSwgKm5ld19wYWdlID0gTlVMTDtcXG4rXFx0dm1fZmF1bHRfdCBmYXVsdF9yZXQ7XFxuIFxcdGxvbmcga2Jhc2UsIGthZGRyO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRpbnQgcmV0O1xcbkBAIC00ODksNTkgKzQ5MCwxMDYgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdGtiYXNlID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcXG4gXFx0a2FkZHIgPSBrYmFzZSArICh1MzIpKHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxuIFxcbi1cXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncykpXFxuK1xcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilrYWRkcik7XFxuK1xcdGlmICghcGFnZSBcXHUwMDI2XFx1MDAyNiAhKGFyZW5hLVxcdTAwM2VtYXAubWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUHJlYWxsb2NhdGUgb3V0c2lkZSB0aGUgbG9jayB3aXRoIGEgc2xlZXBhYmxlIGFsbG9jYXRvciBzbyBpdFxcbitcXHRcXHQgKiBjYW4gcmVjbGFpbSBhbmQgcnVuIHRoZSBtZW1jZyBPT00ga2lsbGVyLCB3aGljaCB0aGVcXG4rXFx0XFx0ICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciB1bmRlciBhcmVuYS1cXHUwMDNlc3BpbmxvY2sgY2Fubm90LiBBIE5VTExcXG4rXFx0XFx0ICogcmV0dXJuIGlzIG5vbi1yZWNvdmVyYWJsZSwgc28gZmFpbCB3aXRoIFZNX0ZBVUxUX1NJR0JVUztcXG4rXFx0XFx0ICogVk1fRkFVTFRfT09NIHdvdWxkIGJlIHJldHJpZWQgYnkgdGhlIGZhdWx0IHBhdGggYW5kIGNhblxcbitcXHRcXHQgKiBsaXZlbG9jayB3aGVuIHRoZSBjaGFyZ2VkIG1lbWNnIGlzIG5vdCB0aGUgZmF1bHRpbmcgdGFzaydzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0YnBmX21hcF9tZW1jZ19lbnRlcihcXHUwMDI2YXJlbmEtXFx1MDAzZW1hcCwgXFx1MDAyNm9sZF9tZW1jZywgXFx1MDAyNm5ld19tZW1jZyk7XFxuK1xcdFxcdG5ld19wYWdlID0gYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShtYXApO1xcbitcXHRcXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xcbitcXHRcXHRpZiAoIW5ld19wYWdlKVxcbitcXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncykpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQSBmYWlsZWQgbG9jayBtZWFucyBhIHBvc3NpYmxlIGRlYWRsb2NrIHdhcyBkZXRlY3RlZC4gRG9uJ3RcXG4gXFx0XFx0ICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dFxcbiBcXHRcXHQgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC5cXG4gXFx0XFx0ICovXFxuK1xcdFxcdGlmIChuZXdfcGFnZSlcXG4rXFx0XFx0XFx0ZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApO1xcbiBcXHRcXHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xcbitcXHR9XFxuIFxcbiBcXHRwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpO1xcbiBcXHRpZiAocGFnZSkge1xcbi1cXHRcXHRpZiAocGFnZSA9PSBhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKVxcbi1cXHRcXHRcXHQvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJ3QgbGF6eS1hbGxvYyBvdmVyIGl0ICovXFxuLVxcdFxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3Y7XFxuK1xcdFxcdGlmIChwYWdlID09IGFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQSBzY3JhdGNoIHBhZ2UgbWFya3MgYSBob2xlLiBTZWdmYXVsdCBvbmx5IGlmIHRoZSB1c2VyXFxuK1xcdFxcdFxcdCAqIGFza2VkIGZvciBpdDsgb3RoZXJ3aXNlIHdlIGNvdWxkIGxhenktYWxsb2NhdGUgYnV0XFxuK1xcdFxcdFxcdCAqIGNob29zZSBub3QgdG8gb3ZlciBhIGhvbGUsIHNvIHJlcG9ydCBhIGJ1cyBlcnJvci5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGZhdWx0X3JldCA9IChhcmVuYS1cXHUwMDNlbWFwLm1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpID9cXG4rXFx0XFx0XFx0XFx0ICAgIFZNX0ZBVUxUX1NJR1NFR1YgOiBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X2Vycl9sb2NrZWQ7XFxuK1xcdFxcdH1cXG4gXFx0XFx0LyogYWxyZWFkeSBoYXZlIGEgcGFnZSB2bWFwLWVkICovXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbitcXHRpZiAoYXJlbmEtXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSB7XFxuK1xcdFxcdC8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovXFxuK1xcdFxcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR1NFR1Y7XFxuK1xcdFxcdGdvdG8gb3V0X2Vycl9sb2NrZWQ7XFxuK1xcdH1cXG4rXFxuIFxcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIFxcdTAwMjZvbGRfbWVtY2csIFxcdTAwMjZuZXdfbWVtY2cpO1xcbiBcXG4tXFx0aWYgKGFyZW5hLVxcdTAwM2VtYXAubWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcXG4tXFx0XFx0LyogVXNlciBzcGFjZSByZXF1ZXN0ZWQgdG8gc2VnZmF1bHQgd2hlbiBwYWdlIGlzIG5vdCBhbGxvY2F0ZWQgYnkgYnBmIHByb2cgKi9cXG4tXFx0XFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcXG4rXFx0aWYgKCFuZXdfcGFnZSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBWZXJ5IHJhcmUgcmFjZTogdGhlIGJwZiBwcm9ncmFtIGhhZCBhbGxvY2F0ZWQgYSBwYWdlIGhlcmUsIHNvXFxuK1xcdFxcdCAqIHRoZSBsb2NrbGVzcyBwcm9iZSBzYXcgaXQgYW5kIHdlIHNraXBwZWQgcHJlYWxsb2NhdGlvbiwgYnV0IGl0XFxuK1xcdFxcdCAqIGZyZWVkIHRoZSBwYWdlIGJlZm9yZSB3ZSB0b29rIHRoZSBsb2NrLiBOb3cgd2UgZG8gbmVlZCBvbmU7XFxuK1xcdFxcdCAqIHNsZWVwaW5nIGlzIG5vdCBhbGxvd2VkIGhlcmUsIHNvIGZhbGwgYmFjayB0byB0aGUgbm9uLWJsb2NraW5nXFxuK1xcdFxcdCAqIGFsbG9jYXRvciBhbmQgZ2l2ZSB1cCBpZiBpdCBmYWlscy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBtYXAtXFx1MDAzZW51bWFfbm9kZSwgMSwgXFx1MDAyNm5ld19wYWdlKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbiBcXG4gXFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcXG4tXFxuLVxcdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5hcmVuYSA9IGFyZW5hLCAucGFnZXMgPSBcXHUwMDI2cGFnZSwgLmkgPSAwIH07XFxuLVxcdC8qIEFjY291bnQgaW50byBtZW1jZyBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgYnBmX2FyZW5hICovXFxuLVxcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsIFxcdTAwMjZwYWdlKTtcXG4gXFx0aWYgKHJldCkge1xcbi1cXHRcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG4tXFx0XFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcXG4rXFx0XFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xcbitcXHRcXHRnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnO1xcbiBcXHR9XFxuK1xcdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5hcmVuYSA9IGFyZW5hLCAucGFnZXMgPSBcXHUwMDI2bmV3X3BhZ2UsIC5pID0gMCB9O1xcbiBcXG4gXFx0cmV0ID0gYXBwbHlfdG9fcGFnZV9yYW5nZShcXHUwMDI2aW5pdF9tbSwga2FkZHIsIFBBR0VfU0laRSwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBcXHUwMDI2ZGF0YSk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0cmFuZ2VfdHJlZV9zZXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCwgdm1mLVxcdTAwM2VwZ29mZiwgMSk7XFxuLVxcdFxcdGZyZWVfcGFnZXNfbm9sb2NrKHBhZ2UsIDApO1xcbi1cXHRcXHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xcbitcXHRcXHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdFxcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XFxuIFxcdH1cXG4gXFx0Zmx1c2hfdm1hcF9jYWNoZShrYWRkciwgUEFHRV9TSVpFKTtcXG4gXFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG4rXFx0LyogbmV3X3BhZ2Ugd2FzIGNvbnN1bWVkICovXFxuK1xcdHBhZ2UgPSBuZXdfcGFnZTtcXG4rXFx0bmV3X3BhZ2UgPSBOVUxMO1xcbiBvdXQ6XFxuIFxcdHBhZ2VfcmVmX2FkZChwYWdlLCAxKTtcXG4gXFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG4rXFx0aWYgKG5ld19wYWdlKVxcbitcXHRcXHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XFxuIFxcdHZtZi1cXHUwMDNlcGFnZSA9IHBhZ2U7XFxuIFxcdHJldHVybiAwO1xcbi1vdXRfc2lnc2Vndl9tZW1jZzpcXG4rXFxuK291dF9lcnJfbG9ja2VkX21lbWNnOlxcbiBcXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xcbi1vdXRfc2lnc2VndjpcXG4rb3V0X2Vycl9sb2NrZWQ6XFxuIFxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxuLVxcdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xcbitcXHRpZiAobmV3X3BhZ2UpXFxuK1xcdFxcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcXG4rXFx0cmV0dXJuIGZhdWx0X3JldDtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhcmVuYV92bV9vcHMgPSB7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5pbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuKysrIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcXG5AQCAtNjAyLDE1ICs2MDIsMTQgQEAgc3RhdGljIGJvb2wgY2FuX2FsbG9jX3BhZ2VzKHZvaWQpXFxuIFxcdFxcdCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKTtcXG4gfVxcbiBcXG4rI2RlZmluZSBCUEZfUEFHRV9HRlAgKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTilcXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19icGZfYWxsb2NfcGFnZShpbnQgbmlkKVxcbiB7XFxuIFxcdGlmICghY2FuX2FsbG9jX3BhZ2VzKCkpXFxuIFxcdFxcdHJldHVybiBhbGxvY19wYWdlc19ub2xvY2soX19HRlBfQUNDT1VOVCwgbmlkLCAwKTtcXG4gXFxuLVxcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG5pZCxcXG4tXFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UXFxuLVxcdFxcdFxcdFxcdHwgX19HRlBfTk9XQVJOLFxcbi1cXHRcXHRcXHRcXHQwKTtcXG4rXFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLCBCUEZfUEFHRV9HRlAsIDApO1xcbiB9XFxuIFxcbiBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxcbkBAIC02MzYsNiArNjM1LDIwIEBAIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIEZvciBjYWxsZXJzIHRoYXQga25vdyB0aGV5IHJ1biBpbiBhIHNsZWVwYWJsZSBjb250ZXh0LCBlLmcuIGEgdXNlciBwYWdlXFxuKyAqIGZhdWx0IGhhbmRsZXIuIGNhbl9hbGxvY19wYWdlcygpIGlzIGEgY29uc2VydmF0aXZlIGd1ZXNzIG1hZGUgZm9yIEJQRlxcbisgKiBwcm9ncmFtIGNvbnRleHQgLSBub3RhYmx5IGl0IGlzIGFsd2F5cyBmYWxzZSBvbiBQUkVFTVBUX1JUIC0gc28gZ29pbmdcXG4rICogdGhyb3VnaCBicGZfbWFwX2FsbG9jX3BhZ2VzKCkgdGhlcmUgd291bGQgbmVlZGxlc3NseSBwaWNrIHRoZVxcbisgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yLCB3aGljaCBuZXZlciByZWNsYWltcyBhbmQgbmV2ZXIgZW5nYWdlcyB0aGUgT09NXFxuKyAqIG1hY2hpbmVyeS5cXG4rICovXFxuK3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxuK3tcXG4rXFx0bWlnaHRfc2xlZXAoKTtcXG4rXFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobWFwLVxcdTAwM2VudW1hX25vZGUsIEJQRl9QQUdFX0dGUCwgMCk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xcbmluZGV4IDQ1Y2QwYjQ3OWZlMzUuLjQxODNmZjYxNTBjMjggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xcbkBAIC0xODgsNiArMTg4LDczIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcXG4gXFx0cmV0dXJuIF9fd3JpdGVfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1Zik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgX19yZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKmNncm91cF9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbitcXHRcXHRcXHQgICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuK3tcXG4rXFx0Y2hhciBmaWxlX3BhdGhbUEFUSF9NQVggKyAxXTtcXG4rXFx0c3NpemVfdCBnb3Q7XFxuK1xcdGludCBmZDtcXG4rXFxuK1xcdHNucHJpbnRmKGZpbGVfcGF0aCwgc2l6ZW9mKGZpbGVfcGF0aCksIFxcXCIlcy8lc1xcXCIsIGNncm91cF9wYXRoLCBmaWxlKTtcXG4rXFx0ZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19SRE9OTFkpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGxvZ19lcnIoXFxcIk9wZW5pbmcgJXNcXFwiLCBmaWxlX3BhdGgpO1xcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0fVxcbitcXG4rXFx0Z290ID0gcmVhZChmZCwgYnVmLCBsZW4gLSAxKTtcXG4rXFx0aWYgKGdvdCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0bG9nX2VycihcXFwiUmVhZGluZyAlc1xcXCIsIGZpbGVfcGF0aCk7XFxuK1xcdFxcdGNsb3NlKGZkKTtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFx0YnVmW2dvdF0gPSAnXFxcXDAnO1xcbitcXHRjbG9zZShmZCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogcmVhZF9jZ3JvdXBfZmlsZSgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGVcXG4rICogQHJlbGF0aXZlX3BhdGg6IFRoZSBjZ3JvdXAgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHdvcmtkaXJcXG4rICogQGZpbGU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIGNncm91cGZzIHRvIHJlYWQgZnJvbVxcbisgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzXFxuKyAqIEBsZW46IFNpemUgb2YgQGJ1ZlxcbisgKlxcbisgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAncyBkaXJlY3RvcnkuXFxuKyAqXFxuKyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuXFxuKyAqL1xcbitpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbitcXHRcXHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG4re1xcbitcXHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xcbitcXG4rXFx0Zm9ybWF0X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcXG4rXFx0cmV0dXJuIF9fcmVhZF9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmLCBsZW4pO1xcbit9XFxuK1xcbisvKipcXG4rICogcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoKSAtIFJlYWQgZnJvbSBhIGNncm91cCBmaWxlIGluIHRoZSBwYXJlbnQgcHJvY2Vzc1xcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2RpclxcbisgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IHByb2Nlc3Mgd29ya2RpclxcbisgKiBAZmlsZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gY2dyb3VwZnMgdG8gcmVhZCBmcm9tXFxuKyAqIEBidWY6IEJ1ZmZlciB0byByZWFkIGludG8sIE5VTC10ZXJtaW5hdGVkIG9uIHN1Y2Nlc3NcXG4rICogQGxlbjogU2l6ZSBvZiBAYnVmXFxuKyAqXFxuKyAqIFJlYWQgZnJvbSBhIGZpbGUgaW4gdGhlIGdpdmVuIGNncm91cCdzIGRpcmVjdG9yeSB1bmRlciB0aGUgcGFyZW50IHByb2Nlc3NcXG4rICogd29ya2Rpci5cXG4rICpcXG4rICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC5cXG4rICovXFxuK2ludCByZWFkX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbitcXHRcXHRcXHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdGNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07XFxuK1xcbitcXHRmb3JtYXRfcGFyZW50X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcXG4rXFx0cmV0dXJuIF9fcmVhZF9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmLCBsZW4pO1xcbit9XFxuK1xcbiAvKipcXG4gICogc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCkgLSBTZXR1cCB0aGUgY2dyb3VwIGVudmlyb25tZW50XFxuICAqXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcXG5pbmRleCAzODU3MzA0YmU4NzQxLi5kNDJkMmUxMzA0NGU1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcXG5AQCAtMTUsNiArMTUsMTAgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXFxuIFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XFxuIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcXG4gXFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYpO1xcbitpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbitcXHRcXHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XFxuK2ludCByZWFkX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxcbitcXHRcXHRcXHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcXG4gaW50IGNncm91cF9zZXR1cF9hbmRfam9pbihjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcXG4gaW50IGdldF9yb290X2Nncm91cCh2b2lkKTtcXG4gaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY1xcbkBAIC0wLDAgKzEsMTU4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdGVzdF9wcm9ncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3lzL21tYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy93YWl0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy91c2VyLmhcXHUwMDNlXFxuKyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqL1xcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNkZWZpbmUgUEFHRV9TSVpFIGdldHBhZ2VzaXplKClcXG4rI2VuZGlmXFxuK1xcbisjaW5jbHVkZSBcXFwiY2dyb3VwX2hlbHBlcnMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImFyZW5hX21lbWNnLnNrZWwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgQ0dfUEFUSFxcdFxcdFxcXCIvYXJlbmFfbWVtY2dcXFwiXFxuK1xcbisvKiBCdWRnZXQgdGhlIGFyZW5hIGdldHMgb24gdG9wIG9mIHdoYXRldmVyIGlzIGFscmVhZHkgY2hhcmdlZCBhZnRlciBsb2FkLiAqL1xcbisjZGVmaW5lIEFSRU5BX0JVREdFVFxcdCg2NCAqIDEwMjQgKiAxMDI0KVxcbitcXG4rc3RhdGljIHZvaWQgZHVtcF9tZW1jZyhpbnQgKCpyZCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KSlcXG4re1xcbitcXHRjaGFyIGJ1Zls1MTJdO1xcbitcXG4rXFx0LypcXG4rXFx0ICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5XFxuK1xcdCAqIGNhcnJpZXMgaW5mb3JtYXRpb24gd2hlbiBkdW1wZWQgZnJvbSB0aGUgbGl2ZSBjaGlsZDsgbWVtb3J5LnBlYWsgYW5kXFxuK1xcdCAqIG1lbW9yeS5ldmVudHMgc3Vydml2ZSB0aGUgY2hpbGQgYW5kIHRlbGwgdGhlIHN0b3J5IGVpdGhlciB3YXkuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJkKENHX1BBVEgsIFxcXCJtZW1vcnkuY3VycmVudFxcXCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIm1lbW9yeS5jdXJyZW50OiAlc1xcXCIsIGJ1Zik7XFxuK1xcdGlmICghcmQoQ0dfUEFUSCwgXFxcIm1lbW9yeS5tYXhcXFwiLCBidWYsIHNpemVvZihidWYpKSlcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJtZW1vcnkubWF4OiAlc1xcXCIsIGJ1Zik7XFxuK1xcdGlmICghcmQoQ0dfUEFUSCwgXFxcIm1lbW9yeS5wZWFrXFxcIiwgYnVmLCBzaXplb2YoYnVmKSkpXFxuK1xcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwibWVtb3J5LnBlYWs6ICVzXFxcIiwgYnVmKTtcXG4rXFx0aWYgKCFyZChDR19QQVRILCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxcbitcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIm1lbW9yeS5ldmVudHM6XFxcXG4lc1xcXCIsIGJ1Zik7XFxuK1xcdGZmbHVzaChzdGRlcnIpO1xcbit9XFxuK1xcbisvKiBSZWFkIG9uZSBrZXkgZnJvbSBhIGZsYXQga2V5ZWQgY2dyb3VwIGZpbGUsIGUuZy4gXFxcIm9vbV9raWxsXFxcIiBpbiBtZW1vcnkuZXZlbnRzLiAqL1xcbitzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KVxcbit7XFxuK1xcdGNoYXIgYnVmWzUxMl0sICpwO1xcbitcXG4rXFx0aWYgKHJlYWRfY2dyb3VwX2ZpbGUoY2csIGZpbGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdHAgPSBzdHJzdHIoYnVmLCBrZXkpO1xcbitcXHRpZiAoIXApXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0cmV0dXJuIHN0cnRvbChwICsgc3RybGVuKGtleSksIE5VTEwsIDEwKTtcXG4rfVxcbitcXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1jZyh2b2lkKVxcbit7XFxuK1xcdGludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7XFxuK1xcdGNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7XFxuK1xcdGNoYXIgYnVmWzY0XTtcXG4rXFx0cGlkX3QgcGlkO1xcbitcXG4rXFx0ZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldHVwX2Nncm91cF9lbnZpcm9ubWVudFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjZ3JvdXBfZmQgPSBjcmVhdGVfYW5kX2dldF9jZ3JvdXAoQ0dfUEFUSCk7XFxuK1xcdGlmICghQVNTRVJUX09LX0ZEKGNncm91cF9mZCwgXFxcImNyZWF0ZV9hbmRfZ2V0X2Nncm91cFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIE5vIG1lbW9yeSBjb250cm9sbGVyIC1cXHUwMDNlIG5vdGhpbmcgdG8gdGVzdC4gKi9cXG4rXFx0aWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgXFxcIm1lbW9yeS5jdXJyZW50XFxcIiwgYnVmLCBzaXplb2YoYnVmKSkpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCIlczpTS0lQOm5vIG1lbW9yeSBjb250cm9sbGVyXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHBpZCA9IGZvcmsoKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcXFwiZm9ya1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0aWYgKHBpZCA9PSAwKSB7XFxuK1xcdFxcdHN0cnVjdCBhcmVuYV9tZW1jZyAqY3NrZWw7XFxuK1xcdFxcdF9fdTMyIGksIG5wYWdlcztcXG4rXFx0XFx0Y2hhciAqYmFzZTtcXG4rXFx0XFx0c2l6ZV90IHN6O1xcbitcXHRcXHRsb25nIGN1cjtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIERvIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2hpbGQ6IHRoZSBhcmVuYSB2bWEgaXMgVk1fRE9OVENPUFkgc29cXG4rXFx0XFx0ICogaXQgd291bGQgbm90IHN1cnZpdmUgZm9yaygpLCBvbmx5IHRoZSBjaGlsZCBzaG91bGQgYmUgdW5kZXIgdGhlXFxuK1xcdFxcdCAqIGxpbWl0IHNvIHRoYXQgYSBtZW1jZyBPT00gY2Fubm90IHBpY2sgdGVzdF9wcm9ncywgYW5kIGEgbWFwIGlzXFxuK1xcdFxcdCAqIGNoYXJnZWQgdG8gdGhlIG1lbWNnIG9mIHRoZSB0YXNrIHRoYXQgY3JlYXRlcyBpdCAtIHNvIGpvaW5cXG4rXFx0XFx0ICogYmVmb3JlIGxvYWQuIFRoZSBjZ3JvdXAgd29yayBkaXIgYmVsb25ncyB0byB0aGUgcGFyZW50IHRoYXQgc2V0XFxuK1xcdFxcdCAqIHRoZSBlbnZpcm9ubWVudCB1cCwgc28gcmVhY2ggaXQgd2l0aCB0aGUgX3BhcmVudCgpIGhlbHBlcnMuXFxuK1xcdFxcdCAqIEVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHBhcmVudCB0aHJvdWdoIHRoZSBleGl0IGNvZGUsIHNpbmNlXFxuK1xcdFxcdCAqIEFTU0VSVF8qIGluIGEgZm9ya2VkIGNoaWxkIGRvZXMgbm90IHJlYWNoIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIiVkXFxcIiwgZ2V0cGlkKCkpO1xcbitcXHRcXHRpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFxcXCJjZ3JvdXAucHJvY3NcXFwiLCBidWYpKVxcbitcXHRcXHRcXHRfZXhpdCgyKTtcXG4rXFxuK1xcdFxcdGNza2VsID0gYXJlbmFfbWVtY2dfX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0XFx0aWYgKCFjc2tlbClcXG4rXFx0XFx0XFx0X2V4aXQoMyk7XFxuK1xcbitcXHRcXHRiYXNlID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShjc2tlbC1cXHUwMDNlbWFwcy5hcmVuYSwgXFx1MDAyNnN6KTtcXG4rXFx0XFx0aWYgKCFiYXNlKVxcbitcXHRcXHRcXHRfZXhpdCg0KTtcXG4rXFx0XFx0bnBhZ2VzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoY3NrZWwtXFx1MDAzZW1hcHMuYXJlbmEpO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ2FwIG9ubHkgbm93LCBhZnRlciBsb2FkOiBldmVyeXRoaW5nIGJ1dCB0aGUgZmF1bHQtaW4gaXNcXG4rXFx0XFx0ICogY2hhcmdlZCwgc28gdGhlIGFyZW5hIGdldHMgYSBmaXhlZCBidWRnZXQgcmVnYXJkbGVzcyBvZiB3aGF0XFxuK1xcdFxcdCAqIHRoZSBsb2FkIGl0c2VsZiBjb3N0LCBhbmQgdGhlIGxvYWQgY2FuIG5ldmVyIGhpdCB0aGUgbGltaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXFxcIm1lbW9yeS5jdXJyZW50XFxcIiwgYnVmLCBzaXplb2YoYnVmKSkpXFxuK1xcdFxcdFxcdF9leGl0KDUpO1xcbitcXHRcXHRjdXIgPSBzdHJ0b2woYnVmLCBOVUxMLCAxMCk7XFxuK1xcdFxcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIlbGRcXFwiLCBjdXIgKyBBUkVOQV9CVURHRVQpO1xcbitcXHRcXHRpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFxcXCJtZW1vcnkubWF4XFxcIiwgYnVmKSlcXG4rXFx0XFx0XFx0X2V4aXQoNik7XFxuK1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnBhZ2VzOyBpKyspXFxuK1xcdFxcdFxcdGJhc2VbKHNpemVfdClpICogcHNdID0gMTtcXG4rXFx0XFx0LyogRmF1bHRlZCBldmVyeXRoaW5nIHdpdGhvdXQgZHlpbmc6IGR1bXAgd2h5IChvbmx5IHVuZGVyIC12KS4gKi9cXG4rXFx0XFx0ZHVtcF9tZW1jZyhyZWFkX2Nncm91cF9maWxlX3BhcmVudCk7XFxuK1xcdFxcdF9leGl0KDApO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXFx1MDAyNnN0YXR1cywgMCksIHBpZCwgXFxcIndhaXRwaWRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBBIG5vbi16ZXJvIGV4aXQgbWVhbnMgdGhlIGNoaWxkIGZhaWxlZCB0byBzZXQgdXA7IHRoZSBjb2RlIHNheXMgd2hlcmUuICovXFxuK1xcdGlmIChXSUZFWElURUQoc3RhdHVzKSBcXHUwMDI2XFx1MDAyNiBXRVhJVFNUQVRVUyhzdGF0dXMpKSB7XFxuK1xcdFxcdEFTU0VSVF9PSyhXRVhJVFNUQVRVUyhzdGF0dXMpLCBcXFwiY2hpbGQgc2V0dXBcXFwiKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZhdWx0aW5nIGEgdmFsaWQgYXJlbmEgYWRkcmVzcyB1bnRpbCBtZW1vcnkubWF4IGlzIGhpdCBtdXN0IG5vdCBsb29rXFxuK1xcdCAqIGxpa2UgYW4gaW52YWxpZCBhY2Nlc3MuIFdpdGhvdXQgdGhlIGZpeCB0aGUgZmF1bHQgcGF0aCBhbGxvY2F0ZWQgd2l0aFxcbitcXHQgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHVixcXG4rXFx0ICogYW5kIHRoZSBjaGlsZCBkaWVkIHdpdGggU0lHU0VHViBvbiBhIHZhbGlkIGFkZHJlc3M7IG5vdyBpdCBpcyBoYW5kbGVkXFxuK1xcdCAqIGJ5IHRoZSBtZW1jZyBPT00gcGF0aCBpbnN0ZWFkLiBBIFNJR0tJTEwgYWxvbmUgd291bGQgbm90IHByb3ZlIHRoZVxcbitcXHQgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvXFxuK1xcdCAqIGtpbGwgdGhlIGNoaWxkKSwgc28gY2hlY2sgbWVtb3J5LmV2ZW50cy5vb21fa2lsbCwgd2hpY2ggcmVjb3JkcyB0aGVcXG4rXFx0ICogbWVtY2cgT09NIGFuZCBzdXJ2aXZlcyB0aGUgY2hpbGQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIUFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cyksIFxcXCJjaGlsZCBraWxsZWQgYnkgc2lnbmFsXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCBcXFwibWVtb3J5LmV2ZW50c1xcXCIsIFxcXCJvb21fa2lsbFxcXCIpLCAxLFxcbitcXHRcXHQgICAgICAgXFxcIm1lbWNnIG9vbV9raWxsXFxcIikpXFxuK1xcdFxcdGR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZSk7XFxuK291dDpcXG4rXFx0aWYgKGNncm91cF9mZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShjZ3JvdXBfZmQpO1xcbitcXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg4MjU5Y2ZlYTA2YjZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNcXG5AQCAtMCwwICsxLDI0IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjdm1saW51eC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfYXJlbmFfY29tbW9uLmhcXFwiXFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcXG4rXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDUwMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovXFxuKyNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0XFxuK1xcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXFx1MDAzY1xcdTAwM2MgMzIpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuKyNlbHNlXFxuK1xcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXFx1MDAzY1xcdTAwM2MgNDQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuKyNlbmRpZlxcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK2ludCBub29wKHZvaWQgKmN0eClcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQxOjU1LjczMjgyODA4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI1MjM2Njc4NTk0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmVuYV92bV9mYXVsdFwiLFxuICAgIFwiYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYXMgKGBhcmVuYV92bV9mYXVsdGApIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKSBvdXRzaWRlIG9mIHRoZSBzcGlubG9jay4gVGhpcyBhbGxvd3MgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG1lbW9yeSBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBwcmV2ZW50aW5nIHNwdXJpb3VzIFNJR0JVUy9TSUdTRUdWIGVycm9ycy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjaGFuZ2VzIGluIHRoZSBCUEYgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYjMyM2UzNWZjY2M3ZThjZDcxNmZhMjc3OGIwNjQzOTdjNzM3ZWI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDk6NDE6NTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9saW51eC9icGYuaFxuaW5kZXggYjNjZDI4ZDllM2I1NS4uYzgxN2M5OWQyOTA2NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYnBmLmhcbkBAIC0yNzg0LDYgKzI3ODQsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nX2dldF9jdXJyX29yX25leHQodTMyICppZCk7XG4gXG4gaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbiBcdFx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xuK3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApO1xuICNpZmRlZiBDT05GSUdfTUVNQ0dcbiB2b2lkIGJwZl9tYXBfbWVtY2dfZW50ZXIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IG1lbV9jZ3JvdXAgKipvbGRfbWVtY2csXG4gXHRcdFx0IHN0cnVjdCBtZW1fY2dyb3VwICoqbmV3X21lbWNnKTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDdiNjg0NzIwMGI0MzEuLmZhNDYyYTBmZjFhZDYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTQ4MSw3ICs0ODEsOCBAQCBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWYtXHUwMDNldm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcbi1cdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2UsICpuZXdfcGFnZSA9IE5VTEw7XG4rXHR2bV9mYXVsdF90IGZhdWx0X3JldDtcbiBcdGxvbmcga2Jhc2UsIGthZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCByZXQ7XG5AQCAtNDg5LDU5ICs0OTAsMTA2IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0a2Jhc2UgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xuIFx0a2FkZHIgPSBrYmFzZSArICh1MzIpKHZtZi1cdTAwM2VhZGRyZXNzKTtcbiBcbi1cdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG4rXHRwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpO1xuK1x0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFByZWFsbG9jYXRlIG91dHNpZGUgdGhlIGxvY2sgd2l0aCBhIHNsZWVwYWJsZSBhbGxvY2F0b3Igc28gaXRcbitcdFx0ICogY2FuIHJlY2xhaW0gYW5kIHJ1biB0aGUgbWVtY2cgT09NIGtpbGxlciwgd2hpY2ggdGhlXG4rXHRcdCAqIG5vbi1ibG9ja2luZyBhbGxvY2F0b3IgdW5kZXIgYXJlbmEtXHUwMDNlc3BpbmxvY2sgY2Fubm90LiBBIE5VTExcbitcdFx0ICogcmV0dXJuIGlzIG5vbi1yZWNvdmVyYWJsZSwgc28gZmFpbCB3aXRoIFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0ICogVk1fRkFVTFRfT09NIHdvdWxkIGJlIHJldHJpZWQgYnkgdGhlIGZhdWx0IHBhdGggYW5kIGNhblxuK1x0XHQgKiBsaXZlbG9jayB3aGVuIHRoZSBjaGFyZ2VkIG1lbWNnIGlzIG5vdCB0aGUgZmF1bHRpbmcgdGFzaydzLlxuK1x0XHQgKi9cbitcdFx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbitcdFx0bmV3X3BhZ2UgPSBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKG1hcCk7XG4rXHRcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4rXHRcdGlmICghbmV3X3BhZ2UpXG4rXHRcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbitcdH1cbitcbitcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpIHtcbiBcdFx0LypcbiBcdFx0ICogQSBmYWlsZWQgbG9jayBtZWFucyBhIHBvc3NpYmxlIGRlYWRsb2NrIHdhcyBkZXRlY3RlZC4gRG9uJ3RcbiBcdFx0ICogcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOiB0aGlzIGhhbmRsZXIgbmV2ZXIgdG9vayBtbWFwX2xvY2ssIGJ1dFxuIFx0XHQgKiB0aGUgZmF1bHQgcGF0aCB3b3VsZCByZS10YWtlIGl0IG9uIHJldHJ5IGFuZCBkZWFkbG9jay4gRmFpbC5cbiBcdFx0ICovXG4rXHRcdGlmIChuZXdfcGFnZSlcbitcdFx0XHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XG4gXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4rXHR9XG4gXG4gXHRwYWdlID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopa2FkZHIpO1xuIFx0aWYgKHBhZ2UpIHtcbi1cdFx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxuLVx0XHRcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24ndCBsYXp5LWFsbG9jIG92ZXIgaXQgKi9cbi1cdFx0XHRnb3RvIG91dF9zaWdzZWd2O1xuK1x0XHRpZiAocGFnZSA9PSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEEgc2NyYXRjaCBwYWdlIG1hcmtzIGEgaG9sZS4gU2VnZmF1bHQgb25seSBpZiB0aGUgdXNlclxuK1x0XHRcdCAqIGFza2VkIGZvciBpdDsgb3RoZXJ3aXNlIHdlIGNvdWxkIGxhenktYWxsb2NhdGUgYnV0XG4rXHRcdFx0ICogY2hvb3NlIG5vdCB0byBvdmVyIGEgaG9sZSwgc28gcmVwb3J0IGEgYnVzIGVycm9yLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGZhdWx0X3JldCA9IChhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSA/XG4rXHRcdFx0XHQgICAgVk1fRkFVTFRfU0lHU0VHViA6IFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0XHRnb3RvIG91dF9lcnJfbG9ja2VkO1xuK1x0XHR9XG4gXHRcdC8qIGFscmVhZHkgaGF2ZSBhIHBhZ2Ugdm1hcC1lZCAqL1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdGlmIChhcmVuYS1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9TRUdWX09OX0ZBVUxUKSB7XG4rXHRcdC8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovXG4rXHRcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR1NFR1Y7XG4rXHRcdGdvdG8gb3V0X2Vycl9sb2NrZWQ7XG4rXHR9XG4rXG4gXHRicGZfbWFwX21lbWNnX2VudGVyKFx1MDAyNmFyZW5hLVx1MDAzZW1hcCwgXHUwMDI2b2xkX21lbWNnLCBcdTAwMjZuZXdfbWVtY2cpO1xuIFxuLVx0aWYgKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpXG4tXHRcdC8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovXG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4rXHRpZiAoIW5ld19wYWdlKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFZlcnkgcmFyZSByYWNlOiB0aGUgYnBmIHByb2dyYW0gaGFkIGFsbG9jYXRlZCBhIHBhZ2UgaGVyZSwgc29cbitcdFx0ICogdGhlIGxvY2tsZXNzIHByb2JlIHNhdyBpdCBhbmQgd2Ugc2tpcHBlZCBwcmVhbGxvY2F0aW9uLCBidXQgaXRcbitcdFx0ICogZnJlZWQgdGhlIHBhZ2UgYmVmb3JlIHdlIHRvb2sgdGhlIGxvY2suIE5vdyB3ZSBkbyBuZWVkIG9uZTtcbitcdFx0ICogc2xlZXBpbmcgaXMgbm90IGFsbG93ZWQgaGVyZSwgc28gZmFsbCBiYWNrIHRvIHRoZSBub24tYmxvY2tpbmdcbitcdFx0ICogYWxsb2NhdG9yIGFuZCBnaXZlIHVwIGlmIGl0IGZhaWxzLlxuK1x0XHQgKi9cbitcdFx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIG1hcC1cdTAwM2VudW1hX25vZGUsIDEsIFx1MDAyNm5ld19wYWdlKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0XHRnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRyZXQgPSByYW5nZV90cmVlX2NsZWFyKFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xuLVx0aWYgKHJldClcbi1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbi1cbi1cdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5hcmVuYSA9IGFyZW5hLCAucGFnZXMgPSBcdTAwMjZwYWdlLCAuaSA9IDAgfTtcbi1cdC8qIEFjY291bnQgaW50byBtZW1jZyBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgYnBmX2FyZW5hICovXG4tXHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgTlVNQV9OT19OT0RFLCAxLCBcdTAwMjZwYWdlKTtcbiBcdGlmIChyZXQpIHtcbi1cdFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHZtZi1cdTAwM2VwZ29mZiwgMSk7XG4tXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4rXHRcdGZhdWx0X3JldCA9IFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0Z290byBvdXRfZXJyX2xvY2tlZF9tZW1jZztcbiBcdH1cbitcdHN0cnVjdCBhcHBseV9yYW5nZV9kYXRhIGRhdGEgPSB7IC5hcmVuYSA9IGFyZW5hLCAucGFnZXMgPSBcdTAwMjZuZXdfcGFnZSwgLmkgPSAwIH07XG4gXG4gXHRyZXQgPSBhcHBseV90b19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGthZGRyLCBQQUdFX1NJWkUsIGFwcGx5X3JhbmdlX3NldF9jYiwgXHUwMDI2ZGF0YSk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xuLVx0XHRmcmVlX3BhZ2VzX25vbG9jayhwYWdlLCAwKTtcbi1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbitcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuK1x0XHRnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnO1xuIFx0fVxuIFx0Zmx1c2hfdm1hcF9jYWNoZShrYWRkciwgUEFHRV9TSVpFKTtcbiBcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4rXHQvKiBuZXdfcGFnZSB3YXMgY29uc3VtZWQgKi9cbitcdHBhZ2UgPSBuZXdfcGFnZTtcbitcdG5ld19wYWdlID0gTlVMTDtcbiBvdXQ6XG4gXHRwYWdlX3JlZl9hZGQocGFnZSwgMSk7XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbitcdGlmIChuZXdfcGFnZSlcbitcdFx0ZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApO1xuIFx0dm1mLVx1MDAzZXBhZ2UgPSBwYWdlO1xuIFx0cmV0dXJuIDA7XG4tb3V0X3NpZ3NlZ3ZfbWVtY2c6XG4rXG4rb3V0X2Vycl9sb2NrZWRfbWVtY2c6XG4gXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xuLW91dF9zaWdzZWd2OlxuK291dF9lcnJfbG9ja2VkOlxuIFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG4tXHRyZXR1cm4gVk1fRkFVTFRfU0lHU0VHVjtcbitcdGlmIChuZXdfcGFnZSlcbitcdFx0ZnJlZV9wYWdlc19ub2xvY2sobmV3X3BhZ2UsIDApO1xuK1x0cmV0dXJuIGZhdWx0X3JldDtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhcmVuYV92bV9vcHMgPSB7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNjg3NGJhMTQyNGFmMC4uZjliODE2MzhlNTM3YSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTYwMiwxNSArNjAyLDE0IEBAIHN0YXRpYyBib29sIGNhbl9hbGxvY19wYWdlcyh2b2lkKVxuIFx0XHQhSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9SVCk7XG4gfVxuIFxuKyNkZWZpbmUgQlBGX1BBR0VfR0ZQIChHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX0FDQ09VTlQgfCBfX0dGUF9OT1dBUk4pXG4rXG4gc3RhdGljIHN0cnVjdCBwYWdlICpfX2JwZl9hbGxvY19wYWdlKGludCBuaWQpXG4ge1xuIFx0aWYgKCFjYW5fYWxsb2NfcGFnZXMoKSlcbiBcdFx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vbG9jayhfX0dGUF9BQ0NPVU5ULCBuaWQsIDApO1xuIFxuLVx0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLFxuLVx0XHRcdFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9BQ0NPVU5UXG4tXHRcdFx0XHR8IF9fR0ZQX05PV0FSTixcbi1cdFx0XHRcdDApO1xuK1x0cmV0dXJuIGFsbG9jX3BhZ2VzX25vZGUobmlkLCBCUEZfUEFHRV9HRlAsIDApO1xuIH1cbiBcbiBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuQEAgLTYzNiw2ICs2MzUsMjAgQEAgaW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qXG4rICogRm9yIGNhbGxlcnMgdGhhdCBrbm93IHRoZXkgcnVuIGluIGEgc2xlZXBhYmxlIGNvbnRleHQsIGUuZy4gYSB1c2VyIHBhZ2VcbisgKiBmYXVsdCBoYW5kbGVyLiBjYW5fYWxsb2NfcGFnZXMoKSBpcyBhIGNvbnNlcnZhdGl2ZSBndWVzcyBtYWRlIGZvciBCUEZcbisgKiBwcm9ncmFtIGNvbnRleHQgLSBub3RhYmx5IGl0IGlzIGFsd2F5cyBmYWxzZSBvbiBQUkVFTVBUX1JUIC0gc28gZ29pbmdcbisgKiB0aHJvdWdoIGJwZl9tYXBfYWxsb2NfcGFnZXMoKSB0aGVyZSB3b3VsZCBuZWVkbGVzc2x5IHBpY2sgdGhlXG4rICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgd2hpY2ggbmV2ZXIgcmVjbGFpbXMgYW5kIG5ldmVyIGVuZ2FnZXMgdGhlIE9PTVxuKyAqIG1hY2hpbmVyeS5cbisgKi9cbitzdHJ1Y3QgcGFnZSAqYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuK3tcbitcdG1pZ2h0X3NsZWVwKCk7XG4rXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShtYXAtXHUwMDNlbnVtYV9ub2RlLCBCUEZfUEFHRV9HRlAsIDApO1xuK31cbitcbiBzdGF0aWMgaW50IGJ0Zl9maWVsZF9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYilcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX2ZpZWxkICpmMSA9IGEsICpmMiA9IGI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuaW5kZXggNDVjZDBiNDc5ZmUzNS4uNDE4M2ZmNjE1MGMyOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuY1xuQEAgLTE4OCw2ICsxODgsNzMgQEAgaW50IHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuIFx0cmV0dXJuIF9fd3JpdGVfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1Zik7XG4gfVxuIFxuK3N0YXRpYyBpbnQgX19yZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKmNncm91cF9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuK1x0XHRcdCAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRjaGFyIGZpbGVfcGF0aFtQQVRIX01BWCArIDFdO1xuK1x0c3NpemVfdCBnb3Q7XG4rXHRpbnQgZmQ7XG4rXG4rXHRzbnByaW50ZihmaWxlX3BhdGgsIHNpemVvZihmaWxlX3BhdGgpLCBcIiVzLyVzXCIsIGNncm91cF9wYXRoLCBmaWxlKTtcbitcdGZkID0gb3BlbihmaWxlX3BhdGgsIE9fUkRPTkxZKTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRsb2dfZXJyKFwiT3BlbmluZyAlc1wiLCBmaWxlX3BhdGgpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcbitcdGdvdCA9IHJlYWQoZmQsIGJ1ZiwgbGVuIC0gMSk7XG4rXHRpZiAoZ290IFx1MDAzYyAwKSB7XG4rXHRcdGxvZ19lcnIoXCJSZWFkaW5nICVzXCIsIGZpbGVfcGF0aCk7XG4rXHRcdGNsb3NlKGZkKTtcbitcdFx0cmV0dXJuIDE7XG4rXHR9XG4rXHRidWZbZ290XSA9ICdcXDAnO1xuK1x0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHJlYWRfY2dyb3VwX2ZpbGUoKSAtIFJlYWQgZnJvbSBhIGNncm91cCBmaWxlXG4rICogQHJlbGF0aXZlX3BhdGg6IFRoZSBjZ3JvdXAgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHdvcmtkaXJcbisgKiBAZmlsZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gY2dyb3VwZnMgdG8gcmVhZCBmcm9tXG4rICogQGJ1ZjogQnVmZmVyIHRvIHJlYWQgaW50bywgTlVMLXRlcm1pbmF0ZWQgb24gc3VjY2Vzc1xuKyAqIEBsZW46IFNpemUgb2YgQGJ1ZlxuKyAqXG4rICogUmVhZCBmcm9tIGEgZmlsZSBpbiB0aGUgZ2l2ZW4gY2dyb3VwJ3MgZGlyZWN0b3J5LlxuKyAqXG4rICogSWYgc3VjY2Vzc2Z1bCwgMCBpcyByZXR1cm5lZC5cbisgKi9cbitpbnQgcmVhZF9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuK1x0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xuK1xuK1x0Zm9ybWF0X2Nncm91cF9wYXRoKGNncm91cF9wYXRoLCByZWxhdGl2ZV9wYXRoKTtcbitcdHJldHVybiBfX3JlYWRfY2dyb3VwX2ZpbGUoY2dyb3VwX3BhdGgsIGZpbGUsIGJ1ZiwgbGVuKTtcbit9XG4rXG4rLyoqXG4rICogcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoKSAtIFJlYWQgZnJvbSBhIGNncm91cCBmaWxlIGluIHRoZSBwYXJlbnQgcHJvY2Vzc1xuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZGlyXG4rICogQHJlbGF0aXZlX3BhdGg6IFRoZSBjZ3JvdXAgcGF0aCwgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBwcm9jZXNzIHdvcmtkaXJcbisgKiBAZmlsZTogVGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gY2dyb3VwZnMgdG8gcmVhZCBmcm9tXG4rICogQGJ1ZjogQnVmZmVyIHRvIHJlYWQgaW50bywgTlVMLXRlcm1pbmF0ZWQgb24gc3VjY2Vzc1xuKyAqIEBsZW46IFNpemUgb2YgQGJ1ZlxuKyAqXG4rICogUmVhZCBmcm9tIGEgZmlsZSBpbiB0aGUgZ2l2ZW4gY2dyb3VwJ3MgZGlyZWN0b3J5IHVuZGVyIHRoZSBwYXJlbnQgcHJvY2Vzc1xuKyAqIHdvcmtkaXIuXG4rICpcbisgKiBJZiBzdWNjZXNzZnVsLCAwIGlzIHJldHVybmVkLlxuKyAqL1xuK2ludCByZWFkX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuK1x0XHRcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4re1xuK1x0Y2hhciBjZ3JvdXBfcGF0aFtQQVRIX01BWCAtIDI0XTtcbitcbitcdGZvcm1hdF9wYXJlbnRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpO1xuK1x0cmV0dXJuIF9fcmVhZF9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmLCBsZW4pO1xuK31cbitcbiAvKipcbiAgKiBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKSAtIFNldHVwIHRoZSBjZ3JvdXAgZW52aXJvbm1lbnRcbiAgKlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcbmluZGV4IDM4NTczMDRiZTg3NDEuLmQ0MmQyZTEzMDQ0ZTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmhcbkBAIC0xNSw2ICsxNSwxMCBAQCBpbnQgd3JpdGVfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdFx0ICAgICAgY29uc3QgY2hhciAqYnVmKTtcbiBpbnQgd3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4gXHRcdFx0ICAgICBjb25zdCBjaGFyICpidWYpO1xuK2ludCByZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4rXHRcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbitpbnQgcmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTtcbiBpbnQgY2dyb3VwX3NldHVwX2FuZF9qb2luKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgpO1xuIGludCBnZXRfcm9vdF9jZ3JvdXAodm9pZCk7XG4gaW50IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM1N2I5ODQ5NGNmYWJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmNcbkBAIC0wLDAgKzEsMTU4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc2lnbmFsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvbW1hbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3VzZXIuaFx1MDAzZVxuKyNpZm5kZWYgUEFHRV9TSVpFIC8qIG9uIHNvbWUgYXJjaHMgaXQgY29tZXMgaW4gc3lzL3VzZXIuaCAqL1xuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2RlZmluZSBQQUdFX1NJWkUgZ2V0cGFnZXNpemUoKVxuKyNlbmRpZlxuK1xuKyNpbmNsdWRlIFwiY2dyb3VwX2hlbHBlcnMuaFwiXG4rI2luY2x1ZGUgXCJhcmVuYV9tZW1jZy5za2VsLmhcIlxuK1xuKyNkZWZpbmUgQ0dfUEFUSFx0XHRcIi9hcmVuYV9tZW1jZ1wiXG4rXG4rLyogQnVkZ2V0IHRoZSBhcmVuYSBnZXRzIG9uIHRvcCBvZiB3aGF0ZXZlciBpcyBhbHJlYWR5IGNoYXJnZWQgYWZ0ZXIgbG9hZC4gKi9cbisjZGVmaW5lIEFSRU5BX0JVREdFVFx0KDY0ICogMTAyNCAqIDEwMjQpXG4rXG4rc3RhdGljIHZvaWQgZHVtcF9tZW1jZyhpbnQgKCpyZCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KSlcbit7XG4rXHRjaGFyIGJ1Zls1MTJdO1xuK1xuK1x0LypcbitcdCAqIG1lbW9yeS5jdXJyZW50IHJlYWRzIDAgb25jZSB0aGUgY2hpbGQgaGFzIGxlZnQgdGhlIGNncm91cCwgc28gaXQgb25seVxuK1x0ICogY2FycmllcyBpbmZvcm1hdGlvbiB3aGVuIGR1bXBlZCBmcm9tIHRoZSBsaXZlIGNoaWxkOyBtZW1vcnkucGVhayBhbmRcbitcdCAqIG1lbW9yeS5ldmVudHMgc3Vydml2ZSB0aGUgY2hpbGQgYW5kIHRlbGwgdGhlIHN0b3J5IGVpdGhlciB3YXkuXG4rXHQgKi9cbitcdGlmICghcmQoQ0dfUEFUSCwgXCJtZW1vcnkuY3VycmVudFwiLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwibWVtb3J5LmN1cnJlbnQ6ICVzXCIsIGJ1Zik7XG4rXHRpZiAoIXJkKENHX1BBVEgsIFwibWVtb3J5Lm1heFwiLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwibWVtb3J5Lm1heDogJXNcIiwgYnVmKTtcbitcdGlmICghcmQoQ0dfUEFUSCwgXCJtZW1vcnkucGVha1wiLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwibWVtb3J5LnBlYWs6ICVzXCIsIGJ1Zik7XG4rXHRpZiAoIXJkKENHX1BBVEgsIFwibWVtb3J5LmV2ZW50c1wiLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0ZnByaW50ZihzdGRlcnIsIFwibWVtb3J5LmV2ZW50czpcXG4lc1wiLCBidWYpO1xuK1x0ZmZsdXNoKHN0ZGVycik7XG4rfVxuK1xuKy8qIFJlYWQgb25lIGtleSBmcm9tIGEgZmxhdCBrZXllZCBjZ3JvdXAgZmlsZSwgZS5nLiBcIm9vbV9raWxsXCIgaW4gbWVtb3J5LmV2ZW50cy4gKi9cbitzdGF0aWMgbG9uZyBjZ19yZWFkX2tleShjb25zdCBjaGFyICpjZywgY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqa2V5KVxuK3tcbitcdGNoYXIgYnVmWzUxMl0sICpwO1xuK1xuK1x0aWYgKHJlYWRfY2dyb3VwX2ZpbGUoY2csIGZpbGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRwID0gc3Ryc3RyKGJ1Ziwga2V5KTtcbitcdGlmICghcClcbitcdFx0cmV0dXJuIC0xO1xuK1x0cmV0dXJuIHN0cnRvbChwICsgc3RybGVuKGtleSksIE5VTEwsIDEwKTtcbit9XG4rXG4rdm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1jZyh2b2lkKVxuK3tcbitcdGludCBjZ3JvdXBfZmQgPSAtMSwgc3RhdHVzLCBlcnI7XG4rXHRjb25zdCBsb25nIHBzID0gUEFHRV9TSVpFO1xuK1x0Y2hhciBidWZbNjRdO1xuK1x0cGlkX3QgcGlkO1xuK1xuK1x0ZXJyID0gc2V0dXBfY2dyb3VwX2Vudmlyb25tZW50KCk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwic2V0dXBfY2dyb3VwX2Vudmlyb25tZW50XCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRjZ3JvdXBfZmQgPSBjcmVhdGVfYW5kX2dldF9jZ3JvdXAoQ0dfUEFUSCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChjZ3JvdXBfZmQsIFwiY3JlYXRlX2FuZF9nZXRfY2dyb3VwXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIE5vIG1lbW9yeSBjb250cm9sbGVyIC1cdTAwM2Ugbm90aGluZyB0byB0ZXN0LiAqL1xuK1x0aWYgKHJlYWRfY2dyb3VwX2ZpbGUoQ0dfUEFUSCwgXCJtZW1vcnkuY3VycmVudFwiLCBidWYsIHNpemVvZihidWYpKSkge1xuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCIlczpTS0lQOm5vIG1lbW9yeSBjb250cm9sbGVyXFxuXCIsIF9fZnVuY19fKTtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHBpZCA9IGZvcmsoKTtcbitcdGlmICghQVNTRVJUX0dFKHBpZCwgMCwgXCJmb3JrXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmIChwaWQgPT0gMCkge1xuK1x0XHRzdHJ1Y3QgYXJlbmFfbWVtY2cgKmNza2VsO1xuK1x0XHRfX3UzMiBpLCBucGFnZXM7XG4rXHRcdGNoYXIgKmJhc2U7XG4rXHRcdHNpemVfdCBzejtcbitcdFx0bG9uZyBjdXI7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIERvIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgY2hpbGQ6IHRoZSBhcmVuYSB2bWEgaXMgVk1fRE9OVENPUFkgc29cbitcdFx0ICogaXQgd291bGQgbm90IHN1cnZpdmUgZm9yaygpLCBvbmx5IHRoZSBjaGlsZCBzaG91bGQgYmUgdW5kZXIgdGhlXG4rXHRcdCAqIGxpbWl0IHNvIHRoYXQgYSBtZW1jZyBPT00gY2Fubm90IHBpY2sgdGVzdF9wcm9ncywgYW5kIGEgbWFwIGlzXG4rXHRcdCAqIGNoYXJnZWQgdG8gdGhlIG1lbWNnIG9mIHRoZSB0YXNrIHRoYXQgY3JlYXRlcyBpdCAtIHNvIGpvaW5cbitcdFx0ICogYmVmb3JlIGxvYWQuIFRoZSBjZ3JvdXAgd29yayBkaXIgYmVsb25ncyB0byB0aGUgcGFyZW50IHRoYXQgc2V0XG4rXHRcdCAqIHRoZSBlbnZpcm9ubWVudCB1cCwgc28gcmVhY2ggaXQgd2l0aCB0aGUgX3BhcmVudCgpIGhlbHBlcnMuXG4rXHRcdCAqIEVycm9ycyBhcmUgcmVwb3J0ZWQgdG8gdGhlIHBhcmVudCB0aHJvdWdoIHRoZSBleGl0IGNvZGUsIHNpbmNlXG4rXHRcdCAqIEFTU0VSVF8qIGluIGEgZm9ya2VkIGNoaWxkIGRvZXMgbm90IHJlYWNoIGl0LlxuK1x0XHQgKi9cbitcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlZFwiLCBnZXRwaWQoKSk7XG4rXHRcdGlmICh3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXCJjZ3JvdXAucHJvY3NcIiwgYnVmKSlcbitcdFx0XHRfZXhpdCgyKTtcbitcbitcdFx0Y3NrZWwgPSBhcmVuYV9tZW1jZ19fb3Blbl9hbmRfbG9hZCgpO1xuK1x0XHRpZiAoIWNza2VsKVxuK1x0XHRcdF9leGl0KDMpO1xuK1xuK1x0XHRiYXNlID0gYnBmX21hcF9faW5pdGlhbF92YWx1ZShjc2tlbC1cdTAwM2VtYXBzLmFyZW5hLCBcdTAwMjZzeik7XG4rXHRcdGlmICghYmFzZSlcbitcdFx0XHRfZXhpdCg0KTtcbitcdFx0bnBhZ2VzID0gYnBmX21hcF9fbWF4X2VudHJpZXMoY3NrZWwtXHUwMDNlbWFwcy5hcmVuYSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIENhcCBvbmx5IG5vdywgYWZ0ZXIgbG9hZDogZXZlcnl0aGluZyBidXQgdGhlIGZhdWx0LWluIGlzXG4rXHRcdCAqIGNoYXJnZWQsIHNvIHRoZSBhcmVuYSBnZXRzIGEgZml4ZWQgYnVkZ2V0IHJlZ2FyZGxlc3Mgb2Ygd2hhdFxuK1x0XHQgKiB0aGUgbG9hZCBpdHNlbGYgY29zdCwgYW5kIHRoZSBsb2FkIGNhbiBuZXZlciBoaXQgdGhlIGxpbWl0LlxuK1x0XHQgKi9cbitcdFx0aWYgKHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFwibWVtb3J5LmN1cnJlbnRcIiwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdFx0X2V4aXQoNSk7XG4rXHRcdGN1ciA9IHN0cnRvbChidWYsIE5VTEwsIDEwKTtcbitcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIlbGRcIiwgY3VyICsgQVJFTkFfQlVER0VUKTtcbitcdFx0aWYgKHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcIm1lbW9yeS5tYXhcIiwgYnVmKSlcbitcdFx0XHRfZXhpdCg2KTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBhZ2VzOyBpKyspXG4rXHRcdFx0YmFzZVsoc2l6ZV90KWkgKiBwc10gPSAxO1xuK1x0XHQvKiBGYXVsdGVkIGV2ZXJ5dGhpbmcgd2l0aG91dCBkeWluZzogZHVtcCB3aHkgKG9ubHkgdW5kZXIgLXYpLiAqL1xuK1x0XHRkdW1wX21lbWNnKHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KTtcbitcdFx0X2V4aXQoMCk7XG4rXHR9XG4rXG4rXHRpZiAoIUFTU0VSVF9FUSh3YWl0cGlkKHBpZCwgXHUwMDI2c3RhdHVzLCAwKSwgcGlkLCBcIndhaXRwaWRcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogQSBub24temVybyBleGl0IG1lYW5zIHRoZSBjaGlsZCBmYWlsZWQgdG8gc2V0IHVwOyB0aGUgY29kZSBzYXlzIHdoZXJlLiAqL1xuK1x0aWYgKFdJRkVYSVRFRChzdGF0dXMpIFx1MDAyNlx1MDAyNiBXRVhJVFNUQVRVUyhzdGF0dXMpKSB7XG4rXHRcdEFTU0VSVF9PSyhXRVhJVFNUQVRVUyhzdGF0dXMpLCBcImNoaWxkIHNldHVwXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBGYXVsdGluZyBhIHZhbGlkIGFyZW5hIGFkZHJlc3MgdW50aWwgbWVtb3J5Lm1heCBpcyBoaXQgbXVzdCBub3QgbG9va1xuK1x0ICogbGlrZSBhbiBpbnZhbGlkIGFjY2Vzcy4gV2l0aG91dCB0aGUgZml4IHRoZSBmYXVsdCBwYXRoIGFsbG9jYXRlZCB3aXRoXG4rXHQgKiB0aGUgbm9uLWJsb2NraW5nIGFsbG9jYXRvciwgdHVybmVkIGl0cyAtRU5PTUVNIGludG8gVk1fRkFVTFRfU0lHU0VHVixcbitcdCAqIGFuZCB0aGUgY2hpbGQgZGllZCB3aXRoIFNJR1NFR1Ygb24gYSB2YWxpZCBhZGRyZXNzOyBub3cgaXQgaXMgaGFuZGxlZFxuK1x0ICogYnkgdGhlIG1lbWNnIE9PTSBwYXRoIGluc3RlYWQuIEEgU0lHS0lMTCBhbG9uZSB3b3VsZCBub3QgcHJvdmUgdGhlXG4rXHQgKiBtZW1jZyBPT00ga2lsbGVyIGRpZCBpdCAoYSBnbG9iYWwgT09NIG9yIGFuIHVucmVsYXRlZCBjcmFzaCBjb3VsZCBhbHNvXG4rXHQgKiBraWxsIHRoZSBjaGlsZCksIHNvIGNoZWNrIG1lbW9yeS5ldmVudHMub29tX2tpbGwsIHdoaWNoIHJlY29yZHMgdGhlXG4rXHQgKiBtZW1jZyBPT00gYW5kIHN1cnZpdmVzIHRoZSBjaGlsZC5cbitcdCAqL1xuK1x0aWYgKCFBU1NFUlRfVFJVRShXSUZTSUdOQUxFRChzdGF0dXMpLCBcImNoaWxkIGtpbGxlZCBieSBzaWduYWxcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKCFBU1NFUlRfR0UoY2dfcmVhZF9rZXkoQ0dfUEFUSCwgXCJtZW1vcnkuZXZlbnRzXCIsIFwib29tX2tpbGxcIiksIDEsXG4rXHRcdCAgICAgICBcIm1lbWNnIG9vbV9raWxsXCIpKVxuK1x0XHRkdW1wX21lbWNnKHJlYWRfY2dyb3VwX2ZpbGUpO1xuK291dDpcbitcdGlmIChjZ3JvdXBfZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShjZ3JvdXBfZmQpO1xuK1x0Y2xlYW51cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjg4MjU5Y2ZlYTA2YjZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jXG5AQCAtMCwwICsxLDI0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2FyZW5hX2NvbW1vbi5oXCJcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4rXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDUwMDAwKTsgLyogbnVtYmVyIG9mIHBhZ2VzICovXG4rI2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjRcbitcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDMyKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuKyNlbHNlXG4rXHRfX3Vsb25nKG1hcF9leHRyYSwgMHgxdWxsIFx1MDAzY1x1MDAzYyA0NCk7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbisjZW5kaWZcbit9IGFyZW5hIFNFQyhcIi5tYXBzXCIpO1xuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQgbm9vcCh2b2lkICpjdHgpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQxOjU1LjczMjgzMDM2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODc3MjUxMDk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBzb21lIHNlbGZ0ZXN0cywgd2hpY2ggaXMgZ29vZC4gQnV0IG1vcmUgaW1wb3J0YW50bHksIGl0J3MgY2hhbmdpbmcgaG93IHBhZ2VzIGFyZSBhbGxvY2F0ZWQgd2l0aGluIHRoZSBCUEYgYXJlbmEsIHNwZWNpZmljYWxseSBpbiB0aGUgYGFyZW5hX3ZtX2ZhdWx0YCBmdW5jdGlvbiwgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlci4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGludHJvZHVjaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCwgd2hpY2ggaXMgdXNpbmcgYSBzbGVlcGFibGUgYWxsb2NhdG9yIG5vdywgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyB0aGUgbWVtY2cgT09NIGtpbGxlciwgaW5zdGVhZCBvZiBqdXN0IHRoZSBub24tYmxvY2tpbmcgYWxsb2NhdG9yIHRoYXQgd2FzIHVuZGVyIGEgc3BpbmxvY2suXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlPyBJcyB0aGlzIGNoYW5nZSB3b3J0aCBzcGVuZGluZyB0aGUgZWZmb3J0IHRvIGZ1enogaXQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYGFyZW5hX3ZtX2ZhdWx0YCBhbmQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLCBhcmUgYWN0dWFsbHkgY2FsbGVkLlxuXG5gYXJlbmFfdm1fZmF1bHRgIGlzLCBhcyBJIHJlY2FsbCwgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hIG1hcHMuIFRoZSBvdGhlciBmdW5jdGlvbiwgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLCBpcyB0aGUgbmV3IGZ1bmN0aW9uIHRoYXQncyAqYmVpbmcqIGNhbGxlZCBmcm9tIGBhcmVuYV92bV9mYXVsdGAuIFNpbXBsZSBlbm91Z2guXG5cblRpbWUgdG8gc2VhcmNoIHRoZSBjb2RlLiBJIG5lZWQgdG8gZmluZCB3aGVyZSBgYXJlbmFfdm1fZmF1bHRgIGFuZCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgYXJlIHVzZWQuIE9rYXksIGBhcmVuYV92bV9mYXVsdGAgaXMgdXNlZCBpbiBgYXJlbmFfdm1fb3BzYCwgd2hpY2ggSSBiZXQgaXMgc2V0IHNvbWV3aGVyZSB3aXRoaW4gYGFyZW5hX21hcF9tbWFwYC4gSSdsbCBnbyBjaGVjayBga2VybmVsL2JwZi9hcmVuYS5jYCB0byBjb25maXJtIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMjIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NDoyNC41MDUzNDYwNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk3MjUzNzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX3ZtX2ZhdWx0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz00NjQ9c3RhdGljIHZvaWQgYXJlbmFfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDc4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0Nzk6c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4MC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NTk1PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYXJlbmFfdm1fb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU5OS1cXHQuY2xvc2VcXHRcXHQ9IGFyZW5hX3ZtX2Nsb3NlLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MDA6XFx0LmZhdWx0ICAgICAgICAgID0gYXJlbmFfdm1fZmF1bHQsXFxua2VybmVsL2JwZi9hcmVuYS5jLTYwMS19O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM9NDg9dm9pZCBzZXJpYWxfdGVzdF9hcmVuYV9tZW1fdXNhZ2Uodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbV91c2FnZS5jLTk5LVxcdCAqIFVzZXItc3BhY2UgZmF1bHQtaW46IHRvdWNoaW5nIHVuYWxsb2NhdGVkIGFyZW5hIHBhZ2VzIGFsbG9jYXRlcyB0aGVtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtX3VzYWdlLmM6MTAwOlxcdCAqIHRocm91Z2ggYXJlbmFfdm1fZmF1bHQoKS4gbGliYnBmIG1tYXAoKXMgdGhlIGFyZW5hIGF0IG1hcF9leHRyYSBkdXJpbmdcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1fdXNhZ2UuYy0xMDEtXFx0ICogbG9hZCwgc28gYnBmX21hcF9faW5pdGlhbF92YWx1ZSgpIGhhbmRzIGJhY2sgdGhhdCBiYXNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NDoyOS4wMDI2MDc2MzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjM5NzA0NDA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmVuYV92bV9mYXVsdGAsIHdoaWNoIGlzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgc3BlY2lmaWNhbGx5IGZvciBCUEYgYXJlbmFzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgYWRkaW5nIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgZGVmaW5pdGVseSBhIGZ1bmN0aW9uIHRvIGJlIGF3YXJlIG9mLlwiXG5cblRoZSBmYWN0IHRoYXQgaXQncyBpbiB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyIG1ha2VzIGl0IGluaGVyZW50bHkgcmVhY2hhYmxlLCBhbmQgbXkgZnV6emluZyBpbnN0aW5jdHMgYXJlIGFscmVhZHkga2lja2luZyBpbi4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc3BvdCB3b3J0aCBpbnZlc3Rpbmcgc29tZSB0aW1lIGFuZCBlZmZvcnQgdG8gdGVzdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBCUEYgYXJlbmFzIHNvIEkgY2FuIGVuc3VyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgcHJvcGVybHkgZW5hYmxlZCBhbmQgSSBjYW4gYnVpbGQgYSBwcm9wZXIgdGVzdCBlbnZpcm9ubWVudC4gTGV0IG1lIGZpbmQgdGhvc2UgY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNTQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NDo0MS4zOTk2NTYwNzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2MTk2NjUxNiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9BUkVOQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDk6NDQ6NDYuMDYxNjMxNTg1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzMjE0MjM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIEJQRiBBcmVuYSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBCUEZfQVJFTkFgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpdmVzLiBJdCdzIG5vdCBzb21ldGhpbmcgSSBjYW4ganVzdCBpbnR1aXRpdmVseSByZWNhbGwsIHNvIHRoZSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE15IGd1dCBzYXlzIGl0J3MgcHJvYmFibHkgZGVmaW5lZCBpbiBlaXRoZXIgYEtjb25maWdgIG9yIGBrZXJuZWwvYnBmL01ha2VmaWxlYCwgc2luY2UgdGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbG9jYXRpb24gZm9yIGEgQlBGLXNwZWNpZmljIGZlYXR1cmUuIEknbGwgc2VhcmNoIGZvciBpdCB0aGVyZS4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgYXBwcm9hY2ggd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6OTUwMSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQ0OjQ5LjU5Mzc3NzcwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUwNTQzMTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hXFxcXC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2FyZW5hLmM9NzE9c3RhdGljIGludCBzY3hfYXJlbmFfZ3JvdyhzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gsIHUzMiBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy04Ni1cXHR1YWRkcjMyID0gKHUzMikodW5zaWduZWQgbG9uZylwO1xcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYzo4NzpcXHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcXHUwMDI2XFx1MDAyNiA2NEJJVCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYy04OC0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9ODA2NT1zdGF0aWMgaW50IHNjeF9hcmVuYV9zY2FuX3Byb2coc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDY5LVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6ODA3MDpcXHQvKiBhcmVuYS5vLCB3aGljaCBkZWZpbmVzIHRoZXNlLCBpcyBidWlsdCBvbmx5IG9uIE1NVSBcXHUwMDI2XFx1MDAyNiA2NEJJVCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtODA3MS0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR182NEJJVClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZT05OTM9JChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vOiAkKE9VVFBVVCkveGRwX2xiX2JlbmNoLnNrZWwuaCBiZW5jaF9icGZfdGltaW5nLmhcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU6OTk0OiQoT1VUUFVUKS9iZW5jaF9saWJhcmVuYS5vOiAkKExJQkFSRU5BX0JFTkNIX1NLRUwpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTk5NS0kKE9VVFBVVCkvYmVuY2hfYnBmX3RpbWluZy5vOiBiZW5jaF9icGZfdGltaW5nLmhcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZT05OTg9JChPVVRQVVQpL2JlbmNoOiAkKE9VVFBVVCkvYmVuY2gubyBcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtMTAyMS1cXHRcXHQgJChPVVRQVVQpL2JlbmNoX3hkcF9sYi5vIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGU6MTAyMjpcXHRcXHQgJChPVVRQVVQpL2JlbmNoX2xpYmFyZW5hLm8gXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZS0xMDIzLVxcdFxcdCAkKE9VVFBVVCkvdXNkdF8xLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NDo1NC4wNDQzMjgzMjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTMwMzcwOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYnBmIGFyZW5hIGNvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhcmVuYS5vYCBvYmplY3QgZmlsZSwgYW5kIGl0IHNlZW1zIGxpa2UgaXQgZ2V0cyBidWlsdCBvbmx5IHVuZGVyIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zOiBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19NTVVgLCBhbmQgYENPTkZJR182NEJJVGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGluY2x1ZGUvbGludXgvYnBmLmhgIGFuZCBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBzbyB0aGVyZSBhcmUgbGlrZWx5IHJlbGF0ZWQgY2hhbmdlcyBpbiB0aGUgY29yZSBCUEYgc3RydWN0dXJlcyBhbmQgdGhlIHN5c2NhbGwgaW50ZXJmYWNlLlxuXG5NeSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgd2VyZSBgYXJlbmFfdm1fZmF1bHRgIGFuZCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAuIEhvbGQgb24sIHRob3VnaC4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSXMgYGFyZW5hX3ZtX2ZhdWx0YCBzdGF0aWM/IFl1cCwgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilgLiBIbSwgdGhhdCBtaWdodCBiZSBwcm9ibGVtYXRpYy4gVGhlIGd1aWRhbmNlIHByZWZlcnMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSBvZnRlbiBpbmxpbmVkLCBtYWtpbmcgdGhlbSBoYXJkZXIgdG8gdGFyZ2V0LiBIb3dldmVyLCBpdCAqaXMqIHVzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgYXJlbmFfdm1fb3BzYCwgc28gaXQgd29uJ3QgYmUgaW5saW5lZC4gSXQgKnNob3VsZCogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzIGRlc3BpdGUgYmVpbmcgc3RhdGljLlxuXG5CdXQsIHRoZSBwcm9tcHQgc3VnZ2VzdHMgcHJpb3JpdGl6aW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzbyBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIGJldHRlciBjYW5kaWRhdGVzLiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaXMgbm9uLXN0YXRpYywgc28gbGV0J3MgbG9vayBmb3Igb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjk1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQ1OjAwLjU3NDcwMTkxNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwOTY1NzQ3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0cnVjdCBicGZfbWFwIFxcXFwqYXJlbmFfbWFwX2FsbG9jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NTowNS4xODQzNjc5MjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMzMjYzMDM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgYXJlbmEuY2AgZm9yIEJQRiBTaGVuYW5pZ2FucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIG1lbW9yeSBhbGxvY2F0aW9uIGluIHRoZSBCUEYgYXJlbmEuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgZ2V0IGEgaGlnaC1sZXZlbCB2aWV3IG9mIHRoaXMgc3BlY2lmaWMgYXJlbmEgaW1wbGVtZW50YXRpb24sIHNvIEknbSBnb2luZyB0byBjaGVjayBga2VybmVsL2JwZi9hcmVuYS5jYC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBoZXJlIGlzIGhvdyBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIHVzZWQuIEknbSBnb2luZyB0byBzY2FuIHRoaXMgZmlsZSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMuIEknbSBhc3N1bWluZyB0aGUgKnN0YXRpYyogb25lcyBhcmUgbGlrZWx5IGludGVybmFsIHRvIHRoZSBhcmVuYSBtb2R1bGUuIFRoZSBub24tc3RhdGljIG9uZXMgYXJlIHdoYXQgSSB3YW50IHRvIHVuZGVyc3RhbmQ6IHRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGNhbGxpbmcgaW50by4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UgdGhhdCBhcmVuYS5jIGV4cG9zZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ3JlYXQgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTk0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDk6NDU6MDguNTE3MDAwODc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDUxMjkwMzE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLiogYXJlbmFfbWFwX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oPTEzND1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX1VTRVJfUklOR0JVRiwgdXNlcl9yaW5nYnVmX21hcF9vcHMpXFxuaW5jbHVkZS9saW51eC9icGZfdHlwZXMuaDoxMzU6QlBGX01BUF9UWVBFKEJQRl9NQVBfVFlQRV9BUkVOQSwgYXJlbmFfbWFwX29wcylcXG5pbmNsdWRlL2xpbnV4L2JwZl90eXBlcy5oLTEzNi1CUEZfTUFQX1RZUEUoQlBGX01BUF9UWVBFX0lOU05fQVJSQVksIGluc25fYXJyYXlfbWFwX29wcylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xMTA9c3RydWN0IGJwZl9tYXAgKmJwZl9wcm9nX2FyZW5hKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjExNzpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcGVla19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEyMS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTIyOnN0YXRpYyBsb25nIGFyZW5hX21hcF9wdXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUsIHU2NCBmbGFncylcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTIzLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEyNzpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcG9wX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpXFxua2VybmVsL2JwZi9hcmVuYS5jLTEyOC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTMxLVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMzI6c3RhdGljIGxvbmcgYXJlbmFfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMzMte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEzNi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTM3OnN0YXRpYyBpbnQgYXJlbmFfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMzgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTM0Mz1zdGF0aWMgaW50IGV4aXN0aW5nX3BhZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zNjktXFxua2VybmVsL2JwZi9hcmVuYS5jOjM3MDpzdGF0aWMgdm9pZCBhcmVuYV9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zNzEte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTQwMT1zdGF0aWMgdm9pZCAqYXJlbmFfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MDUtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQwNjpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbmtlcm5lbC9icGYvYXJlbmEuYy00MDctXFx0XFx0XFx0XFx0ICB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxMS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDEyOnN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxMy1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICprZXlfdHlwZSwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp2YWx1ZV90eXBlKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxNy1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDE4OnN0YXRpYyB1NjQgYXJlbmFfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MTkte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTYwMz1zdGF0aWMgdW5zaWduZWQgbG9uZyBhcmVuYV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTYzNi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjM3OnN0YXRpYyBpbnQgYXJlbmFfbWFwX21tYXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTYzOC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjc2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2Nzc6c3RhdGljIGludCBhcmVuYV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgdTY0ICppbW0sIHUzMiBvZmYpXFxua2VybmVsL2JwZi9hcmVuYS5jLTY3OC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9Njg3PUJURl9JRF9MSVNUX1NJTkdMRShicGZfYXJlbmFfbWFwX2J0Zl9pZHMsIHN0cnVjdCwgYnBmX2FyZW5hKVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2ODg6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFyZW5hX21hcF9vcHMgPSB7XFxua2VybmVsL2JwZi9hcmVuYS5jLTY4OS1cXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zNDEwPXU2NCBicGZfY2hlY2tfdGltZWRfbWF5X2dvdG8oc3RydWN0IGJwZl90aW1lZF9tYXlfZ290byAqcClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MjgtLyogZm9yIGNvbmZpZ3Mgd2l0aG91dCBNTVUgb3IgMzItYml0ICovXFxua2VybmVsL2JwZi9jb3JlLmM6MzQyOTpfX3dlYWsgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFyZW5hX21hcF9vcHM7XFxua2VybmVsL2JwZi9jb3JlLmMtMzQzMC1fX3dlYWsgdTY0IGJwZl9hcmVuYV9nZXRfdXNlcl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDk6NDU6MjkuMDI5OTA5MzA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTU2NjIyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNYXAgT3BlcmF0aW9ucyBhbmQgQWxsb2NhdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IGtleWluZyBpbiBvbiBhIGZldyBjcnVjaWFsIHBvaW50cy4gVGhlIGBhcmVuYV9tYXBfb3BzYCBzdHJ1Y3R1cmUsIHdoaWNoIEkgc2VlIGlzIHVzZWQgZm9yIHRoZSBtYXAgb3BlcmF0aW9ucywgaXMgZGVjbGFyZWQgYXMgbm9uLXN0YXRpYy4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBub3RlLiBOb3csIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBhcHBlYXIgdG8gYmUgYGFyZW5hX3ZtX2ZhdWx0YCBhbmQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLiBgYXJlbmFfdm1fZmF1bHRgIGlzIHByb2JhYmx5IG5vdCB0aGUgbWFpbiBpc3N1ZSBoZXJlLiBUaGUgc2Vjb25kIGZ1bmN0aW9uLCBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgLCBpcyBhbHNvIG5vbi1zdGF0aWM7IGFuZCBzZWVtcyB0byBiZSBleHBvcnRlZCwgb3IgYXQgbGVhc3QgaXQgaXNuJ3Qgc3RhdGljLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJJcyBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIHZpc2libGU/XCIgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBUaGF0J3MgbXkgbmV4dCBzdGVwLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBjb25maXJtIGl0cyB2aXNpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU2NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQ1OjMzLjIyNTU3NTM4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxMTk3NDQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9Mjc4NT1pbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMjc4Ni1cXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXkpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6Mjc4NzpzdHJ1Y3QgcGFnZSAqYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTI3ODgtI2lmZGVmIENPTkZJR19NRU1DR1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTQ3OT1zdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01MDMtXFx0XFx0YnBmX21hcF9tZW1jZ19lbnRlcihcXHUwMDI2YXJlbmEtXFx1MDAzZW1hcCwgXFx1MDAyNm9sZF9tZW1jZywgXFx1MDAyNm5ld19tZW1jZyk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjUwNDpcXHRcXHRuZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTA1LVxcdFxcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MTU9aW50IGJwZl9tYXBfYWxsb2NfcGFnZXMoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgaW50IG5pZCxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NS0gKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDY6c3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NTozNy40Mzc1NTUwOTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzMTg4Mjg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIE1hcCBBbGxvY2F0aW9uIGFuZCBWTSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGlua2luZywgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzbid0IHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBgYXJlbmFfdm1fZmF1bHRgIGlzIHN0YXRpYywgYnV0IGhvbGQgb24uLi4gaXQncyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBhcmVuYV92bV9vcHNgLiBTaW5jZSBpdCdzIGEgZnVuY3Rpb24gcG9pbnRlciBpdCdzIHByb2JhYmx5IG5vdCBpbmxpbmVkLiBUaGF0J3MgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy5cblxuV2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIGtlZXAgdGhlc2Ugc3RyYWlnaHQuIGBhcmVuYV9tYXBfb3BzYCBoYW5kbGVzIHRoZSBtYXAgb3BlcmF0aW9ucyBhbmQgYGFyZW5hX3ZtX29wc2AgaGFuZGxlcyB0aGUgVk0gb3BlcmF0aW9ucy4gUmlnaHQuIE9rYXksIGxldCdzIHJlZm9jdXMuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGFyZW5hX3ZtX29wc2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGF0J3Mgd29ya2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NTo0MS45Njk0NDE5NThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjkxNTc2NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFfdm1fb3BzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJlbmEuYz00Nzk9c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1OTU6c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhcmVuYV92bV9vcHMgPSB7XFxua2VybmVsL2JwZi9hcmVuYS5jLTU5Ni1cXHQub3BlblxcdFxcdD0gYXJlbmFfdm1fb3BlbixcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz02Mzc9c3RhdGljIGludCBhcmVuYV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02NzItXFx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlRDT1BZKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjczOlxcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNmFyZW5hX3ZtX29wcztcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjc0LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NTo0Ni4xMzg2MDUzNjlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4NTAxMTM0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgZm9yIFNlbGVjdGluZyBGb2N1cyBTeW1ib2xzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBmb3IgdGhlIGJlc3QgZW50cnkgcG9pbnRzIGZvciBTeXprYWxsZXIsIGdpdmVuIHRoZSBjb25zdHJhaW50cy4gYGFyZW5hX3ZtX2ZhdWx0YCBpcyBhIGNhbGxiYWNrLCBzbyBpdCdzIG5vdCBpbmxpbmVkLCB3aGljaCBpcyBnb29kLiBUaGF0IGdpdmVzIGl0IGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIEl0IGlzIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGNvdWxkIGJlIGFuIGlzc3VlIGZvciBTeXprYWxsZXIgaWYgaXQgY2FuJ3QgcGFyc2Uga2FsbHN5bXMuIEhvd2V2ZXIsIHRoZSBkb2N1bWVudGF0aW9uIHN0cmVzc2VzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZnVuY3Rpb25zLiBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCBzbyBpdCBzaG91bGQgYmUgZWFzaWx5IHRhcmdldGFibGUuXG5cbkFuZCBob2xkIG9uLi4uIGFyZW4ndCB3ZSBmb2N1c2luZyBvbiBzeXNjYWxscz8gUmlnaHQsIFN5emthbGxlciB0YXJnZXRzIHN5c2NhbGxzLiBUaGUgQlBGIHN5c2NhbGwgKmlzKiB0aGUgZW50cnkgcG9pbnQhIFNvLCB0aGUgZ29hbCBpcyB0byB0YXJnZXQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIEJQRiBzdWJzeXN0ZW0gdGhhdCBhcmUgbW9kaWZpZWQgYW5kIHJlYWNoYWJsZSBmcm9tIGl0LlxuXG5UaGVyZWZvcmUsIGdpdmVuIHRoZSBhdmFpbGFibGUgaW5mb3JtYXRpb24sIEknbGwgaW5jbHVkZSBgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWAgYW5kIGBhcmVuYV92bV9mYXVsdGAgaW4gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBUaGV5IGFyZSBub3QgaW5saW5lZC5cblxuTm93LCBsZXQncyBjb25zaWRlciBDT05GSUcgb3B0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBtdXN0LWhhdmUsIG9idmlvdXNseS4gVGhlIGBhcmVuYS5vYCBtb2R1bGUgc3BlY2lmaWNhbGx5IHNlZW1zIHRvIHJlcXVpcmUgYENPTkZJR19NTVVgIGFuZCBgQ09ORklHXzY0QklUYCB0byBiZSBidWlsdC4gSXQncyB0aW1lIHRvIGRvdWJsZS1jaGVjayBga2VybmVsL2JwZi9NYWtlZmlsZWAgdG8gY29uZmlybSBhbGwgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MDYsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDk6NDU6NTIuMTIzNjE5OTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzg3MzM4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xOT1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvYXJlbmEuYz03MT1zdGF0aWMgaW50IHNjeF9hcmVuYV9ncm93KHN0cnVjdCBzY3hfc2NoZWQgKnNjaCwgdTMyIHBhZ2VfY250KVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg2LVxcdHVhZGRyMzIgPSAodTMyKSh1bnNpZ25lZCBsb25nKXA7XFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jOjg3OlxcdC8qIGFyZW5hLm8sIHdoaWNoIGRlZmluZXMgdGhlc2UsIGlzIGJ1aWx0IG9ubHkgb24gTU1VIFxcdTAwMjZcXHUwMDI2IDY0QklUICovXFxua2VybmVsL3NjaGVkL2V4dC9hcmVuYS5jLTg4LSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYz04MDY1PXN0YXRpYyBpbnQgc2N4X2FyZW5hX3NjYW5fcHJvZyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTgwNjktXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo4MDcwOlxcdC8qIGFyZW5hLm8sIHdoaWNoIGRlZmluZXMgdGhlc2UsIGlzIGJ1aWx0IG9ubHkgb24gTU1VIFxcdTAwMjZcXHUwMDI2IDY0QklUICovXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy04MDcxLSNpZiBkZWZpbmVkKENPTkZJR19NTVUpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHXzY0QklUKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlPTk5Mz0kKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm86ICQoT1VUUFVUKS94ZHBfbGJfYmVuY2guc2tlbC5oIGJlbmNoX2JwZl90aW1pbmcuaFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZTo5OTQ6JChPVVRQVVQpL2JlbmNoX2xpYmFyZW5hLm86ICQoTElCQVJFTkFfQkVOQ0hfU0tFTClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUtOTk1LSQoT1VUUFVUKS9iZW5jaF9icGZfdGltaW5nLm86IGJlbmNoX2JwZl90aW1pbmcuaFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlPTk5OD0kKE9VVFBVVCkvYmVuY2g6ICQoT1VUUFVUKS9iZW5jaC5vIFxcXFxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZS0xMDIxLVxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfeGRwX2xiLm8gXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZToxMDIyOlxcdFxcdCAkKE9VVFBVVCkvYmVuY2hfbGliYXJlbmEubyBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2VmaWxlLTEwMjMtXFx0XFx0ICQoT1VUUFVUKS91c2R0XzEubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQ1OjU2LjUwMjM1OTUxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTM4NzU3ODk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBSZXF1aXJlZCBLZXJuZWwgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIGtub3cgdGhhdCBmb3Igc3l6a2FsbGVyIHRhcmdldHMgKGxpa2UgeDg2XzY0IGFuZCBhcm02NCksIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAgYXJlIHByZXR0eSBtdWNoIGdpdmVucywgc28gdGhvc2UgYXJlIGFscmVhZHkgYXNzdW1lZC4gVGhlIGNydWNpYWwgcGFydCBpcyBmaWd1cmluZyBvdXQgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGtlcm5lbCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBub3cgbmVjZXNzYXJ5IGZvciB0aGlzIHBhdGNoLlxuXG5UaGUgcGF0Y2ggbWVudGlvbnMgYENPTkZJR19NRU1DR2AgaW4gYGluY2x1ZGUvbGludXgvYnBmLmhgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgYnBmX21hcF9tZW1jZ19lbnRlcmAgZnVuY3Rpb24uIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoYXQgYENPTkZJR19NRU1DR2AgbWlnaHQgb25seSBjaGFuZ2UgYmVoYXZpb3Igd2l0aG91dCBiZWluZyBzdHJpY3RseSByZXF1aXJlZC4gQnV0LCB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gZXhwbGljaXRseSBoaWdobGlnaHRzIHRoZSB1c2Ugb2YgYSBcInNsZWVwYWJsZSBhbGxvY2F0b3JcIiB0byBhbGxvdyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byByZWNsYWltIG1lbW9yeSBhbmQgcnVuLCB3aGljaCB0aGUgZXhpc3Rpbmcgbm9uLWJsb2NraW5nIGFsbG9jYXRvciBjb3VsZG4ndC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBgQ09ORklHX01FTUNHYCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBmdW5jdGlvbmFsIGNoYW5nZSBiZWluZyBtYWRlLiBUaGVyZWZvcmUsIGBNRU1DR2AgaXMgZGVmaW5pdGVseSByZXF1aXJlZC4gVGhlIG90aGVyIG9idmlvdXMgb25lIGlzIGBCUEZfU1lTQ0FMTGAsIGJlY2F1c2UgdGhlIGNvZGUgbWFrZXMgdXNlIG9mIHRoZSBCUEYgc3lzdGVtIGNhbGwuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgYXQgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLiBUaGUgY29kZSBzaG93cyBgbWlnaHRfc2xlZXAoKWAgYW5kIHVzZXMgYGFsbG9jX3BhZ2VzX25vZGVgLCB3aGljaCBjb25maXJtcyB0aGlzIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuXG5cblNvLCB0byBzdW1tYXJpemUsIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGFyZTogYEJQRl9TWVNDQUxMYCBhbmQgYE1FTUNHYC5cblxuTXkgZm9jdXMgaW4gdGhlIGNvZGUgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCBmdW5jdGlvbiBhbmQgYWxzbyBgYXJlbmFfdm1fZmF1bHRgLiBEb3VibGUtY2hlY2tpbmcgdGhhdCB0aGUgc2Vjb25kIGZ1bmN0aW9uIG5hbWUgaXMgY29ycmVjdCwgSSd2ZSBjb25maXJtZWQgdGhhdCBgYXJlbmFfdm1fZmF1bHRgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBuYW1lIGFzIHNob3duIGluIHRoZSBkZWZpbml0aW9uIGBzdGF0aWMgdm1fZmF1bHRfdCBhcmVuYV92bV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilgLlxuXG5JIGFsc28gY2hlY2tlZCBgYnBmX21hcF9hbGxvY19wYWdlc2AgZm9yIG90aGVyIHJlcXVpcmVkIHN5bWJvbHMuIFRoZSBjaGFuZ2UgdG8gdXNlIGBCUEZfUEFHRV9HRlBgIGlzIGEgbWlub3IgaW1wbGVtZW50YXRpb24gZGV0YWlsLlxuXG5TbyBpdCdzIGBhcmVuYV92bV9mYXVsdGAgYW5kIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCB0aGF0IHJlcHJlc2VudCB0aGUgbWVhdCBvZiB0aGlzIGNvZGUgY2hhbmdlLiBJJ20gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwNTMsIk91dHB1dFRva2VucyI6MTQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQ2OjA3Ljg4OTk0MjMyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5NjY4MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmVuYV92bV9mYXVsdFwiLFxuICAgIFwiYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgZm9yIEJQRiBhcmVuYXMgKGBhcmVuYV92bV9mYXVsdGApIHRvIHVzZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKSBvdXRzaWRlIG9mIHRoZSBzcGlubG9jay4gVGhpcyBhbGxvd3MgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG1lbW9yeSBsaW1pdHMgYXJlIGV4Y2VlZGVkLCBwcmV2ZW50aW5nIHNwdXJpb3VzIFNJR0JVUy9TSUdTRUdWIGVycm9ycy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjaGFuZ2VzIGluIHRoZSBCUEYgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyZW5hX3ZtX2ZhdWx0XCIsXG4gICAgXCJicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciBmb3IgQlBGIGFyZW5hcyAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gdXNlIGEgc2xlZXBhYmxlIHBhZ2UgYWxsb2NhdG9yIChgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWApIG91dHNpZGUgb2YgdGhlIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbWVtb3J5IGxpbWl0cyBhcmUgZXhjZWVkZWQsIHByZXZlbnRpbmcgc3B1cmlvdXMgU0lHQlVTL1NJR1NFR1YgZXJyb3JzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGNoYW5nZXMgaW4gdGhlIEJQRiBzdWJzeXN0ZW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA5OjQ2OjA4LjA5OTYxODg0NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNDczMzcxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwOTo0NjowOC4xMDA1NTAxMzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQyNDY0MDA1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgYXJlbmEgcGFnZSBmYXVsdCBoYW5kbGVyIChgYXJlbmFfdm1fZmF1bHRgKSB0byBwcmVhbGxvY2F0ZSBwYWdlcyB1c2luZyBhIHNsZWVwYWJsZSBhbGxvY2F0b3IgKGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCkgb3V0c2lkZSBvZiBhIHNwaW5sb2NrLiBUaGlzIGFsbG93cyB0aGUgbWVtY2cgT09NIGtpbGxlciB0byBydW4gaWYgbmVjZXNzYXJ5LiBUaGUgbmV3IGFsbG9jYXRvciBleHBsaWNpdGx5IHVzZXMgdGhlIGBfX0dGUF9aRVJPYCBmbGFnICh2aWEgYEJQRl9QQUdFX0dGUGApLCBlbnN1cmluZyB0aGF0IGFsbCBuZXdseSBhbGxvY2F0ZWQgcGFnZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIGJlaW5nIG1hcHBlZCBpbnRvIHRoZSBhcmVuYS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNiMzIzZTM1ZmNjYzdlOGNkNzE2ZmEyNzc4YjA2NDM5N2M3MzdlYjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwOTo0MTo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2JwZi5oXG5pbmRleCBiM2NkMjhkOWUzYjU1Li5jODE3Yzk5ZDI5MDY2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGYuaFxuQEAgLTI3ODQsNiArMjc4NCw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2dfZ2V0X2N1cnJfb3JfbmV4dCh1MzIgKmlkKTtcbiBcbiBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuIFx0XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheSk7XG4rc3RydWN0IHBhZ2UgKmJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCk7XG4gI2lmZGVmIENPTkZJR19NRU1DR1xuIHZvaWQgYnBmX21hcF9tZW1jZ19lbnRlcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm9sZF9tZW1jZyxcbiBcdFx0XHQgc3RydWN0IG1lbV9jZ3JvdXAgKipuZXdfbWVtY2cpO1xuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuaW5kZXggN2I2ODQ3MjAwYjQzMS4uZmE0NjJhMGZmMWFkNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuKysrIGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNDgxLDcgKzQ4MSw4IEBAIHN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnO1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZSwgKm5ld19wYWdlID0gTlVMTDtcbitcdHZtX2ZhdWx0X3QgZmF1bHRfcmV0O1xuIFx0bG9uZyBrYmFzZSwga2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0aW50IHJldDtcbkBAIC00ODksNTkgKzQ5MCwxMDYgQEAgc3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRrYmFzZSA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XG4gXHRrYWRkciA9IGtiYXNlICsgKHUzMikodm1mLVx1MDAzZWFkZHJlc3MpO1xuIFxuLVx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSlcbitcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilrYWRkcik7XG4rXHRpZiAoIXBhZ2UgXHUwMDI2XHUwMDI2ICEoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVCkpIHtcbitcdFx0LypcbitcdFx0ICogUHJlYWxsb2NhdGUgb3V0c2lkZSB0aGUgbG9jayB3aXRoIGEgc2xlZXBhYmxlIGFsbG9jYXRvciBzbyBpdFxuK1x0XHQgKiBjYW4gcmVjbGFpbSBhbmQgcnVuIHRoZSBtZW1jZyBPT00ga2lsbGVyLCB3aGljaCB0aGVcbitcdFx0ICogbm9uLWJsb2NraW5nIGFsbG9jYXRvciB1bmRlciBhcmVuYS1cdTAwM2VzcGlubG9jayBjYW5ub3QuIEEgTlVMTFxuK1x0XHQgKiByZXR1cm4gaXMgbm9uLXJlY292ZXJhYmxlLCBzbyBmYWlsIHdpdGggVk1fRkFVTFRfU0lHQlVTO1xuK1x0XHQgKiBWTV9GQVVMVF9PT00gd291bGQgYmUgcmV0cmllZCBieSB0aGUgZmF1bHQgcGF0aCBhbmQgY2FuXG4rXHRcdCAqIGxpdmVsb2NrIHdoZW4gdGhlIGNoYXJnZWQgbWVtY2cgaXMgbm90IHRoZSBmYXVsdGluZyB0YXNrJ3MuXG4rXHRcdCAqL1xuK1x0XHRicGZfbWFwX21lbWNnX2VudGVyKFx1MDAyNmFyZW5hLVx1MDAzZW1hcCwgXHUwMDI2b2xkX21lbWNnLCBcdTAwMjZuZXdfbWVtY2cpO1xuK1x0XHRuZXdfcGFnZSA9IGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGUobWFwKTtcbitcdFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbitcdFx0aWYgKCFuZXdfcGFnZSlcbitcdFx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuK1x0fVxuK1xuK1x0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBBIGZhaWxlZCBsb2NrIG1lYW5zIGEgcG9zc2libGUgZGVhZGxvY2sgd2FzIGRldGVjdGVkLiBEb24ndFxuIFx0XHQgKiByZXR1cm4gVk1fRkFVTFRfUkVUUlk6IHRoaXMgaGFuZGxlciBuZXZlciB0b29rIG1tYXBfbG9jaywgYnV0XG4gXHRcdCAqIHRoZSBmYXVsdCBwYXRoIHdvdWxkIHJlLXRha2UgaXQgb24gcmV0cnkgYW5kIGRlYWRsb2NrLiBGYWlsLlxuIFx0XHQgKi9cbitcdFx0aWYgKG5ld19wYWdlKVxuK1x0XHRcdGZyZWVfcGFnZXNfbm9sb2NrKG5ld19wYWdlLCAwKTtcbiBcdFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcbitcdH1cbiBcbiBcdHBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilrYWRkcik7XG4gXHRpZiAocGFnZSkge1xuLVx0XHRpZiAocGFnZSA9PSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpXG4tXHRcdFx0LyogQlBGIHRyaWdnZXJlZCBzY3JhdGNoIGhlcmU7IGRvbid0IGxhenktYWxsb2Mgb3ZlciBpdCAqL1xuLVx0XHRcdGdvdG8gb3V0X3NpZ3NlZ3Y7XG4rXHRcdGlmIChwYWdlID09IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQSBzY3JhdGNoIHBhZ2UgbWFya3MgYSBob2xlLiBTZWdmYXVsdCBvbmx5IGlmIHRoZSB1c2VyXG4rXHRcdFx0ICogYXNrZWQgZm9yIGl0OyBvdGhlcndpc2Ugd2UgY291bGQgbGF6eS1hbGxvY2F0ZSBidXRcbitcdFx0XHQgKiBjaG9vc2Ugbm90IHRvIG92ZXIgYSBob2xlLCBzbyByZXBvcnQgYSBidXMgZXJyb3IuXG4rXHRcdFx0ICovXG4rXHRcdFx0ZmF1bHRfcmV0ID0gKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpID9cbitcdFx0XHRcdCAgICBWTV9GQVVMVF9TSUdTRUdWIDogVk1fRkFVTFRfU0lHQlVTO1xuK1x0XHRcdGdvdG8gb3V0X2Vycl9sb2NrZWQ7XG4rXHRcdH1cbiBcdFx0LyogYWxyZWFkeSBoYXZlIGEgcGFnZSB2bWFwLWVkICovXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0aWYgKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpIHtcbitcdFx0LyogVXNlciBzcGFjZSByZXF1ZXN0ZWQgdG8gc2VnZmF1bHQgd2hlbiBwYWdlIGlzIG5vdCBhbGxvY2F0ZWQgYnkgYnBmIHByb2cgKi9cbitcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHU0VHVjtcbitcdFx0Z290byBvdXRfZXJyX2xvY2tlZDtcbitcdH1cbitcbiBcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG4gXG4tXHRpZiAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcbi1cdFx0LyogVXNlciBzcGFjZSByZXF1ZXN0ZWQgdG8gc2VnZmF1bHQgd2hlbiBwYWdlIGlzIG5vdCBhbGxvY2F0ZWQgYnkgYnBmIHByb2cgKi9cbi1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbitcdGlmICghbmV3X3BhZ2UpIHtcbitcdFx0LypcbitcdFx0ICogVmVyeSByYXJlIHJhY2U6IHRoZSBicGYgcHJvZ3JhbSBoYWQgYWxsb2NhdGVkIGEgcGFnZSBoZXJlLCBzb1xuK1x0XHQgKiB0aGUgbG9ja2xlc3MgcHJvYmUgc2F3IGl0IGFuZCB3ZSBza2lwcGVkIHByZWFsbG9jYXRpb24sIGJ1dCBpdFxuK1x0XHQgKiBmcmVlZCB0aGUgcGFnZSBiZWZvcmUgd2UgdG9vayB0aGUgbG9jay4gTm93IHdlIGRvIG5lZWQgb25lO1xuK1x0XHQgKiBzbGVlcGluZyBpcyBub3QgYWxsb3dlZCBoZXJlLCBzbyBmYWxsIGJhY2sgdG8gdGhlIG5vbi1ibG9ja2luZ1xuK1x0XHQgKiBhbGxvY2F0b3IgYW5kIGdpdmUgdXAgaWYgaXQgZmFpbHMuXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgbWFwLVx1MDAzZW51bWFfbm9kZSwgMSwgXHUwMDI2bmV3X3BhZ2UpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuK1x0XHRcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XG4rXHRcdH1cbitcdH1cbiBcbiBcdHJldCA9IHJhbmdlX3RyZWVfY2xlYXIoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHZtZi1cdTAwM2VwZ29mZiwgMSk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuLVxuLVx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFx1MDAyNnBhZ2UsIC5pID0gMCB9O1xuLVx0LyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi9cbi1cdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMobWFwLCBOVU1BX05PX05PREUsIDEsIFx1MDAyNnBhZ2UpO1xuIFx0aWYgKHJldCkge1xuLVx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbi1cdFx0Z290byBvdXRfc2lnc2Vndl9tZW1jZztcbitcdFx0ZmF1bHRfcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuK1x0XHRnb3RvIG91dF9lcnJfbG9ja2VkX21lbWNnO1xuIFx0fVxuK1x0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFx1MDAyNm5ld19wYWdlLCAuaSA9IDAgfTtcbiBcbiBcdHJldCA9IGFwcGx5X3RvX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwga2FkZHIsIFBBR0VfU0laRSwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBcdTAwMjZkYXRhKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHZtZi1cdTAwM2VwZ29mZiwgMSk7XG4tXHRcdGZyZWVfcGFnZXNfbm9sb2NrKHBhZ2UsIDApO1xuLVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuK1x0XHRmYXVsdF9yZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4rXHRcdGdvdG8gb3V0X2Vycl9sb2NrZWRfbWVtY2c7XG4gXHR9XG4gXHRmbHVzaF92bWFwX2NhY2hlKGthZGRyLCBQQUdFX1NJWkUpO1xuIFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcbitcdC8qIG5ld19wYWdlIHdhcyBjb25zdW1lZCAqL1xuK1x0cGFnZSA9IG5ld19wYWdlO1xuK1x0bmV3X3BhZ2UgPSBOVUxMO1xuIG91dDpcbiBcdHBhZ2VfcmVmX2FkZChwYWdlLCAxKTtcbiBcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xuK1x0aWYgKG5ld19wYWdlKVxuK1x0XHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XG4gXHR2bWYtXHUwMDNlcGFnZSA9IHBhZ2U7XG4gXHRyZXR1cm4gMDtcbi1vdXRfc2lnc2Vndl9tZW1jZzpcbitcbitvdXRfZXJyX2xvY2tlZF9tZW1jZzpcbiBcdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG4tb3V0X3NpZ3NlZ3Y6XG4rb3V0X2Vycl9sb2NrZWQ6XG4gXHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbi1cdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xuK1x0aWYgKG5ld19wYWdlKVxuK1x0XHRmcmVlX3BhZ2VzX25vbG9jayhuZXdfcGFnZSwgMCk7XG4rXHRyZXR1cm4gZmF1bHRfcmV0O1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi5mOWI4MTYzOGU1MzdhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtNjAyLDE1ICs2MDIsMTQgQEAgc3RhdGljIGJvb2wgY2FuX2FsbG9jX3BhZ2VzKHZvaWQpXG4gXHRcdCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKTtcbiB9XG4gXG4rI2RlZmluZSBCUEZfUEFHRV9HRlAgKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfQUNDT1VOVCB8IF9fR0ZQX05PV0FSTilcbitcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKl9fYnBmX2FsbG9jX3BhZ2UoaW50IG5pZClcbiB7XG4gXHRpZiAoIWNhbl9hbGxvY19wYWdlcygpKVxuIFx0XHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9sb2NrKF9fR0ZQX0FDQ09VTlQsIG5pZCwgMCk7XG4gXG4tXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsXG4tXHRcdFx0XHRHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX0FDQ09VTlRcbi1cdFx0XHRcdHwgX19HRlBfTk9XQVJOLFxuLVx0XHRcdFx0MCk7XG4rXHRyZXR1cm4gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEJQRl9QQUdFX0dGUCwgMCk7XG4gfVxuIFxuIGludCBicGZfbWFwX2FsbG9jX3BhZ2VzKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIGludCBuaWQsXG5AQCAtNjM2LDYgKzYzNSwyMCBAQCBpbnQgYnBmX21hcF9hbGxvY19wYWdlcyhjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBpbnQgbmlkLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLypcbisgKiBGb3IgY2FsbGVycyB0aGF0IGtub3cgdGhleSBydW4gaW4gYSBzbGVlcGFibGUgY29udGV4dCwgZS5nLiBhIHVzZXIgcGFnZVxuKyAqIGZhdWx0IGhhbmRsZXIuIGNhbl9hbGxvY19wYWdlcygpIGlzIGEgY29uc2VydmF0aXZlIGd1ZXNzIG1hZGUgZm9yIEJQRlxuKyAqIHByb2dyYW0gY29udGV4dCAtIG5vdGFibHkgaXQgaXMgYWx3YXlzIGZhbHNlIG9uIFBSRUVNUFRfUlQgLSBzbyBnb2luZ1xuKyAqIHRocm91Z2ggYnBmX21hcF9hbGxvY19wYWdlcygpIHRoZXJlIHdvdWxkIG5lZWRsZXNzbHkgcGljayB0aGVcbisgKiBub24tYmxvY2tpbmcgYWxsb2NhdG9yLCB3aGljaCBuZXZlciByZWNsYWltcyBhbmQgbmV2ZXIgZW5nYWdlcyB0aGUgT09NXG4rICogbWFjaGluZXJ5LlxuKyAqL1xuK3N0cnVjdCBwYWdlICpicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG4re1xuK1x0bWlnaHRfc2xlZXAoKTtcbitcdHJldHVybiBhbGxvY19wYWdlc19ub2RlKG1hcC1cdTAwM2VudW1hX25vZGUsIEJQRl9QQUdFX0dGUCwgMCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYnRmX2ZpZWxkX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBidGZfZmllbGQgKmYxID0gYSwgKmYyID0gYjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXG5pbmRleCA0NWNkMGI0NzlmZTM1Li40MTgzZmY2MTUwYzI4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5jXG5AQCAtMTg4LDYgKzE4OCw3MyBAQCBpbnQgd3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4gXHRyZXR1cm4gX193cml0ZV9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmKTtcbiB9XG4gXG4rc3RhdGljIGludCBfX3JlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqY2dyb3VwX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4rXHRcdFx0ICAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdGNoYXIgZmlsZV9wYXRoW1BBVEhfTUFYICsgMV07XG4rXHRzc2l6ZV90IGdvdDtcbitcdGludCBmZDtcbitcbitcdHNucHJpbnRmKGZpbGVfcGF0aCwgc2l6ZW9mKGZpbGVfcGF0aCksIFwiJXMvJXNcIiwgY2dyb3VwX3BhdGgsIGZpbGUpO1xuK1x0ZmQgPSBvcGVuKGZpbGVfcGF0aCwgT19SRE9OTFkpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4rXHRcdGxvZ19lcnIoXCJPcGVuaW5nICVzXCIsIGZpbGVfcGF0aCk7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1xuK1x0Z290ID0gcmVhZChmZCwgYnVmLCBsZW4gLSAxKTtcbitcdGlmIChnb3QgXHUwMDNjIDApIHtcbitcdFx0bG9nX2VycihcIlJlYWRpbmcgJXNcIiwgZmlsZV9wYXRoKTtcbitcdFx0Y2xvc2UoZmQpO1xuK1x0XHRyZXR1cm4gMTtcbitcdH1cbitcdGJ1Zltnb3RdID0gJ1xcMCc7XG4rXHRjbG9zZShmZCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogcmVhZF9jZ3JvdXBfZmlsZSgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGVcbisgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgd29ya2RpclxuKyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb21cbisgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzXG4rICogQGxlbjogU2l6ZSBvZiBAYnVmXG4rICpcbisgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAncyBkaXJlY3RvcnkuXG4rICpcbisgKiBJZiBzdWNjZXNzZnVsLCAwIGlzIHJldHVybmVkLlxuKyAqL1xuK2ludCByZWFkX2Nncm91cF9maWxlKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4rXHRcdCAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuK3tcbitcdGNoYXIgY2dyb3VwX3BhdGhbUEFUSF9NQVggLSAyNF07XG4rXG4rXHRmb3JtYXRfY2dyb3VwX3BhdGgoY2dyb3VwX3BhdGgsIHJlbGF0aXZlX3BhdGgpO1xuK1x0cmV0dXJuIF9fcmVhZF9jZ3JvdXBfZmlsZShjZ3JvdXBfcGF0aCwgZmlsZSwgYnVmLCBsZW4pO1xuK31cbitcbisvKipcbisgKiByZWFkX2Nncm91cF9maWxlX3BhcmVudCgpIC0gUmVhZCBmcm9tIGEgY2dyb3VwIGZpbGUgaW4gdGhlIHBhcmVudCBwcm9jZXNzXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtkaXJcbisgKiBAcmVsYXRpdmVfcGF0aDogVGhlIGNncm91cCBwYXRoLCByZWxhdGl2ZSB0byB0aGUgcGFyZW50IHByb2Nlc3Mgd29ya2RpclxuKyAqIEBmaWxlOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBpbiBjZ3JvdXBmcyB0byByZWFkIGZyb21cbisgKiBAYnVmOiBCdWZmZXIgdG8gcmVhZCBpbnRvLCBOVUwtdGVybWluYXRlZCBvbiBzdWNjZXNzXG4rICogQGxlbjogU2l6ZSBvZiBAYnVmXG4rICpcbisgKiBSZWFkIGZyb20gYSBmaWxlIGluIHRoZSBnaXZlbiBjZ3JvdXAncyBkaXJlY3RvcnkgdW5kZXIgdGhlIHBhcmVudCBwcm9jZXNzXG4rICogd29ya2Rpci5cbisgKlxuKyAqIElmIHN1Y2Nlc3NmdWwsIDAgaXMgcmV0dXJuZWQuXG4rICovXG4raW50IHJlYWRfY2dyb3VwX2ZpbGVfcGFyZW50KGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgsIGNvbnN0IGNoYXIgKmZpbGUsXG4rXHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRjaGFyIGNncm91cF9wYXRoW1BBVEhfTUFYIC0gMjRdO1xuK1xuK1x0Zm9ybWF0X3BhcmVudF9jZ3JvdXBfcGF0aChjZ3JvdXBfcGF0aCwgcmVsYXRpdmVfcGF0aCk7XG4rXHRyZXR1cm4gX19yZWFkX2Nncm91cF9maWxlKGNncm91cF9wYXRoLCBmaWxlLCBidWYsIGxlbik7XG4rfVxuK1xuIC8qKlxuICAqIHNldHVwX2Nncm91cF9lbnZpcm9ubWVudCgpIC0gU2V0dXAgdGhlIGNncm91cCBlbnZpcm9ubWVudFxuICAqXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaFxuaW5kZXggMzg1NzMwNGJlODc0MS4uZDQyZDJlMTMwNDRlNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9jZ3JvdXBfaGVscGVycy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvY2dyb3VwX2hlbHBlcnMuaFxuQEAgLTE1LDYgKzE1LDEwIEBAIGludCB3cml0ZV9jZ3JvdXBfZmlsZShjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuIFx0XHQgICAgICBjb25zdCBjaGFyICpidWYpO1xuIGludCB3cml0ZV9jZ3JvdXBfZmlsZV9wYXJlbnQoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbiBcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Zik7XG4raW50IHJlYWRfY2dyb3VwX2ZpbGUoY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCwgY29uc3QgY2hhciAqZmlsZSxcbitcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuK2ludCByZWFkX2Nncm91cF9maWxlX3BhcmVudChjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoLCBjb25zdCBjaGFyICpmaWxlLFxuK1x0XHRcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuIGludCBjZ3JvdXBfc2V0dXBfYW5kX2pvaW4oY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aCk7XG4gaW50IGdldF9yb290X2Nncm91cCh2b2lkKTtcbiBpbnQgY3JlYXRlX2FuZF9nZXRfY2dyb3VwKGNvbnN0IGNoYXIgKnJlbGF0aXZlX3BhdGgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FyZW5hX21lbWNnLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hcmVuYV9tZW1jZy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzU3Yjk4NDk0Y2ZhYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY1xuQEAgLTAsMCArMSwxNTggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvd2FpdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdXNlci5oXHUwMDNlXG4rI2lmbmRlZiBQQUdFX1NJWkUgLyogb24gc29tZSBhcmNocyBpdCBjb21lcyBpbiBzeXMvdXNlci5oICovXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjZGVmaW5lIFBBR0VfU0laRSBnZXRwYWdlc2l6ZSgpXG4rI2VuZGlmXG4rXG4rI2luY2x1ZGUgXCJjZ3JvdXBfaGVscGVycy5oXCJcbisjaW5jbHVkZSBcImFyZW5hX21lbWNnLnNrZWwuaFwiXG4rXG4rI2RlZmluZSBDR19QQVRIXHRcdFwiL2FyZW5hX21lbWNnXCJcbitcbisvKiBCdWRnZXQgdGhlIGFyZW5hIGdldHMgb24gdG9wIG9mIHdoYXRldmVyIGlzIGFscmVhZHkgY2hhcmdlZCBhZnRlciBsb2FkLiAqL1xuKyNkZWZpbmUgQVJFTkFfQlVER0VUXHQoNjQgKiAxMDI0ICogMTAyNClcbitcbitzdGF0aWMgdm9pZCBkdW1wX21lbWNnKGludCAoKnJkKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpKVxuK3tcbitcdGNoYXIgYnVmWzUxMl07XG4rXG4rXHQvKlxuK1x0ICogbWVtb3J5LmN1cnJlbnQgcmVhZHMgMCBvbmNlIHRoZSBjaGlsZCBoYXMgbGVmdCB0aGUgY2dyb3VwLCBzbyBpdCBvbmx5XG4rXHQgKiBjYXJyaWVzIGluZm9ybWF0aW9uIHdoZW4gZHVtcGVkIGZyb20gdGhlIGxpdmUgY2hpbGQ7IG1lbW9yeS5wZWFrIGFuZFxuK1x0ICogbWVtb3J5LmV2ZW50cyBzdXJ2aXZlIHRoZSBjaGlsZCBhbmQgdGVsbCB0aGUgc3RvcnkgZWl0aGVyIHdheS5cbitcdCAqL1xuK1x0aWYgKCFyZChDR19QQVRILCBcIm1lbW9yeS5jdXJyZW50XCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtZW1vcnkuY3VycmVudDogJXNcIiwgYnVmKTtcbitcdGlmICghcmQoQ0dfUEFUSCwgXCJtZW1vcnkubWF4XCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtZW1vcnkubWF4OiAlc1wiLCBidWYpO1xuK1x0aWYgKCFyZChDR19QQVRILCBcIm1lbW9yeS5wZWFrXCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtZW1vcnkucGVhazogJXNcIiwgYnVmKTtcbitcdGlmICghcmQoQ0dfUEFUSCwgXCJtZW1vcnkuZXZlbnRzXCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKVxuK1x0XHRmcHJpbnRmKHN0ZGVyciwgXCJtZW1vcnkuZXZlbnRzOlxcbiVzXCIsIGJ1Zik7XG4rXHRmZmx1c2goc3RkZXJyKTtcbit9XG4rXG4rLyogUmVhZCBvbmUga2V5IGZyb20gYSBmbGF0IGtleWVkIGNncm91cCBmaWxlLCBlLmcuIFwib29tX2tpbGxcIiBpbiBtZW1vcnkuZXZlbnRzLiAqL1xuK3N0YXRpYyBsb25nIGNnX3JlYWRfa2V5KGNvbnN0IGNoYXIgKmNnLCBjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICprZXkpXG4re1xuK1x0Y2hhciBidWZbNTEyXSwgKnA7XG4rXG4rXHRpZiAocmVhZF9jZ3JvdXBfZmlsZShjZywgZmlsZSwgYnVmLCBzaXplb2YoYnVmKSkpXG4rXHRcdHJldHVybiAtMTtcbitcdHAgPSBzdHJzdHIoYnVmLCBrZXkpO1xuK1x0aWYgKCFwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRyZXR1cm4gc3RydG9sKHAgKyBzdHJsZW4oa2V5KSwgTlVMTCwgMTApO1xuK31cbitcbit2b2lkIHNlcmlhbF90ZXN0X2FyZW5hX21lbWNnKHZvaWQpXG4re1xuK1x0aW50IGNncm91cF9mZCA9IC0xLCBzdGF0dXMsIGVycjtcbitcdGNvbnN0IGxvbmcgcHMgPSBQQUdFX1NJWkU7XG4rXHRjaGFyIGJ1Zls2NF07XG4rXHRwaWRfdCBwaWQ7XG4rXG4rXHRlcnIgPSBzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnQoKTtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJzZXR1cF9jZ3JvdXBfZW52aXJvbm1lbnRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGNncm91cF9mZCA9IGNyZWF0ZV9hbmRfZ2V0X2Nncm91cChDR19QQVRIKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKGNncm91cF9mZCwgXCJjcmVhdGVfYW5kX2dldF9jZ3JvdXBcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogTm8gbWVtb3J5IGNvbnRyb2xsZXIgLVx1MDAzZSBub3RoaW5nIHRvIHRlc3QuICovXG4rXHRpZiAocmVhZF9jZ3JvdXBfZmlsZShDR19QQVRILCBcIm1lbW9yeS5jdXJyZW50XCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcIiVzOlNLSVA6bm8gbWVtb3J5IGNvbnRyb2xsZXJcXG5cIiwgX19mdW5jX18pO1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0cGlkID0gZm9yaygpO1xuK1x0aWYgKCFBU1NFUlRfR0UocGlkLCAwLCBcImZvcmtcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1x0aWYgKHBpZCA9PSAwKSB7XG4rXHRcdHN0cnVjdCBhcmVuYV9tZW1jZyAqY3NrZWw7XG4rXHRcdF9fdTMyIGksIG5wYWdlcztcbitcdFx0Y2hhciAqYmFzZTtcbitcdFx0c2l6ZV90IHN6O1xuK1x0XHRsb25nIGN1cjtcbitcbitcdFx0LypcbitcdFx0ICogRG8gZXZlcnl0aGluZyBmcm9tIHRoZSBjaGlsZDogdGhlIGFyZW5hIHZtYSBpcyBWTV9ET05UQ09QWSBzb1xuK1x0XHQgKiBpdCB3b3VsZCBub3Qgc3Vydml2ZSBmb3JrKCksIG9ubHkgdGhlIGNoaWxkIHNob3VsZCBiZSB1bmRlciB0aGVcbitcdFx0ICogbGltaXQgc28gdGhhdCBhIG1lbWNnIE9PTSBjYW5ub3QgcGljayB0ZXN0X3Byb2dzLCBhbmQgYSBtYXAgaXNcbitcdFx0ICogY2hhcmdlZCB0byB0aGUgbWVtY2cgb2YgdGhlIHRhc2sgdGhhdCBjcmVhdGVzIGl0IC0gc28gam9pblxuK1x0XHQgKiBiZWZvcmUgbG9hZC4gVGhlIGNncm91cCB3b3JrIGRpciBiZWxvbmdzIHRvIHRoZSBwYXJlbnQgdGhhdCBzZXRcbitcdFx0ICogdGhlIGVudmlyb25tZW50IHVwLCBzbyByZWFjaCBpdCB3aXRoIHRoZSBfcGFyZW50KCkgaGVscGVycy5cbitcdFx0ICogRXJyb3JzIGFyZSByZXBvcnRlZCB0byB0aGUgcGFyZW50IHRocm91Z2ggdGhlIGV4aXQgY29kZSwgc2luY2VcbitcdFx0ICogQVNTRVJUXyogaW4gYSBmb3JrZWQgY2hpbGQgZG9lcyBub3QgcmVhY2ggaXQuXG4rXHRcdCAqL1xuK1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVkXCIsIGdldHBpZCgpKTtcbitcdFx0aWYgKHdyaXRlX2Nncm91cF9maWxlX3BhcmVudChDR19QQVRILCBcImNncm91cC5wcm9jc1wiLCBidWYpKVxuK1x0XHRcdF9leGl0KDIpO1xuK1xuK1x0XHRjc2tlbCA9IGFyZW5hX21lbWNnX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRcdGlmICghY3NrZWwpXG4rXHRcdFx0X2V4aXQoMyk7XG4rXG4rXHRcdGJhc2UgPSBicGZfbWFwX19pbml0aWFsX3ZhbHVlKGNza2VsLVx1MDAzZW1hcHMuYXJlbmEsIFx1MDAyNnN6KTtcbitcdFx0aWYgKCFiYXNlKVxuK1x0XHRcdF9leGl0KDQpO1xuK1x0XHRucGFnZXMgPSBicGZfbWFwX19tYXhfZW50cmllcyhjc2tlbC1cdTAwM2VtYXBzLmFyZW5hKTtcbitcbitcdFx0LypcbitcdFx0ICogQ2FwIG9ubHkgbm93LCBhZnRlciBsb2FkOiBldmVyeXRoaW5nIGJ1dCB0aGUgZmF1bHQtaW4gaXNcbitcdFx0ICogY2hhcmdlZCwgc28gdGhlIGFyZW5hIGdldHMgYSBmaXhlZCBidWRnZXQgcmVnYXJkbGVzcyBvZiB3aGF0XG4rXHRcdCAqIHRoZSBsb2FkIGl0c2VsZiBjb3N0LCBhbmQgdGhlIGxvYWQgY2FuIG5ldmVyIGhpdCB0aGUgbGltaXQuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQoQ0dfUEFUSCwgXCJtZW1vcnkuY3VycmVudFwiLCBidWYsIHNpemVvZihidWYpKSlcbitcdFx0XHRfZXhpdCg1KTtcbitcdFx0Y3VyID0gc3RydG9sKGJ1ZiwgTlVMTCwgMTApO1xuK1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiVsZFwiLCBjdXIgKyBBUkVOQV9CVURHRVQpO1xuK1x0XHRpZiAod3JpdGVfY2dyb3VwX2ZpbGVfcGFyZW50KENHX1BBVEgsIFwibWVtb3J5Lm1heFwiLCBidWYpKVxuK1x0XHRcdF9leGl0KDYpO1xuK1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucGFnZXM7IGkrKylcbitcdFx0XHRiYXNlWyhzaXplX3QpaSAqIHBzXSA9IDE7XG4rXHRcdC8qIEZhdWx0ZWQgZXZlcnl0aGluZyB3aXRob3V0IGR5aW5nOiBkdW1wIHdoeSAob25seSB1bmRlciAtdikuICovXG4rXHRcdGR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZV9wYXJlbnQpO1xuK1x0XHRfZXhpdCgwKTtcbitcdH1cbitcbitcdGlmICghQVNTRVJUX0VRKHdhaXRwaWQocGlkLCBcdTAwMjZzdGF0dXMsIDApLCBwaWQsIFwid2FpdHBpZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKiBBIG5vbi16ZXJvIGV4aXQgbWVhbnMgdGhlIGNoaWxkIGZhaWxlZCB0byBzZXQgdXA7IHRoZSBjb2RlIHNheXMgd2hlcmUuICovXG4rXHRpZiAoV0lGRVhJVEVEKHN0YXR1cykgXHUwMDI2XHUwMDI2IFdFWElUU1RBVFVTKHN0YXR1cykpIHtcbitcdFx0QVNTRVJUX09LKFdFWElUU1RBVFVTKHN0YXR1cyksIFwiY2hpbGQgc2V0dXBcIik7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEZhdWx0aW5nIGEgdmFsaWQgYXJlbmEgYWRkcmVzcyB1bnRpbCBtZW1vcnkubWF4IGlzIGhpdCBtdXN0IG5vdCBsb29rXG4rXHQgKiBsaWtlIGFuIGludmFsaWQgYWNjZXNzLiBXaXRob3V0IHRoZSBmaXggdGhlIGZhdWx0IHBhdGggYWxsb2NhdGVkIHdpdGhcbitcdCAqIHRoZSBub24tYmxvY2tpbmcgYWxsb2NhdG9yLCB0dXJuZWQgaXRzIC1FTk9NRU0gaW50byBWTV9GQVVMVF9TSUdTRUdWLFxuK1x0ICogYW5kIHRoZSBjaGlsZCBkaWVkIHdpdGggU0lHU0VHViBvbiBhIHZhbGlkIGFkZHJlc3M7IG5vdyBpdCBpcyBoYW5kbGVkXG4rXHQgKiBieSB0aGUgbWVtY2cgT09NIHBhdGggaW5zdGVhZC4gQSBTSUdLSUxMIGFsb25lIHdvdWxkIG5vdCBwcm92ZSB0aGVcbitcdCAqIG1lbWNnIE9PTSBraWxsZXIgZGlkIGl0IChhIGdsb2JhbCBPT00gb3IgYW4gdW5yZWxhdGVkIGNyYXNoIGNvdWxkIGFsc29cbitcdCAqIGtpbGwgdGhlIGNoaWxkKSwgc28gY2hlY2sgbWVtb3J5LmV2ZW50cy5vb21fa2lsbCwgd2hpY2ggcmVjb3JkcyB0aGVcbitcdCAqIG1lbWNnIE9PTSBhbmQgc3Vydml2ZXMgdGhlIGNoaWxkLlxuK1x0ICovXG4rXHRpZiAoIUFTU0VSVF9UUlVFKFdJRlNJR05BTEVEKHN0YXR1cyksIFwiY2hpbGQga2lsbGVkIGJ5IHNpZ25hbFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXHRpZiAoIUFTU0VSVF9HRShjZ19yZWFkX2tleShDR19QQVRILCBcIm1lbW9yeS5ldmVudHNcIiwgXCJvb21fa2lsbFwiKSwgMSxcbitcdFx0ICAgICAgIFwibWVtY2cgb29tX2tpbGxcIikpXG4rXHRcdGR1bXBfbWVtY2cocmVhZF9jZ3JvdXBfZmlsZSk7XG4rb3V0OlxuK1x0aWYgKGNncm91cF9mZCBcdTAwM2U9IDApXG4rXHRcdGNsb3NlKGNncm91cF9mZCk7XG4rXHRjbGVhbnVwX2Nncm91cF9lbnZpcm9ubWVudCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfbWVtY2cuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9tZW1jZy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODgyNTljZmVhMDZiNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNcbkBAIC0wLDAgKzEsMjQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKyNpbmNsdWRlIFx1MDAzY3ZtbGludXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfYXJlbmFfY29tbW9uLmhcIlxuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbitcdF9fdWludChtYXhfZW50cmllcywgNTAwMDApOyAvKiBudW1iZXIgb2YgcGFnZXMgKi9cbisjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuK1x0X191bG9uZyhtYXBfZXh0cmEsIDB4MXVsbCBcdTAwM2NcdTAwM2MgMzIpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4rI2Vsc2VcbitcdF9fdWxvbmcobWFwX2V4dHJhLCAweDF1bGwgXHUwMDNjXHUwMDNjIDQ0KTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuKyNlbmRpZlxuK30gYXJlbmEgU0VDKFwiLm1hcHNcIik7XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBub29wKHZvaWQgKmN0eClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDk6NDY6MDguMTAwNTUyMDY1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MjQ2MzcxOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50OiBCUEYgQXJlbmEgU2xlZXBhYmxlIEFsbG9jYXRvcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyB0b3VjaGluZyBga2VybmVsL2JwZi9hcmVuYS5jYCBhbmQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYWltaW5nIHRvIGludHJvZHVjZSBhIHNsZWVwYWJsZSBwYWdlIGFsbG9jYXRvciAoYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgKSBmb3IgQlBGIGFyZW5hIHBhZ2UgZmF1bHRzLiBUaGVyZSdzIGFsc28gYSBuZXcgc2VsZnRlc3QgZm9yIEJQRiBhcmVuYSBtZW1jZyBsaW1pdHMgYWRkZWQuIFRoZSBrZXkgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyB0aGF0IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbj9cblxuRmlyc3QsIGxvb2tpbmcgYXQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCwgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgIGlzIGludHJvZHVjZWQuIEl0IGludGVybmFsbHkgY2FsbHMgYGFsbG9jX3BhZ2VzX25vZGVgLCBidXQgY3J1Y2lhbGx5LCBpdCB1c2VzIGBCUEZfUEFHRV9HRlBgLCB3aGljaCAqaW5jbHVkZXMqIGBfX0dGUF9aRVJPYC4gVGhpcyBtZWFucyB0aGUgbmV3bHkgYWxsb2NhdGVkIHBhZ2UgKndpbGwqIGJlIHplcm9lZC4gQWx3YXlzIGEgZ29vZCBzaWduLlxuXG5Ob3csIGludG8gYGtlcm5lbC9icGYvYXJlbmEuY2AuIGBhcmVuYV92bV9mYXVsdGAgaXMgbW9kaWZpZWQgdG8gdXNlIHRoaXMgbmV3IHNsZWVwYWJsZSBhbGxvY2F0b3IuIFRoZSByZWxldmFudCBjb2RlIHByZWFsbG9jYXRlcyBhIHBhZ2Ugb3V0c2lkZSB0aGUgc3BpbmxvY2sgdXNpbmcgYGJwZl9tYXBfYWxsb2NfcGFnZV9zbGVlcGFibGVgLiBJZiB0aGUgcHJlYWxsb2NhdGVkIHBhZ2UgaXNuJ3QgbmVlZGVkLCBpdCdzIGZyZWVkLiBJZiBpdCAqaXMqIHVzZWQsIGl0J3MgbWFwcGVkLiBBZ2Fpbiwgc2luY2UgYF9fR0ZQX1pFUk9gIGlzIGluIHRoZSBmbGFncywgdGhlIHBhZ2UgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCB0byB6ZXJvIGJlZm9yZSBtYXBwaW5nLiBXZSdyZSBleHBsaWNpdGx5IGluaXRpYWxpemluZyB0aGUgbWVtb3J5LCBzbyBubyBpbW1lZGlhdGUgcmVkIGZsYWdzLlxuXG5UaGUgcHJlc2VuY2Ugb2YgbmV3IHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2Nncm91cF9oZWxwZXJzLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYXJlbmFfbWVtY2cuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX21lbWNnLmNgIGlzIGdvb2QsIGJ1dCBkb2Vzbid0IHN3YXkgb3VyIGRlY2lzaW9uIG9uIHRoaXMgS01TQU4gYXNzZXNzbWVudC5cblxuT2theSwgbGV0J3MgdmVyaWZ5IGFnYWluLiBJJ20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGBicGZfbWFwX2FsbG9jX3BhZ2Vfc2xlZXBhYmxlYCwgd2hpY2ggZXhwbGljaXRseSBjYWxscyBgYWxsb2NfcGFnZXNfbm9kZWAgd2l0aCBgQlBGX1BBR0VfR0ZQYCwgYW5kICp0aGF0KiBpbmNsdWRlcyBgX19HRlBfWkVST2AuIEknbGwgZG8gdGhlIHNhbWUgZm9yIGBhcmVuYV92bV9mYXVsdGAsIGFuZCBJIHNlZSB0aGUgZXhhY3Qgc2FtZSB0aGluZzsgdGhhdCBhIHBhZ2UgYWxsb2NhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgZnJlZWQgaWYgaXQgaXMgbm90IHVzZWQsIGFuZCBpdCBpcyBhIHplcm9lZCBwYWdlIHdoZW4gaXQgaXMgbWFwcGVkLiBTbywgZXZlbiBpZiB0aGUgcGFnZSBpcyBtYXBwZWQsIGl0J3Mgc3RhcnRpbmcgZnJvbSBhIGtub3duIHN0YXRlLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoZSBuZXdseSBhbGxvY2F0ZWQgcGFnZXMgYXJlIHplcm9lZCwgYW5kIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBmaWVsZHMgdG8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24sIHRoZSBsb2dpYyBpcyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBtZW1jZyBhY2NvdW50aW5nLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBoZXJlIGFyZSByZWxhdGVkIHRvIGxvY2tpbmcsIG1lbW9yeSBsZWFrcywgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgYW5kIGFyZSB3ZWxsIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAgYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLlxuXG5UaGVyZWZvcmUsIGJhc2VkIG9uIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlLCBJIGNvbmNsdWRlIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXNuJ3QganVzdGlmaWVkIGhlcmUuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGEgY29udGV4dCBzd2l0Y2ggZnJvbSBhIG5vbi1zbGVlcGFibGUgdG8gYSBzbGVlcGFibGUgbWVtb3J5IGFsbG9jYXRvciwgd2hpbGUgbWFpbnRhaW5pbmcgYSBzYWZlIGluaXRpYWwgbWVtb3J5IHN0YXRlIGFuZCBpcyB3ZWxsLWNvdmVyZWQgYnkgb3VyIGV4aXN0aW5nIGZ1enppbmcgYW5kIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIEknbSBjb21mb3J0YWJsZSB3aXRoIHRoaXMgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIxOSwiT3V0cHV0VG9rZW5zIjoyMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDk6NDY6MjIuMzQ2OTI4NDI0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIHBhZ2UgZmF1bHQgaGFuZGxlciAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gcHJlYWxsb2NhdGUgcGFnZXMgdXNpbmcgYSBzbGVlcGFibGUgYWxsb2NhdG9yIChgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWApIG91dHNpZGUgb2YgYSBzcGlubG9jay4gVGhpcyBhbGxvd3MgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG5lY2Vzc2FyeS4gVGhlIG5ldyBhbGxvY2F0b3IgZXhwbGljaXRseSB1c2VzIHRoZSBgX19HRlBfWkVST2AgZmxhZyAodmlhIGBCUEZfUEFHRV9HRlBgKSwgZW5zdXJpbmcgdGhhdCBhbGwgbmV3bHkgYWxsb2NhdGVkIHBhZ2VzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBtYXBwZWQgaW50byB0aGUgYXJlbmEuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIGFyZW5hIHBhZ2UgZmF1bHQgaGFuZGxlciAoYGFyZW5hX3ZtX2ZhdWx0YCkgdG8gcHJlYWxsb2NhdGUgcGFnZXMgdXNpbmcgYSBzbGVlcGFibGUgYWxsb2NhdG9yIChgYnBmX21hcF9hbGxvY19wYWdlX3NsZWVwYWJsZWApIG91dHNpZGUgb2YgYSBzcGlubG9jay4gVGhpcyBhbGxvd3MgdGhlIG1lbWNnIE9PTSBraWxsZXIgdG8gcnVuIGlmIG5lY2Vzc2FyeS4gVGhlIG5ldyBhbGxvY2F0b3IgZXhwbGljaXRseSB1c2VzIHRoZSBgX19HRlBfWkVST2AgZmxhZyAodmlhIGBCUEZfUEFHRV9HRlBgKSwgZW5zdXJpbmcgdGhhdCBhbGwgbmV3bHkgYWxsb2NhdGVkIHBhZ2VzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSBiZWluZyBtYXBwZWQgaW50byB0aGUgYXJlbmEuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2c77[1] Phase: Succeeded StartedAt: 2026-08-25 09:46:35 +0000 UTC FinishedAt: 2026-08-25 09:46:35 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 09:46:35 +0000 UTC FinishedAt: 2026-08-25 09:46:35 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2] Phase: Succeeded StartedAt: 2026-08-25 09:46:35 +0000 UTC FinishedAt: 2026-08-25 13:26:51 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 09:46:35 +0000 UTC FinishedAt: 2026-08-25 13:26:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 09:46:35 +0000 UTC FinishedAt: 2026-08-25 09:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 09:46:35 +0000 UTC FinishedAt: 2026-08-25 09:46:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-workfloww2c77/series-workfloww2c77-convert-artifact-1076805536/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 09:46:47 +0000 UTC FinishedAt: 2026-08-25 10:04:24 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 09:46:47 +0000 UTC FinishedAt: 2026-08-25 10:04:24 +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:*2d465bec-b822-44ac-9490-9ba53ee4ef9c,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-workfloww2c77/series-workfloww2c77-convert-artifact-1076805536/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": "4ed1028a-b045-48aa-a03c-6d409a13eebc", "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-workfloww2c77/series-workfloww2c77-build-action-1470078566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 09:46:47 +0000 UTC FinishedAt: 2026-08-25 10:04:14 +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:*2d465bec-b822-44ac-9490-9ba53ee4ef9c,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-workfloww2c77/series-workfloww2c77-convert-artifact-1076805536/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": "4ed1028a-b045-48aa-a03c-6d409a13eebc", "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-workfloww2c77/series-workfloww2c77-build-action-1470078566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:04:24 +0000 UTC FinishedAt: 2026-08-25 10:04:24 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:04:24 +0000 UTC FinishedAt: 2026-08-25 10:04:24 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:04:24 +0000 UTC FinishedAt: 2026-08-25 10:04:35 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:04:24 +0000 UTC FinishedAt: 2026-08-25 10:04:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-workfloww2c77/series-workfloww2c77-convert-artifact-876034759/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:04:35 +0000 UTC FinishedAt: 2026-08-25 10:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:04:35 +0000 UTC FinishedAt: 2026-08-25 10:06:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4ed1028a-b045-48aa-a03c-6d409a13eebc,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-workfloww2c77/series-workfloww2c77-build-action-1470078566/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-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:06:25 +0000 UTC FinishedAt: 2026-08-25 10:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:06:25 +0000 UTC FinishedAt: 2026-08-25 10:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:06:25 +0000 UTC FinishedAt: 2026-08-25 10:23:24 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:06:25 +0000 UTC FinishedAt: 2026-08-25 10:23:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2d465bec-b822-44ac-9490-9ba53ee4ef9c,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-workfloww2c77/series-workfloww2c77-convert-artifact-876034759/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": "8cb596f7-b927-48c7-9e06-cc6b3b6814d9", "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-workfloww2c77/series-workfloww2c77-build-action-353598027/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:06:25 +0000 UTC FinishedAt: 2026-08-25 10:23:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2d465bec-b822-44ac-9490-9ba53ee4ef9c,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-workfloww2c77/series-workfloww2c77-convert-artifact-876034759/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": "8cb596f7-b927-48c7-9e06-cc6b3b6814d9", "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-workfloww2c77/series-workfloww2c77-build-action-353598027/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:23:24 +0000 UTC FinishedAt: 2026-08-25 10:23:24 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:23:24 +0000 UTC FinishedAt: 2026-08-25 10:23:24 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:23:24 +0000 UTC FinishedAt: 2026-08-25 10:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:23:24 +0000 UTC FinishedAt: 2026-08-25 10:25:21 +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:*8cb596f7-b927-48c7-9e06-cc6b3b6814d9,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-workfloww2c77/series-workfloww2c77-build-action-353598027/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-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:25:31 +0000 UTC FinishedAt: 2026-08-25 13:26:51 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:25:31 +0000 UTC FinishedAt: 2026-08-25 13:26:51 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"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:*4ed1028a-b045-48aa-a03c-6d409a13eebc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8cb596f7-b927-48c7-9e06-cc6b3b6814d9,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-workfloww2c77/series-workfloww2c77-build-action-1470078566/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-workfloww2c77/series-workfloww2c77-build-action-353598027/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:25:31 +0000 UTC FinishedAt: 2026-08-25 10:25:41 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:25:31 +0000 UTC FinishedAt: 2026-08-25 10:25:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"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-workfloww2c77/series-workfloww2c77-convert-artifact-2222368416/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:25:31 +0000 UTC FinishedAt: 2026-08-25 10:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:25:31 +0000 UTC FinishedAt: 2026-08-25 10:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:25:31 +0000 UTC FinishedAt: 2026-08-25 10:25:31 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:25:41 +0000 UTC FinishedAt: 2026-08-25 13:26:51 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww2c77[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["arena_vm_fault","bpf_map_alloc_page_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5e289c5a4a526e870efac0ca658635c47138593a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","MEMCG"],"series_id":"279b51ba-1933-4e0e-94ce-96fc97800a41","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-08-25 10:25:41 +0000 UTC FinishedAt: 2026-08-25 13:26:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4ed1028a-b045-48aa-a03c-6d409a13eebc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8cb596f7-b927-48c7-9e06-cc6b3b6814d9,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-workfloww2c77/series-workfloww2c77-build-action-1470078566/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-workfloww2c77/series-workfloww2c77-build-action-353598027/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-workfloww2c77/series-workfloww2c77-convert-artifact-2222368416/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,}