Name: series-workflowwcgpk Phase: Succeeded StartedAt: 2026-08-02 05:30:33 +0000 UTC FinishedAt: 2026-08-02 09:58:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[0] Phase: Succeeded StartedAt: 2026-08-02 05:30:33 +0000 UTC FinishedAt: 2026-08-02 06:03:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 05:30:33 +0000 UTC FinishedAt: 2026-08-02 06:03:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "af39eb111ce6b5eba9c08513b62c4868eb7e7fd5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESP", "INET_ESP_OFFLOAD", "INET6_ESP", "INET6_ESP_OFFLOAD", "XFRM_IPTFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "af39eb111ce6b5eba9c08513b62c4868eb7e7fd5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESP", "INET_ESP_OFFLOAD", "INET6_ESP", "INET6_ESP_OFFLOAD", "XFRM_IPTFS" ], "series_id": "25f2a158-c9c6-4f37-8703-e8df04faface" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pskb_expand_head", "skb_copy_expand", "skb_segment_list", "skb_segment", "raw_sendmsg", "rawv6_sendmsg", "validate_xmit_xfrm", "xfrm_output" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtza2JfY29weV9leHBhbmQmIzM0OywKICAgICYjMzQ7c2tiX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudCYjMzQ7LAogICAgJiMzNDtyYXdfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyYXd2Nl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX3htaXRfeGZybSYjMzQ7LAogICAgJiMzNDt4ZnJtX291dHB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGNhcmVmdWwgYm91bmRzIGNoZWNraW5nIHRvIHNrYiBoZWFkZXIgb2Zmc2V0IHVwZGF0ZXMgKGUuZy4sIHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsLCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwpIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0d29ya2luZyAoc2tidWZmLmMpLCByYXcgc29ja2V0cyAocmF3LmMpLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIGFuZCBlbmNhcHN1bGF0aW9uICh4ZnJtX2RldmljZS5jLCB4ZnJtX2lwdGZzLmMsIHhmcm1fb3V0cHV0LmMsIGVzcDRfb2ZmbG9hZC5jLCBlc3A2X29mZmxvYWQuYykuIFNpbmNlIHRoaXMgbW9kaWZpZXMgY29yZSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgaGVhZGVyIG1hbmlwdWxhdGlvbiBsb2dpYywgaXQgaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgb3ZlcmZsb3cgY2hlY2tzIGRvIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgZHJvcCB2YWxpZCBwYWNrZXRzLCBhbmQgdGhhdCB0aGV5IGNvcnJlY3RseSBwcmV2ZW50IG92ZXJmbG93cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc0N2I5OWNlNTZiM2E1OGZlN2UxNGU5NGFkNWI0OGJkYzhlZjg2MGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA1OjUyOjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCAyMmVkYTFkNTRhMGU4Li5jOGUyZmIyMTc2NGE5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTMxMjYsNiAmIzQzOzMxMjYsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IG9mZnNldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcbiYjNDM7c2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgaW50IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdGlmICh1bmxpa2VseShvZmZzZXQgXHUwMDNjIDAgfHwgb2Zmc2V0IFx1MDAzZT0gVTE2X01BWCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciBcdTAwM2U9IFUxNl9NQVggLSBvZmZzZXQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBvZmZzZXQ7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcbiYjNDM7c2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgaW50IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdGlmIChvZmZzZXQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2U9IFUxNl9NQVgpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgXHUwMDNlPSBVMTZfTUFYIC0gb2Zmc2V0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IG9mZnNldDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9uZXR3b3JrX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHJldHVybiBza2ItXHUwMDNlaGVhZCAmIzQzOyBza2ItXHUwMDNlbmV0d29ya19oZWFkZXI7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYmEzZGJhYzgwZmI0OS4uZDgxNzdlNjc3MjE2NCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTM4Nyw2ICYjNDM7Mzg3LDkgQEAgdTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmFwaV9za2JfY2FjaGVfZ2V0X2J1bGspO1xuIFxuJiM0MztzdGF0aWMgaW50IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcbiYjNDM7c3RhdGljIGludCBza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIF9fZmluYWxpemVfc2tiX2Fyb3VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IHNpemUpXG4ge1xuQEAgLTk3Niw3ICYjNDM7OTc5LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuIFx0c2tiX3B1dChuc2tiLCBzaXplKTtcbiBcbiBcdGhlYWRfb2ZmID0gc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYik7XG4tXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIGhlYWRfb2ZmKTtcbiYjNDM7XHRlcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgaGVhZF9vZmYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGNvbnN1bWVfc2tiKG5za2IpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4gXG4gXHRvZmYgPSBzaXplO1xuIFx0bGVuID0gc2tiLVx1MDAzZWxlbiAtIG9mZjtcbkBAIC0yMTQwLDYgJiM0MzsyMTQ3LDg2IEBAIHZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUpO1xuIFxuJiM0MztzdGF0aWMgYm9vbCBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyh1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgYWRkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGFkZCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKGFkZCBcdTAwM2UgVTE2X01BWClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2Zmc2V0IFx1MDAzZSBVMTZfTUFYIC0gYWRkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3codW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFkZClcbiYjNDM7e1xuJiM0MztcdGlmIChhZGQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChhZGQgXHUwMDNlPSBVMTZfTUFYKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvZmZzZXQgXHUwMDNlPSBVMTZfTUFYIC0gYWRkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcbiYjNDM7e1xuJiM0MztcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlbmV0d29ya19oZWFkZXIsIG9mZikpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIsIG9mZikpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlbWFjX2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XG4mIzQzO1x0XHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZWlubmVyX25ldHdvcmtfaGVhZGVyLCBvZmYpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfbWFjX2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cdTAwM2Vjc3VtX3N0YXJ0LCBvZmYpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcbiYjNDM7e1xuJiM0MztcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coc2tiLCBvZmYpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4mIzQzO1xuJiM0MztcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpXG4mIzQzO1x0XHRza2ItXHUwMDNlY3N1bV9zdGFydCAmIzQzOz0gb2ZmO1xuJiM0MztcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpXG4mIzQzO1x0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2ZmO1xuJiM0MztcdHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOz0gb2ZmO1xuJiM0MztcdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXG4mIzQzO1x0XHRza2ItXHUwMDNlbWFjX2hlYWRlciAmIzQzOz0gb2ZmO1xuJiM0MztcdGlmIChza2ItXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciAhPSAodHlwZW9mKHNrYi1cdTAwM2Vpbm5lcl90cmFuc3BvcnRfaGVhZGVyKSl+MFUpXG4mIzQzO1x0XHRza2ItXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2ZmO1xuJiM0MztcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XG4mIzQzO1x0XHRza2ItXHUwMDNlaW5uZXJfbmV0d29ya19oZWFkZXIgJiM0Mzs9IG9mZjtcbiYjNDM7XHRcdHNrYi1cdTAwM2Vpbm5lcl9tYWNfaGVhZGVyICYjNDM7PSBvZmY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKG9mZiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuJiM0MztcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl90cmFuc3BvcnRfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuJiM0MztcbiYjNDM7XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxuIHtcbiBcdF9fY29weV9za2JfaGVhZGVyKG5ldywgb2xkKTtcbkBAIC0yMzA0LDYgJiM0MzsyMzkxLDkgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXG4gXG4gXHRCVUdfT04oc2tiX3NoYXJlZChza2IpKTtcbiBcbiYjNDM7XHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgbmhlYWQpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4mIzQzO1xuIFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG4gXG4gXHRpZiAoc2tiX3BmbWVtYWxsb2Moc2tiKSlcbkBAIC0yMzU0LDcgJiM0MzsyNDQ0LDcgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXG4gXHRvZmYgICAgICAgICAgID0gbmhlYWQ7XG4gI2VuZGlmXG4gXHRza2ItXHUwMDNldGFpbFx0ICAgICAgJiM0Mzs9IG9mZjtcbi1cdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCBuaGVhZCk7XG4mIzQzO1x0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKHNrYiwgbmhlYWQpO1xuIFx0c2tiLVx1MDAzZWNsb25lZCAgID0gMDtcbiBcdHNrYi1cdTAwM2VoZHJfbGVuICA9IDA7XG4gXHRza2ItXHUwMDNlbm9oZHIgICAgPSAwO1xuQEAgLTI1NDEsNyAmIzQzOzI2MzEsMTAgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0c2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7XG4gXG4tXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pO1xuJiM0MztcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobiwgbmV3aGVhZHJvb20gLSBvbGRoZWFkcm9vbSkpIHtcbiYjNDM7XHRcdGtmcmVlX3NrYihuKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiBuO1xuIH1cbkBAIC00NjgwLDcgJiM0Mzs0NzczLDcgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHVuc2lnbmVkIGludCBkZWx0YV9sZW4gPSAwO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5za2IsICp0bXA7XG4tXHRpbnQgbGVuX2RpZmYsIGVycjtcbiYjNDM7XHRpbnQgaGVhZF9vZmYsIGxlbl9kaWZmLCBlcnI7XG4gXG4gXHQvKiBPbmx5IHNrYl9ncm9fcmVjZWl2ZV9saXN0IGdlbmVyYXRlZCBza2JzIGFycml2ZSBoZXJlICovXG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKCEoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSk7XG5AQCAtNDczMiw4ICYjNDM7NDgyNSwxNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRsZW5fZGlmZiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4obnNrYikgLSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XG4gXHRcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XG4gXG4tXHRcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYikpO1xuLVx0XHRuc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IGxlbl9kaWZmO1xuJiM0MztcdFx0aGVhZF9vZmYgPSBza2JfaGVhZHJvb20obnNrYikgLSBza2JfaGVhZHJvb20oc2tiKTtcbiYjNDM7XHRcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLCBoZWFkX29mZik7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuJiM0MztcdFx0XHRuc2tiLVx1MDAzZW5leHQgPSBsaXN0X3NrYjtcbiYjNDM7XHRcdFx0Z290byBlcnJfbGlzdDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVyciA9IHNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKG5za2IsIGxlbl9kaWZmKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4mIzQzO1x0XHRcdG5za2ItXHUwMDNlbmV4dCA9IGxpc3Rfc2tiO1xuJiM0MztcdFx0XHRnb3RvIGVycl9saXN0O1xuJiM0MztcdFx0fVxuIFx0XHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIC10bmxfaGxlbixcbiBcdFx0XHRcdFx0XHQgbnNrYi1cdTAwM2VkYXRhIC0gdG5sX2hsZW4sXG4gXHRcdFx0XHRcdFx0IG9mZnNldCAmIzQzOyB0bmxfaGxlbik7XG5AQCAtNDc1OSw5ICYjNDM7NDg2MSwxMSBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIHNrYjtcbiBcbiBlcnJfbGluZWFyaXplOlxuJiM0MztcdGVyciA9IC1FTk9NRU07XG4mIzQzO2Vycl9saXN0OlxuIFx0a2ZyZWVfc2tiX2xpc3Qoc2tiLVx1MDAzZW5leHQpO1xuIFx0c2tiLVx1MDAzZW5leHQgPSBOVUxMO1xuLVx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnRfbGlzdCk7XG4gXG5AQCAtNDk2MSw3ICYjNDM7NTA2NSwxMSBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuIFxuIFx0XHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7XG4gXG4tXHRcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xuJiM0MztcdFx0ZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsXG4mIzQzO1x0XHRcdFx0XHRcdFx0c2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KGVycikpXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4obnNrYik7XG4gXG4gXHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KGhlYWRfc2tiLCAtdG5sX2hsZW4sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuaW5kZXggYWJkNzcxNjJmNWU3NS4uYTIyZWYwNDRlZWNiMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuQEAgLTEzOCw3ICYjNDM7MTM4LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncyA9IEVSUl9QVFIoLUVJTlZBTCk7XG4gXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xuIFxuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbiYjNDM7XHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFx0b3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXRfb2ZmbG9hZHNbeG8tXHUwMDNlcHJvdG9dKTtcbiBcdGlmIChsaWtlbHkob3BzIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KSlcbiBcdFx0c2VncyA9IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XG5AQCAtMTU1LDIzICYjNDM7MTU2LDI3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqb3BzO1xuIFx0dTggcHJvdG8gPSB4by1cdTAwM2Vwcm90bztcbiBcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4mIzQzO1x0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcbiBcdGlmICh4LVx1MDAzZXNlbC5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbiBcdFx0aWYgKHByb3RvID09IElQUFJPVE9fQkVFVFBIKSB7XG4gXHRcdFx0c3RydWN0IGlwX2JlZXRfcGhkciAqcGggPVxuIFx0XHRcdFx0KHN0cnVjdCBpcF9iZWV0X3BoZHIgKilza2ItXHUwMDNlZGF0YTtcbiBcbi1cdFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gcGgtXHUwMDNlaGRybGVuICogODtcbiYjNDM7XHRcdFx0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHBoLVx1MDAzZWhkcmxlbiAqIDgpKVxuJiM0MztcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFx0XHRcdHByb3RvID0gcGgtXHUwMDNlbmV4dGhkcjtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAtPSBJUFY0X0JFRVRfUEhNQVhMRU47XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHRpbnQgb2Zmc2V0O1xuIFx0XHRfX2JlMTYgZnJhZztcbiBcbi1cdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9XG4tXHRcdFx0aXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFx1MDAyNnByb3RvLCBcdTAwMjZmcmFnKTtcbiYjNDM7XHRcdG9mZnNldCA9IGlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCBcdTAwMjZwcm90bywgXHUwMDI2ZnJhZyk7XG4mIzQzO1x0XHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRcdGlmIChwcm90byA9PSBJUFBST1RPX1RDUClcbiBcdFx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3R5cGUgfD0gU0tCX0dTT19UQ1BWNDtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jXG5pbmRleCA3Zjc0ZDhiOTVhMzczLi4xNjM1NGJmNzZkYWQxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcmF3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3Jhdy5jXG5AQCAtMzU2LDYgJiM0MzszNTYsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtXHUwMDNlZHN0LmRldik7XG4mIzQzO1x0aWYgKGhsZW4gXHUwMDNlPSBVMTZfTUFYIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdHRsZW4gPSBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW5lZWRlZF90YWlscm9vbTtcbiBcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssXG4gXHRcdFx0XHQgIGxlbmd0aCAmIzQzOyBobGVuICYjNDM7IHRsZW4gJiM0MzsgMTUsXG5AQCAtMzk5LDYgJiM0Mzs0MDEsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcbiBcdGVyciA9IC1FSU5WQUw7XG4gXHRpZiAoaXBobGVuIFx1MDAzZSBsZW5ndGggfHwgaXBobGVuIFx1MDAzYyBzaXplb2YoKmlwaCkpXG4gXHRcdGdvdG8gZXJyb3JfZnJlZTtcbiYjNDM7XHRpZiAoaGxlbiBcdTAwM2U9IFUxNl9NQVggLSBpcGhsZW4pXG4mIzQzO1x0XHRnb3RvIGVycm9yX2ZyZWU7XG4gXG4gXHRpZiAoaXBobGVuIFx1MDAzZT0gc2l6ZW9mKCppcGgpKSB7XG4gXHRcdGlmICghaXBoLVx1MDAzZXNhZGRyKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jIGIvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcbmluZGV4IDIyODk1NTIxYTU3ZDAuLmUxMjNmMGE5NzgyYjIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcbkBAIC0xNzQsNyAmIzQzOzE3NCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfdHJhbnNwb3J0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiBcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4mIzQzO1x0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0Nl9vZmZsb2Fkc1t4by1cdTAwM2Vwcm90b10pO1xuIFx0aWYgKGxpa2VseShvcHMgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKVxuIFx0XHRzZWdzID0gb3BzLVx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTtcbkBAIC0xOTEsNyAmIzQzOzE5Miw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqb3BzO1xuIFx0dTggcHJvdG8gPSB4by1cdTAwM2Vwcm90bztcbiBcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4mIzQzO1x0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcbiBcdGlmICh4LVx1MDAzZXNlbC5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbiBcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT1cbkBAIC0yMDEsNyAmIzQzOzIwMyw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdFx0XHRzdHJ1Y3QgaXBfYmVldF9waGRyICpwaCA9XG4gXHRcdFx0XHQoc3RydWN0IGlwX2JlZXRfcGhkciAqKXNrYi1cdTAwM2VkYXRhO1xuIFxuLVx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSBwaC1cdTAwM2VoZHJsZW4gKiA4O1xuJiM0MztcdFx0XHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgcGgtXHUwMDNlaGRybGVuICogOCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRcdFx0cHJvdG8gPSBwaC1cdTAwM2VuZXh0aGRyO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjtcbkBAIC0yMTAsMTAgJiM0MzsyMTMsMTIgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0XHRpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApXG4gXHRcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fVENQVjY7XG4gXHR9IGVsc2Uge1xuJiM0MztcdFx0aW50IG9mZnNldDtcbiBcdFx0X19iZTE2IGZyYWc7XG4gXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PVxuLVx0XHRcdGlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCBcdTAwMjZwcm90bywgXHUwMDI2ZnJhZyk7XG4mIzQzO1x0XHRvZmZzZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZyYWcpO1xuJiM0MztcdFx0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIG9mZnNldCkpXG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFx0fVxuIFxuIFx0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUClcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jXG5pbmRleCBiODhkMzY0ZTc4YWFlLi5mYTIyM2VjMDIzOTY0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcmF3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3Jhdy5jXG5AQCAtMTUsNiAmIzQzOzE1LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtNjEzLDYgJiM0Mzs2MTQsOSBAQCBzdGF0aWMgaW50IHJhd3Y2X3NlbmRfaGRyaW5jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuZ3RoLFxuIFx0aWYgKGZsYWdzXHUwMDI2TVNHX1BST0JFKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRpZiAoaGxlbiBcdTAwM2U9IFUxNl9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLFxuIFx0XHRcdFx0ICBsZW5ndGggJiM0MzsgaGxlbiAmIzQzOyB0bGVuICYjNDM7IDE1LFxuIFx0XHRcdFx0ICBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlULCBcdTAwMjZlcnIpO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fZGV2aWNlLmMgYi9uZXQveGZybS94ZnJtX2RldmljZS5jXG5pbmRleCBmMTUzYmY2OTViOWRkLi4yYTA5YmQyZWVjNDkzIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9kZXZpY2UuY1xuQEAgLTIwLDggJiM0MzsyMCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuIFxuICNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG4tc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXG4mIzQzO3N0YXRpYyBpbnQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBpbnQgaHNpemUpXG4ge1xuIFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiBcbkBAIC0zMCwzMCAmIzQzOzMwLDMzIEBAIHN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xuIFxuIFx0cHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgaHNpemUpXG4tXG4mIzQzO3N0YXRpYyBpbnQgX194ZnJtX21vZGVfdHVubmVsX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IGhzaXplKVxuIHtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXG4tXHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IGhzaXplO1xuJiM0MztcdGlmICh4by1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9HU09fU0VHTUVOVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFx0cHNrYl9wdWxsKHNrYixcbiBcdFx0ICBza2ItXHUwMDNlbWFjX2xlbiAmIzQzOyB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4gLSB4LVx1MDAzZXByb3BzLmVuY19oZHJfbGVuKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXG4mIzQzO3N0YXRpYyBpbnQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBpbnQgaHNpemUpXG4ge1xuIFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiBcdGludCBwaGxlbiA9IDA7XG4gXG4tXHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IGhzaXplO1xuJiM0MztcdGlmICh4by1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9HU09fU0VHTUVOVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFx0aWYgKHgtXHUwMDNlc2VsLmZhbWlseSAhPSBBRl9JTkVUNikge1xuQEAgLTYzLDEwICYjNDM7NjYsMTEgQEAgc3RhdGljIHZvaWQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0cHNrYl9wdWxsKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4gJiM0MzsgaHNpemUgJiM0MzsgKHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHBobGVuKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qIEFkanVzdCBwb2ludGVycyBpbnRvIHRoZSBwYWNrZXQgd2hlbiBJUHNlYyBpcyBkb25lIGF0IGxheWVyMiAqL1xuLXN0YXRpYyB2b2lkIHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztzdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN3aXRjaCAoeC1cdTAwM2VvdXRlcl9tb2RlLmVuY2FwKSB7XG4gXHRjYXNlIFhGUk1fTU9ERV9JUFRGUzpcbkBAIC05OCw2ICYjNDM7MTAyLDggQEAgc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRjYXNlIFhGUk1fTU9ERV9JTl9UUklHR0VSOlxuIFx0XHRicmVhaztcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB4bWl0X3hmcm1fY2hlY2tfb3ZlcmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC0xNzUsNyAmIzQzOzE4MSwxMiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1clxuIFxuIFx0aWYgKCFza2ItXHUwMDNlbmV4dCkge1xuIFx0XHRlc3BfZmVhdHVyZXMgfD0gc2tiLVx1MDAzZWRldi1cdTAwM2Vnc29fcGFydGlhbF9mZWF0dXJlcztcbi1cdFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKTtcbiYjNDM7XHRcdGVyciA9IHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYik7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSwgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xuJiM0MztcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdHhvLVx1MDAzZWZsYWdzIHw9IFhGUk1fREVWX1JFU1VNRTtcbiBcbkBAIC0yMDEsNyAmIzQzOzIxMiwxMyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1clxuIFx0XHR4byA9IHhmcm1fb2ZmbG9hZChza2IyKTtcbiBcdFx0eG8tXHUwMDNlZmxhZ3MgfD0gWEZSTV9ERVZfUkVTVU1FO1xuIFxuLVx0XHR4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IyKTtcbiYjNDM7XHRcdGVyciA9IHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYjIpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRYRlJNX0lOQ19TVEFUUyh4c19uZXQoeCksIExJTlVYX01JQl9YRlJNT1VUU1RBVEVQUk9UT0VSUk9SKTtcbiYjNDM7XHRcdFx0c2tiMi1cdTAwM2VuZXh0ID0gbnNrYjtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiX2xpc3Qoc2tiMik7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRlcnIgPSB4LVx1MDAzZXR5cGVfb2ZmbG9hZC1cdTAwM2V4bWl0KHgsIHNrYjIsIGVzcF9mZWF0dXJlcyk7XG4gXHRcdGlmICghZXJyKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXG5pbmRleCA1OTdhZWRlYWMyNmViLi4xM2I2MmJjZDllMDUzIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9pcHRmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbkBAIC0yMzc5LDcgJiM0MzsyMzc5LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAtKHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pKTtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTtcbiYjNDM7XHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbiBcdHRvcF9pcGggPSBpcF9oZHIoc2tiKTtcbiBcdHRvcF9pcGgtXHUwMDNlaWhsID0gNTtcbkBAIC0yNDI2LDcgJiM0MzsyNDI3LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuICYjNDM7IHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTtcbiYjNDM7XHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbiBcdHRvcF9pcGggPSBpcHY2X2hkcihza2IpO1xuIFx0dG9wX2lwaC1cdTAwM2V2ZXJzaW9uID0gNjtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX291dHB1dC5jIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuaW5kZXggY2MzNWMyZmNiYmUwOS4uMGNlYmU3NTJjYTk4MCAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcbkBAIC03Myw3ICYjNDM7NzMsOCBAQCBzdGF0aWMgaW50IHhmcm00X3RyYW5zcG9ydF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzO1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBpaGw7XG4mIzQzO1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGlobCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBpaGwpO1xuIFx0bWVtbW92ZShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaXBoLCBpaGwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMTc5LDcgJiM0MzsxODAsOCBAQCBzdGF0aWMgaW50IHhmcm02X3RyYW5zcG9ydF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2Jfc2V0X21hY19oZWFkZXIoc2tiLFxuIFx0XHRcdCAgIChwcmV2aGRyIC0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi1cdTAwM2VkYXRhKTtcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IGhkcl9sZW47XG4mIzQzO1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXHRfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7XG4gXHRtZW1tb3ZlKGlwdjZfaGRyKHNrYiksIGlwaCwgaGRyX2xlbik7XG4gXHRyZXR1cm4gMDtcbkBAIC0yMDksNyAmIzQzOzIxMSw4IEBAIHN0YXRpYyBpbnQgeGZybTZfcm9fb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYixcbiBcdFx0XHQgICAocHJldmhkciAtIHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikgLSBza2ItXHUwMDNlZGF0YSk7XG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBoZHJfbGVuO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBoZHJfbGVuKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0X19za2JfcHVsbChza2IsIGhkcl9sZW4pO1xuIFx0bWVtbW92ZShpcHY2X2hkcihza2IpLCBpcGgsIGhkcl9sZW4pO1xuIFxuQEAgLTI0MSw3ICYjNDM7MjQ0LDggQEAgc3RhdGljIGludCB4ZnJtNF9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7PSBJUFY0X0JFRVRfUEhNQVhMRU47XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzO1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0eGZybTRfYmVldF9tYWtlX2hlYWRlcihza2IpO1xuIFxuQEAgLTI4OCw3ICYjNDM7MjkyLDggQEAgc3RhdGljIGludCB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0MztcbiBcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTtcbiYjNDM7XHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdHRvcF9pcGggPSBpcF9oZHIoc2tiKTtcbiBcbiBcdHRvcF9pcGgtXHUwMDNlaWhsID0gNTtcbkBAIC0zMzUsNyAmIzQzOzM0MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHVubmVsX2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7XG4gXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0dG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7XG4gXG4gXHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA2O1xuQEAgLTM3NCw3ICYjNDM7MzgwLDggQEAgc3RhdGljIGludCB4ZnJtNl9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7PSBJUFY0X0JFRVRfUEhNQVhMRU47XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzO1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTtcbiYjNDM7XHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdHBoID0gX19za2JfcHVsbChza2IsIFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS1cdTAwM2VpaGwgLSBoZHJfbGVuKTtcbiBcbiBcdHhmcm02X2JlZXRfbWFrZV9oZWFkZXIoc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVRfRVNQX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwc2tiX2V4cGFuZF9oZWFkJiMzNDssCiAgICAmIzM0O3NrYl9jb3B5X2V4cGFuZCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O3NrYl9zZWdtZW50JiMzNDssCiAgICAmIzM0O3Jhd19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Jhd3Y2X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfeG1pdF94ZnJtJiMzNDssCiAgICAmIzM0O3hmcm1fb3V0cHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgY2FyZWZ1bCBib3VuZHMgY2hlY2tpbmcgdG8gc2tiIGhlYWRlciBvZmZzZXQgdXBkYXRlcyAoZS5nLiwgc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwsIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bCkgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIChza2J1ZmYuYyksIHJhdyBzb2NrZXRzIChyYXcuYyksIGFuZCBJUHNlYy9YRlJNIG9mZmxvYWRpbmcgYW5kIGVuY2Fwc3VsYXRpb24gKHhmcm1fZGV2aWNlLmMsIHhmcm1faXB0ZnMuYywgeGZybV9vdXRwdXQuYywgZXNwNF9vZmZsb2FkLmMsIGVzcDZfb2ZmbG9hZC5jKS4gU2luY2UgdGhpcyBtb2RpZmllcyBjb3JlIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBoZWFkZXIgbWFuaXB1bGF0aW9uIGxvZ2ljLCBpdCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBvdmVyZmxvdyBjaGVja3MgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkcm9wIHZhbGlkIHBhY2tldHMsIGFuZCB0aGF0IHRoZXkgY29ycmVjdGx5IHByZXZlbnQgb3ZlcmZsb3dzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzQ3Yjk5Y2U1NmIzYTU4ZmU3ZTE0ZTk0YWQ1YjQ4YmRjOGVmODYwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMDU6NTI6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCAyMmVkYTFkNTRhMGU4Li5jOGUyZmIyMTc2NGE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTMxMjYsNiAmIzQzOzMxMjYsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2Zmc2V0OwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjawomIzQzO3NrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGludCBvZmZzZXQpCiYjNDM7ewomIzQzOwlpZiAodW5saWtlbHkob2Zmc2V0ICZsdDsgMCB8fCBvZmZzZXQgJmd0Oz0gVTE2X01BWCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICh1bmxpa2VseShza2ItJmd0O25ldHdvcmtfaGVhZGVyICZndDs9IFUxNl9NQVggLSBvZmZzZXQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IG9mZnNldDsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sKJiM0Mztza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KQomIzQzO3sKJiM0MzsJaWYgKG9mZnNldCAmZ3Q7IDApIHsKJiM0MzsJCWlmICh1bmxpa2VseSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlpZiAodW5saWtlbHkob2Zmc2V0ICZndDs9IFUxNl9NQVgpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWlmICh1bmxpa2VseShza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJmd0Oz0gVTE2X01BWCAtIG9mZnNldCkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2Zmc2V0OwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9uZXR3b3JrX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiBza2ItJmd0O2hlYWQgJiM0Mzsgc2tiLSZndDtuZXR3b3JrX2hlYWRlcjsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYmEzZGJhYzgwZmI0OS4uZDgxNzdlNjc3MjE2NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTM4Nyw2ICYjNDM7Mzg3LDkgQEAgdTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKTsKIAomIzQzO3N0YXRpYyBpbnQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpOwomIzQzO3N0YXRpYyBpbnQgc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZik7CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgX19maW5hbGl6ZV9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsCiAJCQkJCSB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKQEAgLTk3Niw3ICYjNDM7OTc5LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLAogCXNrYl9wdXQobnNrYiwgc2l6ZSk7CiAKIAloZWFkX29mZiA9IHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpOwotCXNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgaGVhZF9vZmYpOwomIzQzOwllcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgaGVhZF9vZmYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQljb25zdW1lX3NrYihuc2tiKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KIAogCW9mZiA9IHNpemU7CiAJbGVuID0gc2tiLSZndDtsZW4gLSBvZmY7CkBAIC0yMTQwLDYgJiM0MzsyMTQ3LDg2IEBAIHZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKQogfQogRVhQT1JUX1NZTUJPTChza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKTsKIAomIzQzO3N0YXRpYyBib29sIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpCiYjNDM7ewomIzQzOwlpZiAoYWRkICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChhZGQgJmd0OyBVMTZfTUFYKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBvZmZzZXQgJmd0OyBVMTZfTUFYIC0gYWRkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3codW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFkZCkKJiM0Mzt7CiYjNDM7CWlmIChhZGQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGFkZCAmZ3Q7PSBVMTZfTUFYKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBvZmZzZXQgJmd0Oz0gVTE2X01BWCAtIGFkZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpCiYjNDM7ewomIzQzOwlpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLSZndDtuZXR3b3JrX2hlYWRlciwgb2ZmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl90cmFuc3BvcnRfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIsIG9mZikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItJmd0O21hY19oZWFkZXIsIG9mZikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi0mZ3Q7aW5uZXJfdHJhbnNwb3J0X2hlYWRlciwgb2ZmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoc2tiX2lubmVyX25ldHdvcmtfaGVhZGVyX3dhc19zZXQoc2tiKSkgewomIzQzOwkJaWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi0mZ3Q7aW5uZXJfbmV0d29ya19oZWFkZXIsIG9mZikpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CQlpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLSZndDtpbm5lcl9tYWNfaGVhZGVyLCBvZmYpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi0mZ3Q7Y3N1bV9zdGFydCwgb2ZmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpCiYjNDM7ewomIzQzOwlpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgb2ZmKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwomIzQzOwomIzQzOwlpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkKJiM0MzsJCXNrYi0mZ3Q7Y3N1bV9zdGFydCAmIzQzOz0gb2ZmOwomIzQzOwlpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKQomIzQzOwkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSBvZmY7CiYjNDM7CXNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzs9IG9mZjsKJiM0MzsJaWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSkKJiM0MzsJCXNrYi0mZ3Q7bWFjX2hlYWRlciAmIzQzOz0gb2ZmOwomIzQzOwlpZiAoc2tiLSZndDtpbm5lcl90cmFuc3BvcnRfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLSZndDtpbm5lcl90cmFuc3BvcnRfaGVhZGVyKSl+MFUpCiYjNDM7CQlza2ItJmd0O2lubmVyX3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IG9mZjsKJiM0MzsJaWYgKHNrYl9pbm5lcl9uZXR3b3JrX2hlYWRlcl93YXNfc2V0KHNrYikpIHsKJiM0MzsJCXNrYi0mZ3Q7aW5uZXJfbmV0d29ya19oZWFkZXIgJiM0Mzs9IG9mZjsKJiM0MzsJCXNrYi0mZ3Q7aW5uZXJfbWFjX2hlYWRlciAmIzQzOz0gb2ZmOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpCiYjNDM7ewomIzQzOwlpZiAob2ZmICZndDsgMCAmYW1wOyZhbXA7ICFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKJiM0MzsJaWYgKHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyLCBvZmYpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2ZmOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKQogewogCV9fY29weV9za2JfaGVhZGVyKG5ldywgb2xkKTsKQEAgLTIzMDQsNiAmIzQzOzIzOTEsOSBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCwKIAogCUJVR19PTihza2Jfc2hhcmVkKHNrYikpOwogCiYjNDM7CWlmIChza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coc2tiLCBuaGVhZCkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKJiM0MzsKIAlza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTsKIAogCWlmIChza2JfcGZtZW1hbGxvYyhza2IpKQpAQCAtMjM1NCw3ICYjNDM7MjQ0NCw3IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLAogCW9mZiAgICAgICAgICAgPSBuaGVhZDsKICNlbmRpZgogCXNrYi0mZ3Q7dGFpbAkgICAgICAmIzQzOz0gb2ZmOwotCXNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCBuaGVhZCk7CiYjNDM7CXNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChza2IsIG5oZWFkKTsKIAlza2ItJmd0O2Nsb25lZCAgID0gMDsKIAlza2ItJmd0O2hkcl9sZW4gID0gMDsKIAlza2ItJmd0O25vaGRyICAgID0gMDsKQEAgLTI1NDEsNyAmIzQzOzI2MzEsMTAgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJc2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7CiAKLQlza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pOwomIzQzOwlpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pKSB7CiYjNDM7CQlrZnJlZV9za2Iobik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQogCiAJcmV0dXJuIG47CiB9CkBAIC00NjgwLDcgJiM0Mzs0NzczLDcgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl1bnNpZ25lZCBpbnQgZGVsdGFfbGVuID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2IsICp0bXA7Ci0JaW50IGxlbl9kaWZmLCBlcnI7CiYjNDM7CWludCBoZWFkX29mZiwgbGVuX2RpZmYsIGVycjsKIAogCS8qIE9ubHkgc2tiX2dyb19yZWNlaXZlX2xpc3QgZ2VuZXJhdGVkIHNrYnMgYXJyaXZlIGhlcmUgKi8KIAlERUJVR19ORVRfV0FSTl9PTl9PTkNFKCEoc2tiX3NoaW5mbyhza2IpLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX0ZSQUdMSVNUKSk7CkBAIC00NzMyLDggJiM0Mzs0ODI1LDE3IEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCWxlbl9kaWZmID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihuc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTsKIAkJX19jb3B5X3NrYl9oZWFkZXIobnNrYiwgc2tiKTsKIAotCQlza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpKTsKLQkJbnNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gbGVuX2RpZmY7CiYjNDM7CQloZWFkX29mZiA9IHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpOwomIzQzOwkJZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsIGhlYWRfb2ZmKTsKJiM0MzsJCWlmICh1bmxpa2VseShlcnIpKSB7CiYjNDM7CQkJbnNrYi0mZ3Q7bmV4dCA9IGxpc3Rfc2tiOwomIzQzOwkJCWdvdG8gZXJyX2xpc3Q7CiYjNDM7CQl9CiYjNDM7CQllcnIgPSBza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChuc2tiLCBsZW5fZGlmZik7CiYjNDM7CQlpZiAodW5saWtlbHkoZXJyKSkgewomIzQzOwkJCW5za2ItJmd0O25leHQgPSBsaXN0X3NrYjsKJiM0MzsJCQlnb3RvIGVycl9saXN0OwomIzQzOwkJfQogCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIC10bmxfaGxlbiwKIAkJCQkJCSBuc2tiLSZndDtkYXRhIC0gdG5sX2hsZW4sCiAJCQkJCQkgb2Zmc2V0ICYjNDM7IHRubF9obGVuKTsKQEAgLTQ3NTksOSAmIzQzOzQ4NjEsMTEgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gc2tiOwogCiBlcnJfbGluZWFyaXplOgomIzQzOwllcnIgPSAtRU5PTUVNOwomIzQzO2Vycl9saXN0OgogCWtmcmVlX3NrYl9saXN0KHNrYi0mZ3Q7bmV4dCk7CiAJc2tiLSZndDtuZXh0ID0gTlVMTDsKLQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50X2xpc3QpOwogCkBAIC00OTYxLDcgJiM0Mzs1MDY1LDExIEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsCiAKIAkJX19jb3B5X3NrYl9oZWFkZXIobnNrYiwgaGVhZF9za2IpOwogCi0JCXNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pOwomIzQzOwkJZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsCiYjNDM7CQkJCQkJCXNrYl9oZWFkcm9vbShuc2tiKSAtIGhlYWRyb29tKTsKJiM0MzsJCWlmICh1bmxpa2VseShlcnIpKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJZXJyID0gLUVOT01FTTsKIAkJc2tiX3Jlc2V0X21hY19sZW4obnNrYik7CiAKIAkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoaGVhZF9za2IsIC10bmxfaGxlbiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMKaW5kZXggYWJkNzcxNjJmNWU3NS4uYTIyZWYwNDRlZWNiMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMKQEAgLTEzOCw3ICYjNDM7MTM4LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsCiAJc3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpOwogCXN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7CiAKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IHgtJmd0O3Byb3BzLmhlYWRlcl9sZW47CiYjNDM7CWlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCB4LSZndDtwcm9wcy5oZWFkZXJfbGVuKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpOwogCW9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0X29mZmxvYWRzW3hvLSZndDtwcm90b10pOwogCWlmIChsaWtlbHkob3BzICZhbXA7JmFtcDsgb3BzLSZndDtjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKQogCQlzZWdzID0gb3BzLSZndDtjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7CkBAIC0xNTUsMjMgJiM0MzsxNTYsMjcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCWNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqb3BzOwogCXU4IHByb3RvID0geG8tJmd0O3Byb3RvOwogCi0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSB4LSZndDtwcm9wcy5oZWFkZXJfbGVuOwomIzQzOwlpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgeC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbikpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTsKIAogCWlmICh4LSZndDtzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7CiAJCWlmIChwcm90byA9PSBJUFBST1RPX0JFRVRQSCkgewogCQkJc3RydWN0IGlwX2JlZXRfcGhkciAqcGggPQogCQkJCShzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLSZndDtkYXRhOwogCi0JCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IHBoLSZndDtoZHJsZW4gKiA4OwomIzQzOwkJCWlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBwaC0mZ3Q7aGRybGVuICogOCkpCiYjNDM7CQkJCXJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpOwogCQkJcHJvdG8gPSBwaC0mZ3Q7bmV4dGhkcjsKIAkJfSBlbHNlIHsKIAkJCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAtPSBJUFY0X0JFRVRfUEhNQVhMRU47CiAJCX0KIAl9IGVsc2UgewomIzQzOwkJaW50IG9mZnNldDsKIAkJX19iZTE2IGZyYWc7CiAKLQkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICYjNDM7PQotCQkJaXB2Nl9za2lwX2V4dGhkcihza2IsIDAsICZhbXA7cHJvdG8sICZhbXA7ZnJhZyk7CiYjNDM7CQlvZmZzZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgJmFtcDtwcm90bywgJmFtcDtmcmFnKTsKJiM0MzsJCWlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBvZmZzZXQpKQomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpOwogCQlpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApCiAJCQlza2Jfc2hpbmZvKHNrYiktJmd0O2dzb190eXBlIHw9IFNLQl9HU09fVENQVjQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuYwppbmRleCA3Zjc0ZDhiOTVhMzczLi4xNjM1NGJmNzZkYWQxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yYXcuYwpAQCAtMzU2LDYgJiM0MzszNTYsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJZ290byBvdXQ7CiAKIAlobGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtJmd0O2RzdC5kZXYpOwomIzQzOwlpZiAoaGxlbiAmZ3Q7PSBVMTZfTUFYIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAl0bGVuID0gcnQtJmd0O2RzdC5kZXYtJmd0O25lZWRlZF90YWlscm9vbTsKIAlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLAogCQkJCSAgbGVuZ3RoICYjNDM7IGhsZW4gJiM0MzsgdGxlbiAmIzQzOyAxNSwKQEAgLTM5OSw2ICYjNDM7NDAxLDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsCiAJZXJyID0gLUVJTlZBTDsKIAlpZiAoaXBobGVuICZndDsgbGVuZ3RoIHx8IGlwaGxlbiAmbHQ7IHNpemVvZigqaXBoKSkKIAkJZ290byBlcnJvcl9mcmVlOwomIzQzOwlpZiAoaGxlbiAmZ3Q7PSBVMTZfTUFYIC0gaXBobGVuKQomIzQzOwkJZ290byBlcnJvcl9mcmVlOwogCiAJaWYgKGlwaGxlbiAmZ3Q7PSBzaXplb2YoKmlwaCkpIHsKIAkJaWYgKCFpcGgtJmd0O3NhZGRyKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYwppbmRleCAyMjg5NTUyMWE1N2QwLi5lMTIzZjBhOTc4MmIyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYwpAQCAtMTc0LDcgJiM0MzsxNzQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2VncyA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJc3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTsKIAotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbjsKJiM0MzsJaWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAJb3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXQ2X29mZmxvYWRzW3hvLSZndDtwcm90b10pOwogCWlmIChsaWtlbHkob3BzICZhbXA7JmFtcDsgb3BzLSZndDtjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKQogCQlzZWdzID0gb3BzLSZndDtjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7CkBAIC0xOTEsNyAmIzQzOzE5Miw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAljb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wczsKIAl1OCBwcm90byA9IHhvLSZndDtwcm90bzsKIAotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbjsKJiM0MzsJaWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAKIAlpZiAoeC0mZ3Q7c2VsLmZhbWlseSAhPSBBRl9JTkVUNikgewogCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgLT0KQEAgLTIwMSw3ICYjNDM7MjAzLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCQkJc3RydWN0IGlwX2JlZXRfcGhkciAqcGggPQogCQkJCShzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLSZndDtkYXRhOwogCi0JCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IHBoLSZndDtoZHJsZW4gKiA4OwomIzQzOwkJCWlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBwaC0mZ3Q7aGRybGVuICogOCkpCiYjNDM7CQkJCXJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpOwogCQkJcHJvdG8gPSBwaC0mZ3Q7bmV4dGhkcjsKIAkJfSBlbHNlIHsKIAkJCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAtPSBJUFY0X0JFRVRfUEhNQVhMRU47CkBAIC0yMTAsMTAgJiM0MzsyMTMsMTIgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCQlpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApCiAJCQlza2Jfc2hpbmZvKHNrYiktJmd0O2dzb190eXBlIHw9IFNLQl9HU09fVENQVjY7CiAJfSBlbHNlIHsKJiM0MzsJCWludCBvZmZzZXQ7CiAJCV9fYmUxNiBmcmFnOwogCi0JCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0KLQkJCWlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCAmYW1wO3Byb3RvLCAmYW1wO2ZyYWcpOwomIzQzOwkJb2Zmc2V0ID0gaXB2Nl9za2lwX2V4dGhkcihza2IsIDAsICZhbXA7cHJvdG8sICZhbXA7ZnJhZyk7CiYjNDM7CQlpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgb2Zmc2V0KSkKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTsKIAl9CiAKIAlpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCBiODhkMzY0ZTc4YWFlLi5mYTIyM2VjMDIzOTY0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGltaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zb2NrZXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CkBAIC02MTMsNiAmIzQzOzYxNCw5IEBAIHN0YXRpYyBpbnQgcmF3djZfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW5ndGgsCiAJaWYgKGZsYWdzJmFtcDtNU0dfUFJPQkUpCiAJCWdvdG8gb3V0OwogCiYjNDM7CWlmIChobGVuICZndDs9IFUxNl9NQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLAogCQkJCSAgbGVuZ3RoICYjNDM7IGhsZW4gJiM0MzsgdGxlbiAmIzQzOyAxNSwKIAkJCQkgIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCwgJmFtcDtlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9kZXZpY2UuYyBiL25ldC94ZnJtL3hmcm1fZGV2aWNlLmMKaW5kZXggZjE1M2JmNjk1YjlkZC4uMmEwOWJkMmVlYzQ5MyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2RldmljZS5jCkBAIC0yMCw4ICYjNDM7MjAsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25vdGlmaWVyLmgmZ3Q7CiAKICNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FECi1zdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICB1bnNpZ25lZCBpbnQgaHNpemUpCiYjNDM7c3RhdGljIGludCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgaHNpemUpCiB7CiAJc3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTsKIApAQCAtMzAsMzAgJiM0MzszMCwzMyBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAtPSB4LSZndDtwcm9wcy5oZWFkZXJfbGVuOwogCiAJcHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyB4LSZndDtwcm9wcy5oZWFkZXJfbGVuKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgaHNpemUpCi0KJiM0MztzdGF0aWMgaW50IF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICB1bnNpZ25lZCBpbnQgaHNpemUpCiB7CiAJc3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTsKIAotCWlmICh4by0mZ3Q7ZmxhZ3MgJmFtcDsgWEZSTV9HU09fU0VHTUVOVCkKLQkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBoc2l6ZTsKJiM0MzsJaWYgKHhvLSZndDtmbGFncyAmYW1wOyBYRlJNX0dTT19TRUdNRU5UICZhbXA7JmFtcDsKJiM0MzsJICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAlwc2tiX3B1bGwoc2tiLAogCQkgIHNrYi0mZ3Q7bWFjX2xlbiAmIzQzOyB4LSZndDtwcm9wcy5oZWFkZXJfbGVuIC0geC0mZ3Q7cHJvcHMuZW5jX2hkcl9sZW4pOwomIzQzOwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgdW5zaWduZWQgaW50IGhzaXplKQomIzQzO3N0YXRpYyBpbnQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgdW5zaWduZWQgaW50IGhzaXplKQogewogCXN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7CiAJaW50IHBobGVuID0gMDsKIAotCWlmICh4by0mZ3Q7ZmxhZ3MgJmFtcDsgWEZSTV9HU09fU0VHTUVOVCkKLQkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBoc2l6ZTsKJiM0MzsJaWYgKHhvLSZndDtmbGFncyAmYW1wOyBYRlJNX0dTT19TRUdNRU5UICZhbXA7JmFtcDsKJiM0MzsJICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAlpZiAoeC0mZ3Q7c2VsLmZhbWlseSAhPSBBRl9JTkVUNikgewpAQCAtNjMsMTAgJiM0Mzs2NiwxMSBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsCiAJfQogCiAJcHNrYl9wdWxsKHNrYiwgc2tiLSZndDttYWNfbGVuICYjNDM7IGhzaXplICYjNDM7ICh4LSZndDtwcm9wcy5oZWFkZXJfbGVuIC0gcGhsZW4pKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qIEFkanVzdCBwb2ludGVycyBpbnRvIHRoZSBwYWNrZXQgd2hlbiBJUHNlYyBpcyBkb25lIGF0IGxheWVyMiAqLwotc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzd2l0Y2ggKHgtJmd0O291dGVyX21vZGUuZW5jYXApIHsKIAljYXNlIFhGUk1fTU9ERV9JUFRGUzoKQEAgLTk4LDYgJiM0MzsxMDIsOCBAQCBzdGF0aWMgdm9pZCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAljYXNlIFhGUk1fTU9ERV9JTl9UUklHR0VSOgogCQlicmVhazsKIAl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgeG1pdF94ZnJtX2NoZWNrX292ZXJmbG93KHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xNzUsNyAmIzQzOzE4MSwxMiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cgogCiAJaWYgKCFza2ItJmd0O25leHQpIHsKIAkJZXNwX2ZlYXR1cmVzIHw9IHNrYi0mZ3Q7ZGV2LSZndDtnc29fcGFydGlhbF9mZWF0dXJlczsKLQkJeGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKTsKJiM0MzsJCWVyciA9IHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYik7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJWEZSTV9JTkNfU1RBVFMoeHNfbmV0KHgpLCBMSU5VWF9NSUJfWEZSTU9VVFNUQVRFUFJPVE9FUlJPUik7CiYjNDM7CQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiAKIAkJeG8tJmd0O2ZsYWdzIHw9IFhGUk1fREVWX1JFU1VNRTsKIApAQCAtMjAxLDcgJiM0MzsyMTIsMTMgQEAgc3RydWN0IHNrX2J1ZmYgKnZhbGlkYXRlX3htaXRfeGZybShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXIKIAkJeG8gPSB4ZnJtX29mZmxvYWQoc2tiMik7CiAJCXhvLSZndDtmbGFncyB8PSBYRlJNX0RFVl9SRVNVTUU7CiAKLQkJeGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMik7CiYjNDM7CQllcnIgPSB4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IyKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlYRlJNX0lOQ19TVEFUUyh4c19uZXQoeCksIExJTlVYX01JQl9YRlJNT1VUU1RBVEVQUk9UT0VSUk9SKTsKJiM0MzsJCQlza2IyLSZndDtuZXh0ID0gbnNrYjsKJiM0MzsJCQlrZnJlZV9za2JfbGlzdChza2IyKTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCX0KIAogCQllcnIgPSB4LSZndDt0eXBlX29mZmxvYWQtJmd0O3htaXQoeCwgc2tiMiwgZXNwX2ZlYXR1cmVzKTsKIAkJaWYgKCFlcnIpIHsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwppbmRleCA1OTdhZWRlYWMyNmViLi4xM2I2MmJjZDllMDUzIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCkBAIC0yMzc5LDcgJiM0MzsyMzc5LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAtKHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4gLSB4LSZndDtwcm9wcy5lbmNfaGRyX2xlbikpOwogCXNrYi0mZ3Q7bWFjX2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpOwomIzQzOwlpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAogCXRvcF9pcGggPSBpcF9oZHIoc2tiKTsKIAl0b3BfaXBoLSZndDtpaGwgPSA1OwpAQCAtMjQyNiw3ICYjNDM7MjQyNyw4IEBAIHN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiAKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtJmd0O3Byb3BzLmhlYWRlcl9sZW4gJiM0MzsgeC0mZ3Q7cHJvcHMuZW5jX2hkcl9sZW4pOwogCXNrYi0mZ3Q7bWFjX2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpOwotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTsKJiM0MzsJaWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKIAl0b3BfaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAl0b3BfaXBoLSZndDt2ZXJzaW9uID0gNjsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMgYi9uZXQveGZybS94ZnJtX291dHB1dC5jCmluZGV4IGNjMzVjMmZjYmJlMDkuLjBjZWJlNzUyY2E5ODAgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9vdXRwdXQuYwpAQCAtNzMsNyAmIzQzOzczLDggQEAgc3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbik7CiAJc2tiLSZndDttYWNfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOwogCQkJICBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IGlobDsKJiM0MzsJaWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGlobCkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAlfX3NrYl9wdWxsKHNrYiwgaWhsKTsKIAltZW1tb3ZlKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBpcGgsIGlobCk7CiAJcmV0dXJuIDA7CkBAIC0xNzksNyAmIzQzOzE4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2Jfc2V0X21hY19oZWFkZXIoc2tiLAogCQkJICAgKHByZXZoZHIgLSB4LSZndDtwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi0mZ3Q7ZGF0YSk7CiAJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LSZndDtwcm9wcy5oZWFkZXJfbGVuKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IGhkcl9sZW47CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBoZHJfbGVuKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCV9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTsKIAltZW1tb3ZlKGlwdjZfaGRyKHNrYiksIGlwaCwgaGRyX2xlbik7CiAJcmV0dXJuIDA7CkBAIC0yMDksNyAmIzQzOzIxMSw4IEBAIHN0YXRpYyBpbnQgeGZybTZfcm9fb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsCiAJCQkgICAocHJldmhkciAtIHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pIC0gc2tiLSZndDtkYXRhKTsKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pOwotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0MzsgaGRyX2xlbjsKJiM0MzsJaWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAJX19za2JfcHVsbChza2IsIGhkcl9sZW4pOwogCW1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTsKIApAQCAtMjQxLDcgJiM0MzsyNDQsOCBAQCBzdGF0aWMgaW50IHhmcm00X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7PSBJUFY0X0JFRVRfUEhNQVhMRU47CiAJc2tiLSZndDttYWNfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOwogCQkJICBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCiAJeGZybTRfYmVldF9tYWtlX2hlYWRlcihza2IpOwogCkBAIC0yODgsNyAmIzQzOzI5Miw4IEBAIHN0YXRpYyBpbnQgeGZybTRfdHVubmVsX2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pOwogCXNrYi0mZ3Q7bWFjX2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0MzsKIAkJCSAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpOwomIzQzOwlpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAl0b3BfaXBoID0gaXBfaGRyKHNrYik7CiAKIAl0b3BfaXBoLSZndDtpaGwgPSA1OwpAQCAtMzM1LDcgJiM0MzszNDAsOCBAQCBzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LSZndDtwcm9wcy5oZWFkZXJfbGVuKTsKIAlza2ItJmd0O21hY19oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7CiAJCQkgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCXRvcF9pcGggPSBpcHY2X2hkcihza2IpOwogCiAJdG9wX2lwaC0mZ3Q7dmVyc2lvbiA9IDY7CkBAIC0zNzQsNyAmIzQzOzM4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfYmVldF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiAJCXNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzs9IElQVjRfQkVFVF9QSE1BWExFTjsKIAlza2ItJmd0O21hY19oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7CiAJCQkgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCXBoID0gX19za2JfcHVsbChza2IsIFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0mZ3Q7aWhsIC0gaGRyX2xlbik7CiAKIAl4ZnJtNl9iZWV0X21ha2VfaGVhZGVyKHNrYik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQm91bmRzIENoZWNraW5nIFBhdGNoIGZvciBTS0IgSGVhZGVyIE9mZnNldHMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCYjMzk7cyBtYWtpbmcgc29tZSBjcml0aWNhbCBjaGFuZ2VzIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBTS0IgKFNvY2tldCBCdWZmZXIpIGhlYWRlciBvZmZzZXRzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IGludHJvZHVjaW5nIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIHdoZW4gbWFuaXB1bGF0aW5nIGhlYWRlcnMgbGlrZSBgbmV0d29ya19oZWFkZXJgLCBhbmQgYHRyYW5zcG9ydF9oZWFkZXJgLCB3aGljaCBhcmUgYHUxNmAgZmllbGRzLCBhY3Jvc3MgYG5ldC9jb3JlL3NrYnVmZi5jYCwgYW5kIGEgbnVtYmVyIG9mIElQc2VjL1hGUk0gcmVsYXRlZCBmaWxlcy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNoYW5nZSBpbXBhY3RpbmcgY29yZSBuZXR3b3JraW5nIGFuZCBzZWN1cml0eSwgd2hpY2ggbWVhbnMgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBrZXkgc3ltYm9scywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBkaXJlY3RseSB0b3VjaGVkIGFuZCBjaGFuZ2VkIGJ5IHRoZSBwYXRjaC4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byB0aGVzZSBmdW5jdGlvbnM6IGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWxgICh3aGljaCBhcHBlYXJzIHRvIGJlIGEgc3RhdGljIGZ1bmN0aW9uKSwgYW5kIGBza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bGAgKGFsc28gc3RhdGljKS4gV2UgYWxzbyBoYXZlIHRoZSBhZGRpdGlvbiBvZiBgc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWxgLiBBbG9uZyB3aXRoIHRoZXNlLCBJIG5lZWQgdG8gY29uc2lkZXIgYHBza2JfZXhwYW5kX2hlYWRgLCBgc2tiX2NvcHlfZXhwYW5kYCwgYHNrYl9zZWdtZW50X2xpc3RgLCBhbmQgYHNrYl9zZWdtZW50YCBhbG9uZyB3aXRoIGEgbGlzdCBvZiB4ZnJtIGZ1bmN0aW9ucy4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGljaCBBUEkgZW50cnkgcG9pbnRzIGFyZSBub24tc3RhdGljIGFuZCBub3QgaW5saW5lZCwgc2luY2UgdGhvc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgdG8gaW50cm9kdWNlIGlzc3VlcywgYW5kIHRoZXJlZm9yZSB0aGUgYmVzdCBwbGFjZXMgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBBZnRlciBjb25zaWRlcmluZyB0aGUgbGlzdCwgSSYjMzk7dmUgZ290IG15IGV5ZSBvbiBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGBza2Jfc2VnbWVudGAsIGFuZCBgdmFsaWRhdGVfeG1pdF94ZnJtYC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBzaXRlcyB0byBzZWUgd2hhdCB0aGUgaW5wdXRzIGFyZSwgYW5kIGhvdyB0aGF0IHJlbGF0ZXMgdG8gdGhlIGhlYWRlcnMuCgpXYWl0LCBgcmF3X3NlbmRfaGRyaW5jYCBhbmQgYHJhd3Y2X3NlbmRfaGRyaW5jYCBhcmUgc3RhdGljIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY2FsbCBjb250ZXh0cyB0byBwcm9wZXJseSBpbmNsdWRlIHRoZW0uIEEgcXVpY2sgbG9vayByZXZlYWxzIHRoYXQgYHJhd19zZW5kbXNnYCBjYWxscyBgcmF3X3NlbmRfaGRyaW5jYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGNhbGxzIGByYXd2Nl9zZW5kX2hkcmluY2AuIFNvIEkgc2hvdWxkIGluY2x1ZGUgYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGluIG15IHBsYW4uCgpGaW5hbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHZhbGlkYXRlX3htaXRfeGZybWAgaXMgaW5kZWVkIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIHRoYXQgSSBjYW4gZGlyZWN0bHkgZnV6ei4gSXQmIzM5O3MgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLgoKV2l0aCB0aGlzIHVuZGVyc3RhbmRpbmcsIEkgY2FuIG5vdyBkZXNpZ24gYSB0YXJnZXRlZCBmdXp6aW5nIHN0cmF0ZWd5IHRvIGhpdCB0aGUgY3JpdGljYWwgYXJlYXMgd2hlcmUgaW50ZWdlciBvdmVyZmxvd3MgYXJlIG5vdyBiZWluZyBndWFyZGVkIGFnYWluc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmFsaWRhdGVfeG1pdF94ZnJtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jPTEwOT1zdGF0aWMgaW5saW5lIGJvb2wgeG1pdF94ZnJtX2NoZWNrX292ZXJmbG93KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0xMjAtXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjEyMTpzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLCBib29sICphZ2Fpbilcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMTIyLXtcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1My19XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjI1NDpFWFBPUlRfU1lNQk9MX0dQTCh2YWxpZGF0ZV94bWl0X3hmcm0pO1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNDgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipYRlJNIE1vZHVsZSBFeHBsb3JhdGlvbioqCgpSaWdodCwgc28gYHZhbGlkYXRlX3htaXRfeGZybWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZDsgSSBrbmV3IHRoYXQuIE5vdywgd2hhdCBhYm91dCB0aGF0IGBpcHRmc19lbmNhcF9hZGRfaXB2NGAgZnVuY3Rpb24/IEkgc2VlbSB0byByZW1lbWJlciBzZWVpbmcgdGhhdCBzb21ld2hlcmUuLi4gYWgsIHllcywgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gSSYjMzk7bGwgaGF2ZSB0byBkb3VibGUtY2hlY2ssIGJ1dCB0aGF0IHJpbmdzIGEgYmVsbC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzX2VuY2FwX2FkZF9pcHY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMzIxPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kZWxheV90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNTktLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM2MDogKiBpcHRmc19lbmNhcF9hZGRfaXB2NCgpIC0gYWRkIG91dGVyIGVuY2Fwc1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNjEtICogQHg6IHhmcm0gc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3MS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzcyOnN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3My17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI0NjQ9c3RhdGljIGludCBpcHRmc19wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2Ni1cdGlmICh4LVx1MDAzZW91dGVyX21vZGUuZmFtaWx5ID09IEFGX0lORVQpXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2NzpcdFx0cmV0dXJuIGlwdGZzX2VuY2FwX2FkZF9pcHY0KHgsIHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2OC1cdGlmICh4LVx1MDAzZW91dGVyX21vZGUuZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqU3RhdGljIENvbnVuZHJ1bXMqKgoKSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBzb21ldGhpbmcgc3RhdGljIOKAkyBzcGVjaWZpY2FsbHksIGBpcHRmc19wcmVwYXJlX291dHB1dGAuIFRoYXQgZnVuY3Rpb24gaXMgKmFsc28qIHN0YXRpYz8gT2theSwgdGhhdCYjMzk7cyBpbW1lZGlhdGVseSByYWlzaW5nIGEgZmxhZy4gU3RhdGljIG1ldGhvZHMgYXJlIHNjb3BlZCB3aXRoaW4gdGhlIGNsYXNzIHRoZXkmIzM5O3JlIGRlZmluZWQgaW4gYW5kIGNhbiYjMzk7dCBiZSBjYWxsZWQgZGlyZWN0bHkgb24gYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcy4gU28sIHRoaXMgdGVsbHMgbWUgYSBjb3VwbGUgb2YgdGhpbmdzIHJpZ2h0IGF3YXk6IHRoZSBjb250ZXh0IG9mIHRoaXMgbXVzdCBhbGwgYmUgd2l0aGluIGEgc2luZ2xlIGNvbXBpbGF0aW9uIHVuaXQsIG9yIG1heWJlIGEgbGlicmFyeSB3aXRoIHNvbWUgbGltaXRhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5IHdlbnQgdGhpcyByb3V0ZS4gV2h5IG5vdCBlbmNhcHN1bGF0ZSBpdCBpbiBhbiBvYmplY3QsIGdpdmVuIHRoZSBjb250ZXh0PyBXaGF0IGlzIHRoZSAqZGVzaWduIGludGVudGlvbiogaGVyZT8gSXMgdGhlcmUgYSByZWFzb24gZm9yIHRoaXMgc3RhdGljLW9uLXN0YXRpYyBwYXR0ZXJuIHRoYXQganVzdGlmaWVzIHRoZSBwb3RlbnRpYWwgZm9yIHJlZHVjZWQgZmxleGliaWxpdHkgb3IgdGVzdGFiaWxpdHk/IFRoaXMgaXMgd29ydGggZGlnZ2luZyBkZWVwZXIgaW50by4gQXJlIHdlIGRlYWxpbmcgd2l0aCBzb21lIGtpbmQgb2YgdXRpbGl0eSBmdW5jdGlvbiwgb3IgaXMgdGhlcmUgYSBiaWdnZXIgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbiBoZXJlPyBHb3R0YSBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNDE5PXN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NTQtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ1NTogKiBpcHRmc19wcmVwYXJlX291dHB1dCgpIC0gIHByZXBhcmUgdGhlIHNrYiBmb3Igb3V0cHV0XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ1Ni0gKiBAeDogeGZybSBzdGF0ZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDYzLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0NjQ6c3RhdGljIGludCBpcHRmc19wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY1LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzItXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3MzpcdC5wcmVwYXJlX291dHB1dCA9IGlwdGZzX3ByZXBhcmVfb3V0cHV0LFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzQtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQ2FsbGJhY2sgTGFieXJpbnRoKioKCkFscmlnaHQsIHRoYXQmIzM5O3MgYSBjYWxsYmFjay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCYjMzk7cyBjb25uZWN0ZWQgdG8uIExldCYjMzk7cyB0cmFjZSB0aGlzIGJhY2suIEhtbSwgdGhpcyBmZWVscyBmYW1pbGlhci4uLiBhbG1vc3QgbGlrZSBJJiMzOTt2ZSBzZWVuIHNvbWV0aGluZyBzaW1pbGFyLiBNeSBtaW5kIGlzIGFscmVhZHkganVtcGluZyB0byBwb3RlbnRpYWwgcmVsYXRlZCBmdW5jdGlvbiBjYWxscy4KCldoZXJlIGRvZXMgdGhpcyBjb21lIGludG8gcGxheT8gSXQmIzM5O3MgbWFraW5nIG1lIGNvbnNpZGVyIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nLiBDb3VsZCB0aGlzIGJlIHJlbGF0ZWQgdG8gdGhlIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCBmdW5jdGlvbj8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgcGxhY2UgbXkgZXhwZXJpZW5jZSBsZWFkcyBtZS4gSXMgdGhhdCBhIGxpa2VseSBjYW5kaWRhdGU/IFBlcmhhcHMgdGhhdCBpcyB3aGVyZSB0aGUgZmxvdyBpbnRlcnNlY3RzIGFuZCB0aGlzIGNhbGxiYWNrIGlzIGludm9rZWQuIEkgbmVlZCB0byByZW1lbWJlciB0aGUgY29udGV4dCBmb3IgdGhhdCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm00X3RyYW5zcG9ydF9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NTE9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnNrYl9kc3RfcG9wKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02My0gKi9cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjQ6c3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NS17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz00Njc9c3RhdGljIGludCB4ZnJtX291dGVyX21vZGVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDc4LVx0XHRpZiAoeC1cdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVClcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NDc5Olx0XHRcdHJldHVybiB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHgsIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ4MC1cdFx0aWYgKHgtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA2MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQW5hbHl6aW5nIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBzb21ldGhpbmcgc3RhdGljLCBhbmQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGJ5IGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgaW1tZWRpYXRlbHkgcG9pbnRzIG1lIHRvd2FyZCBjZXJ0YWluIGFzc3VtcHRpb25zIGFib3V0IHNjb3BlIGFuZCBsaWZldGltZS4gU3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGNvbnRleHQgdXN1YWxseSBtZWFuIHRoZXkmIzM5O3JlIGludGVybmFsIHRvIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCBvciBmaWxlLCBhbmQgdGhleSBhcmUgdXN1YWxseSBkZWZpbmVkIGF0IGdsb2JhbCBzY29wZS4gV2UgYXJlIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBsZXZlbCBvZiBkYXRhIGVuY2Fwc3VsYXRpb24uIE5vdywgdGhlIGtleSBpcyB0aGUgY2FsbGluZyBmdW5jdGlvbjsgYHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXRgLiBUaGF0IG5hbWUgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgb3V0cHV0IHN0YWdlIG9mIHNvbWUga2luZCBvZiB0cmFuc2Zvcm1hdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYW4gJiMzNDtvdXRlciBtb2RlLiYjMzQ7IEdpdmVuIHRoZSB4ZnJtIHByZWZpeCwgSSYjMzk7bSB0aGlua2luZyB3ZSYjMzk7cmUgaW4gdGhlIHJlYWxtIG9mIHRoZSBYRlJNIHN1YnN5c3RlbS4gVGhhdCBtZWFucyB0aGlzIHN0YXRpYyBlbnRpdHkgaXMgcHJvYmFibHkgbWFuYWdpbmcgc29tZSBpbnRlcm5hbCBzdGF0ZSBvciBmdW5jdGlvbmFsaXR5IHNwZWNpZmljIHRvIGhvdyBwYWNrZXRzIGFyZSBoYW5kbGVkIHdoZW4gZ29pbmcgKm91dCogdGhyb3VnaCB0aGUgb3V0ZXIgZW5jYXBzdWxhdGlvbiAob3IgZGVjYXBzdWxhdGlvbiwgZGVwZW5kaW5nIG9uIGNvbnRleHQpLiBUaGlzIG1lYW5zIGl0IGlzIGxpa2VseSBpbnZvbHZlZCB3aXRoIHRoaW5ncyBsaWtlIGhlYWRlcnMgb3IgY2hlY2tzdW0uIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIGl0cyBzdHJ1Y3R1cmUgdG8gZXZhbHVhdGUgdGhlIGV4YWN0IHJvbGUgaXQgcGxheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDQxPXN0YXRpYyBpbnQgeGZybTZfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00NjYtXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ2NzpzdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ2OC17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00OTgtI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9QS1RHRU4pXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ5OTppbnQgcGt0Z2VuX3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMC17XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjUwMTpcdHJldHVybiB4ZnJtX291dGVyX21vZGVfb3V0cHV0KHgsIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMi19XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjUwMzpFWFBPUlRfU1lNQk9MX0dQTChwa3RnZW5feGZybV9vdXRlcl9tb2RlX291dHB1dCk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNC0jZW5kaWZcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTUwNj1zdGF0aWMgaW50IHhmcm1fb3V0cHV0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTIzLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1MjQ6XHRcdGVyciA9IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTI1LVx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODM0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gT3V0cHV0IFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgeGZybV9vdXRwdXRgIHN0dWZmLiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBwYWNrZXRzIGdldCBzZW50IG91dC4gSSYjMzk7dmUgbm90aWNlZCBgeGZybV9vdXRwdXRfb25lYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBjYWxscyBpdCwgc3BlY2lmaWNhbGx5LiBUaGF0JiMzOTtzIHN0YXRpY2FsbHkgZGVjbGFyZWQsIHdoaWNoIHN1Z2dlc3RzIGEgY2VydGFpbiBsZXZlbCBvZiBjb250cm9sIG9yIHBlcmhhcHMgb3B0aW1pemF0aW9uIGF0IGNvbXBpbGUgdGltZS4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgeGZybV9vdXRwdXRgIGZpdHMgaW50byB0aGUgcGljdHVyZSBtb3JlIGJyb2FkbHkuIFdoYXQmIzM5O3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28/IElzIGB4ZnJtX291dHB1dGAgdGhlIGNvcmUsIGdlbmVyaWMgZnVuY3Rpb24sIGFuZCBgeGZybV9vdXRwdXRfb25lYCBhIHNwZWNpYWxpemVkIGluc3RhbmNlIG9yIGhlbHBlcj8gT3IgaXMgaXQgdGhlIG90aGVyIHdheSBhcm91bmQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBjYWxscy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gYW5kIHVuZGVyc3RhbmQgd2hlcmUgYHhmcm1fb3V0cHV0YCBnZXRzIGNhbGxlZCBmcm9tLCBhbmQgaG93LCBpbiBjb250cmFzdCB0byBgeGZybV9vdXRwdXRfb25lYC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gaXMga2V5IHRvIGhvdyB0aGUgc3lzdGVtIGFjdHVhbGx5IG91dHB1dHMgdHJhbnNmb3JtZWQgcGFja2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMi0vKlxubmV0L3hmcm0veGZybV9vdXRwdXQuYzozOiAqIHhmcm1fb3V0cHV0LmMgLSBDb21tb24gSVBzZWMgZW5jYXBzdWxhdGlvbiBjb2RlLlxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00LSAqXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy0yNi1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Mjc6c3RhdGljIGludCB4ZnJtX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy0yOC1zdGF0aWMgaW50IHhmcm1faW5uZXJfZXh0cmFjdF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NTAzPUVYUE9SVF9TWU1CT0xfR1BMKHBrdGdlbl94ZnJtX291dGVyX21vZGVfb3V0cHV0KTtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NTA2OnN0YXRpYyBpbnQgeGZybV9vdXRwdXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNy17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01OTktXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYwMDppbnQgeGZybV9vdXRwdXRfcmVzdW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjAxLXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYwMy1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjA0Olx0d2hpbGUgKGxpa2VseSgoZXJyID0geGZybV9vdXRwdXRfb25lKHNrYiwgZXJyKSkgPT0gMCkpIHtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjA1LVx0XHRuZl9yZXNldF9jdChza2IpO1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjE1LVx0XHRcdCAgICAgIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBuZXQsIHNrLCBza2IsXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYxNjpcdFx0XHQgICAgICBOVUxMLCBza2JfZHN0KHNrYiktXHUwMDNlZGV2LCB4ZnJtX291dHB1dDIpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MTctXHRcdGlmICh1bmxpa2VseShlcnIgIT0gMSkpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjYtfVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2Mjc6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9vdXRwdXRfcmVzdW1lKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjI4LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz02Mjk9c3RhdGljIGludCB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHhmcm1fc3RhdGUgKngsXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjItXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY2MzpzdGF0aWMgaW50IHhmcm1fb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY0LXtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjY1Olx0cmV0dXJuIHhmcm1fb3V0cHV0X3Jlc3VtZShzaywgc2tiLCAxKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY2LX1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY3LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2Njg6c3RhdGljIGludCB4ZnJtX291dHB1dF9nc28oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2OS17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02ODQtXHRcdHNrYl9tYXJrX25vdF9vbl9saXN0KHNlZ3MpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2ODU6XHRcdGVyciA9IHhmcm1fb3V0cHV0MihuZXQsIHNrLCBzZWdzKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjg2LVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NzA2PXN0YXRpYyB2b2lkIHhmcm1fZ2V0X2lubmVyX2lwcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03NTYtXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjc1NzppbnQgeGZybV9vdXRwdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03NTgte1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzk2LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo3OTc6XHRcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMCk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc5OC1cdH1cbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgyMC1cdFx0XHRpZiAoc2tiLVx1MDAzZWlubmVyX3Byb3RvY29sIFx1MDAyNlx1MDAyNiB4LVx1MDAzZXByb3BzLm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTClcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODIxOlx0XHRcdFx0cmV0dXJuIHhmcm1fb3V0cHV0X2dzbyhuZXQsIHNrLCBza2IpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MjItXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MzAtXHRcdGlmIChza2JfaXNfZ3NvKHNrYikpXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjgzMTpcdFx0XHRyZXR1cm4geGZybV9vdXRwdXRfZ3NvKG5ldCwgc2ssIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgzMi1cdH1cbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTg0My1vdXQ6XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjg0NDpcdHJldHVybiB4ZnJtX291dHB1dDIobmV0LCBzaywgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODQ1LX1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODQ2OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fb3V0cHV0KTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU2NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRm9jdXMgU3ltYm9sIENvbnNpZGVyYXRpb25zIGZvciBQYWNrZXQgVHJhbnNmb3JtYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGtleSBmdW5jdGlvbnMgZm9yIG1hcmtpbmcgZm9jdXMgc3ltYm9scyByZWxhdGVkIHRvIHBhY2tldCB0cmFuc2Zvcm1hdGlvbnMuIFRoZSBmYWN0IHRoYXQgYHhmcm1fb3V0cHV0YCBpcyBleHBvcnRlZCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIG1lYW5pbmcgd2UgY2FuIGRlZmluaXRlbHkgaG9vayBpbnRvIHRoYXQuIFRoYXQmIzM5O3MgYSBjb3JlIGZ1bmN0aW9uLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBmb2N1cyB0aGVyZS4KCk5vdywgZm9yIGFjdHVhbCBjYW5kaWRhdGVzLCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGEgZmV3IGtleSByb3V0aW5lcyB0aGF0IGRlYWwgd2l0aCBidWZmZXIgbWFuaXB1bGF0aW9uIGR1cmluZyB0cmFuc2Zvcm1hdGlvbjogYHBza2JfZXhwYW5kX2hlYWRgLCBgc2tiX2NvcHlfZXhwYW5kYCwgYHNrYl9zZWdtZW50X2xpc3RgLCBhbmQgYHNrYl9zZWdtZW50YC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZvciBoYW5kbGluZyB0aGUgU0tCcyBpbnZvbHZlZCBhbmQgY291bGQgcmV2ZWFsIGltcG9ydGFudCBwb2ludHMgZm9yIG91ciBmb2N1cy4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhhdCBvbmUgb3IgbW9yZSBvZiB0aGVtIHdpbGwgYmUgc3VpdGFibGUuCgpXZSBhbHNvIGhhdmUgdG8gcmVtZW1iZXIgYHhmcm1fb3V0cHV0YCBpdHNlbGYgbmVlZHMgY29uc2lkZXJhdGlvbi4KCldhaXQgYSBzZWNvbmQsIGxldCYjMzk7cyBub3QgYmUgaGFzdHkhIFdlIGNhbiYjMzk7dCBmb3JnZXQgYWJvdXQgdGhvc2UgKnJhdyogc29ja2V0cy4gYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGFyZSBhY3R1YWxseSBhbHNvIHF1aXRlIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBjYWxsIGByYXdfc2VuZF9oZHJpbmNgIGFuZCBgcmF3djZfc2VuZF9oZHJpbmNgLiBUaGlzIGlzIGEgdmVyeSB2YWxpZCBwb2ludCEgVGhvc2UgKmNvdWxkKiBiZSBqdXN0IGFzLCBvciBldmVuIG1vcmUsIHJldmVhbGluZyB0aGFuIHNvbWUgb2YgdGhlIG90aGVycywgYXMgdGhlIGhlYWRlciBpbmNsdXNpb24gbWlnaHQgYmUgYSBjcml0aWNhbCBzdGFnZS4gSSBuZWVkIHRvIGJlIHN1cmUgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZW0gYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyYXdfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3Jhdy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3Jhdy5jPTQ2Mj1zdGF0aWMgaW50IHJhd19nZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBpbnQgb2RkLFxuLS1cbm5ldC9pcHY0L3Jhdy5jLTQ5Mi1cbm5ldC9pcHY0L3Jhdy5jOjQ5MzpzdGF0aWMgaW50IHJhd19zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxubmV0L2lwdjQvcmF3LmMtNDk0LXtcbi0tXG5uZXQvaXB2NC9yYXcuYz05NDM9c3RydWN0IHByb3RvIHJhd19wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3Jhdy5jLTk1My1cdC5nZXRzb2Nrb3B0XHQgICA9IHJhd19nZXRzb2Nrb3B0LFxubmV0L2lwdjQvcmF3LmM6OTU0Olx0LnNlbmRtc2dcdCAgID0gcmF3X3NlbmRtc2csXG5uZXQvaXB2NC9yYXcuYy05NTUtXHQucmVjdm1zZ1x0ICAgPSByYXdfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gdGhlIFNlbmRtc2cgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJhdyBzb2NrZXRzLCBhbmQgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIHNlbmRpbmcgYSBtZXNzYWdlIGhhcyB0byBiZSBgcmF3X3NlbmRtc2dgLiBObyBxdWVzdGlvbiB0aGVyZS4gTm93LCB0aGUgcmVhbCBuaXR0eS1ncml0dHkgbGllcyBkZWVwZXIsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgSVB2NiBzcGVjaWZpYyB2ZXJzaW9uIGhhbmRsZXMgaXQuIExldCYjMzk7cyBkaWcgaW50byBgcmF3djZfc2VuZG1zZ2AgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSXQmIzM5O3MgdGltZSB0byBjaGVjayB3aGF0IGtpbmQgb2YgcHJvY2Vzc2luZyBhbmQgZGF0YSBoYW5kbGluZyB0aGF0IG1vZHVsZSBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyYXd2Nl9zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcmF3LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcmF3LmM9NzE1PXN0YXRpYyBpbnQgcmF3Nl9nZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBpbnQgb2RkLFxuLS1cbm5ldC9pcHY2L3Jhdy5jLTc0NS1cbm5ldC9pcHY2L3Jhdy5jOjc0NjpzdGF0aWMgaW50IHJhd3Y2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG5uZXQvaXB2Ni9yYXcuYy03NDcte1xuLS1cbm5ldC9pcHY2L3Jhdy5jPTEyMDA9c3RydWN0IHByb3RvIHJhd3Y2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvcmF3LmMtMTIxMC1cdC5nZXRzb2Nrb3B0XHQgICA9IHJhd3Y2X2dldHNvY2tvcHQsXG5uZXQvaXB2Ni9yYXcuYzoxMjExOlx0LnNlbmRtc2dcdCAgID0gcmF3djZfc2VuZG1zZyxcbm5ldC9pcHY2L3Jhdy5jLTEyMTItXHQucmVjdm1zZ1x0ICAgPSByYXd2Nl9yZWN2bXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY2OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBSYXd2NiBTZW5kbXNnIFBhdGggYW5kIFhGUk0gT2ZmbG9hZCoqCgpPa2F5LCBzbyBgcmF3djZfc2VuZG1zZ2Ag4oCTIHRoYXTigJlzIHRoZSBBUEkgZW50cnkgcG9pbnQsIGdvdCBpdC4gTm93LCB3aGF0JiMzOTtzIHRoZSBkZWFsIHdpdGggYENPTkZJR19YRlJNX09GRkxPQURgPyBJIHJlY2FsbCBzZWVpbmcgaXQgcG9wIHVwIGluIHNvbWUgcmVsYXRlZCBjb250ZXh0cy4gTGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIuCgpSaWdodCwgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLCB0aGVyZSYjMzk7cyBhIHdob2xlIHN1aXRlIG9mIGZ1bmN0aW9ucyDigJMgYF9feGZybV90cmFuc3BvcnRfcHJlcGAsIGBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcGAsIGBfX3hmcm1fbW9kZV9iZWV0X3ByZXBgLCBgeGZybV9vdXRlcl9tb2RlX3ByZXBgLCBhbmQgYHZhbGlkYXRlX3htaXRfeGZybWAg4oCTIGFsbCBndWFyZGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yLiBFbmFibGluZyBgWEZSTV9PRkZMT0FEYCBpcyBkZWZpbml0ZWx5IG9uIHRoZSByYWRhci4gSXQgc2VlbXMgY3J1Y2lhbCB0byB0aGUgb3ZlcmFsbCBmbG93LCBzcGVjaWZpY2FsbHkgZm9yIG9mZmxvYWRpbmcgdHJhbnNmb3JtYXRpb25zLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gSXQmIzM5O3MgcmVsYXRlZCB0byBJUC1URlMsIGFuZCBJIHNlZSBgaXB0ZnNfZW5jYXBfYWRkX2lwdjRgIGFuZCBgaXB0ZnNfZW5jYXBfYWRkX2lwdjZgIGluIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGB4ZnJtX2lwdGZzLmNgIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFRoaXMgZ2l2ZXMgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IElQc2VjIGFuZCBJUC1URlMgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgYnJvYWRlciBvZmZsb2FkIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1faXB0ZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfWEZSTV9JTlRFUkZBQ0UpICYjNDM7PSB4ZnJtX2ludGVyZmFjZS5vXG5uZXQveGZybS9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub1xubmV0L3hmcm0vTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX1hGUk1fRVNQSU5UQ1ApICYjNDM7PSBlc3BpbnRjcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzExCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKklQc2VjIE9mZmxvYWQgQ29uc2lkZXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgaW1wbGljYXRpb24gaXMgcHJldHR5IGNsZWFyOiB3ZSBuZWVkIHRvIGVuc3VyZSBgWEZSTV9JUFRGU2AgaXMgZW5hYmxlZC4gSXQgc291bmRzIGxpa2Ugc29tZW9uZSYjMzk7cyBlaXRoZXIgZW5jb3VudGVyaW5nIGFuIGlzc3VlIHdpdGggb3IgcGxhbm5pbmcgdG8gbGV2ZXJhZ2UgSVBzZWMgdHJhZmZpYyBmaWx0ZXJpbmcsIGFuZCB0aGF0IGxpa2VseSBoaW5nZXMgb24gaGF2aW5nIHRoZSBhcHByb3ByaWF0ZSBpbmZyYXN0cnVjdHVyZSBpbiBwbGFjZS4KClNvLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MsIHRvIGJlIHN1cmUuIE15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBleGFtaW5lIHRoZSBvZmZsb2FkIGltcGxlbWVudGF0aW9ucyBmb3IgRVNQIGluIGJvdGggSVB2NCBhbmQgSVB2NiBjb250ZXh0cy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBuZXQvaXB2NC9lc3A0X29mZmxvYWQuY2AgYW5kIGBuZXQvaXB2Ni9lc3A2X29mZmxvYWQuY2AuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaG93IHRoZSBvZmZsb2FkIHBhdGhzIGFyZSBzZXQgdXAgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGZpbHRlcmluZyBtZWNoYW5pc21zLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aGUgaW50ZXJhY3Rpb25zIGFyZSBlZmZpY2llbnQgYW5kIGNvcnJlY3QsIGFuZCB3aGV0aGVyIGBYRlJNX0lQVEZTYCBpcyBjb3JyZWN0bHkgaW50ZWdyYXRlZC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHByb3BlciBvZmZsb2FkIGludGVncmF0aW9uIGlzIGVzc2VudGlhbC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG9mZmxvYWQgcGF0aCBhbmQgdGhlIGZpcmV3YWxsIHBhdGggaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBUaGlzIHdpbGwgbWFrZSBpdCBwb3NzaWJsZSB0byBpZGVudGlmeSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGluZWZmaWNpZW5jaWVzLCBvciBldmVuIGJ1Z3MgcmVsYXRlZCB0byB0aGUgdHJhZmZpYyBmaWx0ZXJpbmcgYW5kIHRoZSBJUFNlYyBvZmZsb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3A0X29mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT0zNj1vYmotJChDT05GSUdfSU5FVF9FU1ApICYjNDM7PSBlc3A0Lm9cbm5ldC9pcHY0L01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19JTkVUX0VTUF9PRkZMT0FEKSAmIzQzOz0gZXNwNF9vZmZsb2FkLm9cbm5ldC9pcHY0L01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19JTkVUX0lQQ09NUCkgJiM0Mzs9IGlwY29tcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzQ4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRVNQIE9mZmxvYWQgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBiYXNlZCBvbiB3aGF0IEkmIzM5O20gdGhpbmtpbmcgaGVyZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYXJlIGVuYWJsZWQuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBjcnVjaWFsLiBUaGlzIGlzIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgSVBzZWMgRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIChFU1ApIG9mZmxvYWRpbmcgaXMgYWN0aXZlIGZvciBib3RoIElQdjQgYW5kIElQdjYgdHJhZmZpYy4gV2UmIzM5O3JlIG9idmlvdXNseSBsb29raW5nIHRvIGxldmVyYWdlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiB3aGVyZSBhdmFpbGFibGUsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBvbiBoaWdoZXItYmFuZHdpZHRoIGNvbm5lY3Rpb25zLiBUaGUgcmVhc29uaW5nIGhlcmUgaXMgYmFzaWM6IENQVSBjeWNsZXMgYXJlIGV4cGVuc2l2ZSwgYW5kIGRlZGljYXRpbmcgdGhlbSB0byBlbmNyeXB0aW9uL2RlY3J5cHRpb24gdGFza3Mgd2hlbiB0aGUgTklDIGNhbiBoYW5kbGUgaXQgaXMganVzdCBpbmVmZmljaWVudC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBwbGF0Zm9ybSYjMzk7cyBoYXJkd2FyZSBpcyBjYXBhYmxlIG9mIEVTUCBvZmZsb2FkIGFuZCB0aGF0IHRoZSByZWxldmFudCBkcml2ZXIgc3VwcG9ydCBpcyBwcmVzZW50OyBpZiBub3QsIHdlJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGZpcnN0LCBvciB0aGUgYmVuZWZpdHMgd2lsbCBuZXZlciBtYW5pZmVzdC4gVWx0aW1hdGVseSwgc2V0dGluZyB0aGVzZSBvcHRpb25zIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBhY2hpZXZpbmcgb3B0aW1hbCB0aHJvdWdocHV0IGFuZCByZWR1Y2luZyBsYXRlbmN5IHdpdGggSVBzZWMtcHJvdGVjdGVkIGNvbW11bmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3A2X29mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfSU5FVDZfRVNQKSAmIzQzOz0gZXNwNi5vXG5uZXQvaXB2Ni9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICYjNDM7PSBlc3A2X29mZmxvYWQub1xubmV0L2lwdjYvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX0lORVQ2X0lQQ09NUCkgJiM0Mzs9IGlwY29tcDYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTEzMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgT2ZmbG9hZCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYCBoYXZlIGFueSBsdXJraW5nIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZyBiZXlvbmQgdGhlIG9idmlvdXM7IGFyZSB0aGVyZSBhbnkgc3VidGxlLCBpbmRpcmVjdCBjb25uZWN0aW9ucyB0byBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIHdoYXQmIzM5O3MgKnJlcXVpcmVkKiBmb3IgdGhlbSB0byBmdW5jdGlvbiwgYnV0IGFsc28gYWJvdXQgdW5kZXJzdGFuZGluZyB3aGF0IHRoZXkgbWlnaHQgKmltcGFjdCogb3IgYmUgaW1wYWN0ZWQgYnkuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlIGJlZm9yZSBwcm9jZWVkaW5nLiBUaW1lIHRvIGRpZyBpbiBhbmQgYXZvaWQgYW55IGZ1dHVyZSBzdXJwcmlzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM1ND1jb25maWcgSU5FVF9FU1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIGBJTkVUX0VTUF9PRkZMT0FEYCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBJTkVUX0VTUF9PRkZMT0FEYC4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIElQc2VjIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCAoRVNQKSBvZmZsb2FkLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBmaXRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgcGxhY2UgZm9yIElQdjQtc3BlY2lmaWMgbmV0d29yayBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyBhIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEkmIzM5O2xsIG9wZW4gdGhhdCBLY29uZmlnIGZpbGUgYW5kIGxvb2sgZm9yIGBJTkVUX0VTUF9PRkZMT0FEYCAob3Igc2ltaWxhcikuIFRoYXQgd2lsbCB0ZWxsIG1lIHdoaWNoIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZXBlbmQgb24gaXQsIGFuZCB3aGF0IGl0IGRlcGVuZHMgb24uIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMsIGVuYWJsaW5nIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQgd2l0aGluIGEgYmlnZ2VyIHBpY3R1cmUuIFRoYXQmIzM5O3MgdGhlIHNtYXJ0IG1vdmUgYmVmb3JlIGdldHRpbmcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjk6XHRjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuIDM3MDpcdFx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4gMzcxOlx0XHRkZXBlbmRzIG9uIElORVRfRVNQXG4gMzcyOlx0XHRzZWxlY3QgWEZSTV9PRkZMT0FEXG4gMzczOlx0XHRkZWZhdWx0IG5cbiAzNzQ6XHRcdGhlbHBcbiAzNzU6XHRcdCAgU3VwcG9ydCBmb3IgRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWQuIFRoaXMgbWFrZXMgc2Vuc2VcbiAzNzY6XHRcdCAgb25seSBpZiB0aGlzIHN5c3RlbSByZWFsbHkgZG9lcyBJUHNlYyBhbmQgd2FudCB0byBkbyBpdFxuIDM3NzpcdFx0ICB3aXRoIGhpZ2ggdGhyb3VnaHB1dC4gQSB0eXBpY2FsIGRlc2t0b3Agc3lzdGVtIGRvZXMgbm90XG4gMzc4Olx0XHQgIG5lZWQgaXQsIGV2ZW4gaWYgaXQgZG9lcyBJUHNlYy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4ODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRlcGVuZGVuY2llcywgc3VtbWFyaXplZCBhcyBhIHRob3VnaHQgcHJvY2VzcyBJIG1pZ2h0IGhhdmU6CgoqKk5ldHdvcmsgU2VjdXJpdHkgTW9kdWxlIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgc2VjdXJpdHkgbW9kdWxlIGNvbmZpZ3VyYXRpb25zLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCByZWFsbHkuIEl0IHNlZW1zIHRoYXQgdGhlIGBJTkVUX0VTUF9PRkZMT0FEYCBmZWF0dXJlLCB0aGF0JiMzOTtzIHJlbGlhbnQgb24gdGhlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvZiBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCksIGlzIG5hdHVyYWxseSBkZXBlbmRlbnQgb24gdGhlIGNvcmUgYElORVRfRVNQYCBtb2R1bGUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IG9mZmxvYWRpbmcgc29tZXRoaW5nIHJlcXVpcmVzIHRoZSBiYXNlIGZ1bmN0aW9uYWxpdHkgdG8gZXhpc3QsIHNvIEVTUCBoYXMgdG8gYmUgZW5hYmxlZCBmaXJzdC4gU2ltaWxhcmx5LCB0aGUgYElORVQ2X0VTUF9PRkZMT0FEYCBmZWF0dXJlLCBoYW5kbGluZyBFU1Agb2ZmbG9hZCBmb3IgSVB2NiB0cmFmZmljLCBjbGVhcmx5IGlzIGNvbnRpbmdlbnQgb24gdGhlIGZvdW5kYXRpb25hbCBgSU5FVDZfRVNQYCBtb2R1bGUgYmVpbmcgcHJlc2VudCBhbmQgZnVuY3Rpb25hbC4gSXQmIzM5O3MgYSBjbGVhbiBoaWVyYXJjaGljYWwgZGVwZW5kZW5jeTsgb2ZmbG9hZCBkZXBlbmRzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4gTm90aGluZyB0b28gY29tcGxleCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRjb25maWcgSVBWNl9HUkVcbiAyMTE6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEdSRSB0dW5uZWxcJiMzNDtcbiAyMTI6XHRcdHNlbGVjdCBJUFY2X1RVTk5FTFxuIDIxMzpcdFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbiAyMTQ6XHRcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXG4gMjE1Olx0XHRoZWxwXG4gMjE2Olx0XHQgIFR1bm5lbGluZyBtZWFucyBlbmNhcHN1bGF0aW5nIGRhdGEgb2Ygb25lIHByb3RvY29sIHR5cGUgd2l0aGluXG4gMjE3Olx0XHQgIGFub3RoZXIgcHJvdG9jb2wgYW5kIHNlbmRpbmcgaXQgb3ZlciBhIGNoYW5uZWwgdGhhdCB1bmRlcnN0YW5kcyB0aGVcbiAyMTg6XHRcdCAgZW5jYXBzdWxhdGluZyBwcm90b2NvbC4gVGhpcyBwYXJ0aWN1bGFyIHR1bm5lbGluZyBkcml2ZXIgaW1wbGVtZW50c1xuIDIxOTpcdFx0ICBHUkUgKEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uKSBhbmQgYXQgdGhpcyB0aW1lIGFsbG93c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkZpbmRpbmcgdGhlIElQdjYgRVNQIE9mZmxvYWQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMuIExldCBtZSBzZWUuLi4gSSBuZWVkIHRvIGxvY2F0ZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIElQdjYgRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIChFU1ApIG9mZmxvYWQuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gQWgsIHJpZ2h0LCBpdCYjMzk7cyBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmsgc3RhY2ssIHNvIEkgc2hvdWxkIGJlIGxvb2tpbmcgaW4gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gcHJldHR5IHN1cmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUga2VwdCBpbiB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBvcGVuIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZS4gVGhhdCBzaG91bGQgaGF2ZSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgLSBgSU5FVDZfRVNQX09GRkxPQURgLiBMZXQgbWUgZ28gZmluZCB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz02Mj1jb25maWcgSU5FVDZfRVNQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy03Ni1cbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzb3VyY2Ugb2YgdHJ1dGgsIGFuZCBmb3IgdGhpcywgSSYjMzk7bSB0aGlua2luZyB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5IGlzIHRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luLiBTcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDc3IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludC4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgaW4gbW9yZSBkZXRhaWwsIGFuZCBzZWVpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBpcyBhIGdvb2Qgd2F5IHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDc3Olx0Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG4gIDc4Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFwmIzM0O1xuICA3OTpcdFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcbiAgODA6XHRcdHNlbGVjdCBYRlJNX09GRkxPQURcbiAgODE6XHRcdGRlZmF1bHQgblxuICA4MjpcdFx0aGVscFxuICA4MzpcdFx0ICBTdXBwb3J0IGZvciBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZC4gVGhpcyBtYWtlcyBzZW5zZVxuICA4NDpcdFx0ICBvbmx5IGlmIHRoaXMgc3lzdGVtIHJlYWxseSBkb2VzIElQc2VjIGFuZCB3YW50IHRvIGRvIGl0XG4gIDg1Olx0XHQgIHdpdGggaGlnaCB0aHJvdWdocHV0LiBBIHR5cGljYWwgZGVza3RvcCBzeXN0ZW0gZG9lcyBub3RcbiAgODY6XHRcdCAgbmVlZCBpdCwgZXZlbiBpZiBpdCBkb2VzIElQc2VjLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKklORVQ2X0VTUF9PRkZMT0FEIGFuZCB0aGUgQmlnZ2VyIFBpY3R1cmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCBpbW1lZGlhdGVseSBhIGRlcGVuZGVuY3kgc3RhbmRzIG91dC4gU3BlY2lmaWNhbGx5LCB0aGlzIGBJTkVUNl9FU1BfT0ZGTE9BRGAgdGhpbmfigKYgeWVhaCwgaXQgY2xlYXJseSBoaW5nZXMgb24gYElORVQ2X0VTUGAgYmVpbmcgZW5hYmxlZC4gVGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBubyBzdXJwcmlzZXMgdGhlcmUuCgpCdXQgbm93LCBJJiMzOTttIHRoaW5raW5nIGJleW9uZCB0aGF0IGltbWVkaWF0ZSBsaW5rLiBXaGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBzb21ldGhpbmcgbGlrZSBgWEZSTV9JUFRGU2A/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaGFzIGFuIGltcGFjdCBvbiB0aGUgSVBzZWMgc3RhY2sgY29uZmlndXJhdGlvbiBhbmQgaG93IHRoZXNlIGZlYXR1cmVzIHBsYXkgd2l0aCBlYWNoIG90aGVyLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IGNvbmZsaWN0cyBvciBjby1kZXBlbmRlbmNpZXMgSSYjMzk7bSBvdmVybG9va2luZyBoZXJlIHRoYXQgY291bGQgaW50cm9kdWNlIGluc3RhYmlsaXR5IGlmIG5vdCBhY2NvdW50ZWQgZm9yLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBpbnRlZ3JhdGVkIGFuZCBwbGF5aW5nIG5pY2VseSB0b2dldGhlci4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX0lQVEZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xubmV0L3hmcm0vS2NvbmZpZy0xNDItXHR0cmlzdGF0ZSBcJiMzNDtJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBYRlJNIEtjb25maWcgT3B0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE0MS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgWEZSTSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgc3dpdGNoZXMgdGhhdCBkZXRlcm1pbmUgd2hpY2ggWEZSTSBmdW5jdGlvbmFsaXRpZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIGxpa2VseSB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3kgY2hhaW4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoYXQgdGhpcyBzZWN0aW9uIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHdoaWNoIFhGUk0gZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBidWlsdCBhcyBtb2R1bGVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBncmFudWxhciBjb250cm9scywgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG5ldyBvcHRpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBkdWcgaW50byB0aGlzIGFyZWEuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBrbm9icyBmb3IgWEZSTSBpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MTpcdGNvbmZpZyBYRlJNX0lQVEZTXG4gMTQyOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuIDE0MzpcdFx0ZGVwZW5kcyBvbiBYRlJNXG4gMTQ0Olx0XHRoZWxwXG4gMTQ1Olx0XHQgIEluZm9ybWF0aW9uIG9uIHRoZSBJUC1URlMvQUdHRlJBRyBlbmNhcHN1bGF0aW9uIGNhbiBiZSBmb3VuZFxuIDE0NjpcdFx0ICBpbiBSRkMgOTM0Ny4gVGhpcyBmZWF0dXJlIHN1cHBvcnRzIGRlbWFuZCBkcml2ZW4gKGkuZS4sXG4gMTQ3Olx0XHQgIG5vbi1jb25zdGFudCBzZW5kIHJhdGUpIElQLVRGUyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVcbiAxNDg6XHRcdCAgQUdHRlJBRyBFU1AgcGF5bG9hZCBlbmNhcHN1bGF0aW9uLiBUaGlzIHBheWxvYWQgdHlwZVxuIDE0OTpcdFx0ICBzdXBwb3J0cyBhZ2dyZWdhdGlvbiBhbmQgZnJhZ21lbnRhdGlvbiBvZiB0aGUgaW5uZXIgSVBcbiAxNTA6XHRcdCAgcGFja2V0IHN0cmVhbSB3aGljaCBpbiB0dXJuIHlpZWxkcyBoaWdoZXIgc21hbGwtcGFja2V0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzczCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gZ2V0dGluZyBgWEZSTV9JUFRGU2AgdXAgYW5kIHJ1bm5pbmcsIGFuZCBhcyBJIHN1c3BlY3RlZCwgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGBYRlJNYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSByaWdodCBjb21wb25lbnRzIGVuYWJsZWQuIE15IGNoZWNrbGlzdCB3aWxsIGluY2x1ZGUgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBJTkVUX0VTUGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUGAsIGFuZCBgSU5FVDZfRVNQX09GRkxPQURgLiBUaGVzZSBhcmUgYWxsIHByZXR0eSBzdGFuZGFyZCBmb3IgZW5hYmxpbmcgRVNQLgoKTm93LCB3ZSBkZWZpbml0ZWx5IG5lZWQgYFhGUk1fSVBURlNgIGl0c2VsZiwgdGhhdCYjMzk7cyB0aGUgY29yZS4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgYXQgYFhGUk1fT0ZGTE9BRGAuICBJIGJlbGlldmUgdGhpcyBpcyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGJvdGggYElORVRfRVNQX09GRkxPQURgIGFuZCBgSU5FVDZfRVNQX09GRkxPQURgLCBidXQgSSYjMzk7bGwgbWFrZSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQgaWYgcG9zc2libGUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGEgYHNlbGVjdGAgb3B0aW9uLCBtZWFuaW5nIGl0IG1pZ2h0IG5vdCBiZSBkaXJlY3RseSBzZWxlY3RhYmxlLiBJdCYjMzk7cyBhbHdheXMgZ29vZCBwcmFjdGljZSB0byBkb3VibGUtY2hlY2sgdGhlc2UgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbnMgZm9yIGBYRlJNX09GRkxPQURgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTU9Y29uZmlnIFhGUk1cbi0tXG5uZXQveGZybS9LY29uZmlnLTEwLVxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXG5uZXQveGZybS9LY29uZmlnLTEyLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI0OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGlzIENvbmZpZ3VyYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQmIzM5O3MgYSBib29sZWFuLCBidXQgaXQmIzM5O3Mgbm90IGV4cG9zZWQgd2l0aCBhIGRpcmVjdCBwcm9tcHQsIHdoaWNoIGlzIHVudXN1YWwuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQmIzM5O3MgaW1wbGljaXRseSBlbmFibGVkIGJ5IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYElORVRfRVNQX09GRkxPQURgIGFuZCBgSU5FVDZfRVNQX09GRkxPQURgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIGtub3cgKndoeSogdGhpcyBpcyBzZXQgdXAgdGhlIHdheSBpdCBpcy4KCk15IG5leHQgc3RlcCBpcyBhbHdheXMgdG8gY2hlY2sgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIGlzIHVzZWQuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvaXB2NC9yYXcuY2AgYW5kIGBuZXQvaXB2Ni9yYXcuY2AsIHdoaWNoIGFyZSBjb21waWxlZCB3aGVuZXZlciBgSU5FVGAgYW5kIGBJUFY2YCBhcmUgZW5hYmxlZCByZXNwZWN0aXZlbHkuIEdpdmVuIHRoYXQgdGhvc2UgYXJlIHByZXR0eSBmb3VuZGF0aW9uYWwsIGl0IHN1Z2dlc3RzIHRoaXMgc2V0dGluZyBpcyBjb25uZWN0ZWQgdG8gbG93ZXItbGV2ZWwgbmV0d29ya2luZyBhc3BlY3RzLiBUaGVuIEkgc2VlIGBuZXQvY29yZS9za2J1ZmYuY2AgaXMgdG91Y2hlZCwgd2hpY2ggbWVhbnMgdGhlIGNoYW5nZXMgd2lsbCBhZmZlY3QgZnVuZGFtZW50YWwgYnVmZmVyIGhhbmRsaW5nLiBPa2F5LCBnZXR0aW5nIG1vcmUgc2VyaW91cyBub3cuCgpUaGUgcmVhbCBwb2ludCBvZiBpbnRlcmVzdCBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBuZXQveGZybS94ZnJtX2RldmljZS5jYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IGZpbGUgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXMgZW5hYmxlZCAob3IgcG9zc2libHkganVzdCBgQ09ORklHX1hGUk1gKS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBzZWUgaWYgdGhhdCBpcyB0aGUgY2FzZS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlcGVuZGVuY2llcy4gSXQgaXMgbGlrZWx5IHRoYXQgYENPTkZJR19YRlJNX09GRkxPQURgIGlzIGVuYWJsZWQuIElmIHNvLCB0aGlzIGlzIHJlbGF0ZWQgdG8gdHJhbnNmb3JtYXRpb24gb2ZmbG9hZCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTUtXHRcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXG5uZXQveGZybS9NYWtlZmlsZToxNjpcdFx0ICAgICAgeGZybV9zeXNjdGwubyB4ZnJtX3JlcGxheS5vIHhmcm1fZGV2aWNlLm8gXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE3LVx0XHQgICAgICB4ZnJtX25hdF9rZWVwYWxpdmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDg2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIEludGVnZXIgT3ZlcmZsb3cgUHJvdGVjdGlvbiBpbiBQYWNrZXQgUHJvY2Vzc2luZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBjcnVjaWFsIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIGR1cmluZyBgc2tiYCBoZWFkZXIgdXBkYXRlcy4gVGhpcyBhZmZlY3RzIGEgd2lkZSBzd2F0aGUgb2YgdGhlIGtlcm5lbDogY29yZSBuZXR3b3JraW5nLCByYXcgc29ja2V0cywgYW5kIElQc2VjL1hGUk0gb2ZmbG9hZGluZy4gVGhpcyBpcyBhICpoaWdoLWltcGFjdCogY2hhbmdlLCB0b3VjaGluZyBmdW5kYW1lbnRhbCBwYWNrZXQgaGFuZGxpbmcgbG9naWMuIEkgbmVlZCB0byBiZSAqdGhvcm91Z2gqIHdpdGggbXkgZnV6emluZyBhcHByb2FjaC4KCkZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gYnVpbGRpbmcgd2l0aCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIEZyb20gdGhlIGNvZGUsIHRoZSBrZXkgY29uZmlncyBmb3IgZW5hYmxpbmcgdGhlIHJlbGV2YW50IGZlYXR1cmVzIGFyZTogYElORVRfRVNQYCwgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQYCwgYElORVQ2X0VTUF9PRkZMT0FEYCwgYW5kIGBYRlJNX0lQVEZTYC4gRW5hYmxpbmcgdGhlc2Ugd2lsbCBlbnN1cmUgdGhlIG9mZmxvYWQtc3BlY2lmaWMgY29kZSBwYXRocyBhcmUgcHJlc2VudCBpbiBgeGZybV9kZXZpY2Uub2AsIHdoZXJlIHRoZSBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIG1vZGlmaWNhdGlvbnMgcmVzaWRlLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgSSBuZWVkIHRvIHRhcmdldC4gSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBlbnRyeSBwb2ludHM6IGBwc2tiX2V4cGFuZF9oZWFkYCwgYHNrYl9jb3B5X2V4cGFuZGAsIGBza2Jfc2VnbWVudF9saXN0YCwgYHNrYl9zZWdtZW50YCwgYHJhd19zZW5kbXNnYCwgYHJhd3Y2X3NlbmRtc2dgLCBgdmFsaWRhdGVfeG1pdF94ZnJtYCwgYW5kIGB4ZnJtX291dHB1dGAuIEkmIzM5O3ZlIHZlcmlmaWVkIHRoYXQgYWxsIG9mIHRoZXNlIGFyZSBleHBvcnRlZCwgd2hpY2ggaXMgZXhjZWxsZW50LiBUaGV5IGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUgZm9yIGZ1enppbmcuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBhbnl0aGluZyBlbHNlIGlzIHJlYWNoYWJsZS4gSSBzZWUgdGhhdCBgeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50YCBhbmQgYHhmcm00X2JlZXRfZ3NvX3NlZ21lbnRgIGFyZSBzdGF0aWMsIGJ1dCB0aGVzZSBhcmUgY2FsbGVkIHZpYSBgaW5ldF9vZmZsb2Fkc1tJUFBST1RPX0VTUF1gLCBhbmQgdGhlIHNhbWUgd2l0aCBgeGZybTZfdHJhbnNwb3J0X2dzb19zZWdtZW50YCBhbmQgYHhmcm02X2JlZXRfZ3NvX3NlZ21lbnRgLCB3aXRoIGBpbmV0Nl9vZmZsb2Fkc1tJUFBST1RPX0VTUF1gLiBUaGVzZSBhcmUgR1NPIHNlZ21lbnQgZnVuY3Rpb25zLCB0cmlnZ2VyZWQgYnkgc2VuZGluZyBwYWNrZXRzIHdpdGggR1NPIGVuYWJsZWQuIFRoZXJlZm9yZSwgZnV6emluZyBgc2tiX3NlZ21lbnRgIGFuZCBgc2tiX3NlZ21lbnRfbGlzdGAgd2lsbCBjb3ZlciB0aGVzZSBHU08gcGF0aHMgaW5kaXJlY3RseS4KCkZpbmFsbHksIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgcGF0Y2ggYWdhaW4gdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCBzaW5jZSBJIG5lZWQgdG8gYmUgYXMgY29tcHJlaGVuc2l2ZSBhcyBwb3NzaWJsZS4gSSBrbm93IHRoYXQgYHJhd19zZW5kbXNnYCBjYWxscyBgcmF3X3NlbmRfaGRyaW5jYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGNhbGxzIGByYXd2Nl9zZW5kX2hkcmluY2AuIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gdXNlIHRoZXNlIGFuZCB0aGUgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgdG8gZnV6eiB0aGlzLiBJbiBhZGRpdGlvbiwgSSB3aWxsIHZlcmlmeSBpZiBgX194ZnJtX3RyYW5zcG9ydF9wcmVwYCwgYF9feGZybV9tb2RlX3R1bm5lbF9wcmVwYCwgYW5kIGBfX3hmcm1fbW9kZV9iZWV0X3ByZXBgIGFyZSBjYWxsZWQuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGZ1enogYHZhbGlkYXRlX3htaXRfeGZybWAgd2hpY2ggY2FsbHMgYHhmcm1fb3V0ZXJfbW9kZV9wcmVwYC4KCk15IGZ1enppbmcgc3RyYXRlZ3kgd2lsbCB0aGVyZWZvcmUgZm9jdXMgb24gZ2VuZXJhdGluZyBkaXZlcnNlIHBhY2tldCBwYXlsb2FkcyB3aXRoIHZhcnlpbmcgaGVhZGVyIHNpemVzLCBvZmZzZXRzLCBhbmQgR1NPIHNldHRpbmdzLCBhbmQgdGhlbiBpbmplY3RpbmcgdGhlbSB0aHJvdWdoIHRoZSBpZGVudGlmaWVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgc2NlbmFyaW9zIHRoYXQgbWlnaHQgdHJpZ2dlciBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgaGVhZGVyIG1hbmlwdWxhdGlvbiBvciBgc2tiYCByZS1zZWdtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZ2VuZXJhdGVkIGNvdmVyYWdlIHJlcG9ydHMgdG8gaWRlbnRpZnkgYW55IGFyZWFzIHdoZXJlIG5ldyBvciB1bmV4cGVjdGVkIGNvZGUgaXMgcmVhY2hlZCwgaW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGlzIGhpdHRpbmcgYWxsIGFyZWFzIG9mIHRoZSBtb2RpZmllZCBjb2RlLiBUaGlzIHdpbGwgYmUgdGhlIG1haW4gYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSByb2J1c3RuZXNzIG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19feGZybV90cmFuc3BvcnRfcHJlcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYy0yMi0jaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyMzpzdGF0aWMgaW50IF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjQtXHRcdFx0XHQgdW5zaWduZWQgaW50IGhzaXplKVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NzM9c3RhdGljIGludCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTg2LVx0XHRpZiAoeC1cdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUKVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo4NzpcdFx0XHRyZXR1cm4gX194ZnJtX3RyYW5zcG9ydF9wcmVwKHgsIHNrYixcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtODgtXHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTg5LVx0XHRpZiAoeC1cdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUNilcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6OTA6XHRcdFx0cmV0dXJuIF9feGZybV90cmFuc3BvcnRfcHJlcCh4LCBza2IsXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTkxLVx0XHRcdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFhGUk0gQ292ZXJhZ2UgYW5kIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGN1cnJlbnQgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSB3YXkgdGhpbmdzIGFyZSBzZXQgdXAsIGB2YWxpZGF0ZV94bWl0X3hmcm1gIG5lYXRseSBjb3ZlcnMgYHhmcm1fb3V0ZXJfbW9kZV9wcmVwYCwgd2hpY2ggaW4gdHVybiBjYWxscyBhIHNlcmllcyBvZiBwcmVwIGZ1bmN0aW9uczogYF9feGZybV90cmFuc3BvcnRfcHJlcGAsIGBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcGAsIGFuZCBgX194ZnJtX21vZGVfYmVldF9wcmVwYC4gU28sIGB2YWxpZGF0ZV94bWl0X3hmcm1gIGhhbmRsZXMgdGhvc2UgcHJlcGVyYXRpb24gZnVuY3Rpb25zLgoKTm93LCB3aGF0IGFib3V0IHRoZSBJUFRGUyBlbmNhcCBhZGQgZnVuY3Rpb25zPyBBaCwgYGlwdGZzX2VuY2FwX2FkZF9pcHY0YCBhbmQgYGlwdGZzX2VuY2FwX2FkZF9pcHY2YD8gVGhleSYjMzk7cmUgY2FsbGVkIGJ5IGBpcHRmc19wcmVwYXJlX291dHB1dGAsIHdoaWNoIGlzIHRoZSBgLnByZXBhcmVfb3V0cHV0YCBjYWxsYmFjayBmb3IgYGlwdGZzX21vZGVfY2JzYC4gQW5kIHRoYXQgZ2V0cyBjYWxsZWQgZHVyaW5nIFhGUk0gb3V0cHV0IHByb2Nlc3NpbmcuIFRoYXQgbWFrZXMgc2Vuc2U7IGB4ZnJtX291dHB1dGAgZW5jb21wYXNzZXMgdGhpcy4KClRoZW4gdGhlcmUgYXJlIGZ1bmN0aW9ucyBsaWtlIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCwgYHhmcm02X3RyYW5zcG9ydF9vdXRwdXRgLCBgeGZybTZfcm9fb3V0cHV0YCwgYHhmcm00X2JlZXRfZW5jYXBfYWRkYCwgYHhmcm00X3R1bm5lbF9lbmNhcF9hZGRgLCBgeGZybTZfdHVubmVsX2VuY2FwX2FkZGAsIGFuZCBgeGZybTZfYmVldF9lbmNhcF9hZGRgLiBUaGVzZSBhcmUgY2FsbGVkIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0aHJvdWdoIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCwgYW5kIGV2ZW50dWFsbHkgYnkgYHhmcm1fb3V0cHV0YC4gU28sIGB4ZnJtX291dHB1dGAgaXMgdGhlIGVuY29tcGFzc2luZyBmdW5jdGlvbiBoZXJlIGFzIHdlbGwuIFRoZSBzeW1ib2xzIHVzZWQgZm9yIGZvY3VzIGhlcmUgc2VlbSB3ZWxsLWNob3Nlbiwgb3ZlcmFsbC4KCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgZmluYWwgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlIGhhdmUgYElORVRfRVNQYCwgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQYCwgYElORVQ2X0VTUF9PRkZMT0FEYCwgYW5kIGBYRlJNX0lQVEZTYC4KCkhtbSwgYW55dGhpbmcgZWxzZT8gYENPTkZJR19YRlJNX09GRkxPQURgIGlzIHNlbGVjdGVkIGJ5IGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYC4gTm93LCBgQ09ORklHX1hGUk1gIGlzIHNlbGVjdGVkIGJ5IGBYRlJNX0lQVEZTYC4gV2FpdCBhIG1vbWVudCwgYmVjYXVzZSBgWEZSTV9JUFRGU2AgKmRlcGVuZHMqIG9uIGBYRlJNYCwgc28gYFhGUk1gICptdXN0KiBiZSBlbmFibGVkLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGEgY29yZSBuZXR3b3JraW5nIGZlYXR1cmUsIGBYRlJNYCBpcyBhbG1vc3QgY2VydGFpbmx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IGtlcm5lbHMuIFRoZXJlZm9yZSwgSSB3aWxsIGp1c3QgbGlzdCB0aGUgc3BlY2lmaWNzLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBuYXR1cmUgb2YgYFhGUk1gLCBpcyBpdCBhIGJvb2wgb3IgdHJpc3RhdGU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZy00LSNcbm5ldC94ZnJtL0tjb25maWc6NTpjb25maWcgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy02LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjA3OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCb29sZWFuIExvZ2ljKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBhIGBib29sYCBoZXJlLCBidXQgaXQmIzM5O3Mgbm90IGJlaW5nIGV4cGxpY2l0bHkgcHJvbXB0ZWQuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIOKAkyB0cnVlIG9yIGZhbHNlIOKAkyBpcyBiZWluZyAqZGVyaXZlZCogZnJvbSBzb21ldGhpbmcgZWxzZSwgc29tZSBvdGhlciBzZWxlY3Rpb24gY3JpdGVyaWEuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIGRlcGVuZGVudCB2YXJpYWJsZS4gVGhlIGtleSBpcyB3aGF0JiMzOTtzIGRyaXZpbmcgdGhpcyBwYXJ0aWN1bGFyIGJvb2xlYW4uIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHRoaW5ncyBsaWtlIGBJTkVUX0VTUGAuIElmIHRoYXQmIzM5O3Mgc2V0LCAqdGhhdCogbGlrZWx5IGRldGVybWluZXMgdGhlIHN0YXRlIG9mICp0aGlzKiBwYXJ0aWN1bGFyIGBib29sYCDigJMgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyByZWxhdGlvbnNoaXAgdG8gYFhGUk1gLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgZHJpdmVyIG9mIHRoaXMgYGJvb2xgLiBJdCYjMzk7cyBhIGNhc2NhZGluZyBlZmZlY3Qgb2YgY29uZmlndXJhdGlvbiwgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGxvZ2ljIGNoYWluIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUX0VTUCQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBDaGVjazogSU5FVF9FU1AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBgSU5FVF9FU1BgIG1vZHVsZSBpcyBwbGF5aW5nIG5pY2UuIEkgd2FudCB0byB0aG9yb3VnaGx5IGFzc2VzcyBpdHMgZGVwZW5kZW5jeSB0cmVlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29ya2luZyBzdGFjaywgcG90ZW50aWFsbHkgaW5jbHVkaW5nIHRoZSBzb2NrZXQgaW1wbGVtZW50YXRpb25zLCBhbnkgcmVsZXZhbnQgY3J5cHRvZ3JhcGhpYyBsaWJyYXJpZXMsIGFuZCBldmVuIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciBpZiB3ZSBhcmUgdGFsa2luZyBhYm91dCBhbiBlbWJlZGRlZCBzeXN0ZW0uIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHZlcnNpb24gY29uZmxpY3RzIG9yIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1vZHVsZXMgdGhhdCBtYXkgYmUgbG9hZGVkLiBBbnkgaW5jb21wYXRpYmxlIHZlcnNpb25zIHdpbGwgbGlrZWx5IHRyaWdnZXIgc29tZSBmcnVzdHJhdGluZyBydW50aW1lIGVycm9ycywgdGhhdCBJJiMzOTtkIGxpa2UgdG8gcHJvYWN0aXZlbHkgcHJldmVudC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgSSBjYW4gZmluZCB0aGUgZGVwZW5kZW5jeSBtYW5pZmVzdCBhbmQgdGhlbiBjb21wYXJlIHRoaXMgYWdhaW5zdCB3aGF0IGlzIGN1cnJlbnRseSBydW5uaW5nLiBJIG5lZWQgdG8gYWxzbyBhc3Nlc3MgYW55IGRpcmVjdCBvciBpbmRpcmVjdCBkZXBlbmRlbmNpZXMgYW5kIGhvdyBlYWNoIG9mIHRoZW0gbWlnaHQgaW1wYWN0IGVhY2ggb3RoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzU0Olx0Y29uZmlnIElORVRfRVNQXG4gMzU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4gMzU2Olx0XHRzZWxlY3QgWEZSTV9FU1BcbiAzNTc6XHRcdGhlbHBcbiAzNTg6XHRcdCAgU3VwcG9ydCBmb3IgSVBzZWMgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpLlxuIDM1OTpcdFxuIDM2MDpcdFx0ICBFU1AgY2FuIGJlIHVzZWQgd2l0aCB2YXJpb3VzIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMuXG4gMzYxOlx0XHQgIEJlc2lkZXMgZW5hYmxpbmcgRVNQIHN1cHBvcnQgaXRzZWxmLCB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBnZW5lcmljXG4gMzYyOlx0XHQgIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmVcbiAzNjM6XHRcdCAgaW1wbGVtZW50ZWQuICBJZiB5b3UgbmVlZCBhbnkgb3RoZXIgYWxnb3JpdGhtcywgeW91JiMzOTtsbCBuZWVkIHRvIGVuYWJsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgzMQoJCQkJCQkJb3V0cHV0OiAyOTQKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlIEkmIzM5O20gbG9va2luZyBhdCBmb2N1c2VzIG9uIHByZXZlbnRpbmcgaW50ZWdlciBvdmVyZmxvd3Mgd2l0aGluIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgaGVhZGVyIG9mZnNldCBtYW5pcHVsYXRpb24uIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBjaGVja3MgYXJvdW5kIGZ1bmN0aW9ucyBsaWtlIGBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAgYW5kIGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWxgLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIHNlbGVjdGluZyBgWEZSTV9FU1BgLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IGltcGxpZXMgaXQmIzM5O3MgYWxzbyBzZWxlY3RpbmcgYFhGUk1gIGl0c2VsZiDigJMgc3RhbmRhcmQgcHJvY2VkdXJlLgoKSSYjMzk7bGwgYmUgc2V0dGluZyB1cCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGVzdGluZyBhbmQgdmVyaWZpY2F0aW9uIHByb2Nlc3M6IGBJTkVUX0VTUGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUGAsIGBJTkVUNl9FU1BfT0ZGTE9BRGAsIGFuZCBhbHNvIGBYRlJNX0lQVEZTYC4gVGhpcyBzaG91bGQgY292ZXIgdGhlIHJlbGV2YW50IElQc2VjIGltcGxlbWVudGF0aW9ucy4KCkkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzIGR1cmluZyBteSBpbnZlc3RpZ2F0aW9uOiBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGBza2Jfc2VnbWVudGAsIGByYXdfc2VuZG1zZ2AsIGByYXd2Nl9zZW5kbXNnYCwgYHZhbGlkYXRlX3htaXRfeGZybWAsIGFuZCBgeGZybV9vdXRwdXRgLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIG5ldHdvcmtpbmcgKGBza2J1ZmYuY2ApLCByYXcgc29ja2V0cyAoYHJhdy5jYCksIGFuZCBlc3BlY2lhbGx5IElQc2VjL1hGUk0gb2ZmbG9hZGluZyBhbmQgZW5jYXBzdWxhdGlvbiBjb2RlIChgeGZybV9kZXZpY2UuY2AsIGB4ZnJtX2lwdGZzLmNgLCBgeGZybV9vdXRwdXQuY2AsIGBlc3A0X29mZmxvYWQuY2AsIGBlc3A2X29mZmxvYWQuY2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0JiMzOTtzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgaGVhZGVyIG1hbmlwdWxhdGlvbi4KCkdpdmVuIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIHRoaXMsIEkgbmVlZCB0byBwdXQgdGhpcyB0aHJvdWdoIGEgdGhvcm91Z2ggZnV6emluZyByZWdpbWUuIEl0JiMzOTtzIGNydWNpYWwgdG8gY29uZmlybSB0aGF0IHRoZXNlIG5ldyBib3VuZHMgY2hlY2tzIGRvICpub3QqIGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMsIHRoYXQgdGhleSBjb3JyZWN0bHkgaGFuZGxlIGFsbCB2YWxpZCBwYWNrZXQgc2NlbmFyaW9zLCBhbmQgdGhhdCB0aGV5IHByZXZlbnQgdGhlIHRhcmdldGVkIG92ZXJmbG93cyBhcyBpbnRlbmRlZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGNoZWNrcyB0aGVtc2VsdmVzIGFyZSBzb3VuZCBhbmQgbm90IHN1c2NlcHRpYmxlIHRvIGJ5cGFzcy4KClJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVRfRVNQX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwc2tiX2V4cGFuZF9oZWFkJiMzNDssCiAgICAmIzM0O3NrYl9jb3B5X2V4cGFuZCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O3NrYl9zZWdtZW50JiMzNDssCiAgICAmIzM0O3Jhd19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Jhd3Y2X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfeG1pdF94ZnJtJiMzNDssCiAgICAmIzM0O3hmcm1fb3V0cHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgY2FyZWZ1bCBib3VuZHMgY2hlY2tpbmcgdG8gc2tiIGhlYWRlciBvZmZzZXQgdXBkYXRlcyAoZS5nLiwgc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwsIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bCkgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIChza2J1ZmYuYyksIHJhdyBzb2NrZXRzIChyYXcuYyksIGFuZCBJUHNlYy9YRlJNIG9mZmxvYWRpbmcgYW5kIGVuY2Fwc3VsYXRpb24gKHhmcm1fZGV2aWNlLmMsIHhmcm1faXB0ZnMuYywgeGZybV9vdXRwdXQuYywgZXNwNF9vZmZsb2FkLmMsIGVzcDZfb2ZmbG9hZC5jKS4gU2luY2UgdGhpcyBtb2RpZmllcyBjb3JlIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBoZWFkZXIgbWFuaXB1bGF0aW9uIGxvZ2ljLCBpdCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBvdmVyZmxvdyBjaGVja3MgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkcm9wIHZhbGlkIHBhY2tldHMsIGFuZCB0aGF0IHRoZXkgY29ycmVjdGx5IHByZXZlbnQgb3ZlcmZsb3dzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtza2JfY29weV9leHBhbmQmIzM0OywKICAgICYjMzQ7c2tiX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudCYjMzQ7LAogICAgJiMzNDtyYXdfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyYXd2Nl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX3htaXRfeGZybSYjMzQ7LAogICAgJiMzNDt4ZnJtX291dHB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGNhcmVmdWwgYm91bmRzIGNoZWNraW5nIHRvIHNrYiBoZWFkZXIgb2Zmc2V0IHVwZGF0ZXMgKGUuZy4sIHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsLCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwpIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0d29ya2luZyAoc2tidWZmLmMpLCByYXcgc29ja2V0cyAocmF3LmMpLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIGFuZCBlbmNhcHN1bGF0aW9uICh4ZnJtX2RldmljZS5jLCB4ZnJtX2lwdGZzLmMsIHhmcm1fb3V0cHV0LmMsIGVzcDRfb2ZmbG9hZC5jLCBlc3A2X29mZmxvYWQuYykuIFNpbmNlIHRoaXMgbW9kaWZpZXMgY29yZSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgaGVhZGVyIG1hbmlwdWxhdGlvbiBsb2dpYywgaXQgaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgb3ZlcmZsb3cgY2hlY2tzIGRvIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgZHJvcCB2YWxpZCBwYWNrZXRzLCBhbmQgdGhhdCB0aGV5IGNvcnJlY3RseSBwcmV2ZW50IG92ZXJmbG93cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjUyOjU2LjY5NjMwNTk1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTI2ODg4MDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiWEZSTV9JUFRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInNrYl9jb3B5X2V4cGFuZFwiLFxuICAgIFwic2tiX3NlZ21lbnRfbGlzdFwiLFxuICAgIFwic2tiX3NlZ21lbnRcIixcbiAgICBcInJhd19zZW5kbXNnXCIsXG4gICAgXCJyYXd2Nl9zZW5kbXNnXCIsXG4gICAgXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgICBcInhmcm1fb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBjYXJlZnVsIGJvdW5kcyBjaGVja2luZyB0byBza2IgaGVhZGVyIG9mZnNldCB1cGRhdGVzIChlLmcuLCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCwgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgKHNrYnVmZi5jKSwgcmF3IHNvY2tldHMgKHJhdy5jKSwgYW5kIElQc2VjL1hGUk0gb2ZmbG9hZGluZyBhbmQgZW5jYXBzdWxhdGlvbiAoeGZybV9kZXZpY2UuYywgeGZybV9pcHRmcy5jLCB4ZnJtX291dHB1dC5jLCBlc3A0X29mZmxvYWQuYywgZXNwNl9vZmZsb2FkLmMpLiBTaW5jZSB0aGlzIG1vZGlmaWVzIGNvcmUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGhlYWRlciBtYW5pcHVsYXRpb24gbG9naWMsIGl0IGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IG92ZXJmbG93IGNoZWNrcyBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGRyb3AgdmFsaWQgcGFja2V0cywgYW5kIHRoYXQgdGhleSBjb3JyZWN0bHkgcHJldmVudCBvdmVyZmxvd3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjUyOjU2LjY5NjMxNjI5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2MzMzODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzQ3Yjk5Y2U1NmIzYTU4ZmU3ZTE0ZTk0YWQ1YjQ4YmRjOGVmODYwZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyIDA1OjUyOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXFxuaW5kZXggMjJlZGExZDU0YTBlOC4uYzhlMmZiMjE3NjRhOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbkBAIC0zMTI2LDYgKzMxMjYsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gb2Zmc2V0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrXFxuK3NrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGludCBvZmZzZXQpXFxuK3tcXG4rXFx0aWYgKHVubGlrZWx5KG9mZnNldCBcXHUwMDNjIDAgfHwgb2Zmc2V0IFxcdTAwM2U9IFUxNl9NQVgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyIFxcdTAwM2U9IFUxNl9NQVggLSBvZmZzZXQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0O1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xcbitza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KVxcbit7XFxuK1xcdGlmIChvZmZzZXQgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGlmICh1bmxpa2VseSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRpZiAodW5saWtlbHkob2Zmc2V0IFxcdTAwM2U9IFUxNl9NQVgpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgXFx1MDAzZT0gVTE2X01BWCAtIG9mZnNldCkpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IG9mZnNldDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX25ldHdvcmtfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0cmV0dXJuIHNrYi1cXHUwMDNlaGVhZCArIHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXI7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5pbmRleCBiYTNkYmFjODBmYjQ5Li5kODE3N2U2NzcyMTY0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXFxuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5AQCAtMzg3LDYgKzM4Nyw5IEBAIHUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwobmFwaV9za2JfY2FjaGVfZ2V0X2J1bGspO1xcbiBcXG4rc3RhdGljIGludCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZik7XFxuK3N0YXRpYyBpbnQgc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZik7XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19maW5hbGl6ZV9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4ge1xcbkBAIC05NzYsNyArOTc5LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbiBcXHRza2JfcHV0KG5za2IsIHNpemUpO1xcbiBcXG4gXFx0aGVhZF9vZmYgPSBza2JfaGVhZHJvb20obnNrYikgLSBza2JfaGVhZHJvb20oc2tiKTtcXG4tXFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuc2tiLCBoZWFkX29mZik7XFxuK1xcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLCBoZWFkX29mZik7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0Y29uc3VtZV9za2IobnNrYik7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4gXFxuIFxcdG9mZiA9IHNpemU7XFxuIFxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuIC0gb2ZmO1xcbkBAIC0yMTQwLDYgKzIxNDcsODYgQEAgdm9pZCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKTtcXG4gXFxuK3N0YXRpYyBib29sIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpXFxuK3tcXG4rXFx0aWYgKGFkZCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChhZGQgXFx1MDAzZSBVMTZfTUFYKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBvZmZzZXQgXFx1MDAzZSBVMTZfTUFYIC0gYWRkO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3codW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFkZClcXG4re1xcbitcXHRpZiAoYWRkIFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGFkZCBcXHUwMDNlPSBVMTZfTUFYKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBvZmZzZXQgXFx1MDAzZT0gVTE2X01BWCAtIGFkZDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpXFxuK3tcXG4rXFx0aWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIsIG9mZikpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0aWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2VtYWNfaGVhZGVyLCBvZmYpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0aWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciwgb2ZmKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XFxuK1xcdFxcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXFx1MDAzZWlubmVyX25ldHdvcmtfaGVhZGVyLCBvZmYpKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0aWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cXHUwMDNlaW5uZXJfbWFjX2hlYWRlciwgb2ZmKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cXHUwMDNlY3N1bV9zdGFydCwgb2ZmKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpXFxuK3tcXG4rXFx0aWYgKHNrYl9oZWFkZXJzX29mZnNldF9vdmVyZmxvdyhza2IsIG9mZikpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXG4rXFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpXFxuK1xcdFxcdHNrYi1cXHUwMDNlY3N1bV9zdGFydCArPSBvZmY7XFxuK1xcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpXFxuK1xcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBvZmY7XFxuK1xcdHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKz0gb2ZmO1xcbitcXHRpZiAoc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxcbitcXHRcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgKz0gb2ZmO1xcbitcXHRpZiAoc2tiLVxcdTAwM2Vpbm5lcl90cmFuc3BvcnRfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLVxcdTAwM2Vpbm5lcl90cmFuc3BvcnRfaGVhZGVyKSl+MFUpXFxuK1xcdFxcdHNrYi1cXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciArPSBvZmY7XFxuK1xcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XFxuK1xcdFxcdHNrYi1cXHUwMDNlaW5uZXJfbmV0d29ya19oZWFkZXIgKz0gb2ZmO1xcbitcXHRcXHRza2ItXFx1MDAzZWlubmVyX21hY19oZWFkZXIgKz0gb2ZmO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxcbit7XFxuK1xcdGlmIChvZmYgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2ICFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXHRpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxcbitcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4rXFxuK1xcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBvZmY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCBza2JfY29weV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcXG4ge1xcbiBcXHRfX2NvcHlfc2tiX2hlYWRlcihuZXcsIG9sZCk7XFxuQEAgLTIzMDQsNiArMjM5MSw5IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxcbiBcXG4gXFx0QlVHX09OKHNrYl9zaGFyZWQoc2tiKSk7XFxuIFxcbitcXHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgbmhlYWQpKVxcbitcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4rXFxuIFxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbiBcXG4gXFx0aWYgKHNrYl9wZm1lbWFsbG9jKHNrYikpXFxuQEAgLTIzNTQsNyArMjQ0NCw3IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxcbiBcXHRvZmYgICAgICAgICAgID0gbmhlYWQ7XFxuICNlbmRpZlxcbiBcXHRza2ItXFx1MDAzZXRhaWxcXHQgICAgICArPSBvZmY7XFxuLVxcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCBuaGVhZCk7XFxuK1xcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChza2IsIG5oZWFkKTtcXG4gXFx0c2tiLVxcdTAwM2VjbG9uZWQgICA9IDA7XFxuIFxcdHNrYi1cXHUwMDNlaGRyX2xlbiAgPSAwO1xcbiBcXHRza2ItXFx1MDAzZW5vaGRyICAgID0gMDtcXG5AQCAtMjU0MSw3ICsyNjMxLDEwIEBAIHN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdHNrYl9jb3B5X2hlYWRlcihuLCBza2IpO1xcbiBcXG4tXFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKTtcXG4rXFx0aWYgKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKSkge1xcbitcXHRcXHRrZnJlZV9za2Iobik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gbjtcXG4gfVxcbkBAIC00NjgwLDcgKzQ3NzMsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHR1bnNpZ25lZCBpbnQgZGVsdGFfbGVuID0gMDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgKnRtcDtcXG4tXFx0aW50IGxlbl9kaWZmLCBlcnI7XFxuK1xcdGludCBoZWFkX29mZiwgbGVuX2RpZmYsIGVycjtcXG4gXFxuIFxcdC8qIE9ubHkgc2tiX2dyb19yZWNlaXZlX2xpc3QgZ2VuZXJhdGVkIHNrYnMgYXJyaXZlIGhlcmUgKi9cXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghKHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSk7XFxuQEAgLTQ3MzIsOCArNDgyNSwxNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRsZW5fZGlmZiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4obnNrYikgLSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XFxuIFxcdFxcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XFxuIFxcbi1cXHRcXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpKTtcXG4tXFx0XFx0bnNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBsZW5fZGlmZjtcXG4rXFx0XFx0aGVhZF9vZmYgPSBza2JfaGVhZHJvb20obnNrYikgLSBza2JfaGVhZHJvb20oc2tiKTtcXG4rXFx0XFx0ZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsIGhlYWRfb2ZmKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4rXFx0XFx0XFx0bnNrYi1cXHUwMDNlbmV4dCA9IGxpc3Rfc2tiO1xcbitcXHRcXHRcXHRnb3RvIGVycl9saXN0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGVyciA9IHNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKG5za2IsIGxlbl9kaWZmKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4rXFx0XFx0XFx0bnNrYi1cXHUwMDNlbmV4dCA9IGxpc3Rfc2tiO1xcbitcXHRcXHRcXHRnb3RvIGVycl9saXN0O1xcbitcXHRcXHR9XFxuIFxcdFxcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgLXRubF9obGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgbnNrYi1cXHUwMDNlZGF0YSAtIHRubF9obGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgb2Zmc2V0ICsgdG5sX2hsZW4pO1xcbkBAIC00NzU5LDkgKzQ4NjEsMTEgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0cmV0dXJuIHNrYjtcXG4gXFxuIGVycl9saW5lYXJpemU6XFxuK1xcdGVyciA9IC1FTk9NRU07XFxuK2Vycl9saXN0OlxcbiBcXHRrZnJlZV9za2JfbGlzdChza2ItXFx1MDAzZW5leHQpO1xcbiBcXHRza2ItXFx1MDAzZW5leHQgPSBOVUxMO1xcbi1cXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudF9saXN0KTtcXG4gXFxuQEAgLTQ5NjEsNyArNTA2NSwxMSBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxcbiBcXG4gXFx0XFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgaGVhZF9za2IpO1xcbiBcXG4tXFx0XFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuc2tiLCBza2JfaGVhZHJvb20obnNrYikgLSBoZWFkcm9vbSk7XFxuK1xcdFxcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRza2JfaGVhZHJvb20obnNrYikgLSBoZWFkcm9vbSk7XFxuK1xcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0c2tiX3Jlc2V0X21hY19sZW4obnNrYik7XFxuIFxcbiBcXHRcXHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChoZWFkX3NrYiwgLXRubF9obGVuLFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0X29mZmxvYWQuYyBiL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXFxuaW5kZXggYWJkNzcxNjJmNWU3NS4uYTIyZWYwNDRlZWNiMiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xcbisrKyBiL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXFxuQEAgLTEzOCw3ICsxMzgsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpO1xcbiBcXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xcbiBcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW47XFxuK1xcdGlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XFxuIFxcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0X29mZmxvYWRzW3hvLVxcdTAwM2Vwcm90b10pO1xcbiBcXHRpZiAobGlrZWx5KG9wcyBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudCkpXFxuIFxcdFxcdHNlZ3MgPSBvcHMtXFx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTtcXG5AQCAtMTU1LDIzICsxNTYsMjcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbiBcXHRjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wcztcXG4gXFx0dTggcHJvdG8gPSB4by1cXHUwMDNlcHJvdG87XFxuIFxcbi1cXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0geC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcXG4rXFx0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFxuIFxcdGlmICh4LVxcdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxuIFxcdFxcdGlmIChwcm90byA9PSBJUFBST1RPX0JFRVRQSCkge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgaXBfYmVldF9waGRyICpwaCA9XFxuIFxcdFxcdFxcdFxcdChzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHBoLVxcdTAwM2VoZHJsZW4gKiA4O1xcbitcXHRcXHRcXHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgcGgtXFx1MDAzZWhkcmxlbiAqIDgpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0XFx0XFx0cHJvdG8gPSBwaC1cXHUwMDNlbmV4dGhkcjtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHRpbnQgb2Zmc2V0O1xcbiBcXHRcXHRfX2JlMTYgZnJhZztcXG4gXFxuLVxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPVxcbi1cXHRcXHRcXHRpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXFx1MDAyNnByb3RvLCBcXHUwMDI2ZnJhZyk7XFxuK1xcdFxcdG9mZnNldCA9IGlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCBcXHUwMDI2cHJvdG8sIFxcdTAwMjZmcmFnKTtcXG4rXFx0XFx0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIG9mZnNldCkpXFxuK1xcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xcbiBcXHRcXHRpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApXFxuIFxcdFxcdFxcdHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZ3NvX3R5cGUgfD0gU0tCX0dTT19UQ1BWNDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jXFxuaW5kZXggN2Y3NGQ4Yjk1YTM3My4uMTYzNTRiZjc2ZGFkMSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9yYXcuY1xcbisrKyBiL25ldC9pcHY0L3Jhdy5jXFxuQEAgLTM1Niw2ICszNTYsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtXFx1MDAzZWRzdC5kZXYpO1xcbitcXHRpZiAoaGxlbiBcXHUwMDNlPSBVMTZfTUFYIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR0bGVuID0gcnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZW5lZWRlZF90YWlscm9vbTtcXG4gXFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzayxcXG4gXFx0XFx0XFx0XFx0ICBsZW5ndGggKyBobGVuICsgdGxlbiArIDE1LFxcbkBAIC0zOTksNiArNDAxLDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuIFxcdGVyciA9IC1FSU5WQUw7XFxuIFxcdGlmIChpcGhsZW4gXFx1MDAzZSBsZW5ndGggfHwgaXBobGVuIFxcdTAwM2Mgc2l6ZW9mKCppcGgpKVxcbiBcXHRcXHRnb3RvIGVycm9yX2ZyZWU7XFxuK1xcdGlmIChobGVuIFxcdTAwM2U9IFUxNl9NQVggLSBpcGhsZW4pXFxuK1xcdFxcdGdvdG8gZXJyb3JfZnJlZTtcXG4gXFxuIFxcdGlmIChpcGhsZW4gXFx1MDAzZT0gc2l6ZW9mKCppcGgpKSB7XFxuIFxcdFxcdGlmICghaXBoLVxcdTAwM2VzYWRkcilcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuY1xcbmluZGV4IDIyODk1NTIxYTU3ZDAuLmUxMjNmMGE5NzgyYjIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcXG4rKysgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuY1xcbkBAIC0xNzQsNyArMTc0LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl90cmFuc3BvcnRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuIFxcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcXG4gXFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xcbitcXHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xcbiBcXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldDZfb2ZmbG9hZHNbeG8tXFx1MDAzZXByb3RvXSk7XFxuIFxcdGlmIChsaWtlbHkob3BzIFxcdTAwMjZcXHUwMDI2IG9wcy1cXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KSlcXG4gXFx0XFx0c2VncyA9IG9wcy1cXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KHNrYiwgZmVhdHVyZXMpO1xcbkBAIC0xOTEsNyArMTkyLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbiBcXHRjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wcztcXG4gXFx0dTggcHJvdG8gPSB4by1cXHUwMDNlcHJvdG87XFxuIFxcbi1cXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0geC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcXG4rXFx0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFxuIFxcdGlmICh4LVxcdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxuIFxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciAtPVxcbkBAIC0yMDEsNyArMjAzLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbiBcXHRcXHRcXHRzdHJ1Y3QgaXBfYmVldF9waGRyICpwaCA9XFxuIFxcdFxcdFxcdFxcdChzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHBoLVxcdTAwM2VoZHJsZW4gKiA4O1xcbitcXHRcXHRcXHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgcGgtXFx1MDAzZWhkcmxlbiAqIDgpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0XFx0XFx0cHJvdG8gPSBwaC1cXHUwMDNlbmV4dGhkcjtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjtcXG5AQCAtMjEwLDEwICsyMTMsMTIgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbiBcXHRcXHRpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApXFxuIFxcdFxcdFxcdHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZ3NvX3R5cGUgfD0gU0tCX0dTT19UQ1BWNjtcXG4gXFx0fSBlbHNlIHtcXG4rXFx0XFx0aW50IG9mZnNldDtcXG4gXFx0XFx0X19iZTE2IGZyYWc7XFxuIFxcbi1cXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz1cXG4tXFx0XFx0XFx0aXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFxcdTAwMjZwcm90bywgXFx1MDAyNmZyYWcpO1xcbitcXHRcXHRvZmZzZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXFx1MDAyNnByb3RvLCBcXHUwMDI2ZnJhZyk7XFxuK1xcdFxcdGlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBvZmZzZXQpKVxcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUClcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuY1xcbmluZGV4IGI4OGQzNjRlNzhhYWUuLmZhMjIzZWMwMjM5NjQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvcmF3LmNcXG4rKysgYi9uZXQvaXB2Ni9yYXcuY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2NrZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5AQCAtNjEzLDYgKzYxNCw5IEBAIHN0YXRpYyBpbnQgcmF3djZfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW5ndGgsXFxuIFxcdGlmIChmbGFnc1xcdTAwMjZNU0dfUFJPQkUpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0aWYgKGhsZW4gXFx1MDAzZT0gVTE2X01BWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLFxcbiBcXHRcXHRcXHRcXHQgIGxlbmd0aCArIGhsZW4gKyB0bGVuICsgMTUsXFxuIFxcdFxcdFxcdFxcdCAgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQsIFxcdTAwMjZlcnIpO1xcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2RldmljZS5jIGIvbmV0L3hmcm0veGZybV9kZXZpY2UuY1xcbmluZGV4IGYxNTNiZjY5NWI5ZGQuLjJhMDliZDJlZWM0OTMgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9kZXZpY2UuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fZGV2aWNlLmNcXG5AQCAtMjAsOCArMjAsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG4gXFxuICNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxuLXN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXFxuK3N0YXRpYyBpbnQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGhzaXplKVxcbiB7XFxuIFxcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XFxuIFxcbkBAIC0zMCwzMCArMzAsMzMgQEAgc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0geC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcXG4gXFxuIFxcdHBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGhzaXplKVxcbi1cXG4rc3RhdGljIGludCBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGhzaXplKVxcbiB7XFxuIFxcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XFxuIFxcbi1cXHRpZiAoeG8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9HU09fU0VHTUVOVClcXG4tXFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIGhzaXplO1xcbitcXHRpZiAoeG8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9HU09fU0VHTUVOVCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKVxcbitcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4gXFxuIFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuIFxcdHBza2JfcHVsbChza2IsXFxuIFxcdFxcdCAgc2tiLVxcdTAwM2VtYWNfbGVuICsgeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXFx1MDAzZXByb3BzLmVuY19oZHJfbGVuKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXFxuK3N0YXRpYyBpbnQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGhzaXplKVxcbiB7XFxuIFxcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XFxuIFxcdGludCBwaGxlbiA9IDA7XFxuIFxcbi1cXHRpZiAoeG8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9HU09fU0VHTUVOVClcXG4tXFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIGhzaXplO1xcbitcXHRpZiAoeG8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9HU09fU0VHTUVOVCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKVxcbitcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4gXFxuIFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuIFxcdGlmICh4LVxcdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxuQEAgLTYzLDEwICs2NiwxMSBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdH1cXG4gXFxuIFxcdHBza2JfcHVsbChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbiArIGhzaXplICsgKHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4gLSBwaGxlbikpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyogQWRqdXN0IHBvaW50ZXJzIGludG8gdGhlIHBhY2tldCB3aGVuIElQc2VjIGlzIGRvbmUgYXQgbGF5ZXIyICovXFxuLXN0YXRpYyB2b2lkIHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitzdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHN3aXRjaCAoeC1cXHUwMDNlb3V0ZXJfbW9kZS5lbmNhcCkge1xcbiBcXHRjYXNlIFhGUk1fTU9ERV9JUFRGUzpcXG5AQCAtOTgsNiArMTAyLDggQEAgc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGNhc2UgWEZSTV9NT0RFX0lOX1RSSUdHRVI6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHhtaXRfeGZybV9jaGVja19vdmVyZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbkBAIC0xNzUsNyArMTgxLDEyIEBAIHN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyXFxuIFxcbiBcXHRpZiAoIXNrYi1cXHUwMDNlbmV4dCkge1xcbiBcXHRcXHRlc3BfZmVhdHVyZXMgfD0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWdzb19wYXJ0aWFsX2ZlYXR1cmVzO1xcbi1cXHRcXHR4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IpO1xcbitcXHRcXHRlcnIgPSB4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSwgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xcbitcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHhvLVxcdTAwM2VmbGFncyB8PSBYRlJNX0RFVl9SRVNVTUU7XFxuIFxcbkBAIC0yMDEsNyArMjEyLDEzIEBAIHN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyXFxuIFxcdFxcdHhvID0geGZybV9vZmZsb2FkKHNrYjIpO1xcbiBcXHRcXHR4by1cXHUwMDNlZmxhZ3MgfD0gWEZSTV9ERVZfUkVTVU1FO1xcbiBcXG4tXFx0XFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMik7XFxuK1xcdFxcdGVyciA9IHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYjIpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSwgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xcbitcXHRcXHRcXHRza2IyLVxcdTAwM2VuZXh0ID0gbnNrYjtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiX2xpc3Qoc2tiMik7XFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRlcnIgPSB4LVxcdTAwM2V0eXBlX29mZmxvYWQtXFx1MDAzZXhtaXQoeCwgc2tiMiwgZXNwX2ZlYXR1cmVzKTtcXG4gXFx0XFx0aWYgKCFlcnIpIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuaW5kZXggNTk3YWVkZWFjMjZlYi4uMTNiNjJiY2Q5ZTA1MyAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG5AQCAtMjM3OSw3ICsyMzc5LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFxuIFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAtKHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4gLSB4LVxcdTAwM2Vwcm9wcy5lbmNfaGRyX2xlbikpO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXG4gXFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xcbiBcXHR0b3BfaXBoLVxcdTAwM2VpaGwgPSA1O1xcbkBAIC0yNDI2LDcgKzI0MjcsOCBAQCBzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuICsgeC1cXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpO1xcbi1cXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgc2l6ZW9mKCp0b3BfaXBoKTtcXG4rXFx0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxcbitcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4gXFxuIFxcdHRvcF9pcGggPSBpcHY2X2hkcihza2IpO1xcbiBcXHR0b3BfaXBoLVxcdTAwM2V2ZXJzaW9uID0gNjtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9vdXRwdXQuYyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcXG5pbmRleCBjYzM1YzJmY2JiZTA5Li4wY2ViZTc1MmNhOTgwIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXFxuQEAgLTczLDcgKzczLDggQEAgc3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICtcXG4gXFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTtcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIGlobDtcXG4rXFx0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGlobCkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgaWhsKTtcXG4gXFx0bWVtbW92ZShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaXBoLCBpaGwpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTc5LDcgKzE4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYixcXG4gXFx0XFx0XFx0ICAgKHByZXZoZHIgLSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi1cXHUwMDNlZGF0YSk7XFxuIFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaGRyX2xlbikpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7XFxuIFxcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTIwOSw3ICsyMTEsOCBAQCBzdGF0aWMgaW50IHhmcm02X3JvX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYixcXG4gXFx0XFx0XFx0ICAgKHByZXZoZHIgLSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi1cXHUwMDNlZGF0YSk7XFxuIFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaGRyX2xlbikpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7XFxuIFxcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcXG4gXFxuQEAgLTI0MSw3ICsyNDQsOCBAQCBzdGF0aWMgaW50IHhmcm00X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICs9IElQVjRfQkVFVF9QSE1BWExFTjtcXG4gXFx0c2tiLVxcdTAwM2VtYWNfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArXFxuIFxcdFxcdFxcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXG4gXFx0eGZybTRfYmVldF9tYWtlX2hlYWRlcihza2IpO1xcbiBcXG5AQCAtMjg4LDcgKzI5Miw4IEBAIHN0YXRpYyBpbnQgeGZybTRfdHVubmVsX2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcXG4gXFx0c2tiLVxcdTAwM2VtYWNfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArXFxuIFxcdFxcdFxcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHR0b3BfaXBoID0gaXBfaGRyKHNrYik7XFxuIFxcbiBcXHR0b3BfaXBoLVxcdTAwM2VpaGwgPSA1O1xcbkBAIC0zMzUsNyArMzQwLDggQEAgc3RhdGljIGludCB4ZnJtNl90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICtcXG4gXFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHR0b3BfaXBoID0gaXB2Nl9oZHIoc2tiKTtcXG4gXFxuIFxcdHRvcF9pcGgtXFx1MDAzZXZlcnNpb24gPSA2O1xcbkBAIC0zNzQsNyArMzgwLDggQEAgc3RhdGljIGludCB4ZnJtNl9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0c2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArPSBJUFY0X0JFRVRfUEhNQVhMRU47XFxuIFxcdHNrYi1cXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgK1xcbiBcXHRcXHRcXHQgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTtcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XFxuK1xcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuIFxcdHBoID0gX19za2JfcHVsbChza2IsIFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS1cXHUwMDNlaWhsIC0gaGRyX2xlbik7XFxuIFxcbiBcXHR4ZnJtNl9iZWV0X21ha2VfaGVhZGVyKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjUyOjU3LjMxNTg2NzQ2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYwMDY0OTMwOTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiWEZSTV9JUFRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInNrYl9jb3B5X2V4cGFuZFwiLFxuICAgIFwic2tiX3NlZ21lbnRfbGlzdFwiLFxuICAgIFwic2tiX3NlZ21lbnRcIixcbiAgICBcInJhd19zZW5kbXNnXCIsXG4gICAgXCJyYXd2Nl9zZW5kbXNnXCIsXG4gICAgXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgICBcInhmcm1fb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBjYXJlZnVsIGJvdW5kcyBjaGVja2luZyB0byBza2IgaGVhZGVyIG9mZnNldCB1cGRhdGVzIChlLmcuLCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCwgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgKHNrYnVmZi5jKSwgcmF3IHNvY2tldHMgKHJhdy5jKSwgYW5kIElQc2VjL1hGUk0gb2ZmbG9hZGluZyBhbmQgZW5jYXBzdWxhdGlvbiAoeGZybV9kZXZpY2UuYywgeGZybV9pcHRmcy5jLCB4ZnJtX291dHB1dC5jLCBlc3A0X29mZmxvYWQuYywgZXNwNl9vZmZsb2FkLmMpLiBTaW5jZSB0aGlzIG1vZGlmaWVzIGNvcmUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGhlYWRlciBtYW5pcHVsYXRpb24gbG9naWMsIGl0IGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IG92ZXJmbG93IGNoZWNrcyBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGRyb3AgdmFsaWQgcGFja2V0cywgYW5kIHRoYXQgdGhleSBjb3JyZWN0bHkgcHJldmVudCBvdmVyZmxvd3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0N2I5OWNlNTZiM2E1OGZlN2UxNGU5NGFkNWI0OGJkYzhlZjg2MGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA1OjUyOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDIyZWRhMWQ1NGEwZTguLmM4ZTJmYjIxNzY0YTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtMzEyNiw2ICszMTI2LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IG9mZnNldDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xuK3NrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGludCBvZmZzZXQpXG4re1xuK1x0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2MgMCB8fCBvZmZzZXQgXHUwMDNlPSBVMTZfTUFYKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciBcdTAwM2U9IFUxNl9NQVggLSBvZmZzZXQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIG9mZnNldDtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrXG4rc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgaW50IG9mZnNldClcbit7XG4rXHRpZiAob2Zmc2V0IFx1MDAzZSAwKSB7XG4rXHRcdGlmICh1bmxpa2VseSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGlmICh1bmxpa2VseShvZmZzZXQgXHUwMDNlPSBVMTZfTUFYKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGlmICh1bmxpa2VseShza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciBcdTAwM2U9IFUxNl9NQVggLSBvZmZzZXQpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IG9mZnNldDtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9uZXR3b3JrX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHJldHVybiBza2ItXHUwMDNlaGVhZCArIHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlcjtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBiYTNkYmFjODBmYjQ5Li5kODE3N2U2NzcyMTY0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMzg3LDYgKzM4Nyw5IEBAIHUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKTtcbiBcbitzdGF0aWMgaW50IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcbitzdGF0aWMgaW50IHNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpO1xuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZpbmFsaXplX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBzaXplKVxuIHtcbkBAIC05NzYsNyArOTc5LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuIFx0c2tiX3B1dChuc2tiLCBzaXplKTtcbiBcbiBcdGhlYWRfb2ZmID0gc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYik7XG4tXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIGhlYWRfb2ZmKTtcbitcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLCBoZWFkX29mZik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGNvbnN1bWVfc2tiKG5za2IpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuIFxuIFx0b2ZmID0gc2l6ZTtcbiBcdGxlbiA9IHNrYi1cdTAwM2VsZW4gLSBvZmY7XG5AQCAtMjE0MCw2ICsyMTQ3LDg2IEBAIHZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUpO1xuIFxuK3N0YXRpYyBib29sIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpXG4re1xuK1x0aWYgKGFkZCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChhZGQgXHUwMDNlIFUxNl9NQVgpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIG9mZnNldCBcdTAwM2UgVTE2X01BWCAtIGFkZDtcbit9XG4rXG4rc3RhdGljIGJvb2wgc2tiX3RyYW5zcG9ydF9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpXG4re1xuK1x0aWYgKGFkZCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChhZGQgXHUwMDNlPSBVMTZfTUFYKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBvZmZzZXQgXHUwMDNlPSBVMTZfTUFYIC0gYWRkO1xuK31cbitcbitzdGF0aWMgYm9vbCBza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcbit7XG4rXHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyLCBvZmYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX3RyYW5zcG9ydF9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZW1hY19oZWFkZXIsIG9mZikpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cdTAwM2Vpbm5lcl90cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XG4rXHRcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfbmV0d29ya19oZWFkZXIsIG9mZikpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfbWFjX2hlYWRlciwgb2ZmKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZWNzdW1fc3RhcnQsIG9mZikpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW50IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuK3tcbitcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coc2tiLCBvZmYpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcbitcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpXG4rXHRcdHNrYi1cdTAwM2Vjc3VtX3N0YXJ0ICs9IG9mZjtcbitcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpXG4rXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IG9mZjtcbitcdHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArPSBvZmY7XG4rXHRpZiAoc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuK1x0XHRza2ItXHUwMDNlbWFjX2hlYWRlciArPSBvZmY7XG4rXHRpZiAoc2tiLVx1MDAzZWlubmVyX3RyYW5zcG9ydF9oZWFkZXIgIT0gKHR5cGVvZihza2ItXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlcikpfjBVKVxuK1x0XHRza2ItXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciArPSBvZmY7XG4rXHRpZiAoc2tiX2lubmVyX25ldHdvcmtfaGVhZGVyX3dhc19zZXQoc2tiKSkge1xuK1x0XHRza2ItXHUwMDNlaW5uZXJfbmV0d29ya19oZWFkZXIgKz0gb2ZmO1xuK1x0XHRza2ItXHUwMDNlaW5uZXJfbWFjX2hlYWRlciArPSBvZmY7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuK3tcbitcdGlmIChvZmYgXHUwMDNlIDAgXHUwMDI2XHUwMDI2ICFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1x0aWYgKHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSBcdTAwMjZcdTAwMjZcbitcdCAgICBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIsIG9mZikpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1xuK1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gb2ZmO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHZvaWQgc2tiX2NvcHlfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG4ge1xuIFx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xuQEAgLTIzMDQsNiArMjM5MSw5IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxuIFxuIFx0QlVHX09OKHNrYl9zaGFyZWQoc2tiKSk7XG4gXG4rXHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgbmhlYWQpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcbiBcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuIFxuIFx0aWYgKHNrYl9wZm1lbWFsbG9jKHNrYikpXG5AQCAtMjM1NCw3ICsyNDQ0LDcgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXG4gXHRvZmYgICAgICAgICAgID0gbmhlYWQ7XG4gI2VuZGlmXG4gXHRza2ItXHUwMDNldGFpbFx0ICAgICAgKz0gb2ZmO1xuLVx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShza2IsIG5oZWFkKTtcbitcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChza2IsIG5oZWFkKTtcbiBcdHNrYi1cdTAwM2VjbG9uZWQgICA9IDA7XG4gXHRza2ItXHUwMDNlaGRyX2xlbiAgPSAwO1xuIFx0c2tiLVx1MDAzZW5vaGRyICAgID0gMDtcbkBAIC0yNTQxLDcgKzI2MzEsMTAgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0c2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7XG4gXG4tXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pO1xuK1x0aWYgKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKSkge1xuK1x0XHRrZnJlZV9za2Iobik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuIFxuIFx0cmV0dXJuIG47XG4gfVxuQEAgLTQ2ODAsNyArNDc3Myw3IEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHR1bnNpZ25lZCBpbnQgZGVsdGFfbGVuID0gMDtcbiBcdHN0cnVjdCBza19idWZmICp0YWlsID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpuc2tiLCAqdG1wO1xuLVx0aW50IGxlbl9kaWZmLCBlcnI7XG4rXHRpbnQgaGVhZF9vZmYsIGxlbl9kaWZmLCBlcnI7XG4gXG4gXHQvKiBPbmx5IHNrYl9ncm9fcmVjZWl2ZV9saXN0IGdlbmVyYXRlZCBza2JzIGFycml2ZSBoZXJlICovXG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKCEoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSk7XG5AQCAtNDczMiw4ICs0ODI1LDE3IEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGxlbl9kaWZmID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihuc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcbiBcdFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgc2tiKTtcbiBcbi1cdFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuc2tiLCBza2JfaGVhZHJvb20obnNrYikgLSBza2JfaGVhZHJvb20oc2tiKSk7XG4tXHRcdG5za2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBsZW5fZGlmZjtcbitcdFx0aGVhZF9vZmYgPSBza2JfaGVhZHJvb20obnNrYikgLSBza2JfaGVhZHJvb20oc2tiKTtcbitcdFx0ZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsIGhlYWRfb2ZmKTtcbitcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbitcdFx0XHRuc2tiLVx1MDAzZW5leHQgPSBsaXN0X3NrYjtcbitcdFx0XHRnb3RvIGVycl9saXN0O1xuK1x0XHR9XG4rXHRcdGVyciA9IHNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKG5za2IsIGxlbl9kaWZmKTtcbitcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbitcdFx0XHRuc2tiLVx1MDAzZW5leHQgPSBsaXN0X3NrYjtcbitcdFx0XHRnb3RvIGVycl9saXN0O1xuK1x0XHR9XG4gXHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgLXRubF9obGVuLFxuIFx0XHRcdFx0XHRcdCBuc2tiLVx1MDAzZWRhdGEgLSB0bmxfaGxlbixcbiBcdFx0XHRcdFx0XHQgb2Zmc2V0ICsgdG5sX2hsZW4pO1xuQEAgLTQ3NTksOSArNDg2MSwxMSBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIHNrYjtcbiBcbiBlcnJfbGluZWFyaXplOlxuK1x0ZXJyID0gLUVOT01FTTtcbitlcnJfbGlzdDpcbiBcdGtmcmVlX3NrYl9saXN0KHNrYi1cdTAwM2VuZXh0KTtcbiBcdHNrYi1cdTAwM2VuZXh0ID0gTlVMTDtcbi1cdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnRfbGlzdCk7XG4gXG5AQCAtNDk2MSw3ICs1MDY1LDExIEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXG4gXG4gXHRcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIGhlYWRfc2tiKTtcbiBcbi1cdFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuc2tiLCBza2JfaGVhZHJvb20obnNrYikgLSBoZWFkcm9vbSk7XG4rXHRcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLFxuK1x0XHRcdFx0XHRcdFx0c2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xuK1x0XHRpZiAodW5saWtlbHkoZXJyKSlcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4obnNrYik7XG4gXG4gXHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KGhlYWRfc2tiLCAtdG5sX2hsZW4sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuaW5kZXggYWJkNzcxNjJmNWU3NS4uYTIyZWYwNDRlZWNiMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXG4rKysgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuQEAgLTEzOCw3ICsxMzgsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4rXHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldF9vZmZsb2Fkc1t4by1cdTAwM2Vwcm90b10pO1xuIFx0aWYgKGxpa2VseShvcHMgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKVxuIFx0XHRzZWdzID0gb3BzLVx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTtcbkBAIC0xNTUsMjMgKzE1NiwyNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wcztcbiBcdHU4IHByb3RvID0geG8tXHUwMDNlcHJvdG87XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4rXHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXG4gXHRpZiAoeC1cdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4gXHRcdGlmIChwcm90byA9PSBJUFBST1RPX0JFRVRQSCkge1xuIFx0XHRcdHN0cnVjdCBpcF9iZWV0X3BoZHIgKnBoID1cbiBcdFx0XHRcdChzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXG4tXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gcGgtXHUwMDNlaGRybGVuICogODtcbitcdFx0XHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgcGgtXHUwMDNlaGRybGVuICogOCkpXG4rXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdFx0XHRwcm90byA9IHBoLVx1MDAzZW5leHRoZHI7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0gSVBWNF9CRUVUX1BITUFYTEVOO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuK1x0XHRpbnQgb2Zmc2V0O1xuIFx0XHRfX2JlMTYgZnJhZztcbiBcbi1cdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz1cbi1cdFx0XHRpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZyYWcpO1xuK1x0XHRvZmZzZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZyYWcpO1xuK1x0XHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgb2Zmc2V0KSlcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdFx0aWYgKHByb3RvID09IElQUFJPVE9fVENQKVxuIFx0XHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX1RDUFY0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Jhdy5jIGIvbmV0L2lwdjQvcmF3LmNcbmluZGV4IDdmNzRkOGI5NWEzNzMuLjE2MzU0YmY3NmRhZDEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9yYXcuY1xuKysrIGIvbmV0L2lwdjQvcmF3LmNcbkBAIC0zNTYsNiArMzU2LDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0aGxlbiA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LVx1MDAzZWRzdC5kZXYpO1xuK1x0aWYgKGhsZW4gXHUwMDNlPSBVMTZfTUFYIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0dGxlbiA9IHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xuIFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzayxcbiBcdFx0XHRcdCAgbGVuZ3RoICsgaGxlbiArIHRsZW4gKyAxNSxcbkBAIC0zOTksNiArNDAxLDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4gXHRlcnIgPSAtRUlOVkFMO1xuIFx0aWYgKGlwaGxlbiBcdTAwM2UgbGVuZ3RoIHx8IGlwaGxlbiBcdTAwM2Mgc2l6ZW9mKCppcGgpKVxuIFx0XHRnb3RvIGVycm9yX2ZyZWU7XG4rXHRpZiAoaGxlbiBcdTAwM2U9IFUxNl9NQVggLSBpcGhsZW4pXG4rXHRcdGdvdG8gZXJyb3JfZnJlZTtcbiBcbiBcdGlmIChpcGhsZW4gXHUwMDNlPSBzaXplb2YoKmlwaCkpIHtcbiBcdFx0aWYgKCFpcGgtXHUwMDNlc2FkZHIpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuY1xuaW5kZXggMjI4OTU1MjFhNTdkMC4uZTEyM2YwYTk3ODJiMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jXG4rKysgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuY1xuQEAgLTE3NCw3ICsxNzQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4rXHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldDZfb2ZmbG9hZHNbeG8tXHUwMDNlcHJvdG9dKTtcbiBcdGlmIChsaWtlbHkob3BzIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KSlcbiBcdFx0c2VncyA9IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XG5AQCAtMTkxLDcgKzE5Miw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqb3BzO1xuIFx0dTggcHJvdG8gPSB4by1cdTAwM2Vwcm90bztcbiBcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbitcdGlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcbiBcdGlmICh4LVx1MDAzZXNlbC5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbiBcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT1cbkBAIC0yMDEsNyArMjAzLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0XHRcdHN0cnVjdCBpcF9iZWV0X3BoZHIgKnBoID1cbiBcdFx0XHRcdChzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXG4tXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gcGgtXHUwMDNlaGRybGVuICogODtcbitcdFx0XHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgcGgtXHUwMDNlaGRybGVuICogOCkpXG4rXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdFx0XHRwcm90byA9IHBoLVx1MDAzZW5leHRoZHI7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0gSVBWNF9CRUVUX1BITUFYTEVOO1xuQEAgLTIxMCwxMCArMjEzLDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdFx0aWYgKHByb3RvID09IElQUFJPVE9fVENQKVxuIFx0XHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX1RDUFY2O1xuIFx0fSBlbHNlIHtcbitcdFx0aW50IG9mZnNldDtcbiBcdFx0X19iZTE2IGZyYWc7XG4gXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9XG4tXHRcdFx0aXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFx1MDAyNnByb3RvLCBcdTAwMjZmcmFnKTtcbitcdFx0b2Zmc2V0ID0gaXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFx1MDAyNnByb3RvLCBcdTAwMjZmcmFnKTtcbitcdFx0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIG9mZnNldCkpXG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHR9XG4gXG4gXHRpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmNcbmluZGV4IGI4OGQzNjRlNzhhYWUuLmZhMjIzZWMwMjM5NjQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yYXcuY1xuKysrIGIvbmV0L2lwdjYvcmF3LmNcbkBAIC0xNSw2ICsxNSw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtNjEzLDYgKzYxNCw5IEBAIHN0YXRpYyBpbnQgcmF3djZfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW5ndGgsXG4gXHRpZiAoZmxhZ3NcdTAwMjZNU0dfUFJPQkUpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0aWYgKGhsZW4gXHUwMDNlPSBVMTZfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssXG4gXHRcdFx0XHQgIGxlbmd0aCArIGhsZW4gKyB0bGVuICsgMTUsXG4gXHRcdFx0XHQgIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQsIFx1MDAyNmVycik7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9kZXZpY2UuYyBiL25ldC94ZnJtL3hmcm1fZGV2aWNlLmNcbmluZGV4IGYxNTNiZjY5NWI5ZGQuLjJhMDliZDJlZWM0OTMgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2RldmljZS5jXG4rKysgYi9uZXQveGZybS94ZnJtX2RldmljZS5jXG5AQCAtMjAsOCArMjAsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiBcbiAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxuLXN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgdW5zaWduZWQgaW50IGhzaXplKVxuK3N0YXRpYyBpbnQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0IHVuc2lnbmVkIGludCBoc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xuIFxuQEAgLTMwLDMwICszMCwzMyBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbiBcbiBcdHBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBoc2l6ZSlcbi1cbitzdGF0aWMgaW50IF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IGhzaXplKVxuIHtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXG4tXHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICsgaHNpemU7XG4rXHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQgXHUwMDI2XHUwMDI2XG4rXHQgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbiBcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4gXHRwc2tiX3B1bGwoc2tiLFxuIFx0XHQgIHNrYi1cdTAwM2VtYWNfbGVuICsgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuIC0geC1cdTAwM2Vwcm9wcy5lbmNfaGRyX2xlbik7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXG4rc3RhdGljIGludCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IGhzaXplKVxuIHtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXHRpbnQgcGhsZW4gPSAwO1xuIFxuLVx0aWYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UKVxuLVx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIGhzaXplO1xuK1x0aWYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSlcbitcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFx0aWYgKHgtXHUwMDNlc2VsLmZhbWlseSAhPSBBRl9JTkVUNikge1xuQEAgLTYzLDEwICs2NiwxMSBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHR9XG4gXG4gXHRwc2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlbWFjX2xlbiArIGhzaXplICsgKHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHBobGVuKSk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyogQWRqdXN0IHBvaW50ZXJzIGludG8gdGhlIHBhY2tldCB3aGVuIElQc2VjIGlzIGRvbmUgYXQgbGF5ZXIyICovXG4tc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzd2l0Y2ggKHgtXHUwMDNlb3V0ZXJfbW9kZS5lbmNhcCkge1xuIFx0Y2FzZSBYRlJNX01PREVfSVBURlM6XG5AQCAtOTgsNiArMTAyLDggQEAgc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRjYXNlIFhGUk1fTU9ERV9JTl9UUklHR0VSOlxuIFx0XHRicmVhaztcbiBcdH1cbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgeG1pdF94ZnJtX2NoZWNrX292ZXJmbG93KHN0cnVjdCBza19idWZmICpza2IpXG5AQCAtMTc1LDcgKzE4MSwxMiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1clxuIFxuIFx0aWYgKCFza2ItXHUwMDNlbmV4dCkge1xuIFx0XHRlc3BfZmVhdHVyZXMgfD0gc2tiLVx1MDAzZWRldi1cdTAwM2Vnc29fcGFydGlhbF9mZWF0dXJlcztcbi1cdFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKTtcbitcdFx0ZXJyID0geGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSwgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4gXG4gXHRcdHhvLVx1MDAzZWZsYWdzIHw9IFhGUk1fREVWX1JFU1VNRTtcbiBcbkBAIC0yMDEsNyArMjEyLDEzIEBAIHN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyXG4gXHRcdHhvID0geGZybV9vZmZsb2FkKHNrYjIpO1xuIFx0XHR4by1cdTAwM2VmbGFncyB8PSBYRlJNX0RFVl9SRVNVTUU7XG4gXG4tXHRcdHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYjIpO1xuK1x0XHRlcnIgPSB4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IyKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSwgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xuK1x0XHRcdHNrYjItXHUwMDNlbmV4dCA9IG5za2I7XG4rXHRcdFx0a2ZyZWVfc2tiX2xpc3Qoc2tiMik7XG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbiBcbiBcdFx0ZXJyID0geC1cdTAwM2V0eXBlX29mZmxvYWQtXHUwMDNleG1pdCh4LCBza2IyLCBlc3BfZmVhdHVyZXMpO1xuIFx0XHRpZiAoIWVycikge1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuaW5kZXggNTk3YWVkZWFjMjZlYi4uMTNiNjJiY2Q5ZTA1MyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuKysrIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXG5AQCAtMjM3OSw3ICsyMzc5LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAtKHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pKTtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xuIFx0dG9wX2lwaC1cdTAwM2VpaGwgPSA1O1xuQEAgLTI0MjYsNyArMjQyNyw4IEBAIHN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiArIHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0dG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7XG4gXHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA2O1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXG5pbmRleCBjYzM1YzJmY2JiZTA5Li4wY2ViZTc1MmNhOTgwIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuKysrIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuQEAgLTczLDcgKzczLDggQEAgc3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgK1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIGlobDtcbitcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBpaGwpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBpaGwpO1xuIFx0bWVtbW92ZShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaXBoLCBpaGwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMTc5LDcgKzE4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsXG4gXHRcdFx0ICAgKHByZXZoZHIgLSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pIC0gc2tiLVx1MDAzZWRhdGEpO1xuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTtcbiBcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcbiBcdHJldHVybiAwO1xuQEAgLTIwOSw3ICsyMTEsOCBAQCBzdGF0aWMgaW50IHhmcm02X3JvX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsXG4gXHRcdFx0ICAgKHByZXZoZHIgLSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pIC0gc2tiLVx1MDAzZWRhdGEpO1xuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTtcbiBcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcbiBcbkBAIC0yNDEsNyArMjQ0LDggQEAgc3RhdGljIGludCB4ZnJtNF9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICs9IElQVjRfQkVFVF9QSE1BWExFTjtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICtcbiBcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbiBcdHhmcm00X2JlZXRfbWFrZV9oZWFkZXIoc2tiKTtcbiBcbkBAIC0yODgsNyArMjkyLDggQEAgc3RhdGljIGludCB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgK1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xuIFxuIFx0dG9wX2lwaC1cdTAwM2VpaGwgPSA1O1xuQEAgLTMzNSw3ICszNDAsOCBAQCBzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArXG4gXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0dG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7XG4gXG4gXHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA2O1xuQEAgLTM3NCw3ICszODAsOCBAQCBzdGF0aWMgaW50IHhmcm02X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKz0gSVBWNF9CRUVUX1BITUFYTEVOO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgK1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdHBoID0gX19za2JfcHVsbChza2IsIFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS1cdTAwM2VpaGwgLSBoZHJfbGVuKTtcbiBcbiBcdHhmcm02X2JlZXRfbWFrZV9oZWFkZXIoc2tiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjUyOjU3LjMxNTg3MDM4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MDgxNDM5ODkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJvdW5kcyBDaGVja2luZyBQYXRjaCBmb3IgU0tCIEhlYWRlciBPZmZzZXRzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0J3MgbWFraW5nIHNvbWUgY3JpdGljYWwgY2hhbmdlcyByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgU0tCIChTb2NrZXQgQnVmZmVyKSBoZWFkZXIgb2Zmc2V0cy4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGludHJvZHVjaW5nIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIHdoZW4gbWFuaXB1bGF0aW5nIGhlYWRlcnMgbGlrZSBgbmV0d29ya19oZWFkZXJgLCBhbmQgYHRyYW5zcG9ydF9oZWFkZXJgLCB3aGljaCBhcmUgYHUxNmAgZmllbGRzLCBhY3Jvc3MgYG5ldC9jb3JlL3NrYnVmZi5jYCwgYW5kIGEgbnVtYmVyIG9mIElQc2VjL1hGUk0gcmVsYXRlZCBmaWxlcy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNoYW5nZSBpbXBhY3RpbmcgY29yZSBuZXR3b3JraW5nIGFuZCBzZWN1cml0eSwgd2hpY2ggbWVhbnMgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBzeW1ib2xzLCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIGRpcmVjdGx5IHRvdWNoZWQgYW5kIGNoYW5nZWQgYnkgdGhlIHBhdGNoLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIHRoZXNlIGZ1bmN0aW9uczogYHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bGAgKHdoaWNoIGFwcGVhcnMgdG8gYmUgYSBzdGF0aWMgZnVuY3Rpb24pLCBhbmQgYHNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsYCAoYWxzbyBzdGF0aWMpLiBXZSBhbHNvIGhhdmUgdGhlIGFkZGl0aW9uIG9mIGBza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAuIEFsb25nIHdpdGggdGhlc2UsIEkgbmVlZCB0byBjb25zaWRlciBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGFuZCBgc2tiX3NlZ21lbnRgIGFsb25nIHdpdGggYSBsaXN0IG9mIHhmcm0gZnVuY3Rpb25zLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB3aGljaCBBUEkgZW50cnkgcG9pbnRzIGFyZSBub24tc3RhdGljIGFuZCBub3QgaW5saW5lZCwgc2luY2UgdGhvc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgdG8gaW50cm9kdWNlIGlzc3VlcywgYW5kIHRoZXJlZm9yZSB0aGUgYmVzdCBwbGFjZXMgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBBZnRlciBjb25zaWRlcmluZyB0aGUgbGlzdCwgSSd2ZSBnb3QgbXkgZXllIG9uIGBwc2tiX2V4cGFuZF9oZWFkYCwgYHNrYl9jb3B5X2V4cGFuZGAsIGBza2Jfc2VnbWVudF9saXN0YCwgYHNrYl9zZWdtZW50YCwgYW5kIGB2YWxpZGF0ZV94bWl0X3hmcm1gLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgdG8gc2VlIHdoYXQgdGhlIGlucHV0cyBhcmUsIGFuZCBob3cgdGhhdCByZWxhdGVzIHRvIHRoZSBoZWFkZXJzLlxuXG5XYWl0LCBgcmF3X3NlbmRfaGRyaW5jYCBhbmQgYHJhd3Y2X3NlbmRfaGRyaW5jYCBhcmUgc3RhdGljIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY2FsbCBjb250ZXh0cyB0byBwcm9wZXJseSBpbmNsdWRlIHRoZW0uIEEgcXVpY2sgbG9vayByZXZlYWxzIHRoYXQgYHJhd19zZW5kbXNnYCBjYWxscyBgcmF3X3NlbmRfaGRyaW5jYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGNhbGxzIGByYXd2Nl9zZW5kX2hkcmluY2AuIFNvIEkgc2hvdWxkIGluY2x1ZGUgYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGluIG15IHBsYW4uXG5cbkZpbmFsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgdmFsaWRhdGVfeG1pdF94ZnJtYCBpcyBpbmRlZWQgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gdGhhdCBJIGNhbiBkaXJlY3RseSBmdXp6LiBJdCdzIGluIGBuZXQveGZybS94ZnJtX2RldmljZS5jYC5cblxuV2l0aCB0aGlzIHVuZGVyc3RhbmRpbmcsIEkgY2FuIG5vdyBkZXNpZ24gYSB0YXJnZXRlZCBmdXp6aW5nIHN0cmF0ZWd5IHRvIGhpdCB0aGUgY3JpdGljYWwgYXJlYXMgd2hlcmUgaW50ZWdlciBvdmVyZmxvd3MgYXJlIG5vdyBiZWluZyBndWFyZGVkIGFnYWluc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6NTU6MjguMTMwMjc0MDY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NjczNjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jPTEwOT1zdGF0aWMgaW5saW5lIGJvb2wgeG1pdF94ZnJtX2NoZWNrX292ZXJmbG93KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTEyMC1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjEyMTpzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLCBib29sICphZ2FpbilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTEyMi17XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1My19XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNTQ6RVhQT1JUX1NZTUJPTF9HUEwodmFsaWRhdGVfeG1pdF94ZnJtKTtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6NTU6MjguODE3MDcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0MTE5Mjg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqWEZSTSBNb2R1bGUgRXhwbG9yYXRpb24qKlxuXG5SaWdodCwgc28gYHZhbGlkYXRlX3htaXRfeGZybWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZDsgSSBrbmV3IHRoYXQuIE5vdywgd2hhdCBhYm91dCB0aGF0IGBpcHRmc19lbmNhcF9hZGRfaXB2NGAgZnVuY3Rpb24/IEkgc2VlbSB0byByZW1lbWJlciBzZWVpbmcgdGhhdCBzb21ld2hlcmUuLi4gYWgsIHllcywgSSdtIHByZXR0eSBzdXJlIGl0J3MgaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIEknbGwgaGF2ZSB0byBkb3VibGUtY2hlY2ssIGJ1dCB0aGF0IHJpbmdzIGEgYmVsbC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjU1OjMxLjg1ODI2ODEzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA0ODE4NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfZW5jYXBfYWRkX2lwdjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMzIxPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kZWxheV90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM1OS0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM2MDogKiBpcHRmc19lbmNhcF9hZGRfaXB2NCgpIC0gYWRkIG91dGVyIGVuY2Fwc1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzYxLSAqIEB4OiB4ZnJtIHN0YXRlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3MS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM3MjpzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzczLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNDY0PXN0YXRpYyBpbnQgaXB0ZnNfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2Ni1cXHRpZiAoeC1cXHUwMDNlb3V0ZXJfbW9kZS5mYW1pbHkgPT0gQUZfSU5FVClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2NzpcXHRcXHRyZXR1cm4gaXB0ZnNfZW5jYXBfYWRkX2lwdjQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2OC1cXHRpZiAoeC1cXHUwMDNlb3V0ZXJfbW9kZS5mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6NTU6MzEuOTk4NzYxMzg5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMDk1MjY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlN0YXRpYyBDb251bmRydW1zKipcblxuSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCdzIGNhbGxpbmcgc29tZXRoaW5nIHN0YXRpYyDigJMgc3BlY2lmaWNhbGx5LCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLiBUaGF0IGZ1bmN0aW9uIGlzICphbHNvKiBzdGF0aWM/IE9rYXksIHRoYXQncyBpbW1lZGlhdGVseSByYWlzaW5nIGEgZmxhZy4gU3RhdGljIG1ldGhvZHMgYXJlIHNjb3BlZCB3aXRoaW4gdGhlIGNsYXNzIHRoZXkncmUgZGVmaW5lZCBpbiBhbmQgY2FuJ3QgYmUgY2FsbGVkIGRpcmVjdGx5IG9uIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MuIFNvLCB0aGlzIHRlbGxzIG1lIGEgY291cGxlIG9mIHRoaW5ncyByaWdodCBhd2F5OiB0aGUgY29udGV4dCBvZiB0aGlzIG11c3QgYWxsIGJlIHdpdGhpbiBhIHNpbmdsZSBjb21waWxhdGlvbiB1bml0LCBvciBtYXliZSBhIGxpYnJhcnkgd2l0aCBzb21lIGxpbWl0YXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSB3ZW50IHRoaXMgcm91dGUuIFdoeSBub3QgZW5jYXBzdWxhdGUgaXQgaW4gYW4gb2JqZWN0LCBnaXZlbiB0aGUgY29udGV4dD8gV2hhdCBpcyB0aGUgKmRlc2lnbiBpbnRlbnRpb24qIGhlcmU/IElzIHRoZXJlIGEgcmVhc29uIGZvciB0aGlzIHN0YXRpYy1vbi1zdGF0aWMgcGF0dGVybiB0aGF0IGp1c3RpZmllcyB0aGUgcG90ZW50aWFsIGZvciByZWR1Y2VkIGZsZXhpYmlsaXR5IG9yIHRlc3RhYmlsaXR5PyBUaGlzIGlzIHdvcnRoIGRpZ2dpbmcgZGVlcGVyIGludG8uIEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIHV0aWxpdHkgZnVuY3Rpb24sIG9yIGlzIHRoZXJlIGEgYmlnZ2VyIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb24gaGVyZT8gR290dGEgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNTo1NTozNS40Mjk3MTgzNzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MTE2ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX3ByZXBhcmVfb3V0cHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9MjQxOT1zdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NTQtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0NTU6ICogaXB0ZnNfcHJlcGFyZV9vdXRwdXQoKSAtICBwcmVwYXJlIHRoZSBza2IgZm9yIG91dHB1dFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDU2LSAqIEB4OiB4ZnJtIHN0YXRlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2My0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2NDpzdGF0aWMgaW50IGlwdGZzX3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY1LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzcyLVxcdC5vdXRwdXQgPSBpcHRmc19vdXRwdXRfY29sbGVjdCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3MzpcXHQucHJlcGFyZV9vdXRwdXQgPSBpcHRmc19wcmVwYXJlX291dHB1dCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3NC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNTo1NTozNS41NzM4NDIzMzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUwMzU4MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENhbGxiYWNrIExhYnlyaW50aCoqXG5cbkFscmlnaHQsIHRoYXQncyBhIGNhbGxiYWNrLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0J3MgY29ubmVjdGVkIHRvLiBMZXQncyB0cmFjZSB0aGlzIGJhY2suIEhtbSwgdGhpcyBmZWVscyBmYW1pbGlhci4uLiBhbG1vc3QgbGlrZSBJJ3ZlIHNlZW4gc29tZXRoaW5nIHNpbWlsYXIuIE15IG1pbmQgaXMgYWxyZWFkeSBqdW1waW5nIHRvIHBvdGVudGlhbCByZWxhdGVkIGZ1bmN0aW9uIGNhbGxzLlxuXG5XaGVyZSBkb2VzIHRoaXMgY29tZSBpbnRvIHBsYXk/IEl0J3MgbWFraW5nIG1lIGNvbnNpZGVyIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nLiBDb3VsZCB0aGlzIGJlIHJlbGF0ZWQgdG8gdGhlIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCBmdW5jdGlvbj8gVGhhdCdzIHRoZSBmaXJzdCBwbGFjZSBteSBleHBlcmllbmNlIGxlYWRzIG1lLiBJcyB0aGF0IGEgbGlrZWx5IGNhbmRpZGF0ZT8gUGVyaGFwcyB0aGF0IGlzIHdoZXJlIHRoZSBmbG93IGludGVyc2VjdHMgYW5kIHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBjb250ZXh0IGZvciB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNTo1NTozOC42MjQyMDQwNjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTU2MDc2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNF90cmFuc3BvcnRfb3V0cHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuYz01MT1zdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqc2tiX2RzdF9wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjMtICovXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NDpzdGF0aWMgaW50IHhmcm00X3RyYW5zcG9ydF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NS17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTQ2Nz1zdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ3OC1cXHRcXHRpZiAoeC1cXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0Nzk6XFx0XFx0XFx0cmV0dXJuIHhmcm00X3RyYW5zcG9ydF9vdXRwdXQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ4MC1cXHRcXHRpZiAoeC1cXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNTo1NTozOC43ODM3NzQzNDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NjkyNDAwMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkFuYWx5emluZyBgeGZybV9vdXRlcl9tb2RlX291dHB1dGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIHN0YXRpYywgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGJ5IGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YC4gVGhlIGZhY3QgdGhhdCBpdCdzIHN0YXRpYyBpbW1lZGlhdGVseSBwb2ludHMgbWUgdG93YXJkIGNlcnRhaW4gYXNzdW1wdGlvbnMgYWJvdXQgc2NvcGUgYW5kIGxpZmV0aW1lLiBTdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgY29udGV4dCB1c3VhbGx5IG1lYW4gdGhleSdyZSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgb3IgZmlsZSwgYW5kIHRoZXkgYXJlIHVzdWFsbHkgZGVmaW5lZCBhdCBnbG9iYWwgc2NvcGUuIFdlIGFyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgbGV2ZWwgb2YgZGF0YSBlbmNhcHN1bGF0aW9uLiBOb3csIHRoZSBrZXkgaXMgdGhlIGNhbGxpbmcgZnVuY3Rpb247IGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YC4gVGhhdCBuYW1lIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgb3V0cHV0IHN0YWdlIG9mIHNvbWUga2luZCBvZiB0cmFuc2Zvcm1hdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYW4gXCJvdXRlciBtb2RlLlwiIEdpdmVuIHRoZSB4ZnJtIHByZWZpeCwgSSdtIHRoaW5raW5nIHdlJ3JlIGluIHRoZSByZWFsbSBvZiB0aGUgWEZSTSBzdWJzeXN0ZW0uIFRoYXQgbWVhbnMgdGhpcyBzdGF0aWMgZW50aXR5IGlzIHByb2JhYmx5IG1hbmFnaW5nIHNvbWUgaW50ZXJuYWwgc3RhdGUgb3IgZnVuY3Rpb25hbGl0eSBzcGVjaWZpYyB0byBob3cgcGFja2V0cyBhcmUgaGFuZGxlZCB3aGVuIGdvaW5nICpvdXQqIHRocm91Z2ggdGhlIG91dGVyIGVuY2Fwc3VsYXRpb24gKG9yIGRlY2Fwc3VsYXRpb24sIGRlcGVuZGluZyBvbiBjb250ZXh0KS4gVGhpcyBtZWFucyBpdCBpcyBsaWtlbHkgaW52b2x2ZWQgd2l0aCB0aGluZ3MgbGlrZSBoZWFkZXJzIG9yIGNoZWNrc3VtLiBJIHdpbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byBpdHMgc3RydWN0dXJlIHRvIGV2YWx1YXRlIHRoZSBleGFjdCByb2xlIGl0IHBsYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA2MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjI0LjQ3NjE3OTQxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyODc0MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fb3V0ZXJfbW9kZV9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jPTQ0MT1zdGF0aWMgaW50IHhmcm02X3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00NjYtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0Njc6c3RhdGljIGludCB4ZnJtX291dGVyX21vZGVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDY4LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDk4LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfUEtUR0VOKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NDk5OmludCBwa3RnZW5feGZybV9vdXRlcl9tb2RlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMC17XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1MDE6XFx0cmV0dXJuIHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMi19XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1MDM6RVhQT1JUX1NZTUJPTF9HUEwocGt0Z2VuX3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTA0LSNlbmRpZlxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz01MDY9c3RhdGljIGludCB4ZnJtX291dHB1dF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTIzLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NTI0OlxcdFxcdGVyciA9IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUyNS1cXHRcXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjI1LjAzOTA2MTE3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjEzOTUwNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgWEZSTSBPdXRwdXQgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgeGZybV9vdXRwdXRgIHN0dWZmLiBJJ20gZm9jdXNpbmcgb24gaG93IHBhY2tldHMgZ2V0IHNlbnQgb3V0LiBJJ3ZlIG5vdGljZWQgYHhmcm1fb3V0cHV0X29uZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgaXQsIHNwZWNpZmljYWxseS4gVGhhdCdzIHN0YXRpY2FsbHkgZGVjbGFyZWQsIHdoaWNoIHN1Z2dlc3RzIGEgY2VydGFpbiBsZXZlbCBvZiBjb250cm9sIG9yIHBlcmhhcHMgb3B0aW1pemF0aW9uIGF0IGNvbXBpbGUgdGltZS4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgeGZybV9vdXRwdXRgIGZpdHMgaW50byB0aGUgcGljdHVyZSBtb3JlIGJyb2FkbHkuIFdoYXQncyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3bz8gSXMgYHhmcm1fb3V0cHV0YCB0aGUgY29yZSwgZ2VuZXJpYyBmdW5jdGlvbiwgYW5kIGB4ZnJtX291dHB1dF9vbmVgIGEgc3BlY2lhbGl6ZWQgaW5zdGFuY2Ugb3IgaGVscGVyPyBPciBpcyBpdCB0aGUgb3RoZXIgd2F5IGFyb3VuZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWluIGFuZCB1bmRlcnN0YW5kIHdoZXJlIGB4ZnJtX291dHB1dGAgZ2V0cyBjYWxsZWQgZnJvbSwgYW5kIGhvdywgaW4gY29udHJhc3QgdG8gYHhmcm1fb3V0cHV0X29uZWAuIEknbSBndWVzc2luZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gaXMga2V5IHRvIGhvdyB0aGUgc3lzdGVtIGFjdHVhbGx5IG91dHB1dHMgdHJhbnNmb3JtZWQgcGFja2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMToyOC4yNTMwMTYwMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzAzODk2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX291dHB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMi0vKlxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6MzogKiB4ZnJtX291dHB1dC5jIC0gQ29tbW9uIElQc2VjIGVuY2Fwc3VsYXRpb24gY29kZS5cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQtICpcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMjYtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzoyNzpzdGF0aWMgaW50IHhmcm1fb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy0yOC1zdGF0aWMgaW50IHhmcm1faW5uZXJfZXh0cmFjdF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz01MDM9RVhQT1JUX1NZTUJPTF9HUEwocGt0Z2VuX3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQpO1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01MDUtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1MDY6c3RhdGljIGludCB4ZnJtX291dHB1dF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNy17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTU5OS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYwMDppbnQgeGZybV9vdXRwdXRfcmVzdW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYwMS17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYwMy1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYwNDpcXHR3aGlsZSAobGlrZWx5KChlcnIgPSB4ZnJtX291dHB1dF9vbmUoc2tiLCBlcnIpKSA9PSAwKSkge1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjA1LVxcdFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYxNS1cXHRcXHRcXHQgICAgICBORl9JTkVUX1BPU1RfUk9VVElORywgbmV0LCBzaywgc2tiLFxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjE2OlxcdFxcdFxcdCAgICAgIE5VTEwsIHNrYl9kc3Qoc2tiKS1cXHUwMDNlZGV2LCB4ZnJtX291dHB1dDIpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjE3LVxcdFxcdGlmICh1bmxpa2VseShlcnIgIT0gMSkpXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYyNi19XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2Mjc6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9vdXRwdXRfcmVzdW1lKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYyOC1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTYyOT1zdGF0aWMgaW50IHhmcm1fZGV2X2RpcmVjdF9vdXRwdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjYyLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjYzOnN0YXRpYyBpbnQgeGZybV9vdXRwdXQyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY0LXtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY2NTpcXHRyZXR1cm4geGZybV9vdXRwdXRfcmVzdW1lKHNrLCBza2IsIDEpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY2LX1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2Ny1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY2ODpzdGF0aWMgaW50IHhmcm1fb3V0cHV0X2dzbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2OS17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY4NC1cXHRcXHRza2JfbWFya19ub3Rfb25fbGlzdChzZWdzKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY4NTpcXHRcXHRlcnIgPSB4ZnJtX291dHB1dDIobmV0LCBzaywgc2Vncyk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02ODYtXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTcwNj1zdGF0aWMgdm9pZCB4ZnJtX2dldF9pbm5lcl9pcHByb3RvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03NTYtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo3NTc6aW50IHhmcm1fb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc1OC17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc5Ni1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjc5NzpcXHRcXHRyZXR1cm4geGZybV9vdXRwdXRfcmVzdW1lKHNrLCBza2IsIDApO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzk4LVxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODIwLVxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWlubmVyX3Byb3RvY29sIFxcdTAwMjZcXHUwMDI2IHgtXFx1MDAzZXByb3BzLm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTClcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjgyMTpcXHRcXHRcXHRcXHRyZXR1cm4geGZybV9vdXRwdXRfZ3NvKG5ldCwgc2ssIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MjItXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgzMC1cXHRcXHRpZiAoc2tiX2lzX2dzbyhza2IpKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODMxOlxcdFxcdFxcdHJldHVybiB4ZnJtX291dHB1dF9nc28obmV0LCBzaywgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgzMi1cXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTg0My1vdXQ6XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo4NDQ6XFx0cmV0dXJuIHhmcm1fb3V0cHV0MihuZXQsIHNrLCBza2IpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODQ1LX1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjg0NjpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX291dHB1dCk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04NDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjI4LjM1NjA2NzY0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTI2OTc4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkZvY3VzIFN5bWJvbCBDb25zaWRlcmF0aW9ucyBmb3IgUGFja2V0IFRyYW5zZm9ybWF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQga2V5IGZ1bmN0aW9ucyBmb3IgbWFya2luZyBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gcGFja2V0IHRyYW5zZm9ybWF0aW9ucy4gVGhlIGZhY3QgdGhhdCBgeGZybV9vdXRwdXRgIGlzIGV4cG9ydGVkIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgbWVhbmluZyB3ZSBjYW4gZGVmaW5pdGVseSBob29rIGludG8gdGhhdC4gVGhhdCdzIGEgY29yZSBmdW5jdGlvbiwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZm9jdXMgdGhlcmUuXG5cbk5vdywgZm9yIGFjdHVhbCBjYW5kaWRhdGVzLCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGEgZmV3IGtleSByb3V0aW5lcyB0aGF0IGRlYWwgd2l0aCBidWZmZXIgbWFuaXB1bGF0aW9uIGR1cmluZyB0cmFuc2Zvcm1hdGlvbjogYHBza2JfZXhwYW5kX2hlYWRgLCBgc2tiX2NvcHlfZXhwYW5kYCwgYHNrYl9zZWdtZW50X2xpc3RgLCBhbmQgYHNrYl9zZWdtZW50YC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZvciBoYW5kbGluZyB0aGUgU0tCcyBpbnZvbHZlZCBhbmQgY291bGQgcmV2ZWFsIGltcG9ydGFudCBwb2ludHMgZm9yIG91ciBmb2N1cy4gSXQncyBhbG1vc3QgY2VydGFpbiB0aGF0IG9uZSBvciBtb3JlIG9mIHRoZW0gd2lsbCBiZSBzdWl0YWJsZS5cblxuV2UgYWxzbyBoYXZlIHRvIHJlbWVtYmVyIGB4ZnJtX291dHB1dGAgaXRzZWxmIG5lZWRzIGNvbnNpZGVyYXRpb24uXG5cbldhaXQgYSBzZWNvbmQsIGxldCdzIG5vdCBiZSBoYXN0eSEgV2UgY2FuJ3QgZm9yZ2V0IGFib3V0IHRob3NlICpyYXcqIHNvY2tldHMuIGByYXdfc2VuZG1zZ2AgYW5kIGByYXd2Nl9zZW5kbXNnYCBhcmUgYWN0dWFsbHkgYWxzbyBxdWl0ZSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZXkgY2FsbCBgcmF3X3NlbmRfaGRyaW5jYCBhbmQgYHJhd3Y2X3NlbmRfaGRyaW5jYC4gVGhpcyBpcyBhIHZlcnkgdmFsaWQgcG9pbnQhIFRob3NlICpjb3VsZCogYmUganVzdCBhcywgb3IgZXZlbiBtb3JlLCByZXZlYWxpbmcgdGhhbiBzb21lIG9mIHRoZSBvdGhlcnMsIGFzIHRoZSBoZWFkZXIgaW5jbHVzaW9uIG1pZ2h0IGJlIGEgY3JpdGljYWwgc3RhZ2UuIEkgbmVlZCB0byBiZSBzdXJlIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGVtIGFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDE6MzIuMzY4NzY5NTMxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjgyNjY4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXdfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9yYXcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9yYXcuYz00NjI9c3RhdGljIGludCByYXdfZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwgaW50IGxlbiwgaW50IG9kZCxcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTQ5Mi1cXG5uZXQvaXB2NC9yYXcuYzo0OTM6c3RhdGljIGludCByYXdfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG5uZXQvaXB2NC9yYXcuYy00OTQte1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9OTQzPXN0cnVjdCBwcm90byByYXdfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTk1My1cXHQuZ2V0c29ja29wdFxcdCAgID0gcmF3X2dldHNvY2tvcHQsXFxubmV0L2lwdjQvcmF3LmM6OTU0OlxcdC5zZW5kbXNnXFx0ICAgPSByYXdfc2VuZG1zZyxcXG5uZXQvaXB2NC9yYXcuYy05NTUtXFx0LnJlY3Ztc2dcXHQgICA9IHJhd19yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMTozMi40NTE2MDMwMDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2MDUxNjgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIFNlbmRtc2cgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCByYXcgc29ja2V0cywgYW5kIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciBzZW5kaW5nIGEgbWVzc2FnZSBoYXMgdG8gYmUgYHJhd19zZW5kbXNnYC4gTm8gcXVlc3Rpb24gdGhlcmUuIE5vdywgdGhlIHJlYWwgbml0dHktZ3JpdHR5IGxpZXMgZGVlcGVyLCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgdGhlIElQdjYgc3BlY2lmaWMgdmVyc2lvbiBoYW5kbGVzIGl0LiBMZXQncyBkaWcgaW50byBgcmF3djZfc2VuZG1zZ2AgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJdCdzIHRpbWUgdG8gY2hlY2sgd2hhdCBraW5kIG9mIHByb2Nlc3NpbmcgYW5kIGRhdGEgaGFuZGxpbmcgdGhhdCBtb2R1bGUgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMTozNS40MTIxMjYwOTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTc0Nzg1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXd2Nl9zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3Jhdy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3Jhdy5jPTcxNT1zdGF0aWMgaW50IHJhdzZfZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwgaW50IGxlbiwgaW50IG9kZCxcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTc0NS1cXG5uZXQvaXB2Ni9yYXcuYzo3NDY6c3RhdGljIGludCByYXd2Nl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbm5ldC9pcHY2L3Jhdy5jLTc0Ny17XFxuLS1cXG5uZXQvaXB2Ni9yYXcuYz0xMjAwPXN0cnVjdCBwcm90byByYXd2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvcmF3LmMtMTIxMC1cXHQuZ2V0c29ja29wdFxcdCAgID0gcmF3djZfZ2V0c29ja29wdCxcXG5uZXQvaXB2Ni9yYXcuYzoxMjExOlxcdC5zZW5kbXNnXFx0ICAgPSByYXd2Nl9zZW5kbXNnLFxcbm5ldC9pcHY2L3Jhdy5jLTEyMTItXFx0LnJlY3Ztc2dcXHQgICA9IHJhd3Y2X3JlY3Ztc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjM1LjU0MTkyODA1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NjMzMzQyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmF3djYgU2VuZG1zZyBQYXRoIGFuZCBYRlJNIE9mZmxvYWQqKlxuXG5Pa2F5LCBzbyBgcmF3djZfc2VuZG1zZ2Ag4oCTIHRoYXTigJlzIHRoZSBBUEkgZW50cnkgcG9pbnQsIGdvdCBpdC4gTm93LCB3aGF0J3MgdGhlIGRlYWwgd2l0aCBgQ09ORklHX1hGUk1fT0ZGTE9BRGA/IEkgcmVjYWxsIHNlZWluZyBpdCBwb3AgdXAgaW4gc29tZSByZWxhdGVkIGNvbnRleHRzLiBMZXQgbWUgZGlnIGEgYml0IGRlZXBlci5cblxuUmlnaHQsIGluIGBuZXQveGZybS94ZnJtX2RldmljZS5jYCwgdGhlcmUncyBhIHdob2xlIHN1aXRlIG9mIGZ1bmN0aW9ucyDigJMgYF9feGZybV90cmFuc3BvcnRfcHJlcGAsIGBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcGAsIGBfX3hmcm1fbW9kZV9iZWV0X3ByZXBgLCBgeGZybV9vdXRlcl9tb2RlX3ByZXBgLCBhbmQgYHZhbGlkYXRlX3htaXRfeGZybWAg4oCTIGFsbCBndWFyZGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3IuIEVuYWJsaW5nIGBYRlJNX09GRkxPQURgIGlzIGRlZmluaXRlbHkgb24gdGhlIHJhZGFyLiBJdCBzZWVtcyBjcnVjaWFsIHRvIHRoZSBvdmVyYWxsIGZsb3csIHNwZWNpZmljYWxseSBmb3Igb2ZmbG9hZGluZyB0cmFuc2Zvcm1hdGlvbnMuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gSXQncyByZWxhdGVkIHRvIElQLVRGUywgYW5kIEkgc2VlIGBpcHRmc19lbmNhcF9hZGRfaXB2NGAgYW5kIGBpcHRmc19lbmNhcF9hZGRfaXB2NmAgaW4gdGhlcmUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBgeGZybV9pcHRmcy5jYCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIGdpdmVzIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBJUHNlYyBhbmQgSVAtVEZTIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIGJyb2FkZXIgb2ZmbG9hZCBtZWNoYW5pc21zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMTo0MC4yMDUyNjc2MTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODIzMzYwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2lwdGZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgKz0geGZybV9pbnRlcmZhY2Uub1xcbm5ldC94ZnJtL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG5uZXQveGZybS9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgKz0gZXNwaW50Y3Aub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMTo0MC4zNDM1MDc4ODZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NTc2NTE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKklQc2VjIE9mZmxvYWQgQ29uc2lkZXJhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBpbXBsaWNhdGlvbiBpcyBwcmV0dHkgY2xlYXI6IHdlIG5lZWQgdG8gZW5zdXJlIGBYRlJNX0lQVEZTYCBpcyBlbmFibGVkLiBJdCBzb3VuZHMgbGlrZSBzb21lb25lJ3MgZWl0aGVyIGVuY291bnRlcmluZyBhbiBpc3N1ZSB3aXRoIG9yIHBsYW5uaW5nIHRvIGxldmVyYWdlIElQc2VjIHRyYWZmaWMgZmlsdGVyaW5nLCBhbmQgdGhhdCBsaWtlbHkgaGluZ2VzIG9uIGhhdmluZyB0aGUgYXBwcm9wcmlhdGUgaW5mcmFzdHJ1Y3R1cmUgaW4gcGxhY2UuXG5cblNvLCBsZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcywgdG8gYmUgc3VyZS4gTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGV4YW1pbmUgdGhlIG9mZmxvYWQgaW1wbGVtZW50YXRpb25zIGZvciBFU1AgaW4gYm90aCBJUHY0IGFuZCBJUHY2IGNvbnRleHRzLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBjaGVjayBgbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmNgIGFuZCBgbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNgLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgaG93IHRoZSBvZmZsb2FkIHBhdGhzIGFyZSBzZXQgdXAgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGZpbHRlcmluZyBtZWNoYW5pc21zLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIHRoZSBpbnRlcmFjdGlvbnMgYXJlIGVmZmljaWVudCBhbmQgY29ycmVjdCwgYW5kIHdoZXRoZXIgYFhGUk1fSVBURlNgIGlzIGNvcnJlY3RseSBpbnRlZ3JhdGVkLiBJJ20gYXNzdW1pbmcgdGhhdCBwcm9wZXIgb2ZmbG9hZCBpbnRlZ3JhdGlvbiBpcyBlc3NlbnRpYWwuIEkgd2FudCB0byBzZWUgaG93IHRoZSBvZmZsb2FkIHBhdGggYW5kIHRoZSBmaXJld2FsbCBwYXRoIGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gVGhpcyB3aWxsIG1ha2UgaXQgcG9zc2libGUgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBpbmVmZmljaWVuY2llcywgb3IgZXZlbiBidWdzIHJlbGF0ZWQgdG8gdGhlIHRyYWZmaWMgZmlsdGVyaW5nIGFuZCB0aGUgSVBTZWMgb2ZmbG9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMTo0My44MjkyNzcwMTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzI4MDc5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlc3A0X29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9MzY9b2JqLSQoQ09ORklHX0lORVRfRVNQKSArPSBlc3A0Lm9cXG5uZXQvaXB2NC9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRCkgKz0gZXNwNF9vZmZsb2FkLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfSU5FVF9JUENPTVApICs9IGlwY29tcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjQzLjk0NjU3NjA3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MDExNDU0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkVTUCBPZmZsb2FkIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGJhc2VkIG9uIHdoYXQgSSdtIHRoaW5raW5nIGhlcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgYElORVRfRVNQX09GRkxPQURgIGFuZCBgSU5FVDZfRVNQX09GRkxPQURgIGFyZSBlbmFibGVkLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBjcnVjaWFsLiBUaGlzIGlzIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgSVBzZWMgRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIChFU1ApIG9mZmxvYWRpbmcgaXMgYWN0aXZlIGZvciBib3RoIElQdjQgYW5kIElQdjYgdHJhZmZpYy4gV2UncmUgb2J2aW91c2x5IGxvb2tpbmcgdG8gbGV2ZXJhZ2UgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHdoZXJlIGF2YWlsYWJsZSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IG9uIGhpZ2hlci1iYW5kd2lkdGggY29ubmVjdGlvbnMuIFRoZSByZWFzb25pbmcgaGVyZSBpcyBiYXNpYzogQ1BVIGN5Y2xlcyBhcmUgZXhwZW5zaXZlLCBhbmQgZGVkaWNhdGluZyB0aGVtIHRvIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB0YXNrcyB3aGVuIHRoZSBOSUMgY2FuIGhhbmRsZSBpdCBpcyBqdXN0IGluZWZmaWNpZW50LiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUgcGxhdGZvcm0ncyBoYXJkd2FyZSBpcyBjYXBhYmxlIG9mIEVTUCBvZmZsb2FkIGFuZCB0aGF0IHRoZSByZWxldmFudCBkcml2ZXIgc3VwcG9ydCBpcyBwcmVzZW50OyBpZiBub3QsIHdlJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgZmlyc3QsIG9yIHRoZSBiZW5lZml0cyB3aWxsIG5ldmVyIG1hbmlmZXN0LiBVbHRpbWF0ZWx5LCBzZXR0aW5nIHRoZXNlIG9wdGlvbnMgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGFjaGlldmluZyBvcHRpbWFsIHRocm91Z2hwdXQgYW5kIHJlZHVjaW5nIGxhdGVuY3kgd2l0aCBJUHNlYy1wcm90ZWN0ZWQgY29tbXVuaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzQ4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDE6NTMuNzQ3NzI2NzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3OTcyNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcDZfb2ZmbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfSU5FVDZfRVNQKSArPSBlc3A2Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICs9IGVzcDZfb2ZmbG9hZC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX0lORVQ2X0lQQ09NUCkgKz0gaXBjb21wNi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjUzLjgzNTcwNzQ3NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODU3NTc4NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE9mZmxvYWQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYCBoYXZlIGFueSBsdXJraW5nIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nIGJleW9uZCB0aGUgb2J2aW91czsgYXJlIHRoZXJlIGFueSBzdWJ0bGUsIGluZGlyZWN0IGNvbm5lY3Rpb25zIHRvIG90aGVyIGZlYXR1cmVzIG9yIG1vZHVsZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoaXMgaXNuJ3QganVzdCBhYm91dCBpZGVudGlmeWluZyB3aGF0J3MgKnJlcXVpcmVkKiBmb3IgdGhlbSB0byBmdW5jdGlvbiwgYnV0IGFsc28gYWJvdXQgdW5kZXJzdGFuZGluZyB3aGF0IHRoZXkgbWlnaHQgKmltcGFjdCogb3IgYmUgaW1wYWN0ZWQgYnkuIEknbSBsb29raW5nIGZvciBhIGNvbXBsZXRlIHBpY3R1cmUgYmVmb3JlIHByb2NlZWRpbmcuIFRpbWUgdG8gZGlnIGluIGFuZCBhdm9pZCBhbnkgZnV0dXJlIHN1cnByaXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMTo1Ni42OTMyOTExMzFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNTA2NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zNTQ9Y29uZmlnIElORVRfRVNQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjU2Ljc4NDgwNTE0NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMwMTEzNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgYElORVRfRVNQX09GRkxPQURgIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgSU5FVF9FU1BfT0ZGTE9BRGAuIEdpdmVuIHRoYXQgaXQncyBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIElQc2VjIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCAoRVNQKSBvZmZsb2FkLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBmaXRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdHlwaWNhbCBwbGFjZSBmb3IgSVB2NC1zcGVjaWZpYyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGFzc3VtaW5nIHRoaXMgaXMgYSBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0J3Mgc3RhcnQgdGhlcmUuIEknbGwgb3BlbiB0aGF0IEtjb25maWcgZmlsZSBhbmQgbG9vayBmb3IgYElORVRfRVNQX09GRkxPQURgIChvciBzaW1pbGFyKS4gVGhhdCB3aWxsIHRlbGwgbWUgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGRlcGVuZCBvbiBpdCwgYW5kIHdoYXQgaXQgZGVwZW5kcyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIGFib3V0IGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cywgZW5hYmxpbmcgbWUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCB3aXRoaW4gYSBiaWdnZXIgcGljdHVyZS4gVGhhdCdzIHRoZSBzbWFydCBtb3ZlIGJlZm9yZSBnZXR0aW5nIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MDAuMjE0OTU1MzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI0NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzY5LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY5OlxcdGNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuIDM3MDpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXFxcIlxcbiAzNzE6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxcbiAzNzI6XFx0XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbiAzNzM6XFx0XFx0ZGVmYXVsdCBuXFxuIDM3NDpcXHRcXHRoZWxwXFxuIDM3NTpcXHRcXHQgIFN1cHBvcnQgZm9yIEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkLiBUaGlzIG1ha2VzIHNlbnNlXFxuIDM3NjpcXHRcXHQgIG9ubHkgaWYgdGhpcyBzeXN0ZW0gcmVhbGx5IGRvZXMgSVBzZWMgYW5kIHdhbnQgdG8gZG8gaXRcXG4gMzc3OlxcdFxcdCAgd2l0aCBoaWdoIHRocm91Z2hwdXQuIEEgdHlwaWNhbCBkZXNrdG9wIHN5c3RlbSBkb2VzIG5vdFxcbiAzNzg6XFx0XFx0ICBuZWVkIGl0LCBldmVuIGlmIGl0IGRvZXMgSVBzZWMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjAwLjIxNTI4NDY2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjk5ODcwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGRlcGVuZGVuY2llcywgc3VtbWFyaXplZCBhcyBhIHRob3VnaHQgcHJvY2VzcyBJIG1pZ2h0IGhhdmU6XG5cbioqTmV0d29yayBTZWN1cml0eSBNb2R1bGUgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgc2VjdXJpdHkgbW9kdWxlIGNvbmZpZ3VyYXRpb25zLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHJlYWxseS4gSXQgc2VlbXMgdGhhdCB0aGUgYElORVRfRVNQX09GRkxPQURgIGZlYXR1cmUsIHRoYXQncyByZWxpYW50IG9uIHRoZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gb2YgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpLCBpcyBuYXR1cmFsbHkgZGVwZW5kZW50IG9uIHRoZSBjb3JlIGBJTkVUX0VTUGAgbW9kdWxlLiBNYWtlcyBwZXJmZWN0IHNlbnNlOyBvZmZsb2FkaW5nIHNvbWV0aGluZyByZXF1aXJlcyB0aGUgYmFzZSBmdW5jdGlvbmFsaXR5IHRvIGV4aXN0LCBzbyBFU1AgaGFzIHRvIGJlIGVuYWJsZWQgZmlyc3QuIFNpbWlsYXJseSwgdGhlIGBJTkVUNl9FU1BfT0ZGTE9BRGAgZmVhdHVyZSwgaGFuZGxpbmcgRVNQIG9mZmxvYWQgZm9yIElQdjYgdHJhZmZpYywgY2xlYXJseSBpcyBjb250aW5nZW50IG9uIHRoZSBmb3VuZGF0aW9uYWwgYElORVQ2X0VTUGAgbW9kdWxlIGJlaW5nIHByZXNlbnQgYW5kIGZ1bmN0aW9uYWwuIEl0J3MgYSBjbGVhbiBoaWVyYXJjaGljYWwgZGVwZW5kZW5jeTsgb2ZmbG9hZCBkZXBlbmRzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4gTm90aGluZyB0b28gY29tcGxleCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4ODYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjAzLjU4NTI3NTM4N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0Y29uZmlnIElQVjZfR1JFXFxuIDIxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG4gMjEyOlxcdFxcdHNlbGVjdCBJUFY2X1RVTk5FTFxcbiAyMTM6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMjE0OlxcdFxcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXFxuIDIxNTpcXHRcXHRoZWxwXFxuIDIxNjpcXHRcXHQgIFR1bm5lbGluZyBtZWFucyBlbmNhcHN1bGF0aW5nIGRhdGEgb2Ygb25lIHByb3RvY29sIHR5cGUgd2l0aGluXFxuIDIxNzpcXHRcXHQgIGFub3RoZXIgcHJvdG9jb2wgYW5kIHNlbmRpbmcgaXQgb3ZlciBhIGNoYW5uZWwgdGhhdCB1bmRlcnN0YW5kcyB0aGVcXG4gMjE4OlxcdFxcdCAgZW5jYXBzdWxhdGluZyBwcm90b2NvbC4gVGhpcyBwYXJ0aWN1bGFyIHR1bm5lbGluZyBkcml2ZXIgaW1wbGVtZW50c1xcbiAyMTk6XFx0XFx0ICBHUkUgKEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uKSBhbmQgYXQgdGhpcyB0aW1lIGFsbG93c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMjowMy41ODU0MDQ1MjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0MzEyMDEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRmluZGluZyB0aGUgSVB2NiBFU1AgT2ZmbG9hZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSdtIGRpdmluZyBpbnRvIHRoaXMuIExldCBtZSBzZWUuLi4gSSBuZWVkIHRvIGxvY2F0ZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIElQdjYgRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIChFU1ApIG9mZmxvYWQuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gQWgsIHJpZ2h0LCBpdCdzIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIElQdjYgbmV0d29yayBzdGFjaywgc28gSSBzaG91bGQgYmUgbG9va2luZyBpbiB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSdtIHByZXR0eSBzdXJlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGtlcHQgaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gb3BlbiB0aGUgYG5ldC9pcHY2L0tjb25maWdgIGZpbGUuIFRoYXQgc2hvdWxkIGhhdmUgd2hhdCBJJ20gbG9va2luZyBmb3IgLSBgSU5FVDZfRVNQX09GRkxPQURgLiBMZXQgbWUgZ28gZmluZCB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzA2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMjowNi42Mjg1MjkzMjRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTEzNDE5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVDZfRVNQX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTYyPWNvbmZpZyBJTkVUNl9FU1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzYtXFxubmV0L2lwdjYvS2NvbmZpZzo3Nzpjb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MDYuNzQ3NjcyNTY3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODk3NTgzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgSVB2NiBjb25maWd1cmF0aW9uLiBMZXQncyBzdGFydCB3aXRoIHRoZSBzb3VyY2Ugb2YgdHJ1dGgsIGFuZCBmb3IgdGhpcywgSSdtIHRoaW5raW5nIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkgaXMgdGhlIGJlc3QgcGxhY2UgdG8gYmVnaW4uIFNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgNzcgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IHNldHRpbmdzIGluIG1vcmUgZGV0YWlsLCBhbmQgc2VlaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgaXMgYSBnb29kIHdheSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MjcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMjowOS41Mzc0MzU3ODdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzc6XFx0Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxuICA3ODpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuICA3OTpcXHRcXHRkZXBlbmRzIG9uIElORVQ2X0VTUFxcbiAgODA6XFx0XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbiAgODE6XFx0XFx0ZGVmYXVsdCBuXFxuICA4MjpcXHRcXHRoZWxwXFxuICA4MzpcXHRcXHQgIFN1cHBvcnQgZm9yIEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkLiBUaGlzIG1ha2VzIHNlbnNlXFxuICA4NDpcXHRcXHQgIG9ubHkgaWYgdGhpcyBzeXN0ZW0gcmVhbGx5IGRvZXMgSVBzZWMgYW5kIHdhbnQgdG8gZG8gaXRcXG4gIDg1OlxcdFxcdCAgd2l0aCBoaWdoIHRocm91Z2hwdXQuIEEgdHlwaWNhbCBkZXNrdG9wIHN5c3RlbSBkb2VzIG5vdFxcbiAgODY6XFx0XFx0ICBuZWVkIGl0LCBldmVuIGlmIGl0IGRvZXMgSVBzZWMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjA5LjUzNzU0Mjc5N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMwNDcyNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipJTkVUNl9FU1BfT0ZGTE9BRCBhbmQgdGhlIEJpZ2dlciBQaWN0dXJlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgaW1tZWRpYXRlbHkgYSBkZXBlbmRlbmN5IHN0YW5kcyBvdXQuIFNwZWNpZmljYWxseSwgdGhpcyBgSU5FVDZfRVNQX09GRkxPQURgIHRoaW5n4oCmIHllYWgsIGl0IGNsZWFybHkgaGluZ2VzIG9uIGBJTkVUNl9FU1BgIGJlaW5nIGVuYWJsZWQuIFRoYXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBubyBzdXJwcmlzZXMgdGhlcmUuXG5cbkJ1dCBub3csIEknbSB0aGlua2luZyBiZXlvbmQgdGhhdCBpbW1lZGlhdGUgbGluay4gV2hhdCdzIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBzb21ldGhpbmcgbGlrZSBgWEZSTV9JUFRGU2A/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaGFzIGFuIGltcGFjdCBvbiB0aGUgSVBzZWMgc3RhY2sgY29uZmlndXJhdGlvbiBhbmQgaG93IHRoZXNlIGZlYXR1cmVzIHBsYXkgd2l0aCBlYWNoIG90aGVyLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IGNvbmZsaWN0cyBvciBjby1kZXBlbmRlbmNpZXMgSSdtIG92ZXJsb29raW5nIGhlcmUgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgaW5zdGFiaWxpdHkgaWYgbm90IGFjY291bnRlZCBmb3IuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgaW50ZWdyYXRlZCBhbmQgcGxheWluZyBuaWNlbHkgdG9nZXRoZXIuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MTIuNjY4MDI3Mzg5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDU0MzI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTV9JUFRGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTQwLVxcbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXFxubmV0L3hmcm0vS2NvbmZpZy0xNDItXFx0dHJpc3RhdGUgXFxcIklQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMjoxMi43NTI1Nzg0NjRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3OTY5ODE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIFhGUk0gS2NvbmZpZyBPcHRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE0MS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgWEZSTSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBzd2l0Y2hlcyB0aGF0IGRldGVybWluZSB3aGljaCBYRlJNIGZ1bmN0aW9uYWxpdGllcyBhcmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgbGlrZWx5IHRoZXJlJ3MgYSBkZXBlbmRlbmN5IGNoYWluIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGFuZCB0aGF0IHRoaXMgc2VjdGlvbiBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB3aGljaCBYRlJNIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgb3IgYnVpbHQgYXMgbW9kdWxlcy4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBncmFudWxhciBjb250cm9scywgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG5ldyBvcHRpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBkdWcgaW50byB0aGlzIGFyZWEuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBrbm9icyBmb3IgWEZSTSBpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMyNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjE1LjkzMjI3OTM4MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MTpcXHRjb25maWcgWEZSTV9JUFRGU1xcbiAxNDI6XFx0XFx0dHJpc3RhdGUgXFxcIklQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbiAxNDM6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNXFxuIDE0NDpcXHRcXHRoZWxwXFxuIDE0NTpcXHRcXHQgIEluZm9ybWF0aW9uIG9uIHRoZSBJUC1URlMvQUdHRlJBRyBlbmNhcHN1bGF0aW9uIGNhbiBiZSBmb3VuZFxcbiAxNDY6XFx0XFx0ICBpbiBSRkMgOTM0Ny4gVGhpcyBmZWF0dXJlIHN1cHBvcnRzIGRlbWFuZCBkcml2ZW4gKGkuZS4sXFxuIDE0NzpcXHRcXHQgIG5vbi1jb25zdGFudCBzZW5kIHJhdGUpIElQLVRGUyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVcXG4gMTQ4OlxcdFxcdCAgQUdHRlJBRyBFU1AgcGF5bG9hZCBlbmNhcHN1bGF0aW9uLiBUaGlzIHBheWxvYWQgdHlwZVxcbiAxNDk6XFx0XFx0ICBzdXBwb3J0cyBhZ2dyZWdhdGlvbiBhbmQgZnJhZ21lbnRhdGlvbiBvZiB0aGUgaW5uZXIgSVBcXG4gMTUwOlxcdFxcdCAgcGFja2V0IHN0cmVhbSB3aGljaCBpbiB0dXJuIHlpZWxkcyBoaWdoZXIgc21hbGwtcGFja2V0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjE1LjkzMjM1NzYwMloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ4NDk1NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGdldHRpbmcgYFhGUk1fSVBURlNgIHVwIGFuZCBydW5uaW5nLCBhbmQgYXMgSSBzdXNwZWN0ZWQsIGl0J3MgZGVwZW5kZW50IG9uIGBYRlJNYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBMZXQncyBtYWtlIHN1cmUgd2UndmUgZ290IGFsbCB0aGUgcmlnaHQgY29tcG9uZW50cyBlbmFibGVkLiBNeSBjaGVja2xpc3Qgd2lsbCBpbmNsdWRlIHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgSU5FVF9FU1BgLCBgSU5FVF9FU1BfT0ZGTE9BRGAsIGBJTkVUNl9FU1BgLCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYC4gVGhlc2UgYXJlIGFsbCBwcmV0dHkgc3RhbmRhcmQgZm9yIGVuYWJsaW5nIEVTUC5cblxuTm93LCB3ZSBkZWZpbml0ZWx5IG5lZWQgYFhGUk1fSVBURlNgIGl0c2VsZiwgdGhhdCdzIHRoZSBjb3JlLiBUaGVuLCBJIG5lZWQgdG8gbG9vayBhdCBgWEZSTV9PRkZMT0FEYC4gIEkgYmVsaWV2ZSB0aGlzIGlzIGltcGxpY2l0bHkgc2VsZWN0ZWQgYnkgYm90aCBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAsIGJ1dCBJJ2xsIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQgaWYgcG9zc2libGUsIGV2ZW4gdGhvdWdoIGl0J3MgYSBgc2VsZWN0YCBvcHRpb24sIG1lYW5pbmcgaXQgbWlnaHQgbm90IGJlIGRpcmVjdGx5IHNlbGVjdGFibGUuIEl0J3MgYWx3YXlzIGdvb2QgcHJhY3RpY2UgdG8gZG91YmxlLWNoZWNrIHRoZXNlIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbnMgZm9yIGBYRlJNX09GRkxPQURgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjE5Ljg4MDg1ODQ5NloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1NjQ4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMC1cXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcXG5uZXQveGZybS9LY29uZmlnLTEyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MTkuOTU1NDMwOTYyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjAyMzg2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgdGhpcyBDb25maWd1cmF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCdzIGEgYm9vbGVhbiwgYnV0IGl0J3Mgbm90IGV4cG9zZWQgd2l0aCBhIGRpcmVjdCBwcm9tcHQsIHdoaWNoIGlzIHVudXN1YWwuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQncyBpbXBsaWNpdGx5IGVuYWJsZWQgYnkgb3RoZXIgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBrbm93ICp3aHkqIHRoaXMgaXMgc2V0IHVwIHRoZSB3YXkgaXQgaXMuXG5cbk15IG5leHQgc3RlcCBpcyBhbHdheXMgdG8gY2hlY2sgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIGlzIHVzZWQuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvaXB2NC9yYXcuY2AgYW5kIGBuZXQvaXB2Ni9yYXcuY2AsIHdoaWNoIGFyZSBjb21waWxlZCB3aGVuZXZlciBgSU5FVGAgYW5kIGBJUFY2YCBhcmUgZW5hYmxlZCByZXNwZWN0aXZlbHkuIEdpdmVuIHRoYXQgdGhvc2UgYXJlIHByZXR0eSBmb3VuZGF0aW9uYWwsIGl0IHN1Z2dlc3RzIHRoaXMgc2V0dGluZyBpcyBjb25uZWN0ZWQgdG8gbG93ZXItbGV2ZWwgbmV0d29ya2luZyBhc3BlY3RzLiBUaGVuIEkgc2VlIGBuZXQvY29yZS9za2J1ZmYuY2AgaXMgdG91Y2hlZCwgd2hpY2ggbWVhbnMgdGhlIGNoYW5nZXMgd2lsbCBhZmZlY3QgZnVuZGFtZW50YWwgYnVmZmVyIGhhbmRsaW5nLiBPa2F5LCBnZXR0aW5nIG1vcmUgc2VyaW91cyBub3cuXG5cblRoZSByZWFsIHBvaW50IG9mIGludGVyZXN0IGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLiBUaGF0J3MgdGhlIGtleS4gVGhhdCBmaWxlIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19YRlJNX09GRkxPQURgIGlzIGVuYWJsZWQgKG9yIHBvc3NpYmx5IGp1c3QgYENPTkZJR19YRlJNYCkuIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgc2VlIGlmIHRoYXQgaXMgdGhlIGNhc2UuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlcGVuZGVuY2llcy4gSXQgaXMgbGlrZWx5IHRoYXQgYENPTkZJR19YRlJNX09GRkxPQURgIGlzIGVuYWJsZWQuIElmIHNvLCB0aGlzIGlzIHJlbGF0ZWQgdG8gdHJhbnNmb3JtYXRpb24gb2ZmbG9hZCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI0OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMjoyNS4xMTU2NzQwNjdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Njg3NDUyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE1LVxcdFxcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZToxNjpcXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTctXFx0XFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MjUuNTgyNTU1ODRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3MTE3NTgzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBJbnRlZ2VyIE92ZXJmbG93IFByb3RlY3Rpb24gaW4gUGFja2V0IFByb2Nlc3NpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNydWNpYWwgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgZHVyaW5nIGBza2JgIGhlYWRlciB1cGRhdGVzLiBUaGlzIGFmZmVjdHMgYSB3aWRlIHN3YXRoZSBvZiB0aGUga2VybmVsOiBjb3JlIG5ldHdvcmtpbmcsIHJhdyBzb2NrZXRzLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nLiBUaGlzIGlzIGEgKmhpZ2gtaW1wYWN0KiBjaGFuZ2UsIHRvdWNoaW5nIGZ1bmRhbWVudGFsIHBhY2tldCBoYW5kbGluZyBsb2dpYy4gSSBuZWVkIHRvIGJlICp0aG9yb3VnaCogd2l0aCBteSBmdXp6aW5nIGFwcHJvYWNoLlxuXG5GaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gYnVpbGRpbmcgd2l0aCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIEZyb20gdGhlIGNvZGUsIHRoZSBrZXkgY29uZmlncyBmb3IgZW5hYmxpbmcgdGhlIHJlbGV2YW50IGZlYXR1cmVzIGFyZTogYElORVRfRVNQYCwgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQYCwgYElORVQ2X0VTUF9PRkZMT0FEYCwgYW5kIGBYRlJNX0lQVEZTYC4gRW5hYmxpbmcgdGhlc2Ugd2lsbCBlbnN1cmUgdGhlIG9mZmxvYWQtc3BlY2lmaWMgY29kZSBwYXRocyBhcmUgcHJlc2VudCBpbiBgeGZybV9kZXZpY2Uub2AsIHdoZXJlIHRoZSBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIG1vZGlmaWNhdGlvbnMgcmVzaWRlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIEkgbmVlZCB0byB0YXJnZXQuIEkndmUgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBlbnRyeSBwb2ludHM6IGBwc2tiX2V4cGFuZF9oZWFkYCwgYHNrYl9jb3B5X2V4cGFuZGAsIGBza2Jfc2VnbWVudF9saXN0YCwgYHNrYl9zZWdtZW50YCwgYHJhd19zZW5kbXNnYCwgYHJhd3Y2X3NlbmRtc2dgLCBgdmFsaWRhdGVfeG1pdF94ZnJtYCwgYW5kIGB4ZnJtX291dHB1dGAuIEkndmUgdmVyaWZpZWQgdGhhdCBhbGwgb2YgdGhlc2UgYXJlIGV4cG9ydGVkLCB3aGljaCBpcyBleGNlbGxlbnQuIFRoZXkgYXJlIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmb3IgZnV6emluZy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYW55dGhpbmcgZWxzZSBpcyByZWFjaGFibGUuIEkgc2VlIHRoYXQgYHhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudGAgYW5kIGB4ZnJtNF9iZWV0X2dzb19zZWdtZW50YCBhcmUgc3RhdGljLCBidXQgdGhlc2UgYXJlIGNhbGxlZCB2aWEgYGluZXRfb2ZmbG9hZHNbSVBQUk9UT19FU1BdYCwgYW5kIHRoZSBzYW1lIHdpdGggYHhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudGAgYW5kIGB4ZnJtNl9iZWV0X2dzb19zZWdtZW50YCwgd2l0aCBgaW5ldDZfb2ZmbG9hZHNbSVBQUk9UT19FU1BdYC4gVGhlc2UgYXJlIEdTTyBzZWdtZW50IGZ1bmN0aW9ucywgdHJpZ2dlcmVkIGJ5IHNlbmRpbmcgcGFja2V0cyB3aXRoIEdTTyBlbmFibGVkLiBUaGVyZWZvcmUsIGZ1enppbmcgYHNrYl9zZWdtZW50YCBhbmQgYHNrYl9zZWdtZW50X2xpc3RgIHdpbGwgY292ZXIgdGhlc2UgR1NPIHBhdGhzIGluZGlyZWN0bHkuXG5cbkZpbmFsbHksIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBwYXRjaCBhZ2FpbiB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cywgc2luY2UgSSBuZWVkIHRvIGJlIGFzIGNvbXByZWhlbnNpdmUgYXMgcG9zc2libGUuIEkga25vdyB0aGF0IGByYXdfc2VuZG1zZ2AgY2FsbHMgYHJhd19zZW5kX2hkcmluY2AgYW5kIGByYXd2Nl9zZW5kbXNnYCBjYWxscyBgcmF3djZfc2VuZF9oZHJpbmNgLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRvIHVzZSB0aGVzZSBhbmQgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGZ1enogdGhpcy4gSW4gYWRkaXRpb24sIEkgd2lsbCB2ZXJpZnkgaWYgYF9feGZybV90cmFuc3BvcnRfcHJlcGAsIGBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcGAsIGFuZCBgX194ZnJtX21vZGVfYmVldF9wcmVwYCBhcmUgY2FsbGVkLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBmdXp6IGB2YWxpZGF0ZV94bWl0X3hmcm1gIHdoaWNoIGNhbGxzIGB4ZnJtX291dGVyX21vZGVfcHJlcGAuXG5cbk15IGZ1enppbmcgc3RyYXRlZ3kgd2lsbCB0aGVyZWZvcmUgZm9jdXMgb24gZ2VuZXJhdGluZyBkaXZlcnNlIHBhY2tldCBwYXlsb2FkcyB3aXRoIHZhcnlpbmcgaGVhZGVyIHNpemVzLCBvZmZzZXRzLCBhbmQgR1NPIHNldHRpbmdzLCBhbmQgdGhlbiBpbmplY3RpbmcgdGhlbSB0aHJvdWdoIHRoZSBpZGVudGlmaWVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgc2NlbmFyaW9zIHRoYXQgbWlnaHQgdHJpZ2dlciBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgaGVhZGVyIG1hbmlwdWxhdGlvbiBvciBgc2tiYCByZS1zZWdtZW50YXRpb24uIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBnZW5lcmF0ZWQgY292ZXJhZ2UgcmVwb3J0cyB0byBpZGVudGlmeSBhbnkgYXJlYXMgd2hlcmUgbmV3IG9yIHVuZXhwZWN0ZWQgY29kZSBpcyByZWFjaGVkLCBpbiBvcmRlciB0byBtYWtlIHN1cmUgdGhlIGZ1enppbmcgaXMgaGl0dGluZyBhbGwgYXJlYXMgb2YgdGhlIG1vZGlmaWVkIGNvZGUuIFRoaXMgd2lsbCBiZSB0aGUgbWFpbiBhcHByb2FjaCB0byBlbnN1cmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5MjgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MzYuMjk0MzE4MDM4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM5ODg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3hmcm1fdHJhbnNwb3J0X3ByZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jLTIyLSNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyMzpzdGF0aWMgaW50IF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI0LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgaHNpemUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTczPXN0YXRpYyBpbnQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTg2LVxcdFxcdGlmICh4LVxcdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUKVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6ODc6XFx0XFx0XFx0cmV0dXJuIF9feGZybV90cmFuc3BvcnRfcHJlcCh4LCBza2IsXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy04OC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTg5LVxcdFxcdGlmICh4LVxcdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUNilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjkwOlxcdFxcdFxcdHJldHVybiBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoeCwgc2tiLFxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtOTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MzYuMzU1NzIzOTk1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNzM4MDA4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgWEZSTSBDb3ZlcmFnZSBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIE15IGN1cnJlbnQgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSB3YXkgdGhpbmdzIGFyZSBzZXQgdXAsIGB2YWxpZGF0ZV94bWl0X3hmcm1gIG5lYXRseSBjb3ZlcnMgYHhmcm1fb3V0ZXJfbW9kZV9wcmVwYCwgd2hpY2ggaW4gdHVybiBjYWxscyBhIHNlcmllcyBvZiBwcmVwIGZ1bmN0aW9uczogYF9feGZybV90cmFuc3BvcnRfcHJlcGAsIGBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcGAsIGFuZCBgX194ZnJtX21vZGVfYmVldF9wcmVwYC4gU28sIGB2YWxpZGF0ZV94bWl0X3hmcm1gIGhhbmRsZXMgdGhvc2UgcHJlcGVyYXRpb24gZnVuY3Rpb25zLlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhlIElQVEZTIGVuY2FwIGFkZCBmdW5jdGlvbnM/IEFoLCBgaXB0ZnNfZW5jYXBfYWRkX2lwdjRgIGFuZCBgaXB0ZnNfZW5jYXBfYWRkX2lwdjZgPyBUaGV5J3JlIGNhbGxlZCBieSBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLCB3aGljaCBpcyB0aGUgYC5wcmVwYXJlX291dHB1dGAgY2FsbGJhY2sgZm9yIGBpcHRmc19tb2RlX2Nic2AuIEFuZCB0aGF0IGdldHMgY2FsbGVkIGR1cmluZyBYRlJNIG91dHB1dCBwcm9jZXNzaW5nLiBUaGF0IG1ha2VzIHNlbnNlOyBgeGZybV9vdXRwdXRgIGVuY29tcGFzc2VzIHRoaXMuXG5cblRoZW4gdGhlcmUgYXJlIGZ1bmN0aW9ucyBsaWtlIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCwgYHhmcm02X3RyYW5zcG9ydF9vdXRwdXRgLCBgeGZybTZfcm9fb3V0cHV0YCwgYHhmcm00X2JlZXRfZW5jYXBfYWRkYCwgYHhmcm00X3R1bm5lbF9lbmNhcF9hZGRgLCBgeGZybTZfdHVubmVsX2VuY2FwX2FkZGAsIGFuZCBgeGZybTZfYmVldF9lbmNhcF9hZGRgLiBUaGVzZSBhcmUgY2FsbGVkIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0aHJvdWdoIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCwgYW5kIGV2ZW50dWFsbHkgYnkgYHhmcm1fb3V0cHV0YC4gU28sIGB4ZnJtX291dHB1dGAgaXMgdGhlIGVuY29tcGFzc2luZyBmdW5jdGlvbiBoZXJlIGFzIHdlbGwuIFRoZSBzeW1ib2xzIHVzZWQgZm9yIGZvY3VzIGhlcmUgc2VlbSB3ZWxsLWNob3Nlbiwgb3ZlcmFsbC5cblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGZpbmFsIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBXZSBoYXZlIGBJTkVUX0VTUGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUGAsIGBJTkVUNl9FU1BfT0ZGTE9BRGAsIGFuZCBgWEZSTV9JUFRGU2AuXG5cbkhtbSwgYW55dGhpbmcgZWxzZT8gYENPTkZJR19YRlJNX09GRkxPQURgIGlzIHNlbGVjdGVkIGJ5IGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYC4gTm93LCBgQ09ORklHX1hGUk1gIGlzIHNlbGVjdGVkIGJ5IGBYRlJNX0lQVEZTYC4gV2FpdCBhIG1vbWVudCwgYmVjYXVzZSBgWEZSTV9JUFRGU2AgKmRlcGVuZHMqIG9uIGBYRlJNYCwgc28gYFhGUk1gICptdXN0KiBiZSBlbmFibGVkLiBHaXZlbiB0aGF0IGl0J3MgYSBjb3JlIG5ldHdvcmtpbmcgZmVhdHVyZSwgYFhGUk1gIGlzIGFsbW9zdCBjZXJ0YWlubHkgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1vc3Qga2VybmVscy4gVGhlcmVmb3JlLCBJIHdpbGwganVzdCBsaXN0IHRoZSBzcGVjaWZpY3MuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBuYXR1cmUgb2YgYFhGUk1gLCBpcyBpdCBhIGJvb2wgb3IgdHJpc3RhdGU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODgyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjQ0LjQyOTUyODMzNFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNTI1NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6NDQuNTQxMDU5Mzc3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjcwMjcxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCb29sZWFuIExvZ2ljKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgYSBgYm9vbGAgaGVyZSwgYnV0IGl0J3Mgbm90IGJlaW5nIGV4cGxpY2l0bHkgcHJvbXB0ZWQuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIOKAkyB0cnVlIG9yIGZhbHNlIOKAkyBpcyBiZWluZyAqZGVyaXZlZCogZnJvbSBzb21ldGhpbmcgZWxzZSwgc29tZSBvdGhlciBzZWxlY3Rpb24gY3JpdGVyaWEuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBJdCdzIGVzc2VudGlhbGx5IGEgZGVwZW5kZW50IHZhcmlhYmxlLiBUaGUga2V5IGlzIHdoYXQncyBkcml2aW5nIHRoaXMgcGFydGljdWxhciBib29sZWFuLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSBpbW1lZGlhdGVseSB0aGluayBvZiB0aGluZ3MgbGlrZSBgSU5FVF9FU1BgLiBJZiB0aGF0J3Mgc2V0LCAqdGhhdCogbGlrZWx5IGRldGVybWluZXMgdGhlIHN0YXRlIG9mICp0aGlzKiBwYXJ0aWN1bGFyIGBib29sYCDigJMgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyByZWxhdGlvbnNoaXAgdG8gYFhGUk1gLiBUaGF0J3MgdGhlIGxpa2VseSBkcml2ZXIgb2YgdGhpcyBgYm9vbGAuIEl0J3MgYSBjYXNjYWRpbmcgZWZmZWN0IG9mIGNvbmZpZ3VyYXRpb24sIGlzbid0IGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGxvZ2ljIGNoYWluIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDc5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6NDcuODA4MDkwMTcxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTY1ODUyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9FU1AkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzUzLVxcbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU1LVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMjo0Ny44Nzc3NTc3NTdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2NTQwNDg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZXBlbmRlbmN5IENoZWNrOiBJTkVUX0VTUCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBgSU5FVF9FU1BgIG1vZHVsZSBpcyBwbGF5aW5nIG5pY2UuIEkgd2FudCB0byB0aG9yb3VnaGx5IGFzc2VzcyBpdHMgZGVwZW5kZW5jeSB0cmVlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JraW5nIHN0YWNrLCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgdGhlIHNvY2tldCBpbXBsZW1lbnRhdGlvbnMsIGFueSByZWxldmFudCBjcnlwdG9ncmFwaGljIGxpYnJhcmllcywgYW5kIGV2ZW4gdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIGlmIHdlIGFyZSB0YWxraW5nIGFib3V0IGFuIGVtYmVkZGVkIHN5c3RlbS4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdmVyc2lvbiBjb25mbGljdHMgb3IgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcyB0aGF0IG1heSBiZSBsb2FkZWQuIEFueSBpbmNvbXBhdGlibGUgdmVyc2lvbnMgd2lsbCBsaWtlbHkgdHJpZ2dlciBzb21lIGZydXN0cmF0aW5nIHJ1bnRpbWUgZXJyb3JzLCB0aGF0IEknZCBsaWtlIHRvIHByb2FjdGl2ZWx5IHByZXZlbnQuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgY2FuIGZpbmQgdGhlIGRlcGVuZGVuY3kgbWFuaWZlc3QgYW5kIHRoZW4gY29tcGFyZSB0aGlzIGFnYWluc3Qgd2hhdCBpcyBjdXJyZW50bHkgcnVubmluZy4gSSBuZWVkIHRvIGFsc28gYXNzZXNzIGFueSBkaXJlY3Qgb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIGFuZCBob3cgZWFjaCBvZiB0aGVtIG1pZ2h0IGltcGFjdCBlYWNoIG90aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjUwLjk0MzE2Njk5MloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1NCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1NDpcXHRjb25maWcgSU5FVF9FU1BcXG4gMzU1OlxcdFxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbiAzNTY6XFx0XFx0c2VsZWN0IFhGUk1fRVNQXFxuIDM1NzpcXHRcXHRoZWxwXFxuIDM1ODpcXHRcXHQgIFN1cHBvcnQgZm9yIElQc2VjIEVTUCAoRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkKS5cXG4gMzU5OlxcdFxcbiAzNjA6XFx0XFx0ICBFU1AgY2FuIGJlIHVzZWQgd2l0aCB2YXJpb3VzIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMuXFxuIDM2MTpcXHRcXHQgIEJlc2lkZXMgZW5hYmxpbmcgRVNQIHN1cHBvcnQgaXRzZWxmLCB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBnZW5lcmljXFxuIDM2MjpcXHRcXHQgIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmVcXG4gMzYzOlxcdFxcdCAgaW1wbGVtZW50ZWQuICBJZiB5b3UgbmVlZCBhbnkgb3RoZXIgYWxnb3JpdGhtcywgeW91J2xsIG5lZWQgdG8gZW5hYmxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjUwLjk0MzI0NjI1MloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTM0MDE3ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIEknbSBsb29raW5nIGF0IGZvY3VzZXMgb24gcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93cyB3aXRoaW4gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBoZWFkZXIgb2Zmc2V0IG1hbmlwdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGNoZWNrcyBhcm91bmQgZnVuY3Rpb25zIGxpa2UgYHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsYCBhbmQgYHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bGAuIEkgc2VlIHRoYXQgdGhlIGNvZGUgaXMgc2VsZWN0aW5nIGBYRlJNX0VTUGAsIGFuZCBJJ20gcHJldHR5IHN1cmUgdGhhdCBpbXBsaWVzIGl0J3MgYWxzbyBzZWxlY3RpbmcgYFhGUk1gIGl0c2VsZiDigJMgc3RhbmRhcmQgcHJvY2VkdXJlLlxuXG5JJ2xsIGJlIHNldHRpbmcgdXAgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHRlc3RpbmcgYW5kIHZlcmlmaWNhdGlvbiBwcm9jZXNzOiBgSU5FVF9FU1BgLCBgSU5FVF9FU1BfT0ZGTE9BRGAsIGBJTkVUNl9FU1BgLCBgSU5FVDZfRVNQX09GRkxPQURgLCBhbmQgYWxzbyBgWEZSTV9JUFRGU2AuIFRoaXMgc2hvdWxkIGNvdmVyIHRoZSByZWxldmFudCBJUHNlYyBpbXBsZW1lbnRhdGlvbnMuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzIGR1cmluZyBteSBpbnZlc3RpZ2F0aW9uOiBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGBza2Jfc2VnbWVudGAsIGByYXdfc2VuZG1zZ2AsIGByYXd2Nl9zZW5kbXNnYCwgYHZhbGlkYXRlX3htaXRfeGZybWAsIGFuZCBgeGZybV9vdXRwdXRgLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIG5ldHdvcmtpbmcgKGBza2J1ZmYuY2ApLCByYXcgc29ja2V0cyAoYHJhdy5jYCksIGFuZCBlc3BlY2lhbGx5IElQc2VjL1hGUk0gb2ZmbG9hZGluZyBhbmQgZW5jYXBzdWxhdGlvbiBjb2RlIChgeGZybV9kZXZpY2UuY2AsIGB4ZnJtX2lwdGZzLmNgLCBgeGZybV9vdXRwdXQuY2AsIGBlc3A0X29mZmxvYWQuY2AsIGBlc3A2X29mZmxvYWQuY2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBoZWFkZXIgbWFuaXB1bGF0aW9uLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGlzLCBJIG5lZWQgdG8gcHV0IHRoaXMgdGhyb3VnaCBhIHRob3JvdWdoIGZ1enppbmcgcmVnaW1lLiBJdCdzIGNydWNpYWwgdG8gY29uZmlybSB0aGF0IHRoZXNlIG5ldyBib3VuZHMgY2hlY2tzIGRvICpub3QqIGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMsIHRoYXQgdGhleSBjb3JyZWN0bHkgaGFuZGxlIGFsbCB2YWxpZCBwYWNrZXQgc2NlbmFyaW9zLCBhbmQgdGhhdCB0aGV5IHByZXZlbnQgdGhlIHRhcmdldGVkIG92ZXJmbG93cyBhcyBpbnRlbmRlZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGNoZWNrcyB0aGVtc2VsdmVzIGFyZSBzb3VuZCBhbmQgbm90IHN1c2NlcHRpYmxlIHRvIGJ5cGFzcy5cblxuUmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODMxLCJPdXRwdXRUb2tlbnMiOjI5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjU3Ljg3NzI2NzA3NloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3OTA0OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiWEZSTV9JUFRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInNrYl9jb3B5X2V4cGFuZFwiLFxuICAgIFwic2tiX3NlZ21lbnRfbGlzdFwiLFxuICAgIFwic2tiX3NlZ21lbnRcIixcbiAgICBcInJhd19zZW5kbXNnXCIsXG4gICAgXCJyYXd2Nl9zZW5kbXNnXCIsXG4gICAgXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgICBcInhmcm1fb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBjYXJlZnVsIGJvdW5kcyBjaGVja2luZyB0byBza2IgaGVhZGVyIG9mZnNldCB1cGRhdGVzIChlLmcuLCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCwgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgKHNrYnVmZi5jKSwgcmF3IHNvY2tldHMgKHJhdy5jKSwgYW5kIElQc2VjL1hGUk0gb2ZmbG9hZGluZyBhbmQgZW5jYXBzdWxhdGlvbiAoeGZybV9kZXZpY2UuYywgeGZybV9pcHRmcy5jLCB4ZnJtX291dHB1dC5jLCBlc3A0X29mZmxvYWQuYywgZXNwNl9vZmZsb2FkLmMpLiBTaW5jZSB0aGlzIG1vZGlmaWVzIGNvcmUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGhlYWRlciBtYW5pcHVsYXRpb24gbG9naWMsIGl0IGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IG92ZXJmbG93IGNoZWNrcyBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGRyb3AgdmFsaWQgcGFja2V0cywgYW5kIHRoYXQgdGhleSBjb3JyZWN0bHkgcHJldmVudCBvdmVyZmxvd3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQX09GRkxPQURcIixcbiAgICBcIlhGUk1fSVBURlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwc2tiX2V4cGFuZF9oZWFkXCIsXG4gICAgXCJza2JfY29weV9leHBhbmRcIixcbiAgICBcInNrYl9zZWdtZW50X2xpc3RcIixcbiAgICBcInNrYl9zZWdtZW50XCIsXG4gICAgXCJyYXdfc2VuZG1zZ1wiLFxuICAgIFwicmF3djZfc2VuZG1zZ1wiLFxuICAgIFwidmFsaWRhdGVfeG1pdF94ZnJtXCIsXG4gICAgXCJ4ZnJtX291dHB1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgY2FyZWZ1bCBib3VuZHMgY2hlY2tpbmcgdG8gc2tiIGhlYWRlciBvZmZzZXQgdXBkYXRlcyAoZS5nLiwgc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwsIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bCkgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIChza2J1ZmYuYyksIHJhdyBzb2NrZXRzIChyYXcuYyksIGFuZCBJUHNlYy9YRlJNIG9mZmxvYWRpbmcgYW5kIGVuY2Fwc3VsYXRpb24gKHhmcm1fZGV2aWNlLmMsIHhmcm1faXB0ZnMuYywgeGZybV9vdXRwdXQuYywgZXNwNF9vZmZsb2FkLmMsIGVzcDZfb2ZmbG9hZC5jKS4gU2luY2UgdGhpcyBtb2RpZmllcyBjb3JlIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBoZWFkZXIgbWFuaXB1bGF0aW9uIGxvZ2ljLCBpdCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBvdmVyZmxvdyBjaGVja3MgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkcm9wIHZhbGlkIHBhY2tldHMsIGFuZCB0aGF0IHRoZXkgY29ycmVjdGx5IHByZXZlbnQgb3ZlcmZsb3dzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowwcgpk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 05:30:33 +0000 UTC FinishedAt: 2026-08-02 06:02:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "af39eb111ce6b5eba9c08513b62c4868eb7e7fd5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESP", "INET_ESP_OFFLOAD", "INET6_ESP", "INET6_ESP_OFFLOAD", "XFRM_IPTFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "af39eb111ce6b5eba9c08513b62c4868eb7e7fd5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_ESP", "INET_ESP_OFFLOAD", "INET6_ESP", "INET6_ESP_OFFLOAD", "XFRM_IPTFS" ], "series_id": "25f2a158-c9c6-4f37-8703-e8df04faface" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pskb_expand_head", "skb_copy_expand", "skb_segment_list", "skb_segment", "raw_sendmsg", "rawv6_sendmsg", "validate_xmit_xfrm", "xfrm_output" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtza2JfY29weV9leHBhbmQmIzM0OywKICAgICYjMzQ7c2tiX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudCYjMzQ7LAogICAgJiMzNDtyYXdfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyYXd2Nl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX3htaXRfeGZybSYjMzQ7LAogICAgJiMzNDt4ZnJtX291dHB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGNhcmVmdWwgYm91bmRzIGNoZWNraW5nIHRvIHNrYiBoZWFkZXIgb2Zmc2V0IHVwZGF0ZXMgKGUuZy4sIHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsLCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwpIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0d29ya2luZyAoc2tidWZmLmMpLCByYXcgc29ja2V0cyAocmF3LmMpLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIGFuZCBlbmNhcHN1bGF0aW9uICh4ZnJtX2RldmljZS5jLCB4ZnJtX2lwdGZzLmMsIHhmcm1fb3V0cHV0LmMsIGVzcDRfb2ZmbG9hZC5jLCBlc3A2X29mZmxvYWQuYykuIFNpbmNlIHRoaXMgbW9kaWZpZXMgY29yZSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgaGVhZGVyIG1hbmlwdWxhdGlvbiBsb2dpYywgaXQgaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgb3ZlcmZsb3cgY2hlY2tzIGRvIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgZHJvcCB2YWxpZCBwYWNrZXRzLCBhbmQgdGhhdCB0aGV5IGNvcnJlY3RseSBwcmV2ZW50IG92ZXJmbG93cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc0N2I5OWNlNTZiM2E1OGZlN2UxNGU5NGFkNWI0OGJkYzhlZjg2MGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA1OjUyOjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCAyMmVkYTFkNTRhMGU4Li5jOGUyZmIyMTc2NGE5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTMxMjYsNiAmIzQzOzMxMjYsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IG9mZnNldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcbiYjNDM7c2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgaW50IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdGlmICh1bmxpa2VseShvZmZzZXQgXHUwMDNjIDAgfHwgb2Zmc2V0IFx1MDAzZT0gVTE2X01BWCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciBcdTAwM2U9IFUxNl9NQVggLSBvZmZzZXQpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBvZmZzZXQ7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2tcbiYjNDM7c2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgaW50IG9mZnNldClcbiYjNDM7e1xuJiM0MztcdGlmIChvZmZzZXQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2U9IFUxNl9NQVgpKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgXHUwMDNlPSBVMTZfTUFYIC0gb2Zmc2V0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IG9mZnNldDtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9uZXR3b3JrX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHJldHVybiBza2ItXHUwMDNlaGVhZCAmIzQzOyBza2ItXHUwMDNlbmV0d29ya19oZWFkZXI7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuY1xuaW5kZXggYmEzZGJhYzgwZmI0OS4uZDgxNzdlNjc3MjE2NCAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9za2J1ZmYuY1xuQEAgLTM4Nyw2ICYjNDM7Mzg3LDkgQEAgdTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmFwaV9za2JfY2FjaGVfZ2V0X2J1bGspO1xuIFxuJiM0MztzdGF0aWMgaW50IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcbiYjNDM7c3RhdGljIGludCBza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIF9fZmluYWxpemVfc2tiX2Fyb3VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IHNpemUpXG4ge1xuQEAgLTk3Niw3ICYjNDM7OTc5LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuIFx0c2tiX3B1dChuc2tiLCBzaXplKTtcbiBcbiBcdGhlYWRfb2ZmID0gc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYik7XG4tXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIGhlYWRfb2ZmKTtcbiYjNDM7XHRlcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgaGVhZF9vZmYpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGNvbnN1bWVfc2tiKG5za2IpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4gXG4gXHRvZmYgPSBzaXplO1xuIFx0bGVuID0gc2tiLVx1MDAzZWxlbiAtIG9mZjtcbkBAIC0yMTQwLDYgJiM0MzsyMTQ3LDg2IEBAIHZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUpO1xuIFxuJiM0MztzdGF0aWMgYm9vbCBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyh1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgYWRkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGFkZCBcdTAwM2M9IDApXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKGFkZCBcdTAwM2UgVTE2X01BWClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2Zmc2V0IFx1MDAzZSBVMTZfTUFYIC0gYWRkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3codW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFkZClcbiYjNDM7e1xuJiM0MztcdGlmIChhZGQgXHUwMDNjPSAwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChhZGQgXHUwMDNlPSBVMTZfTUFYKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvZmZzZXQgXHUwMDNlPSBVMTZfTUFYIC0gYWRkO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcbiYjNDM7e1xuJiM0MztcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlbmV0d29ya19oZWFkZXIsIG9mZikpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIsIG9mZikpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlbWFjX2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XG4mIzQzO1x0XHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZWlubmVyX25ldHdvcmtfaGVhZGVyLCBvZmYpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfbWFjX2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cdTAwM2Vjc3VtX3N0YXJ0LCBvZmYpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcbiYjNDM7e1xuJiM0MztcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coc2tiLCBvZmYpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4mIzQzO1xuJiM0MztcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpXG4mIzQzO1x0XHRza2ItXHUwMDNlY3N1bV9zdGFydCAmIzQzOz0gb2ZmO1xuJiM0MztcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpXG4mIzQzO1x0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2ZmO1xuJiM0MztcdHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOz0gb2ZmO1xuJiM0MztcdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXG4mIzQzO1x0XHRza2ItXHUwMDNlbWFjX2hlYWRlciAmIzQzOz0gb2ZmO1xuJiM0MztcdGlmIChza2ItXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciAhPSAodHlwZW9mKHNrYi1cdTAwM2Vpbm5lcl90cmFuc3BvcnRfaGVhZGVyKSl+MFUpXG4mIzQzO1x0XHRza2ItXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2ZmO1xuJiM0MztcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XG4mIzQzO1x0XHRza2ItXHUwMDNlaW5uZXJfbmV0d29ya19oZWFkZXIgJiM0Mzs9IG9mZjtcbiYjNDM7XHRcdHNrYi1cdTAwM2Vpbm5lcl9tYWNfaGVhZGVyICYjNDM7PSBvZmY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKG9mZiBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuJiM0MztcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNrYl90cmFuc3BvcnRfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciwgb2ZmKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuJiM0MztcbiYjNDM7XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxuIHtcbiBcdF9fY29weV9za2JfaGVhZGVyKG5ldywgb2xkKTtcbkBAIC0yMzA0LDYgJiM0MzsyMzkxLDkgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXG4gXG4gXHRCVUdfT04oc2tiX3NoYXJlZChza2IpKTtcbiBcbiYjNDM7XHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgbmhlYWQpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4mIzQzO1xuIFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG4gXG4gXHRpZiAoc2tiX3BmbWVtYWxsb2Moc2tiKSlcbkBAIC0yMzU0LDcgJiM0MzsyNDQ0LDcgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXG4gXHRvZmYgICAgICAgICAgID0gbmhlYWQ7XG4gI2VuZGlmXG4gXHRza2ItXHUwMDNldGFpbFx0ICAgICAgJiM0Mzs9IG9mZjtcbi1cdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCBuaGVhZCk7XG4mIzQzO1x0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKHNrYiwgbmhlYWQpO1xuIFx0c2tiLVx1MDAzZWNsb25lZCAgID0gMDtcbiBcdHNrYi1cdTAwM2VoZHJfbGVuICA9IDA7XG4gXHRza2ItXHUwMDNlbm9oZHIgICAgPSAwO1xuQEAgLTI1NDEsNyAmIzQzOzI2MzEsMTAgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0c2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7XG4gXG4tXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pO1xuJiM0MztcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobiwgbmV3aGVhZHJvb20gLSBvbGRoZWFkcm9vbSkpIHtcbiYjNDM7XHRcdGtmcmVlX3NrYihuKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiBuO1xuIH1cbkBAIC00NjgwLDcgJiM0Mzs0NzczLDcgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHVuc2lnbmVkIGludCBkZWx0YV9sZW4gPSAwO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5za2IsICp0bXA7XG4tXHRpbnQgbGVuX2RpZmYsIGVycjtcbiYjNDM7XHRpbnQgaGVhZF9vZmYsIGxlbl9kaWZmLCBlcnI7XG4gXG4gXHQvKiBPbmx5IHNrYl9ncm9fcmVjZWl2ZV9saXN0IGdlbmVyYXRlZCBza2JzIGFycml2ZSBoZXJlICovXG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKCEoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSk7XG5AQCAtNDczMiw4ICYjNDM7NDgyNSwxNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRsZW5fZGlmZiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4obnNrYikgLSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XG4gXHRcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XG4gXG4tXHRcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYikpO1xuLVx0XHRuc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IGxlbl9kaWZmO1xuJiM0MztcdFx0aGVhZF9vZmYgPSBza2JfaGVhZHJvb20obnNrYikgLSBza2JfaGVhZHJvb20oc2tiKTtcbiYjNDM7XHRcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLCBoZWFkX29mZik7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuJiM0MztcdFx0XHRuc2tiLVx1MDAzZW5leHQgPSBsaXN0X3NrYjtcbiYjNDM7XHRcdFx0Z290byBlcnJfbGlzdDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVyciA9IHNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKG5za2IsIGxlbl9kaWZmKTtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShlcnIpKSB7XG4mIzQzO1x0XHRcdG5za2ItXHUwMDNlbmV4dCA9IGxpc3Rfc2tiO1xuJiM0MztcdFx0XHRnb3RvIGVycl9saXN0O1xuJiM0MztcdFx0fVxuIFx0XHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIC10bmxfaGxlbixcbiBcdFx0XHRcdFx0XHQgbnNrYi1cdTAwM2VkYXRhIC0gdG5sX2hsZW4sXG4gXHRcdFx0XHRcdFx0IG9mZnNldCAmIzQzOyB0bmxfaGxlbik7XG5AQCAtNDc1OSw5ICYjNDM7NDg2MSwxMSBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIHNrYjtcbiBcbiBlcnJfbGluZWFyaXplOlxuJiM0MztcdGVyciA9IC1FTk9NRU07XG4mIzQzO2Vycl9saXN0OlxuIFx0a2ZyZWVfc2tiX2xpc3Qoc2tiLVx1MDAzZW5leHQpO1xuIFx0c2tiLVx1MDAzZW5leHQgPSBOVUxMO1xuLVx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnRfbGlzdCk7XG4gXG5AQCAtNDk2MSw3ICYjNDM7NTA2NSwxMSBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxuIFxuIFx0XHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBoZWFkX3NrYik7XG4gXG4tXHRcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xuJiM0MztcdFx0ZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsXG4mIzQzO1x0XHRcdFx0XHRcdFx0c2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KGVycikpXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4obnNrYik7XG4gXG4gXHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KGhlYWRfc2tiLCAtdG5sX2hsZW4sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuaW5kZXggYWJkNzcxNjJmNWU3NS4uYTIyZWYwNDRlZWNiMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuQEAgLTEzOCw3ICYjNDM7MTM4LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2VncyA9IEVSUl9QVFIoLUVJTlZBTCk7XG4gXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xuIFxuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbiYjNDM7XHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFx0b3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXRfb2ZmbG9hZHNbeG8tXHUwMDNlcHJvdG9dKTtcbiBcdGlmIChsaWtlbHkob3BzIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KSlcbiBcdFx0c2VncyA9IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XG5AQCAtMTU1LDIzICYjNDM7MTU2LDI3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTRfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqb3BzO1xuIFx0dTggcHJvdG8gPSB4by1cdTAwM2Vwcm90bztcbiBcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4mIzQzO1x0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcbiBcdGlmICh4LVx1MDAzZXNlbC5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbiBcdFx0aWYgKHByb3RvID09IElQUFJPVE9fQkVFVFBIKSB7XG4gXHRcdFx0c3RydWN0IGlwX2JlZXRfcGhkciAqcGggPVxuIFx0XHRcdFx0KHN0cnVjdCBpcF9iZWV0X3BoZHIgKilza2ItXHUwMDNlZGF0YTtcbiBcbi1cdFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gcGgtXHUwMDNlaGRybGVuICogODtcbiYjNDM7XHRcdFx0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHBoLVx1MDAzZWhkcmxlbiAqIDgpKVxuJiM0MztcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFx0XHRcdHByb3RvID0gcGgtXHUwMDNlbmV4dGhkcjtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAtPSBJUFY0X0JFRVRfUEhNQVhMRU47XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHRpbnQgb2Zmc2V0O1xuIFx0XHRfX2JlMTYgZnJhZztcbiBcbi1cdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9XG4tXHRcdFx0aXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFx1MDAyNnByb3RvLCBcdTAwMjZmcmFnKTtcbiYjNDM7XHRcdG9mZnNldCA9IGlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCBcdTAwMjZwcm90bywgXHUwMDI2ZnJhZyk7XG4mIzQzO1x0XHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgb2Zmc2V0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRcdGlmIChwcm90byA9PSBJUFBST1RPX1RDUClcbiBcdFx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3R5cGUgfD0gU0tCX0dTT19UQ1BWNDtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jXG5pbmRleCA3Zjc0ZDhiOTVhMzczLi4xNjM1NGJmNzZkYWQxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcmF3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3Jhdy5jXG5AQCAtMzU2LDYgJiM0MzszNTYsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtXHUwMDNlZHN0LmRldik7XG4mIzQzO1x0aWYgKGhsZW4gXHUwMDNlPSBVMTZfTUFYIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdHRsZW4gPSBydC1cdTAwM2Vkc3QuZGV2LVx1MDAzZW5lZWRlZF90YWlscm9vbTtcbiBcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssXG4gXHRcdFx0XHQgIGxlbmd0aCAmIzQzOyBobGVuICYjNDM7IHRsZW4gJiM0MzsgMTUsXG5AQCAtMzk5LDYgJiM0Mzs0MDEsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcbiBcdGVyciA9IC1FSU5WQUw7XG4gXHRpZiAoaXBobGVuIFx1MDAzZSBsZW5ndGggfHwgaXBobGVuIFx1MDAzYyBzaXplb2YoKmlwaCkpXG4gXHRcdGdvdG8gZXJyb3JfZnJlZTtcbiYjNDM7XHRpZiAoaGxlbiBcdTAwM2U9IFUxNl9NQVggLSBpcGhsZW4pXG4mIzQzO1x0XHRnb3RvIGVycm9yX2ZyZWU7XG4gXG4gXHRpZiAoaXBobGVuIFx1MDAzZT0gc2l6ZW9mKCppcGgpKSB7XG4gXHRcdGlmICghaXBoLVx1MDAzZXNhZGRyKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jIGIvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcbmluZGV4IDIyODk1NTIxYTU3ZDAuLmUxMjNmMGE5NzgyYjIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcbkBAIC0xNzQsNyAmIzQzOzE3NCw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfdHJhbnNwb3J0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiBcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4mIzQzO1x0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0Nl9vZmZsb2Fkc1t4by1cdTAwM2Vwcm90b10pO1xuIFx0aWYgKGxpa2VseShvcHMgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKVxuIFx0XHRzZWdzID0gb3BzLVx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTtcbkBAIC0xOTEsNyAmIzQzOzE5Miw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqb3BzO1xuIFx0dTggcHJvdG8gPSB4by1cdTAwM2Vwcm90bztcbiBcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4mIzQzO1x0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcbiBcdGlmICh4LVx1MDAzZXNlbC5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbiBcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT1cbkBAIC0yMDEsNyAmIzQzOzIwMyw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdFx0XHRzdHJ1Y3QgaXBfYmVldF9waGRyICpwaCA9XG4gXHRcdFx0XHQoc3RydWN0IGlwX2JlZXRfcGhkciAqKXNrYi1cdTAwM2VkYXRhO1xuIFxuLVx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSBwaC1cdTAwM2VoZHJsZW4gKiA4O1xuJiM0MztcdFx0XHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgcGgtXHUwMDNlaGRybGVuICogOCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRcdFx0cHJvdG8gPSBwaC1cdTAwM2VuZXh0aGRyO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjtcbkBAIC0yMTAsMTAgJiM0MzsyMTMsMTIgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0XHRpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApXG4gXHRcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fVENQVjY7XG4gXHR9IGVsc2Uge1xuJiM0MztcdFx0aW50IG9mZnNldDtcbiBcdFx0X19iZTE2IGZyYWc7XG4gXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICYjNDM7PVxuLVx0XHRcdGlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCBcdTAwMjZwcm90bywgXHUwMDI2ZnJhZyk7XG4mIzQzO1x0XHRvZmZzZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZyYWcpO1xuJiM0MztcdFx0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIG9mZnNldCkpXG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xuIFx0fVxuIFxuIFx0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUClcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jXG5pbmRleCBiODhkMzY0ZTc4YWFlLi5mYTIyM2VjMDIzOTY0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcmF3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3Jhdy5jXG5AQCAtMTUsNiAmIzQzOzE1LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtNjEzLDYgJiM0Mzs2MTQsOSBAQCBzdGF0aWMgaW50IHJhd3Y2X3NlbmRfaGRyaW5jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuZ3RoLFxuIFx0aWYgKGZsYWdzXHUwMDI2TVNHX1BST0JFKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRpZiAoaGxlbiBcdTAwM2U9IFUxNl9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLFxuIFx0XHRcdFx0ICBsZW5ndGggJiM0MzsgaGxlbiAmIzQzOyB0bGVuICYjNDM7IDE1LFxuIFx0XHRcdFx0ICBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlULCBcdTAwMjZlcnIpO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fZGV2aWNlLmMgYi9uZXQveGZybS94ZnJtX2RldmljZS5jXG5pbmRleCBmMTUzYmY2OTViOWRkLi4yYTA5YmQyZWVjNDkzIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9kZXZpY2UuY1xuQEAgLTIwLDggJiM0MzsyMCw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuIFxuICNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG4tc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXG4mIzQzO3N0YXRpYyBpbnQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBpbnQgaHNpemUpXG4ge1xuIFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiBcbkBAIC0zMCwzMCAmIzQzOzMwLDMzIEBAIHN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xuIFxuIFx0cHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgaHNpemUpXG4tXG4mIzQzO3N0YXRpYyBpbnQgX194ZnJtX21vZGVfdHVubmVsX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IGhzaXplKVxuIHtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXG4tXHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IGhzaXplO1xuJiM0MztcdGlmICh4by1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9HU09fU0VHTUVOVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFx0cHNrYl9wdWxsKHNrYixcbiBcdFx0ICBza2ItXHUwMDNlbWFjX2xlbiAmIzQzOyB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4gLSB4LVx1MDAzZXByb3BzLmVuY19oZHJfbGVuKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXG4mIzQzO3N0YXRpYyBpbnQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBpbnQgaHNpemUpXG4ge1xuIFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcbiBcdGludCBwaGxlbiA9IDA7XG4gXG4tXHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IGhzaXplO1xuJiM0MztcdGlmICh4by1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9HU09fU0VHTUVOVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFx0aWYgKHgtXHUwMDNlc2VsLmZhbWlseSAhPSBBRl9JTkVUNikge1xuQEAgLTYzLDEwICYjNDM7NjYsMTEgQEAgc3RhdGljIHZvaWQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0fVxuIFxuIFx0cHNrYl9wdWxsKHNrYiwgc2tiLVx1MDAzZW1hY19sZW4gJiM0MzsgaHNpemUgJiM0MzsgKHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHBobGVuKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qIEFkanVzdCBwb2ludGVycyBpbnRvIHRoZSBwYWNrZXQgd2hlbiBJUHNlYyBpcyBkb25lIGF0IGxheWVyMiAqL1xuLXN0YXRpYyB2b2lkIHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0MztzdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN3aXRjaCAoeC1cdTAwM2VvdXRlcl9tb2RlLmVuY2FwKSB7XG4gXHRjYXNlIFhGUk1fTU9ERV9JUFRGUzpcbkBAIC05OCw2ICYjNDM7MTAyLDggQEAgc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRjYXNlIFhGUk1fTU9ERV9JTl9UUklHR0VSOlxuIFx0XHRicmVhaztcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB4bWl0X3hmcm1fY2hlY2tfb3ZlcmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC0xNzUsNyAmIzQzOzE4MSwxMiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1clxuIFxuIFx0aWYgKCFza2ItXHUwMDNlbmV4dCkge1xuIFx0XHRlc3BfZmVhdHVyZXMgfD0gc2tiLVx1MDAzZWRldi1cdTAwM2Vnc29fcGFydGlhbF9mZWF0dXJlcztcbi1cdFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKTtcbiYjNDM7XHRcdGVyciA9IHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYik7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSwgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xuJiM0MztcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdHhvLVx1MDAzZWZsYWdzIHw9IFhGUk1fREVWX1JFU1VNRTtcbiBcbkBAIC0yMDEsNyAmIzQzOzIxMiwxMyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1clxuIFx0XHR4byA9IHhmcm1fb2ZmbG9hZChza2IyKTtcbiBcdFx0eG8tXHUwMDNlZmxhZ3MgfD0gWEZSTV9ERVZfUkVTVU1FO1xuIFxuLVx0XHR4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IyKTtcbiYjNDM7XHRcdGVyciA9IHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYjIpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRYRlJNX0lOQ19TVEFUUyh4c19uZXQoeCksIExJTlVYX01JQl9YRlJNT1VUU1RBVEVQUk9UT0VSUk9SKTtcbiYjNDM7XHRcdFx0c2tiMi1cdTAwM2VuZXh0ID0gbnNrYjtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiX2xpc3Qoc2tiMik7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRlcnIgPSB4LVx1MDAzZXR5cGVfb2ZmbG9hZC1cdTAwM2V4bWl0KHgsIHNrYjIsIGVzcF9mZWF0dXJlcyk7XG4gXHRcdGlmICghZXJyKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXG5pbmRleCA1OTdhZWRlYWMyNmViLi4xM2I2MmJjZDllMDUzIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9pcHRmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbkBAIC0yMzc5LDcgJiM0MzsyMzc5LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAtKHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pKTtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTtcbiYjNDM7XHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbiBcdHRvcF9pcGggPSBpcF9oZHIoc2tiKTtcbiBcdHRvcF9pcGgtXHUwMDNlaWhsID0gNTtcbkBAIC0yNDI2LDcgJiM0MzsyNDI3LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuICYjNDM7IHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTtcbiYjNDM7XHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbiBcdHRvcF9pcGggPSBpcHY2X2hkcihza2IpO1xuIFx0dG9wX2lwaC1cdTAwM2V2ZXJzaW9uID0gNjtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX291dHB1dC5jIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuaW5kZXggY2MzNWMyZmNiYmUwOS4uMGNlYmU3NTJjYTk4MCAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcbkBAIC03Myw3ICYjNDM7NzMsOCBAQCBzdGF0aWMgaW50IHhmcm00X3RyYW5zcG9ydF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzO1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBpaGw7XG4mIzQzO1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGlobCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBpaGwpO1xuIFx0bWVtbW92ZShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaXBoLCBpaGwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMTc5LDcgJiM0MzsxODAsOCBAQCBzdGF0aWMgaW50IHhmcm02X3RyYW5zcG9ydF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2Jfc2V0X21hY19oZWFkZXIoc2tiLFxuIFx0XHRcdCAgIChwcmV2aGRyIC0geC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi1cdTAwM2VkYXRhKTtcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IGhkcl9sZW47XG4mIzQzO1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXHRfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7XG4gXHRtZW1tb3ZlKGlwdjZfaGRyKHNrYiksIGlwaCwgaGRyX2xlbik7XG4gXHRyZXR1cm4gMDtcbkBAIC0yMDksNyAmIzQzOzIxMSw4IEBAIHN0YXRpYyBpbnQgeGZybTZfcm9fb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYixcbiBcdFx0XHQgICAocHJldmhkciAtIHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikgLSBza2ItXHUwMDNlZGF0YSk7XG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBoZHJfbGVuO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBoZHJfbGVuKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0X19za2JfcHVsbChza2IsIGhkcl9sZW4pO1xuIFx0bWVtbW92ZShpcHY2X2hkcihza2IpLCBpcGgsIGhkcl9sZW4pO1xuIFxuQEAgLTI0MSw3ICYjNDM7MjQ0LDggQEAgc3RhdGljIGludCB4ZnJtNF9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7PSBJUFY0X0JFRVRfUEhNQVhMRU47XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzO1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0eGZybTRfYmVldF9tYWtlX2hlYWRlcihza2IpO1xuIFxuQEAgLTI4OCw3ICYjNDM7MjkyLDggQEAgc3RhdGljIGludCB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0MztcbiBcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTtcbiYjNDM7XHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdHRvcF9pcGggPSBpcF9oZHIoc2tiKTtcbiBcbiBcdHRvcF9pcGgtXHUwMDNlaWhsID0gNTtcbkBAIC0zMzUsNyAmIzQzOzM0MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHVubmVsX2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7XG4gXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpO1xuJiM0MztcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcbiYjNDM7XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0dG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7XG4gXG4gXHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA2O1xuQEAgLTM3NCw3ICYjNDM7MzgwLDggQEAgc3RhdGljIGludCB4ZnJtNl9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7PSBJUFY0X0JFRVRfUEhNQVhMRU47XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzO1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTtcbiYjNDM7XHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdHBoID0gX19za2JfcHVsbChza2IsIFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS1cdTAwM2VpaGwgLSBoZHJfbGVuKTtcbiBcbiBcdHhmcm02X2JlZXRfbWFrZV9oZWFkZXIoc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVRfRVNQX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwc2tiX2V4cGFuZF9oZWFkJiMzNDssCiAgICAmIzM0O3NrYl9jb3B5X2V4cGFuZCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O3NrYl9zZWdtZW50JiMzNDssCiAgICAmIzM0O3Jhd19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Jhd3Y2X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfeG1pdF94ZnJtJiMzNDssCiAgICAmIzM0O3hmcm1fb3V0cHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgY2FyZWZ1bCBib3VuZHMgY2hlY2tpbmcgdG8gc2tiIGhlYWRlciBvZmZzZXQgdXBkYXRlcyAoZS5nLiwgc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwsIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bCkgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIChza2J1ZmYuYyksIHJhdyBzb2NrZXRzIChyYXcuYyksIGFuZCBJUHNlYy9YRlJNIG9mZmxvYWRpbmcgYW5kIGVuY2Fwc3VsYXRpb24gKHhmcm1fZGV2aWNlLmMsIHhmcm1faXB0ZnMuYywgeGZybV9vdXRwdXQuYywgZXNwNF9vZmZsb2FkLmMsIGVzcDZfb2ZmbG9hZC5jKS4gU2luY2UgdGhpcyBtb2RpZmllcyBjb3JlIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBoZWFkZXIgbWFuaXB1bGF0aW9uIGxvZ2ljLCBpdCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBvdmVyZmxvdyBjaGVja3MgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkcm9wIHZhbGlkIHBhY2tldHMsIGFuZCB0aGF0IHRoZXkgY29ycmVjdGx5IHByZXZlbnQgb3ZlcmZsb3dzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzQ3Yjk5Y2U1NmIzYTU4ZmU3ZTE0ZTk0YWQ1YjQ4YmRjOGVmODYwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMDU6NTI6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCAyMmVkYTFkNTRhMGU4Li5jOGUyZmIyMTc2NGE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTMxMjYsNiAmIzQzOzMxMjYsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2Zmc2V0OwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjawomIzQzO3NrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGludCBvZmZzZXQpCiYjNDM7ewomIzQzOwlpZiAodW5saWtlbHkob2Zmc2V0ICZsdDsgMCB8fCBvZmZzZXQgJmd0Oz0gVTE2X01BWCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICh1bmxpa2VseShza2ItJmd0O25ldHdvcmtfaGVhZGVyICZndDs9IFUxNl9NQVggLSBvZmZzZXQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IG9mZnNldDsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sKJiM0Mztza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KQomIzQzO3sKJiM0MzsJaWYgKG9mZnNldCAmZ3Q7IDApIHsKJiM0MzsJCWlmICh1bmxpa2VseSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQlpZiAodW5saWtlbHkob2Zmc2V0ICZndDs9IFUxNl9NQVgpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWlmICh1bmxpa2VseShza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJmd0Oz0gVTE2X01BWCAtIG9mZnNldCkpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2Zmc2V0OwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9uZXR3b3JrX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiBza2ItJmd0O2hlYWQgJiM0Mzsgc2tiLSZndDtuZXR3b3JrX2hlYWRlcjsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggYmEzZGJhYzgwZmI0OS4uZDgxNzdlNjc3MjE2NCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTM4Nyw2ICYjNDM7Mzg3LDkgQEAgdTMyIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKHZvaWQgKipza2JzLCB1MzIgbikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKTsKIAomIzQzO3N0YXRpYyBpbnQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpOwomIzQzO3N0YXRpYyBpbnQgc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZik7CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgX19maW5hbGl6ZV9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsCiAJCQkJCSB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKQEAgLTk3Niw3ICYjNDM7OTc5LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLAogCXNrYl9wdXQobnNrYiwgc2l6ZSk7CiAKIAloZWFkX29mZiA9IHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpOwotCXNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgaGVhZF9vZmYpOwomIzQzOwllcnIgPSBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwobnNrYiwgaGVhZF9vZmYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQljb25zdW1lX3NrYihuc2tiKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KIAogCW9mZiA9IHNpemU7CiAJbGVuID0gc2tiLSZndDtsZW4gLSBvZmY7CkBAIC0yMTQwLDYgJiM0MzsyMTQ3LDg2IEBAIHZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKQogfQogRVhQT1JUX1NZTUJPTChza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKTsKIAomIzQzO3N0YXRpYyBib29sIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpCiYjNDM7ewomIzQzOwlpZiAoYWRkICZsdDs9IDApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChhZGQgJmd0OyBVMTZfTUFYKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBvZmZzZXQgJmd0OyBVMTZfTUFYIC0gYWRkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3codW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFkZCkKJiM0Mzt7CiYjNDM7CWlmIChhZGQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGFkZCAmZ3Q7PSBVMTZfTUFYKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiBvZmZzZXQgJmd0Oz0gVTE2X01BWCAtIGFkZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpCiYjNDM7ewomIzQzOwlpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLSZndDtuZXR3b3JrX2hlYWRlciwgb2ZmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl90cmFuc3BvcnRfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIsIG9mZikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItJmd0O21hY19oZWFkZXIsIG9mZikpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi0mZ3Q7aW5uZXJfdHJhbnNwb3J0X2hlYWRlciwgb2ZmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoc2tiX2lubmVyX25ldHdvcmtfaGVhZGVyX3dhc19zZXQoc2tiKSkgewomIzQzOwkJaWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi0mZ3Q7aW5uZXJfbmV0d29ya19oZWFkZXIsIG9mZikpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CQlpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLSZndDtpbm5lcl9tYWNfaGVhZGVyLCBvZmYpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CWlmIChza2ItJmd0O2lwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi0mZ3Q7Y3N1bV9zdGFydCwgb2ZmKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpCiYjNDM7ewomIzQzOwlpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgb2ZmKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwomIzQzOwomIzQzOwlpZiAoc2tiLSZndDtpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkKJiM0MzsJCXNrYi0mZ3Q7Y3N1bV9zdGFydCAmIzQzOz0gb2ZmOwomIzQzOwlpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKQomIzQzOwkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSBvZmY7CiYjNDM7CXNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzs9IG9mZjsKJiM0MzsJaWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSkKJiM0MzsJCXNrYi0mZ3Q7bWFjX2hlYWRlciAmIzQzOz0gb2ZmOwomIzQzOwlpZiAoc2tiLSZndDtpbm5lcl90cmFuc3BvcnRfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLSZndDtpbm5lcl90cmFuc3BvcnRfaGVhZGVyKSl+MFUpCiYjNDM7CQlza2ItJmd0O2lubmVyX3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IG9mZjsKJiM0MzsJaWYgKHNrYl9pbm5lcl9uZXR3b3JrX2hlYWRlcl93YXNfc2V0KHNrYikpIHsKJiM0MzsJCXNrYi0mZ3Q7aW5uZXJfbmV0d29ya19oZWFkZXIgJiM0Mzs9IG9mZjsKJiM0MzsJCXNrYi0mZ3Q7aW5uZXJfbWFjX2hlYWRlciAmIzQzOz0gb2ZmOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpCiYjNDM7ewomIzQzOwlpZiAob2ZmICZndDsgMCAmYW1wOyZhbXA7ICFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKJiM0MzsJaWYgKHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyLCBvZmYpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gb2ZmOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHNrYl9jb3B5X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKQogewogCV9fY29weV9za2JfaGVhZGVyKG5ldywgb2xkKTsKQEAgLTIzMDQsNiAmIzQzOzIzOTEsOSBAQCBpbnQgcHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFpbCwKIAogCUJVR19PTihza2Jfc2hhcmVkKHNrYikpOwogCiYjNDM7CWlmIChza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coc2tiLCBuaGVhZCkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKJiM0MzsKIAlza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTsKIAogCWlmIChza2JfcGZtZW1hbGxvYyhza2IpKQpAQCAtMjM1NCw3ICYjNDM7MjQ0NCw3IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLAogCW9mZiAgICAgICAgICAgPSBuaGVhZDsKICNlbmRpZgogCXNrYi0mZ3Q7dGFpbAkgICAgICAmIzQzOz0gb2ZmOwotCXNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCBuaGVhZCk7CiYjNDM7CXNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChza2IsIG5oZWFkKTsKIAlza2ItJmd0O2Nsb25lZCAgID0gMDsKIAlza2ItJmd0O2hkcl9sZW4gID0gMDsKIAlza2ItJmd0O25vaGRyICAgID0gMDsKQEAgLTI1NDEsNyAmIzQzOzI2MzEsMTAgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCiAJc2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7CiAKLQlza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pOwomIzQzOwlpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pKSB7CiYjNDM7CQlrZnJlZV9za2Iobik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQogCiAJcmV0dXJuIG47CiB9CkBAIC00NjgwLDcgJiM0Mzs0NzczLDcgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAl1bnNpZ25lZCBpbnQgZGVsdGFfbGVuID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2IsICp0bXA7Ci0JaW50IGxlbl9kaWZmLCBlcnI7CiYjNDM7CWludCBoZWFkX29mZiwgbGVuX2RpZmYsIGVycjsKIAogCS8qIE9ubHkgc2tiX2dyb19yZWNlaXZlX2xpc3QgZ2VuZXJhdGVkIHNrYnMgYXJyaXZlIGhlcmUgKi8KIAlERUJVR19ORVRfV0FSTl9PTl9PTkNFKCEoc2tiX3NoaW5mbyhza2IpLSZndDtnc29fdHlwZSAmYW1wOyBTS0JfR1NPX0ZSQUdMSVNUKSk7CkBAIC00NzMyLDggJiM0Mzs0ODI1LDE3IEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCWxlbl9kaWZmID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihuc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTsKIAkJX19jb3B5X3NrYl9oZWFkZXIobnNrYiwgc2tiKTsKIAotCQlza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpKTsKLQkJbnNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0gbGVuX2RpZmY7CiYjNDM7CQloZWFkX29mZiA9IHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpOwomIzQzOwkJZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsIGhlYWRfb2ZmKTsKJiM0MzsJCWlmICh1bmxpa2VseShlcnIpKSB7CiYjNDM7CQkJbnNrYi0mZ3Q7bmV4dCA9IGxpc3Rfc2tiOwomIzQzOwkJCWdvdG8gZXJyX2xpc3Q7CiYjNDM7CQl9CiYjNDM7CQllcnIgPSBza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChuc2tiLCBsZW5fZGlmZik7CiYjNDM7CQlpZiAodW5saWtlbHkoZXJyKSkgewomIzQzOwkJCW5za2ItJmd0O25leHQgPSBsaXN0X3NrYjsKJiM0MzsJCQlnb3RvIGVycl9saXN0OwomIzQzOwkJfQogCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChza2IsIC10bmxfaGxlbiwKIAkJCQkJCSBuc2tiLSZndDtkYXRhIC0gdG5sX2hsZW4sCiAJCQkJCQkgb2Zmc2V0ICYjNDM7IHRubF9obGVuKTsKQEAgLTQ3NTksOSAmIzQzOzQ4NjEsMTEgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gc2tiOwogCiBlcnJfbGluZWFyaXplOgomIzQzOwllcnIgPSAtRU5PTUVNOwomIzQzO2Vycl9saXN0OgogCWtmcmVlX3NrYl9saXN0KHNrYi0mZ3Q7bmV4dCk7CiAJc2tiLSZndDtuZXh0ID0gTlVMTDsKLQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9zZWdtZW50X2xpc3QpOwogCkBAIC00OTYxLDcgJiM0Mzs1MDY1LDExIEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsCiAKIAkJX19jb3B5X3NrYl9oZWFkZXIobnNrYiwgaGVhZF9za2IpOwogCi0JCXNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUobnNrYiwgc2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pOwomIzQzOwkJZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsCiYjNDM7CQkJCQkJCXNrYl9oZWFkcm9vbShuc2tiKSAtIGhlYWRyb29tKTsKJiM0MzsJCWlmICh1bmxpa2VseShlcnIpKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwkJZXJyID0gLUVOT01FTTsKIAkJc2tiX3Jlc2V0X21hY19sZW4obnNrYik7CiAKIAkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoaGVhZF9za2IsIC10bmxfaGxlbiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jIGIvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMKaW5kZXggYWJkNzcxNjJmNWU3NS4uYTIyZWYwNDRlZWNiMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMKQEAgLTEzOCw3ICYjNDM7MTM4LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF90cmFuc3BvcnRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsCiAJc3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpOwogCXN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7CiAKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IHgtJmd0O3Byb3BzLmhlYWRlcl9sZW47CiYjNDM7CWlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCB4LSZndDtwcm9wcy5oZWFkZXJfbGVuKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpOwogCW9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0X29mZmxvYWRzW3hvLSZndDtwcm90b10pOwogCWlmIChsaWtlbHkob3BzICZhbXA7JmFtcDsgb3BzLSZndDtjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKQogCQlzZWdzID0gb3BzLSZndDtjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7CkBAIC0xNTUsMjMgJiM0MzsxNTYsMjcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCWNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqb3BzOwogCXU4IHByb3RvID0geG8tJmd0O3Byb3RvOwogCi0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICYjNDM7PSB4LSZndDtwcm9wcy5oZWFkZXJfbGVuOwomIzQzOwlpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgeC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbikpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTsKIAogCWlmICh4LSZndDtzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7CiAJCWlmIChwcm90byA9PSBJUFBST1RPX0JFRVRQSCkgewogCQkJc3RydWN0IGlwX2JlZXRfcGhkciAqcGggPQogCQkJCShzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLSZndDtkYXRhOwogCi0JCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IHBoLSZndDtoZHJsZW4gKiA4OwomIzQzOwkJCWlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBwaC0mZ3Q7aGRybGVuICogOCkpCiYjNDM7CQkJCXJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpOwogCQkJcHJvdG8gPSBwaC0mZ3Q7bmV4dGhkcjsKIAkJfSBlbHNlIHsKIAkJCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAtPSBJUFY0X0JFRVRfUEhNQVhMRU47CiAJCX0KIAl9IGVsc2UgewomIzQzOwkJaW50IG9mZnNldDsKIAkJX19iZTE2IGZyYWc7CiAKLQkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICYjNDM7PQotCQkJaXB2Nl9za2lwX2V4dGhkcihza2IsIDAsICZhbXA7cHJvdG8sICZhbXA7ZnJhZyk7CiYjNDM7CQlvZmZzZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgJmFtcDtwcm90bywgJmFtcDtmcmFnKTsKJiM0MzsJCWlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBvZmZzZXQpKQomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpOwogCQlpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApCiAJCQlza2Jfc2hpbmZvKHNrYiktJmd0O2dzb190eXBlIHw9IFNLQl9HU09fVENQVjQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuYwppbmRleCA3Zjc0ZDhiOTVhMzczLi4xNjM1NGJmNzZkYWQxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yYXcuYwpAQCAtMzU2LDYgJiM0MzszNTYsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCwKIAkJZ290byBvdXQ7CiAKIAlobGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtJmd0O2RzdC5kZXYpOwomIzQzOwlpZiAoaGxlbiAmZ3Q7PSBVMTZfTUFYIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAl0bGVuID0gcnQtJmd0O2RzdC5kZXYtJmd0O25lZWRlZF90YWlscm9vbTsKIAlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLAogCQkJCSAgbGVuZ3RoICYjNDM7IGhsZW4gJiM0MzsgdGxlbiAmIzQzOyAxNSwKQEAgLTM5OSw2ICYjNDM7NDAxLDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsCiAJZXJyID0gLUVJTlZBTDsKIAlpZiAoaXBobGVuICZndDsgbGVuZ3RoIHx8IGlwaGxlbiAmbHQ7IHNpemVvZigqaXBoKSkKIAkJZ290byBlcnJvcl9mcmVlOwomIzQzOwlpZiAoaGxlbiAmZ3Q7PSBVMTZfTUFYIC0gaXBobGVuKQomIzQzOwkJZ290byBlcnJvcl9mcmVlOwogCiAJaWYgKGlwaGxlbiAmZ3Q7PSBzaXplb2YoKmlwaCkpIHsKIAkJaWYgKCFpcGgtJmd0O3NhZGRyKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYwppbmRleCAyMjg5NTUyMWE1N2QwLi5lMTIzZjBhOTc4MmIyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuYwpAQCAtMTc0LDcgJiM0MzsxNzQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2VncyA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJc3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTsKIAotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbjsKJiM0MzsJaWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAJb3BzID0gcmN1X2RlcmVmZXJlbmNlKGluZXQ2X29mZmxvYWRzW3hvLSZndDtwcm90b10pOwogCWlmIChsaWtlbHkob3BzICZhbXA7JmFtcDsgb3BzLSZndDtjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKQogCQlzZWdzID0gb3BzLSZndDtjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7CkBAIC0xOTEsNyAmIzQzOzE5Miw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKIAljb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wczsKIAl1OCBwcm90byA9IHhvLSZndDtwcm90bzsKIAotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0geC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbjsKJiM0MzsJaWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7CiAKIAlpZiAoeC0mZ3Q7c2VsLmZhbWlseSAhPSBBRl9JTkVUNikgewogCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgLT0KQEAgLTIwMSw3ICYjNDM7MjAzLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCQkJc3RydWN0IGlwX2JlZXRfcGhkciAqcGggPQogCQkJCShzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLSZndDtkYXRhOwogCi0JCQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IHBoLSZndDtoZHJsZW4gKiA4OwomIzQzOwkJCWlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBwaC0mZ3Q7aGRybGVuICogOCkpCiYjNDM7CQkJCXJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpOwogCQkJcHJvdG8gPSBwaC0mZ3Q7bmV4dGhkcjsKIAkJfSBlbHNlIHsKIAkJCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAtPSBJUFY0X0JFRVRfUEhNQVhMRU47CkBAIC0yMTAsMTAgJiM0MzsyMTMsMTIgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCQlpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApCiAJCQlza2Jfc2hpbmZvKHNrYiktJmd0O2dzb190eXBlIHw9IFNLQl9HU09fVENQVjY7CiAJfSBlbHNlIHsKJiM0MzsJCWludCBvZmZzZXQ7CiAJCV9fYmUxNiBmcmFnOwogCi0JCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAmIzQzOz0KLQkJCWlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCAmYW1wO3Byb3RvLCAmYW1wO2ZyYWcpOwomIzQzOwkJb2Zmc2V0ID0gaXB2Nl9za2lwX2V4dGhkcihza2IsIDAsICZhbXA7cHJvdG8sICZhbXA7ZnJhZyk7CiYjNDM7CQlpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgb2Zmc2V0KSkKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTsKIAl9CiAKIAlpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCBiODhkMzY0ZTc4YWFlLi5mYTIyM2VjMDIzOTY0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGltaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zb2NrZXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CkBAIC02MTMsNiAmIzQzOzYxNCw5IEBAIHN0YXRpYyBpbnQgcmF3djZfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW5ndGgsCiAJaWYgKGZsYWdzJmFtcDtNU0dfUFJPQkUpCiAJCWdvdG8gb3V0OwogCiYjNDM7CWlmIChobGVuICZndDs9IFUxNl9NQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLAogCQkJCSAgbGVuZ3RoICYjNDM7IGhsZW4gJiM0MzsgdGxlbiAmIzQzOyAxNSwKIAkJCQkgIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCwgJmFtcDtlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9kZXZpY2UuYyBiL25ldC94ZnJtL3hmcm1fZGV2aWNlLmMKaW5kZXggZjE1M2JmNjk1YjlkZC4uMmEwOWJkMmVlYzQ5MyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2RldmljZS5jCkBAIC0yMCw4ICYjNDM7MjAsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25vdGlmaWVyLmgmZ3Q7CiAKICNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FECi1zdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICB1bnNpZ25lZCBpbnQgaHNpemUpCiYjNDM7c3RhdGljIGludCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgaHNpemUpCiB7CiAJc3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTsKIApAQCAtMzAsMzAgJiM0MzszMCwzMyBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAtPSB4LSZndDtwcm9wcy5oZWFkZXJfbGVuOwogCiAJcHNrYl9wdWxsKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSAmIzQzOyB4LSZndDtwcm9wcy5oZWFkZXJfbGVuKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgaHNpemUpCi0KJiM0MztzdGF0aWMgaW50IF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICB1bnNpZ25lZCBpbnQgaHNpemUpCiB7CiAJc3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTsKIAotCWlmICh4by0mZ3Q7ZmxhZ3MgJmFtcDsgWEZSTV9HU09fU0VHTUVOVCkKLQkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBoc2l6ZTsKJiM0MzsJaWYgKHhvLSZndDtmbGFncyAmYW1wOyBYRlJNX0dTT19TRUdNRU5UICZhbXA7JmFtcDsKJiM0MzsJICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAlwc2tiX3B1bGwoc2tiLAogCQkgIHNrYi0mZ3Q7bWFjX2xlbiAmIzQzOyB4LSZndDtwcm9wcy5oZWFkZXJfbGVuIC0geC0mZ3Q7cHJvcHMuZW5jX2hkcl9sZW4pOwomIzQzOwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgdW5zaWduZWQgaW50IGhzaXplKQomIzQzO3N0YXRpYyBpbnQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgdW5zaWduZWQgaW50IGhzaXplKQogewogCXN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7CiAJaW50IHBobGVuID0gMDsKIAotCWlmICh4by0mZ3Q7ZmxhZ3MgJmFtcDsgWEZSTV9HU09fU0VHTUVOVCkKLQkJc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBoc2l6ZTsKJiM0MzsJaWYgKHhvLSZndDtmbGFncyAmYW1wOyBYRlJNX0dTT19TRUdNRU5UICZhbXA7JmFtcDsKJiM0MzsJICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCiAJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAlpZiAoeC0mZ3Q7c2VsLmZhbWlseSAhPSBBRl9JTkVUNikgewpAQCAtNjMsMTAgJiM0Mzs2NiwxMSBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsCiAJfQogCiAJcHNrYl9wdWxsKHNrYiwgc2tiLSZndDttYWNfbGVuICYjNDM7IGhzaXplICYjNDM7ICh4LSZndDtwcm9wcy5oZWFkZXJfbGVuIC0gcGhsZW4pKTsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qIEFkanVzdCBwb2ludGVycyBpbnRvIHRoZSBwYWNrZXQgd2hlbiBJUHNlYyBpcyBkb25lIGF0IGxheWVyMiAqLwotc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzd2l0Y2ggKHgtJmd0O291dGVyX21vZGUuZW5jYXApIHsKIAljYXNlIFhGUk1fTU9ERV9JUFRGUzoKQEAgLTk4LDYgJiM0MzsxMDIsOCBAQCBzdGF0aWMgdm9pZCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAljYXNlIFhGUk1fTU9ERV9JTl9UUklHR0VSOgogCQlicmVhazsKIAl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgeG1pdF94ZnJtX2NoZWNrX292ZXJmbG93KHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xNzUsNyAmIzQzOzE4MSwxMiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cgogCiAJaWYgKCFza2ItJmd0O25leHQpIHsKIAkJZXNwX2ZlYXR1cmVzIHw9IHNrYi0mZ3Q7ZGV2LSZndDtnc29fcGFydGlhbF9mZWF0dXJlczsKLQkJeGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKTsKJiM0MzsJCWVyciA9IHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYik7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJWEZSTV9JTkNfU1RBVFMoeHNfbmV0KHgpLCBMSU5VWF9NSUJfWEZSTU9VVFNUQVRFUFJPVE9FUlJPUik7CiYjNDM7CQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiAKIAkJeG8tJmd0O2ZsYWdzIHw9IFhGUk1fREVWX1JFU1VNRTsKIApAQCAtMjAxLDcgJiM0MzsyMTIsMTMgQEAgc3RydWN0IHNrX2J1ZmYgKnZhbGlkYXRlX3htaXRfeGZybShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXIKIAkJeG8gPSB4ZnJtX29mZmxvYWQoc2tiMik7CiAJCXhvLSZndDtmbGFncyB8PSBYRlJNX0RFVl9SRVNVTUU7CiAKLQkJeGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMik7CiYjNDM7CQllcnIgPSB4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IyKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlYRlJNX0lOQ19TVEFUUyh4c19uZXQoeCksIExJTlVYX01JQl9YRlJNT1VUU1RBVEVQUk9UT0VSUk9SKTsKJiM0MzsJCQlza2IyLSZndDtuZXh0ID0gbnNrYjsKJiM0MzsJCQlrZnJlZV9za2JfbGlzdChza2IyKTsKJiM0MzsJCQlyZXR1cm4gTlVMTDsKJiM0MzsJCX0KIAogCQllcnIgPSB4LSZndDt0eXBlX29mZmxvYWQtJmd0O3htaXQoeCwgc2tiMiwgZXNwX2ZlYXR1cmVzKTsKIAkJaWYgKCFlcnIpIHsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwppbmRleCA1OTdhZWRlYWMyNmViLi4xM2I2MmJjZDllMDUzIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCkBAIC0yMzc5LDcgJiM0MzsyMzc5LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAtKHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4gLSB4LSZndDtwcm9wcy5lbmNfaGRyX2xlbikpOwogCXNrYi0mZ3Q7bWFjX2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpOwomIzQzOwlpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAogCXRvcF9pcGggPSBpcF9oZHIoc2tiKTsKIAl0b3BfaXBoLSZndDtpaGwgPSA1OwpAQCAtMjQyNiw3ICYjNDM7MjQyNyw4IEBAIHN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiAKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtJmd0O3Byb3BzLmhlYWRlcl9sZW4gJiM0MzsgeC0mZ3Q7cHJvcHMuZW5jX2hkcl9sZW4pOwogCXNrYi0mZ3Q7bWFjX2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpOwotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzsgc2l6ZW9mKCp0b3BfaXBoKTsKJiM0MzsJaWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKIAl0b3BfaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAl0b3BfaXBoLSZndDt2ZXJzaW9uID0gNjsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMgYi9uZXQveGZybS94ZnJtX291dHB1dC5jCmluZGV4IGNjMzVjMmZjYmJlMDkuLjBjZWJlNzUyY2E5ODAgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9vdXRwdXQuYwpAQCAtNzMsNyAmIzQzOzczLDggQEAgc3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC0mZ3Q7cHJvcHMuaGVhZGVyX2xlbik7CiAJc2tiLSZndDttYWNfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOwogCQkJICBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IGlobDsKJiM0MzsJaWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGlobCkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAlfX3NrYl9wdWxsKHNrYiwgaWhsKTsKIAltZW1tb3ZlKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCBpcGgsIGlobCk7CiAJcmV0dXJuIDA7CkBAIC0xNzksNyAmIzQzOzE4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2Jfc2V0X21hY19oZWFkZXIoc2tiLAogCQkJICAgKHByZXZoZHIgLSB4LSZndDtwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi0mZ3Q7ZGF0YSk7CiAJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LSZndDtwcm9wcy5oZWFkZXJfbGVuKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IGhkcl9sZW47CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBoZHJfbGVuKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCV9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTsKIAltZW1tb3ZlKGlwdjZfaGRyKHNrYiksIGlwaCwgaGRyX2xlbik7CiAJcmV0dXJuIDA7CkBAIC0yMDksNyAmIzQzOzIxMSw4IEBAIHN0YXRpYyBpbnQgeGZybTZfcm9fb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsCiAJCQkgICAocHJldmhkciAtIHgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pIC0gc2tiLSZndDtkYXRhKTsKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pOwotCXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0MzsgaGRyX2xlbjsKJiM0MzsJaWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAJX19za2JfcHVsbChza2IsIGhkcl9sZW4pOwogCW1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTsKIApAQCAtMjQxLDcgJiM0MzsyNDQsOCBAQCBzdGF0aWMgaW50IHhmcm00X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7PSBJUFY0X0JFRVRfUEhNQVhMRU47CiAJc2tiLSZndDttYWNfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOwogCQkJICBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCiAJeGZybTRfYmVldF9tYWtlX2hlYWRlcihza2IpOwogCkBAIC0yODgsNyAmIzQzOzI5Miw4IEBAIHN0YXRpYyBpbnQgeGZybTRfdHVubmVsX2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtJmd0O3Byb3BzLmhlYWRlcl9sZW4pOwogCXNrYi0mZ3Q7bWFjX2hlYWRlciA9IHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0MzsKIAkJCSAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7Ci0Jc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyID0gc2tiLSZndDtuZXR3b3JrX2hlYWRlciAmIzQzOyBzaXplb2YoKnRvcF9pcGgpOwomIzQzOwlpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpCiYjNDM7CQlyZXR1cm4gLUVPVkVSRkxPVzsKIAl0b3BfaXBoID0gaXBfaGRyKHNrYik7CiAKIAl0b3BfaXBoLSZndDtpaGwgPSA1OwpAQCAtMzM1LDcgJiM0MzszNDAsOCBAQCBzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LSZndDtwcm9wcy5oZWFkZXJfbGVuKTsKIAlza2ItJmd0O21hY19oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7CiAJCQkgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCXRvcF9pcGggPSBpcHY2X2hkcihza2IpOwogCiAJdG9wX2lwaC0mZ3Q7dmVyc2lvbiA9IDY7CkBAIC0zNzQsNyAmIzQzOzM4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfYmVldF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpCiAJCXNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgJiM0Mzs9IElQVjRfQkVFVF9QSE1BWExFTjsKIAlza2ItJmd0O21hY19oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7CiAJCQkgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTsKLQlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSBza2ItJmd0O25ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7CiYjNDM7CWlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSkKJiM0MzsJCXJldHVybiAtRU9WRVJGTE9XOwogCXBoID0gX19za2JfcHVsbChza2IsIFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS0mZ3Q7aWhsIC0gaGRyX2xlbik7CiAKIAl4ZnJtNl9iZWV0X21ha2VfaGVhZGVyKHNrYik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTg2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogOTUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQm91bmRzIENoZWNraW5nIFBhdGNoIGZvciBTS0IgSGVhZGVyIE9mZnNldHMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUgdGhhdCYjMzk7cyBtYWtpbmcgc29tZSBjcml0aWNhbCBjaGFuZ2VzIHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBTS0IgKFNvY2tldCBCdWZmZXIpIGhlYWRlciBvZmZzZXRzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IGludHJvZHVjaW5nIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIHdoZW4gbWFuaXB1bGF0aW5nIGhlYWRlcnMgbGlrZSBgbmV0d29ya19oZWFkZXJgLCBhbmQgYHRyYW5zcG9ydF9oZWFkZXJgLCB3aGljaCBhcmUgYHUxNmAgZmllbGRzLCBhY3Jvc3MgYG5ldC9jb3JlL3NrYnVmZi5jYCwgYW5kIGEgbnVtYmVyIG9mIElQc2VjL1hGUk0gcmVsYXRlZCBmaWxlcy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNoYW5nZSBpbXBhY3RpbmcgY29yZSBuZXR3b3JraW5nIGFuZCBzZWN1cml0eSwgd2hpY2ggbWVhbnMgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBrZXkgc3ltYm9scywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBkaXJlY3RseSB0b3VjaGVkIGFuZCBjaGFuZ2VkIGJ5IHRoZSBwYXRjaC4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byB0aGVzZSBmdW5jdGlvbnM6IGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWxgICh3aGljaCBhcHBlYXJzIHRvIGJlIGEgc3RhdGljIGZ1bmN0aW9uKSwgYW5kIGBza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bGAgKGFsc28gc3RhdGljKS4gV2UgYWxzbyBoYXZlIHRoZSBhZGRpdGlvbiBvZiBgc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWxgLiBBbG9uZyB3aXRoIHRoZXNlLCBJIG5lZWQgdG8gY29uc2lkZXIgYHBza2JfZXhwYW5kX2hlYWRgLCBgc2tiX2NvcHlfZXhwYW5kYCwgYHNrYl9zZWdtZW50X2xpc3RgLCBhbmQgYHNrYl9zZWdtZW50YCBhbG9uZyB3aXRoIGEgbGlzdCBvZiB4ZnJtIGZ1bmN0aW9ucy4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGljaCBBUEkgZW50cnkgcG9pbnRzIGFyZSBub24tc3RhdGljIGFuZCBub3QgaW5saW5lZCwgc2luY2UgdGhvc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgdG8gaW50cm9kdWNlIGlzc3VlcywgYW5kIHRoZXJlZm9yZSB0aGUgYmVzdCBwbGFjZXMgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBBZnRlciBjb25zaWRlcmluZyB0aGUgbGlzdCwgSSYjMzk7dmUgZ290IG15IGV5ZSBvbiBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGBza2Jfc2VnbWVudGAsIGFuZCBgdmFsaWRhdGVfeG1pdF94ZnJtYC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBzaXRlcyB0byBzZWUgd2hhdCB0aGUgaW5wdXRzIGFyZSwgYW5kIGhvdyB0aGF0IHJlbGF0ZXMgdG8gdGhlIGhlYWRlcnMuCgpXYWl0LCBgcmF3X3NlbmRfaGRyaW5jYCBhbmQgYHJhd3Y2X3NlbmRfaGRyaW5jYCBhcmUgc3RhdGljIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY2FsbCBjb250ZXh0cyB0byBwcm9wZXJseSBpbmNsdWRlIHRoZW0uIEEgcXVpY2sgbG9vayByZXZlYWxzIHRoYXQgYHJhd19zZW5kbXNnYCBjYWxscyBgcmF3X3NlbmRfaGRyaW5jYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGNhbGxzIGByYXd2Nl9zZW5kX2hkcmluY2AuIFNvIEkgc2hvdWxkIGluY2x1ZGUgYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGluIG15IHBsYW4uCgpGaW5hbGx5LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYHZhbGlkYXRlX3htaXRfeGZybWAgaXMgaW5kZWVkIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIHRoYXQgSSBjYW4gZGlyZWN0bHkgZnV6ei4gSXQmIzM5O3MgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLgoKV2l0aCB0aGlzIHVuZGVyc3RhbmRpbmcsIEkgY2FuIG5vdyBkZXNpZ24gYSB0YXJnZXRlZCBmdXp6aW5nIHN0cmF0ZWd5IHRvIGhpdCB0aGUgY3JpdGljYWwgYXJlYXMgd2hlcmUgaW50ZWdlciBvdmVyZmxvd3MgYXJlIG5vdyBiZWluZyBndWFyZGVkIGFnYWluc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmFsaWRhdGVfeG1pdF94ZnJtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jPTEwOT1zdGF0aWMgaW5saW5lIGJvb2wgeG1pdF94ZnJtX2NoZWNrX292ZXJmbG93KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy0xMjAtXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjEyMTpzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLCBib29sICphZ2Fpbilcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMTIyLXtcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1My19XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjI1NDpFWFBPUlRfU1lNQk9MX0dQTCh2YWxpZGF0ZV94bWl0X3hmcm0pO1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy0yNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNDgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipYRlJNIE1vZHVsZSBFeHBsb3JhdGlvbioqCgpSaWdodCwgc28gYHZhbGlkYXRlX3htaXRfeGZybWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZDsgSSBrbmV3IHRoYXQuIE5vdywgd2hhdCBhYm91dCB0aGF0IGBpcHRmc19lbmNhcF9hZGRfaXB2NGAgZnVuY3Rpb24/IEkgc2VlbSB0byByZW1lbWJlciBzZWVpbmcgdGhhdCBzb21ld2hlcmUuLi4gYWgsIHllcywgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCYjMzk7cyBpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gSSYjMzk7bGwgaGF2ZSB0byBkb3VibGUtY2hlY2ssIGJ1dCB0aGF0IHJpbmdzIGEgYmVsbC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzX2VuY2FwX2FkZF9pcHY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMzIxPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kZWxheV90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNTktLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM2MDogKiBpcHRmc19lbmNhcF9hZGRfaXB2NCgpIC0gYWRkIG91dGVyIGVuY2Fwc1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNjEtICogQHg6IHhmcm0gc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3MS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzcyOnN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3My17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI0NjQ9c3RhdGljIGludCBpcHRmc19wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2Ni1cdGlmICh4LVx1MDAzZW91dGVyX21vZGUuZmFtaWx5ID09IEFGX0lORVQpXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2NzpcdFx0cmV0dXJuIGlwdGZzX2VuY2FwX2FkZF9pcHY0KHgsIHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2OC1cdGlmICh4LVx1MDAzZW91dGVyX21vZGUuZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDU6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5MzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqU3RhdGljIENvbnVuZHJ1bXMqKgoKSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBzb21ldGhpbmcgc3RhdGljIOKAkyBzcGVjaWZpY2FsbHksIGBpcHRmc19wcmVwYXJlX291dHB1dGAuIFRoYXQgZnVuY3Rpb24gaXMgKmFsc28qIHN0YXRpYz8gT2theSwgdGhhdCYjMzk7cyBpbW1lZGlhdGVseSByYWlzaW5nIGEgZmxhZy4gU3RhdGljIG1ldGhvZHMgYXJlIHNjb3BlZCB3aXRoaW4gdGhlIGNsYXNzIHRoZXkmIzM5O3JlIGRlZmluZWQgaW4gYW5kIGNhbiYjMzk7dCBiZSBjYWxsZWQgZGlyZWN0bHkgb24gYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcy4gU28sIHRoaXMgdGVsbHMgbWUgYSBjb3VwbGUgb2YgdGhpbmdzIHJpZ2h0IGF3YXk6IHRoZSBjb250ZXh0IG9mIHRoaXMgbXVzdCBhbGwgYmUgd2l0aGluIGEgc2luZ2xlIGNvbXBpbGF0aW9uIHVuaXQsIG9yIG1heWJlIGEgbGlicmFyeSB3aXRoIHNvbWUgbGltaXRhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGV5IHdlbnQgdGhpcyByb3V0ZS4gV2h5IG5vdCBlbmNhcHN1bGF0ZSBpdCBpbiBhbiBvYmplY3QsIGdpdmVuIHRoZSBjb250ZXh0PyBXaGF0IGlzIHRoZSAqZGVzaWduIGludGVudGlvbiogaGVyZT8gSXMgdGhlcmUgYSByZWFzb24gZm9yIHRoaXMgc3RhdGljLW9uLXN0YXRpYyBwYXR0ZXJuIHRoYXQganVzdGlmaWVzIHRoZSBwb3RlbnRpYWwgZm9yIHJlZHVjZWQgZmxleGliaWxpdHkgb3IgdGVzdGFiaWxpdHk/IFRoaXMgaXMgd29ydGggZGlnZ2luZyBkZWVwZXIgaW50by4gQXJlIHdlIGRlYWxpbmcgd2l0aCBzb21lIGtpbmQgb2YgdXRpbGl0eSBmdW5jdGlvbiwgb3IgaXMgdGhlcmUgYSBiaWdnZXIgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbiBoZXJlPyBHb3R0YSBzZWUgaG93IHRoaXMgYWxsIGNvbm5lY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzX3ByZXBhcmVfb3V0cHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNDE5PXN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NTQtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ1NTogKiBpcHRmc19wcmVwYXJlX291dHB1dCgpIC0gIHByZXBhcmUgdGhlIHNrYiBmb3Igb3V0cHV0XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ1Ni0gKiBAeDogeGZybSBzdGF0ZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDYzLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0NjQ6c3RhdGljIGludCBpcHRmc19wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY1LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjc2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzItXHQub3V0cHV0ID0gaXB0ZnNfb3V0cHV0X2NvbGxlY3QsXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3MzpcdC5wcmVwYXJlX291dHB1dCA9IGlwdGZzX3ByZXBhcmVfb3V0cHV0LFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NzQtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQ2FsbGJhY2sgTGFieXJpbnRoKioKCkFscmlnaHQsIHRoYXQmIzM5O3MgYSBjYWxsYmFjay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCYjMzk7cyBjb25uZWN0ZWQgdG8uIExldCYjMzk7cyB0cmFjZSB0aGlzIGJhY2suIEhtbSwgdGhpcyBmZWVscyBmYW1pbGlhci4uLiBhbG1vc3QgbGlrZSBJJiMzOTt2ZSBzZWVuIHNvbWV0aGluZyBzaW1pbGFyLiBNeSBtaW5kIGlzIGFscmVhZHkganVtcGluZyB0byBwb3RlbnRpYWwgcmVsYXRlZCBmdW5jdGlvbiBjYWxscy4KCldoZXJlIGRvZXMgdGhpcyBjb21lIGludG8gcGxheT8gSXQmIzM5O3MgbWFraW5nIG1lIGNvbnNpZGVyIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nLiBDb3VsZCB0aGlzIGJlIHJlbGF0ZWQgdG8gdGhlIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCBmdW5jdGlvbj8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgcGxhY2UgbXkgZXhwZXJpZW5jZSBsZWFkcyBtZS4gSXMgdGhhdCBhIGxpa2VseSBjYW5kaWRhdGU/IFBlcmhhcHMgdGhhdCBpcyB3aGVyZSB0aGUgZmxvdyBpbnRlcnNlY3RzIGFuZCB0aGlzIGNhbGxiYWNrIGlzIGludm9rZWQuIEkgbmVlZCB0byByZW1lbWJlciB0aGUgY29udGV4dCBmb3IgdGhhdCBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA1OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm00X3RyYW5zcG9ydF9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NTE9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnNrYl9kc3RfcG9wKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02My0gKi9cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjQ6c3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NS17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz00Njc9c3RhdGljIGludCB4ZnJtX291dGVyX21vZGVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDc4LVx0XHRpZiAoeC1cdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVClcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NDc5Olx0XHRcdHJldHVybiB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHgsIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ4MC1cdFx0aWYgKHgtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA2MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQW5hbHl6aW5nIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBzb21ldGhpbmcgc3RhdGljLCBhbmQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGJ5IGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgaW1tZWRpYXRlbHkgcG9pbnRzIG1lIHRvd2FyZCBjZXJ0YWluIGFzc3VtcHRpb25zIGFib3V0IHNjb3BlIGFuZCBsaWZldGltZS4gU3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIGNvbnRleHQgdXN1YWxseSBtZWFuIHRoZXkmIzM5O3JlIGludGVybmFsIHRvIGEgc3BlY2lmaWMgY29tcGlsYXRpb24gdW5pdCBvciBmaWxlLCBhbmQgdGhleSBhcmUgdXN1YWxseSBkZWZpbmVkIGF0IGdsb2JhbCBzY29wZS4gV2UgYXJlIGxpa2VseSBkZWFsaW5nIHdpdGggc29tZSBsZXZlbCBvZiBkYXRhIGVuY2Fwc3VsYXRpb24uIE5vdywgdGhlIGtleSBpcyB0aGUgY2FsbGluZyBmdW5jdGlvbjsgYHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXRgLiBUaGF0IG5hbWUgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgb3V0cHV0IHN0YWdlIG9mIHNvbWUga2luZCBvZiB0cmFuc2Zvcm1hdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYW4gJiMzNDtvdXRlciBtb2RlLiYjMzQ7IEdpdmVuIHRoZSB4ZnJtIHByZWZpeCwgSSYjMzk7bSB0aGlua2luZyB3ZSYjMzk7cmUgaW4gdGhlIHJlYWxtIG9mIHRoZSBYRlJNIHN1YnN5c3RlbS4gVGhhdCBtZWFucyB0aGlzIHN0YXRpYyBlbnRpdHkgaXMgcHJvYmFibHkgbWFuYWdpbmcgc29tZSBpbnRlcm5hbCBzdGF0ZSBvciBmdW5jdGlvbmFsaXR5IHNwZWNpZmljIHRvIGhvdyBwYWNrZXRzIGFyZSBoYW5kbGVkIHdoZW4gZ29pbmcgKm91dCogdGhyb3VnaCB0aGUgb3V0ZXIgZW5jYXBzdWxhdGlvbiAob3IgZGVjYXBzdWxhdGlvbiwgZGVwZW5kaW5nIG9uIGNvbnRleHQpLiBUaGlzIG1lYW5zIGl0IGlzIGxpa2VseSBpbnZvbHZlZCB3aXRoIHRoaW5ncyBsaWtlIGhlYWRlcnMgb3IgY2hlY2tzdW0uIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIGl0cyBzdHJ1Y3R1cmUgdG8gZXZhbHVhdGUgdGhlIGV4YWN0IHJvbGUgaXQgcGxheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NDQxPXN0YXRpYyBpbnQgeGZybTZfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00NjYtXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ2NzpzdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ2OC17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00OTgtI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9QS1RHRU4pXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjQ5OTppbnQgcGt0Z2VuX3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMC17XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjUwMTpcdHJldHVybiB4ZnJtX291dGVyX21vZGVfb3V0cHV0KHgsIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMi19XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjUwMzpFWFBPUlRfU1lNQk9MX0dQTChwa3RnZW5feGZybV9vdXRlcl9tb2RlX291dHB1dCk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNC0jZW5kaWZcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTUwNj1zdGF0aWMgaW50IHhmcm1fb3V0cHV0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTIzLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1MjQ6XHRcdGVyciA9IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTI1LVx0XHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODM0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gT3V0cHV0IFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgeGZybV9vdXRwdXRgIHN0dWZmLiBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBwYWNrZXRzIGdldCBzZW50IG91dC4gSSYjMzk7dmUgbm90aWNlZCBgeGZybV9vdXRwdXRfb25lYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBjYWxscyBpdCwgc3BlY2lmaWNhbGx5LiBUaGF0JiMzOTtzIHN0YXRpY2FsbHkgZGVjbGFyZWQsIHdoaWNoIHN1Z2dlc3RzIGEgY2VydGFpbiBsZXZlbCBvZiBjb250cm9sIG9yIHBlcmhhcHMgb3B0aW1pemF0aW9uIGF0IGNvbXBpbGUgdGltZS4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgeGZybV9vdXRwdXRgIGZpdHMgaW50byB0aGUgcGljdHVyZSBtb3JlIGJyb2FkbHkuIFdoYXQmIzM5O3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28/IElzIGB4ZnJtX291dHB1dGAgdGhlIGNvcmUsIGdlbmVyaWMgZnVuY3Rpb24sIGFuZCBgeGZybV9vdXRwdXRfb25lYCBhIHNwZWNpYWxpemVkIGluc3RhbmNlIG9yIGhlbHBlcj8gT3IgaXMgaXQgdGhlIG90aGVyIHdheSBhcm91bmQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBjYWxscy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gYW5kIHVuZGVyc3RhbmQgd2hlcmUgYHhmcm1fb3V0cHV0YCBnZXRzIGNhbGxlZCBmcm9tLCBhbmQgaG93LCBpbiBjb250cmFzdCB0byBgeGZybV9vdXRwdXRfb25lYC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gaXMga2V5IHRvIGhvdyB0aGUgc3lzdGVtIGFjdHVhbGx5IG91dHB1dHMgdHJhbnNmb3JtZWQgcGFja2V0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9vdXRwdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX291dHB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMi0vKlxubmV0L3hmcm0veGZybV9vdXRwdXQuYzozOiAqIHhmcm1fb3V0cHV0LmMgLSBDb21tb24gSVBzZWMgZW5jYXBzdWxhdGlvbiBjb2RlLlxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00LSAqXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy0yNi1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6Mjc6c3RhdGljIGludCB4ZnJtX291dHB1dDIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy0yOC1zdGF0aWMgaW50IHhmcm1faW5uZXJfZXh0cmFjdF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NTAzPUVYUE9SVF9TWU1CT0xfR1BMKHBrdGdlbl94ZnJtX291dGVyX21vZGVfb3V0cHV0KTtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NTA2OnN0YXRpYyBpbnQgeGZybV9vdXRwdXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNy17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01OTktXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYwMDppbnQgeGZybV9vdXRwdXRfcmVzdW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjAxLXtcbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYwMy1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjA0Olx0d2hpbGUgKGxpa2VseSgoZXJyID0geGZybV9vdXRwdXRfb25lKHNrYiwgZXJyKSkgPT0gMCkpIHtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjA1LVx0XHRuZl9yZXNldF9jdChza2IpO1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjE1LVx0XHRcdCAgICAgIE5GX0lORVRfUE9TVF9ST1VUSU5HLCBuZXQsIHNrLCBza2IsXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYxNjpcdFx0XHQgICAgICBOVUxMLCBza2JfZHN0KHNrYiktXHUwMDNlZGV2LCB4ZnJtX291dHB1dDIpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MTctXHRcdGlmICh1bmxpa2VseShlcnIgIT0gMSkpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02MjYtfVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2Mjc6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9vdXRwdXRfcmVzdW1lKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjI4LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYz02Mjk9c3RhdGljIGludCB4ZnJtX2Rldl9kaXJlY3Rfb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHhmcm1fc3RhdGUgKngsXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NjItXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY2MzpzdGF0aWMgaW50IHhmcm1fb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY0LXtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjY1Olx0cmV0dXJuIHhmcm1fb3V0cHV0X3Jlc3VtZShzaywgc2tiLCAxKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY2LX1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY3LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2Njg6c3RhdGljIGludCB4ZnJtX291dHB1dF9nc28oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2OS17XG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02ODQtXHRcdHNrYl9tYXJrX25vdF9vbl9saXN0KHNlZ3MpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2ODU6XHRcdGVyciA9IHhmcm1fb3V0cHV0MihuZXQsIHNrLCBzZWdzKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjg2LVxuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM9NzA2PXN0YXRpYyB2b2lkIHhmcm1fZ2V0X2lubmVyX2lwcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03NTYtXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjc1NzppbnQgeGZybV9vdXRwdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03NTgte1xuLS1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzk2LVxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo3OTc6XHRcdHJldHVybiB4ZnJtX291dHB1dF9yZXN1bWUoc2ssIHNrYiwgMCk7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc5OC1cdH1cbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgyMC1cdFx0XHRpZiAoc2tiLVx1MDAzZWlubmVyX3Byb3RvY29sIFx1MDAyNlx1MDAyNiB4LVx1MDAzZXByb3BzLm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTClcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODIxOlx0XHRcdFx0cmV0dXJuIHhmcm1fb3V0cHV0X2dzbyhuZXQsIHNrLCBza2IpO1xubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MjItXG4tLVxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MzAtXHRcdGlmIChza2JfaXNfZ3NvKHNrYikpXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjgzMTpcdFx0XHRyZXR1cm4geGZybV9vdXRwdXRfZ3NvKG5ldCwgc2ssIHNrYik7XG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgzMi1cdH1cbi0tXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTg0My1vdXQ6XG5uZXQveGZybS94ZnJtX291dHB1dC5jOjg0NDpcdHJldHVybiB4ZnJtX291dHB1dDIobmV0LCBzaywgc2tiKTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODQ1LX1cbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODQ2OkVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fb3V0cHV0KTtcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU2NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRm9jdXMgU3ltYm9sIENvbnNpZGVyYXRpb25zIGZvciBQYWNrZXQgVHJhbnNmb3JtYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGtleSBmdW5jdGlvbnMgZm9yIG1hcmtpbmcgZm9jdXMgc3ltYm9scyByZWxhdGVkIHRvIHBhY2tldCB0cmFuc2Zvcm1hdGlvbnMuIFRoZSBmYWN0IHRoYXQgYHhmcm1fb3V0cHV0YCBpcyBleHBvcnRlZCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIG1lYW5pbmcgd2UgY2FuIGRlZmluaXRlbHkgaG9vayBpbnRvIHRoYXQuIFRoYXQmIzM5O3MgYSBjb3JlIGZ1bmN0aW9uLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBmb2N1cyB0aGVyZS4KCk5vdywgZm9yIGFjdHVhbCBjYW5kaWRhdGVzLCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGEgZmV3IGtleSByb3V0aW5lcyB0aGF0IGRlYWwgd2l0aCBidWZmZXIgbWFuaXB1bGF0aW9uIGR1cmluZyB0cmFuc2Zvcm1hdGlvbjogYHBza2JfZXhwYW5kX2hlYWRgLCBgc2tiX2NvcHlfZXhwYW5kYCwgYHNrYl9zZWdtZW50X2xpc3RgLCBhbmQgYHNrYl9zZWdtZW50YC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZvciBoYW5kbGluZyB0aGUgU0tCcyBpbnZvbHZlZCBhbmQgY291bGQgcmV2ZWFsIGltcG9ydGFudCBwb2ludHMgZm9yIG91ciBmb2N1cy4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhhdCBvbmUgb3IgbW9yZSBvZiB0aGVtIHdpbGwgYmUgc3VpdGFibGUuCgpXZSBhbHNvIGhhdmUgdG8gcmVtZW1iZXIgYHhmcm1fb3V0cHV0YCBpdHNlbGYgbmVlZHMgY29uc2lkZXJhdGlvbi4KCldhaXQgYSBzZWNvbmQsIGxldCYjMzk7cyBub3QgYmUgaGFzdHkhIFdlIGNhbiYjMzk7dCBmb3JnZXQgYWJvdXQgdGhvc2UgKnJhdyogc29ja2V0cy4gYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGFyZSBhY3R1YWxseSBhbHNvIHF1aXRlIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBjYWxsIGByYXdfc2VuZF9oZHJpbmNgIGFuZCBgcmF3djZfc2VuZF9oZHJpbmNgLiBUaGlzIGlzIGEgdmVyeSB2YWxpZCBwb2ludCEgVGhvc2UgKmNvdWxkKiBiZSBqdXN0IGFzLCBvciBldmVuIG1vcmUsIHJldmVhbGluZyB0aGFuIHNvbWUgb2YgdGhlIG90aGVycywgYXMgdGhlIGhlYWRlciBpbmNsdXNpb24gbWlnaHQgYmUgYSBjcml0aWNhbCBzdGFnZS4gSSBuZWVkIHRvIGJlIHN1cmUgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZW0gYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyYXdfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3Jhdy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3Jhdy5jPTQ2Mj1zdGF0aWMgaW50IHJhd19nZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBpbnQgb2RkLFxuLS1cbm5ldC9pcHY0L3Jhdy5jLTQ5Mi1cbm5ldC9pcHY0L3Jhdy5jOjQ5MzpzdGF0aWMgaW50IHJhd19zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxubmV0L2lwdjQvcmF3LmMtNDk0LXtcbi0tXG5uZXQvaXB2NC9yYXcuYz05NDM9c3RydWN0IHByb3RvIHJhd19wcm90ID0ge1xuLS1cbm5ldC9pcHY0L3Jhdy5jLTk1My1cdC5nZXRzb2Nrb3B0XHQgICA9IHJhd19nZXRzb2Nrb3B0LFxubmV0L2lwdjQvcmF3LmM6OTU0Olx0LnNlbmRtc2dcdCAgID0gcmF3X3NlbmRtc2csXG5uZXQvaXB2NC9yYXcuYy05NTUtXHQucmVjdm1zZ1x0ICAgPSByYXdfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gdGhlIFNlbmRtc2cgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJhdyBzb2NrZXRzLCBhbmQgdGhlIGxvZ2ljYWwgZW50cnkgcG9pbnQgZm9yIHNlbmRpbmcgYSBtZXNzYWdlIGhhcyB0byBiZSBgcmF3X3NlbmRtc2dgLiBObyBxdWVzdGlvbiB0aGVyZS4gTm93LCB0aGUgcmVhbCBuaXR0eS1ncml0dHkgbGllcyBkZWVwZXIsIGFuZCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgSVB2NiBzcGVjaWZpYyB2ZXJzaW9uIGhhbmRsZXMgaXQuIExldCYjMzk7cyBkaWcgaW50byBgcmF3djZfc2VuZG1zZ2AgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSXQmIzM5O3MgdGltZSB0byBjaGVjayB3aGF0IGtpbmQgb2YgcHJvY2Vzc2luZyBhbmQgZGF0YSBoYW5kbGluZyB0aGF0IG1vZHVsZSBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyYXd2Nl9zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcmF3LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcmF3LmM9NzE1PXN0YXRpYyBpbnQgcmF3Nl9nZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBpbnQgb2RkLFxuLS1cbm5ldC9pcHY2L3Jhdy5jLTc0NS1cbm5ldC9pcHY2L3Jhdy5jOjc0NjpzdGF0aWMgaW50IHJhd3Y2X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG5uZXQvaXB2Ni9yYXcuYy03NDcte1xuLS1cbm5ldC9pcHY2L3Jhdy5jPTEyMDA9c3RydWN0IHByb3RvIHJhd3Y2X3Byb3QgPSB7XG4tLVxubmV0L2lwdjYvcmF3LmMtMTIxMC1cdC5nZXRzb2Nrb3B0XHQgICA9IHJhd3Y2X2dldHNvY2tvcHQsXG5uZXQvaXB2Ni9yYXcuYzoxMjExOlx0LnNlbmRtc2dcdCAgID0gcmF3djZfc2VuZG1zZyxcbm5ldC9pcHY2L3Jhdy5jLTEyMTItXHQucmVjdm1zZ1x0ICAgPSByYXd2Nl9yZWN2bXNnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY2OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBSYXd2NiBTZW5kbXNnIFBhdGggYW5kIFhGUk0gT2ZmbG9hZCoqCgpPa2F5LCBzbyBgcmF3djZfc2VuZG1zZ2Ag4oCTIHRoYXTigJlzIHRoZSBBUEkgZW50cnkgcG9pbnQsIGdvdCBpdC4gTm93LCB3aGF0JiMzOTtzIHRoZSBkZWFsIHdpdGggYENPTkZJR19YRlJNX09GRkxPQURgPyBJIHJlY2FsbCBzZWVpbmcgaXQgcG9wIHVwIGluIHNvbWUgcmVsYXRlZCBjb250ZXh0cy4gTGV0IG1lIGRpZyBhIGJpdCBkZWVwZXIuCgpSaWdodCwgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLCB0aGVyZSYjMzk7cyBhIHdob2xlIHN1aXRlIG9mIGZ1bmN0aW9ucyDigJMgYF9feGZybV90cmFuc3BvcnRfcHJlcGAsIGBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcGAsIGBfX3hmcm1fbW9kZV9iZWV0X3ByZXBgLCBgeGZybV9vdXRlcl9tb2RlX3ByZXBgLCBhbmQgYHZhbGlkYXRlX3htaXRfeGZybWAg4oCTIGFsbCBndWFyZGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yLiBFbmFibGluZyBgWEZSTV9PRkZMT0FEYCBpcyBkZWZpbml0ZWx5IG9uIHRoZSByYWRhci4gSXQgc2VlbXMgY3J1Y2lhbCB0byB0aGUgb3ZlcmFsbCBmbG93LCBzcGVjaWZpY2FsbHkgZm9yIG9mZmxvYWRpbmcgdHJhbnNmb3JtYXRpb25zLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gSXQmIzM5O3MgcmVsYXRlZCB0byBJUC1URlMsIGFuZCBJIHNlZSBgaXB0ZnNfZW5jYXBfYWRkX2lwdjRgIGFuZCBgaXB0ZnNfZW5jYXBfYWRkX2lwdjZgIGluIHRoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGB4ZnJtX2lwdGZzLmNgIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFRoaXMgZ2l2ZXMgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IElQc2VjIGFuZCBJUC1URlMgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgYnJvYWRlciBvZmZsb2FkIG1lY2hhbmlzbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1faXB0ZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfWEZSTV9JTlRFUkZBQ0UpICYjNDM7PSB4ZnJtX2ludGVyZmFjZS5vXG5uZXQveGZybS9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub1xubmV0L3hmcm0vTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX1hGUk1fRVNQSU5UQ1ApICYjNDM7PSBlc3BpbnRjcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzExCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKklQc2VjIE9mZmxvYWQgQ29uc2lkZXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgaW1wbGljYXRpb24gaXMgcHJldHR5IGNsZWFyOiB3ZSBuZWVkIHRvIGVuc3VyZSBgWEZSTV9JUFRGU2AgaXMgZW5hYmxlZC4gSXQgc291bmRzIGxpa2Ugc29tZW9uZSYjMzk7cyBlaXRoZXIgZW5jb3VudGVyaW5nIGFuIGlzc3VlIHdpdGggb3IgcGxhbm5pbmcgdG8gbGV2ZXJhZ2UgSVBzZWMgdHJhZmZpYyBmaWx0ZXJpbmcsIGFuZCB0aGF0IGxpa2VseSBoaW5nZXMgb24gaGF2aW5nIHRoZSBhcHByb3ByaWF0ZSBpbmZyYXN0cnVjdHVyZSBpbiBwbGFjZS4KClNvLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MsIHRvIGJlIHN1cmUuIE15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBleGFtaW5lIHRoZSBvZmZsb2FkIGltcGxlbWVudGF0aW9ucyBmb3IgRVNQIGluIGJvdGggSVB2NCBhbmQgSVB2NiBjb250ZXh0cy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBuZXQvaXB2NC9lc3A0X29mZmxvYWQuY2AgYW5kIGBuZXQvaXB2Ni9lc3A2X29mZmxvYWQuY2AuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaG93IHRoZSBvZmZsb2FkIHBhdGhzIGFyZSBzZXQgdXAgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGZpbHRlcmluZyBtZWNoYW5pc21zLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aGUgaW50ZXJhY3Rpb25zIGFyZSBlZmZpY2llbnQgYW5kIGNvcnJlY3QsIGFuZCB3aGV0aGVyIGBYRlJNX0lQVEZTYCBpcyBjb3JyZWN0bHkgaW50ZWdyYXRlZC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHByb3BlciBvZmZsb2FkIGludGVncmF0aW9uIGlzIGVzc2VudGlhbC4gSSB3YW50IHRvIHNlZSBob3cgdGhlIG9mZmxvYWQgcGF0aCBhbmQgdGhlIGZpcmV3YWxsIHBhdGggaW50ZXJhY3Qgd2l0aCBlYWNoIG90aGVyLiBUaGlzIHdpbGwgbWFrZSBpdCBwb3NzaWJsZSB0byBpZGVudGlmeSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGluZWZmaWNpZW5jaWVzLCBvciBldmVuIGJ1Z3MgcmVsYXRlZCB0byB0aGUgdHJhZmZpYyBmaWx0ZXJpbmcgYW5kIHRoZSBJUFNlYyBvZmZsb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3A0X29mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT0zNj1vYmotJChDT05GSUdfSU5FVF9FU1ApICYjNDM7PSBlc3A0Lm9cbm5ldC9pcHY0L01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19JTkVUX0VTUF9PRkZMT0FEKSAmIzQzOz0gZXNwNF9vZmZsb2FkLm9cbm5ldC9pcHY0L01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19JTkVUX0lQQ09NUCkgJiM0Mzs9IGlwY29tcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzQ4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRVNQIE9mZmxvYWQgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBiYXNlZCBvbiB3aGF0IEkmIzM5O20gdGhpbmtpbmcgaGVyZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAgYXJlIGVuYWJsZWQuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBjcnVjaWFsLiBUaGlzIGlzIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgSVBzZWMgRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIChFU1ApIG9mZmxvYWRpbmcgaXMgYWN0aXZlIGZvciBib3RoIElQdjQgYW5kIElQdjYgdHJhZmZpYy4gV2UmIzM5O3JlIG9idmlvdXNseSBsb29raW5nIHRvIGxldmVyYWdlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiB3aGVyZSBhdmFpbGFibGUsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBvbiBoaWdoZXItYmFuZHdpZHRoIGNvbm5lY3Rpb25zLiBUaGUgcmVhc29uaW5nIGhlcmUgaXMgYmFzaWM6IENQVSBjeWNsZXMgYXJlIGV4cGVuc2l2ZSwgYW5kIGRlZGljYXRpbmcgdGhlbSB0byBlbmNyeXB0aW9uL2RlY3J5cHRpb24gdGFza3Mgd2hlbiB0aGUgTklDIGNhbiBoYW5kbGUgaXQgaXMganVzdCBpbmVmZmljaWVudC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoZSBwbGF0Zm9ybSYjMzk7cyBoYXJkd2FyZSBpcyBjYXBhYmxlIG9mIEVTUCBvZmZsb2FkIGFuZCB0aGF0IHRoZSByZWxldmFudCBkcml2ZXIgc3VwcG9ydCBpcyBwcmVzZW50OyBpZiBub3QsIHdlJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGZpcnN0LCBvciB0aGUgYmVuZWZpdHMgd2lsbCBuZXZlciBtYW5pZmVzdC4gVWx0aW1hdGVseSwgc2V0dGluZyB0aGVzZSBvcHRpb25zIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBhY2hpZXZpbmcgb3B0aW1hbCB0aHJvdWdocHV0IGFuZCByZWR1Y2luZyBsYXRlbmN5IHdpdGggSVBzZWMtcHJvdGVjdGVkIGNvbW11bmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlc3A2X29mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfSU5FVDZfRVNQKSAmIzQzOz0gZXNwNi5vXG5uZXQvaXB2Ni9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICYjNDM7PSBlc3A2X29mZmxvYWQub1xubmV0L2lwdjYvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX0lORVQ2X0lQQ09NUCkgJiM0Mzs9IGlwY29tcDYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTEzMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgT2ZmbG9hZCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYCBoYXZlIGFueSBsdXJraW5nIGRlcGVuZGVuY2llcy4gSSYjMzk7bSB0aGlua2luZyBiZXlvbmQgdGhlIG9idmlvdXM7IGFyZSB0aGVyZSBhbnkgc3VidGxlLCBpbmRpcmVjdCBjb25uZWN0aW9ucyB0byBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGlkZW50aWZ5aW5nIHdoYXQmIzM5O3MgKnJlcXVpcmVkKiBmb3IgdGhlbSB0byBmdW5jdGlvbiwgYnV0IGFsc28gYWJvdXQgdW5kZXJzdGFuZGluZyB3aGF0IHRoZXkgbWlnaHQgKmltcGFjdCogb3IgYmUgaW1wYWN0ZWQgYnkuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlIGJlZm9yZSBwcm9jZWVkaW5nLiBUaW1lIHRvIGRpZyBpbiBhbmQgYXZvaWQgYW55IGZ1dHVyZSBzdXJwcmlzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM1ND1jb25maWcgSU5FVF9FU1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXG5uZXQvaXB2NC9LY29uZmlnLTM3MC1cdHRyaXN0YXRlIFwmIzM0O0lQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQzMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIGBJTkVUX0VTUF9PRkZMT0FEYCBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBJTkVUX0VTUF9PRkZMT0FEYC4gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIElQc2VjIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCAoRVNQKSBvZmZsb2FkLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBmaXRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIHR5cGljYWwgcGxhY2UgZm9yIElQdjQtc3BlY2lmaWMgbmV0d29yayBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBpcyBhIExpbnV4IGtlcm5lbCBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIEkmIzM5O2xsIG9wZW4gdGhhdCBLY29uZmlnIGZpbGUgYW5kIGxvb2sgZm9yIGBJTkVUX0VTUF9PRkZMT0FEYCAob3Igc2ltaWxhcikuIFRoYXQgd2lsbCB0ZWxsIG1lIHdoaWNoIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkZXBlbmQgb24gaXQsIGFuZCB3aGF0IGl0IGRlcGVuZHMgb24uIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25mbGljdHMsIGVuYWJsaW5nIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgaXQgd2l0aGluIGEgYmlnZ2VyIHBpY3R1cmUuIFRoYXQmIzM5O3MgdGhlIHNtYXJ0IG1vdmUgYmVmb3JlIGdldHRpbmcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjk6XHRjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuIDM3MDpcdFx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXCYjMzQ7XG4gMzcxOlx0XHRkZXBlbmRzIG9uIElORVRfRVNQXG4gMzcyOlx0XHRzZWxlY3QgWEZSTV9PRkZMT0FEXG4gMzczOlx0XHRkZWZhdWx0IG5cbiAzNzQ6XHRcdGhlbHBcbiAzNzU6XHRcdCAgU3VwcG9ydCBmb3IgRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWQuIFRoaXMgbWFrZXMgc2Vuc2VcbiAzNzY6XHRcdCAgb25seSBpZiB0aGlzIHN5c3RlbSByZWFsbHkgZG9lcyBJUHNlYyBhbmQgd2FudCB0byBkbyBpdFxuIDM3NzpcdFx0ICB3aXRoIGhpZ2ggdGhyb3VnaHB1dC4gQSB0eXBpY2FsIGRlc2t0b3Agc3lzdGVtIGRvZXMgbm90XG4gMzc4Olx0XHQgIG5lZWQgaXQsIGV2ZW4gaWYgaXQgZG9lcyBJUHNlYy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4ODYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRlcGVuZGVuY2llcywgc3VtbWFyaXplZCBhcyBhIHRob3VnaHQgcHJvY2VzcyBJIG1pZ2h0IGhhdmU6CgoqKk5ldHdvcmsgU2VjdXJpdHkgTW9kdWxlIERlcGVuZGVuY2llcyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgc2VjdXJpdHkgbW9kdWxlIGNvbmZpZ3VyYXRpb25zLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCByZWFsbHkuIEl0IHNlZW1zIHRoYXQgdGhlIGBJTkVUX0VTUF9PRkZMT0FEYCBmZWF0dXJlLCB0aGF0JiMzOTtzIHJlbGlhbnQgb24gdGhlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvZiBFU1AgKEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCksIGlzIG5hdHVyYWxseSBkZXBlbmRlbnQgb24gdGhlIGNvcmUgYElORVRfRVNQYCBtb2R1bGUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2U7IG9mZmxvYWRpbmcgc29tZXRoaW5nIHJlcXVpcmVzIHRoZSBiYXNlIGZ1bmN0aW9uYWxpdHkgdG8gZXhpc3QsIHNvIEVTUCBoYXMgdG8gYmUgZW5hYmxlZCBmaXJzdC4gU2ltaWxhcmx5LCB0aGUgYElORVQ2X0VTUF9PRkZMT0FEYCBmZWF0dXJlLCBoYW5kbGluZyBFU1Agb2ZmbG9hZCBmb3IgSVB2NiB0cmFmZmljLCBjbGVhcmx5IGlzIGNvbnRpbmdlbnQgb24gdGhlIGZvdW5kYXRpb25hbCBgSU5FVDZfRVNQYCBtb2R1bGUgYmVpbmcgcHJlc2VudCBhbmQgZnVuY3Rpb25hbC4gSXQmIzM5O3MgYSBjbGVhbiBoaWVyYXJjaGljYWwgZGVwZW5kZW5jeTsgb2ZmbG9hZCBkZXBlbmRzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4gTm90aGluZyB0b28gY29tcGxleCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRjb25maWcgSVBWNl9HUkVcbiAyMTE6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEdSRSB0dW5uZWxcJiMzNDtcbiAyMTI6XHRcdHNlbGVjdCBJUFY2X1RVTk5FTFxuIDIxMzpcdFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbiAyMTQ6XHRcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXG4gMjE1Olx0XHRoZWxwXG4gMjE2Olx0XHQgIFR1bm5lbGluZyBtZWFucyBlbmNhcHN1bGF0aW5nIGRhdGEgb2Ygb25lIHByb3RvY29sIHR5cGUgd2l0aGluXG4gMjE3Olx0XHQgIGFub3RoZXIgcHJvdG9jb2wgYW5kIHNlbmRpbmcgaXQgb3ZlciBhIGNoYW5uZWwgdGhhdCB1bmRlcnN0YW5kcyB0aGVcbiAyMTg6XHRcdCAgZW5jYXBzdWxhdGluZyBwcm90b2NvbC4gVGhpcyBwYXJ0aWN1bGFyIHR1bm5lbGluZyBkcml2ZXIgaW1wbGVtZW50c1xuIDIxOTpcdFx0ICBHUkUgKEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uKSBhbmQgYXQgdGhpcyB0aW1lIGFsbG93c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkZpbmRpbmcgdGhlIElQdjYgRVNQIE9mZmxvYWQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMuIExldCBtZSBzZWUuLi4gSSBuZWVkIHRvIGxvY2F0ZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIElQdjYgRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIChFU1ApIG9mZmxvYWQuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gQWgsIHJpZ2h0LCBpdCYjMzk7cyBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgd2l0aGluIHRoZSBJUHY2IG5ldHdvcmsgc3RhY2ssIHNvIEkgc2hvdWxkIGJlIGxvb2tpbmcgaW4gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gcHJldHR5IHN1cmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUga2VwdCBpbiB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBvcGVuIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZS4gVGhhdCBzaG91bGQgaGF2ZSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgLSBgSU5FVDZfRVNQX09GRkxPQURgLiBMZXQgbWUgZ28gZmluZCB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz02Mj1jb25maWcgSU5FVDZfRVNQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy03Ni1cbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MjcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUHY2IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzb3VyY2Ugb2YgdHJ1dGgsIGFuZCBmb3IgdGhpcywgSSYjMzk7bSB0aGlua2luZyB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIGBuZXQvaXB2NmAgZGlyZWN0b3J5IGlzIHRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luLiBTcGVjaWZpY2FsbHksIGFyb3VuZCBsaW5lIDc3IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludC4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgaW4gbW9yZSBkZXRhaWwsIGFuZCBzZWVpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBpcyBhIGdvb2Qgd2F5IHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDc3Olx0Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG4gIDc4Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFwmIzM0O1xuICA3OTpcdFx0ZGVwZW5kcyBvbiBJTkVUNl9FU1BcbiAgODA6XHRcdHNlbGVjdCBYRlJNX09GRkxPQURcbiAgODE6XHRcdGRlZmF1bHQgblxuICA4MjpcdFx0aGVscFxuICA4MzpcdFx0ICBTdXBwb3J0IGZvciBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZC4gVGhpcyBtYWtlcyBzZW5zZVxuICA4NDpcdFx0ICBvbmx5IGlmIHRoaXMgc3lzdGVtIHJlYWxseSBkb2VzIElQc2VjIGFuZCB3YW50IHRvIGRvIGl0XG4gIDg1Olx0XHQgIHdpdGggaGlnaCB0aHJvdWdocHV0LiBBIHR5cGljYWwgZGVza3RvcCBzeXN0ZW0gZG9lcyBub3RcbiAgODY6XHRcdCAgbmVlZCBpdCwgZXZlbiBpZiBpdCBkb2VzIElQc2VjLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKklORVQ2X0VTUF9PRkZMT0FEIGFuZCB0aGUgQmlnZ2VyIFBpY3R1cmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIGFuZCBpbW1lZGlhdGVseSBhIGRlcGVuZGVuY3kgc3RhbmRzIG91dC4gU3BlY2lmaWNhbGx5LCB0aGlzIGBJTkVUNl9FU1BfT0ZGTE9BRGAgdGhpbmfigKYgeWVhaCwgaXQgY2xlYXJseSBoaW5nZXMgb24gYElORVQ2X0VTUGAgYmVpbmcgZW5hYmxlZC4gVGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBubyBzdXJwcmlzZXMgdGhlcmUuCgpCdXQgbm93LCBJJiMzOTttIHRoaW5raW5nIGJleW9uZCB0aGF0IGltbWVkaWF0ZSBsaW5rLiBXaGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBzb21ldGhpbmcgbGlrZSBgWEZSTV9JUFRGU2A/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaGFzIGFuIGltcGFjdCBvbiB0aGUgSVBzZWMgc3RhY2sgY29uZmlndXJhdGlvbiBhbmQgaG93IHRoZXNlIGZlYXR1cmVzIHBsYXkgd2l0aCBlYWNoIG90aGVyLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IGNvbmZsaWN0cyBvciBjby1kZXBlbmRlbmNpZXMgSSYjMzk7bSBvdmVybG9va2luZyBoZXJlIHRoYXQgY291bGQgaW50cm9kdWNlIGluc3RhYmlsaXR5IGlmIG5vdCBhY2NvdW50ZWQgZm9yLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyYjMzk7cyBpbnRlZ3JhdGVkIGFuZCBwbGF5aW5nIG5pY2VseSB0b2dldGhlci4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX0lQVEZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xubmV0L3hmcm0vS2NvbmZpZy0xNDItXHR0cmlzdGF0ZSBcJiMzNDtJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBYRlJNIEtjb25maWcgT3B0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE0MS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgWEZSTSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgc3dpdGNoZXMgdGhhdCBkZXRlcm1pbmUgd2hpY2ggWEZSTSBmdW5jdGlvbmFsaXRpZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIGxpa2VseSB0aGVyZSYjMzk7cyBhIGRlcGVuZGVuY3kgY2hhaW4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYW5kIHRoYXQgdGhpcyBzZWN0aW9uIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHdoaWNoIFhGUk0gZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBvciBidWlsdCBhcyBtb2R1bGVzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBncmFudWxhciBjb250cm9scywgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG5ldyBvcHRpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBkdWcgaW50byB0aGlzIGFyZWEuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBrbm9icyBmb3IgWEZSTSBpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MTpcdGNvbmZpZyBYRlJNX0lQVEZTXG4gMTQyOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuIDE0MzpcdFx0ZGVwZW5kcyBvbiBYRlJNXG4gMTQ0Olx0XHRoZWxwXG4gMTQ1Olx0XHQgIEluZm9ybWF0aW9uIG9uIHRoZSBJUC1URlMvQUdHRlJBRyBlbmNhcHN1bGF0aW9uIGNhbiBiZSBmb3VuZFxuIDE0NjpcdFx0ICBpbiBSRkMgOTM0Ny4gVGhpcyBmZWF0dXJlIHN1cHBvcnRzIGRlbWFuZCBkcml2ZW4gKGkuZS4sXG4gMTQ3Olx0XHQgIG5vbi1jb25zdGFudCBzZW5kIHJhdGUpIElQLVRGUyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVcbiAxNDg6XHRcdCAgQUdHRlJBRyBFU1AgcGF5bG9hZCBlbmNhcHN1bGF0aW9uLiBUaGlzIHBheWxvYWQgdHlwZVxuIDE0OTpcdFx0ICBzdXBwb3J0cyBhZ2dyZWdhdGlvbiBhbmQgZnJhZ21lbnRhdGlvbiBvZiB0aGUgaW5uZXIgSVBcbiAxNTA6XHRcdCAgcGFja2V0IHN0cmVhbSB3aGljaCBpbiB0dXJuIHlpZWxkcyBoaWdoZXIgc21hbGwtcGFja2V0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzczCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gZ2V0dGluZyBgWEZSTV9JUFRGU2AgdXAgYW5kIHJ1bm5pbmcsIGFuZCBhcyBJIHN1c3BlY3RlZCwgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGBYRlJNYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSByaWdodCBjb21wb25lbnRzIGVuYWJsZWQuIE15IGNoZWNrbGlzdCB3aWxsIGluY2x1ZGUgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBJTkVUX0VTUGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUGAsIGFuZCBgSU5FVDZfRVNQX09GRkxPQURgLiBUaGVzZSBhcmUgYWxsIHByZXR0eSBzdGFuZGFyZCBmb3IgZW5hYmxpbmcgRVNQLgoKTm93LCB3ZSBkZWZpbml0ZWx5IG5lZWQgYFhGUk1fSVBURlNgIGl0c2VsZiwgdGhhdCYjMzk7cyB0aGUgY29yZS4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgYXQgYFhGUk1fT0ZGTE9BRGAuICBJIGJlbGlldmUgdGhpcyBpcyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGJvdGggYElORVRfRVNQX09GRkxPQURgIGFuZCBgSU5FVDZfRVNQX09GRkxPQURgLCBidXQgSSYjMzk7bGwgbWFrZSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQgaWYgcG9zc2libGUsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGEgYHNlbGVjdGAgb3B0aW9uLCBtZWFuaW5nIGl0IG1pZ2h0IG5vdCBiZSBkaXJlY3RseSBzZWxlY3RhYmxlLiBJdCYjMzk7cyBhbHdheXMgZ29vZCBwcmFjdGljZSB0byBkb3VibGUtY2hlY2sgdGhlc2UgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbnMgZm9yIGBYRlJNX09GRkxPQURgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTU9Y29uZmlnIFhGUk1cbi0tXG5uZXQveGZybS9LY29uZmlnLTEwLVxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXG5uZXQveGZybS9LY29uZmlnLTEyLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI0OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGlzIENvbmZpZ3VyYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSXQmIzM5O3MgYSBib29sZWFuLCBidXQgaXQmIzM5O3Mgbm90IGV4cG9zZWQgd2l0aCBhIGRpcmVjdCBwcm9tcHQsIHdoaWNoIGlzIHVudXN1YWwuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQmIzM5O3MgaW1wbGljaXRseSBlbmFibGVkIGJ5IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYElORVRfRVNQX09GRkxPQURgIGFuZCBgSU5FVDZfRVNQX09GRkxPQURgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIGtub3cgKndoeSogdGhpcyBpcyBzZXQgdXAgdGhlIHdheSBpdCBpcy4KCk15IG5leHQgc3RlcCBpcyBhbHdheXMgdG8gY2hlY2sgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIGlzIHVzZWQuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvaXB2NC9yYXcuY2AgYW5kIGBuZXQvaXB2Ni9yYXcuY2AsIHdoaWNoIGFyZSBjb21waWxlZCB3aGVuZXZlciBgSU5FVGAgYW5kIGBJUFY2YCBhcmUgZW5hYmxlZCByZXNwZWN0aXZlbHkuIEdpdmVuIHRoYXQgdGhvc2UgYXJlIHByZXR0eSBmb3VuZGF0aW9uYWwsIGl0IHN1Z2dlc3RzIHRoaXMgc2V0dGluZyBpcyBjb25uZWN0ZWQgdG8gbG93ZXItbGV2ZWwgbmV0d29ya2luZyBhc3BlY3RzLiBUaGVuIEkgc2VlIGBuZXQvY29yZS9za2J1ZmYuY2AgaXMgdG91Y2hlZCwgd2hpY2ggbWVhbnMgdGhlIGNoYW5nZXMgd2lsbCBhZmZlY3QgZnVuZGFtZW50YWwgYnVmZmVyIGhhbmRsaW5nLiBPa2F5LCBnZXR0aW5nIG1vcmUgc2VyaW91cyBub3cuCgpUaGUgcmVhbCBwb2ludCBvZiBpbnRlcmVzdCBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBuZXQveGZybS94ZnJtX2RldmljZS5jYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IGZpbGUgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXMgZW5hYmxlZCAob3IgcG9zc2libHkganVzdCBgQ09ORklHX1hGUk1gKS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBzZWUgaWYgdGhhdCBpcyB0aGUgY2FzZS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlcGVuZGVuY2llcy4gSXQgaXMgbGlrZWx5IHRoYXQgYENPTkZJR19YRlJNX09GRkxPQURgIGlzIGVuYWJsZWQuIElmIHNvLCB0aGlzIGlzIHJlbGF0ZWQgdG8gdHJhbnNmb3JtYXRpb24gb2ZmbG9hZCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTUtXHRcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXG5uZXQveGZybS9NYWtlZmlsZToxNjpcdFx0ICAgICAgeGZybV9zeXNjdGwubyB4ZnJtX3JlcGxheS5vIHhmcm1fZGV2aWNlLm8gXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE3LVx0XHQgICAgICB4ZnJtX25hdF9rZWVwYWxpdmUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDg2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFBsYW4gZm9yIEludGVnZXIgT3ZlcmZsb3cgUHJvdGVjdGlvbiBpbiBQYWNrZXQgUHJvY2Vzc2luZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBjcnVjaWFsIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIGR1cmluZyBgc2tiYCBoZWFkZXIgdXBkYXRlcy4gVGhpcyBhZmZlY3RzIGEgd2lkZSBzd2F0aGUgb2YgdGhlIGtlcm5lbDogY29yZSBuZXR3b3JraW5nLCByYXcgc29ja2V0cywgYW5kIElQc2VjL1hGUk0gb2ZmbG9hZGluZy4gVGhpcyBpcyBhICpoaWdoLWltcGFjdCogY2hhbmdlLCB0b3VjaGluZyBmdW5kYW1lbnRhbCBwYWNrZXQgaGFuZGxpbmcgbG9naWMuIEkgbmVlZCB0byBiZSAqdGhvcm91Z2gqIHdpdGggbXkgZnV6emluZyBhcHByb2FjaC4KCkZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gYnVpbGRpbmcgd2l0aCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIEZyb20gdGhlIGNvZGUsIHRoZSBrZXkgY29uZmlncyBmb3IgZW5hYmxpbmcgdGhlIHJlbGV2YW50IGZlYXR1cmVzIGFyZTogYElORVRfRVNQYCwgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQYCwgYElORVQ2X0VTUF9PRkZMT0FEYCwgYW5kIGBYRlJNX0lQVEZTYC4gRW5hYmxpbmcgdGhlc2Ugd2lsbCBlbnN1cmUgdGhlIG9mZmxvYWQtc3BlY2lmaWMgY29kZSBwYXRocyBhcmUgcHJlc2VudCBpbiBgeGZybV9kZXZpY2Uub2AsIHdoZXJlIHRoZSBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIG1vZGlmaWNhdGlvbnMgcmVzaWRlLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgSSBuZWVkIHRvIHRhcmdldC4gSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBlbnRyeSBwb2ludHM6IGBwc2tiX2V4cGFuZF9oZWFkYCwgYHNrYl9jb3B5X2V4cGFuZGAsIGBza2Jfc2VnbWVudF9saXN0YCwgYHNrYl9zZWdtZW50YCwgYHJhd19zZW5kbXNnYCwgYHJhd3Y2X3NlbmRtc2dgLCBgdmFsaWRhdGVfeG1pdF94ZnJtYCwgYW5kIGB4ZnJtX291dHB1dGAuIEkmIzM5O3ZlIHZlcmlmaWVkIHRoYXQgYWxsIG9mIHRoZXNlIGFyZSBleHBvcnRlZCwgd2hpY2ggaXMgZXhjZWxsZW50LiBUaGV5IGFyZSBkZWZpbml0ZWx5IGFjY2Vzc2libGUgZm9yIGZ1enppbmcuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBhbnl0aGluZyBlbHNlIGlzIHJlYWNoYWJsZS4gSSBzZWUgdGhhdCBgeGZybTRfdHJhbnNwb3J0X2dzb19zZWdtZW50YCBhbmQgYHhmcm00X2JlZXRfZ3NvX3NlZ21lbnRgIGFyZSBzdGF0aWMsIGJ1dCB0aGVzZSBhcmUgY2FsbGVkIHZpYSBgaW5ldF9vZmZsb2Fkc1tJUFBST1RPX0VTUF1gLCBhbmQgdGhlIHNhbWUgd2l0aCBgeGZybTZfdHJhbnNwb3J0X2dzb19zZWdtZW50YCBhbmQgYHhmcm02X2JlZXRfZ3NvX3NlZ21lbnRgLCB3aXRoIGBpbmV0Nl9vZmZsb2Fkc1tJUFBST1RPX0VTUF1gLiBUaGVzZSBhcmUgR1NPIHNlZ21lbnQgZnVuY3Rpb25zLCB0cmlnZ2VyZWQgYnkgc2VuZGluZyBwYWNrZXRzIHdpdGggR1NPIGVuYWJsZWQuIFRoZXJlZm9yZSwgZnV6emluZyBgc2tiX3NlZ21lbnRgIGFuZCBgc2tiX3NlZ21lbnRfbGlzdGAgd2lsbCBjb3ZlciB0aGVzZSBHU08gcGF0aHMgaW5kaXJlY3RseS4KCkZpbmFsbHksIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgcGF0Y2ggYWdhaW4gdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLCBzaW5jZSBJIG5lZWQgdG8gYmUgYXMgY29tcHJlaGVuc2l2ZSBhcyBwb3NzaWJsZS4gSSBrbm93IHRoYXQgYHJhd19zZW5kbXNnYCBjYWxscyBgcmF3X3NlbmRfaGRyaW5jYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGNhbGxzIGByYXd2Nl9zZW5kX2hkcmluY2AuIEkgbmVlZCB0byB0aGluayBhYm91dCBob3cgdG8gdXNlIHRoZXNlIGFuZCB0aGUgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgdG8gZnV6eiB0aGlzLiBJbiBhZGRpdGlvbiwgSSB3aWxsIHZlcmlmeSBpZiBgX194ZnJtX3RyYW5zcG9ydF9wcmVwYCwgYF9feGZybV9tb2RlX3R1bm5lbF9wcmVwYCwgYW5kIGBfX3hmcm1fbW9kZV9iZWV0X3ByZXBgIGFyZSBjYWxsZWQuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGZ1enogYHZhbGlkYXRlX3htaXRfeGZybWAgd2hpY2ggY2FsbHMgYHhmcm1fb3V0ZXJfbW9kZV9wcmVwYC4KCk15IGZ1enppbmcgc3RyYXRlZ3kgd2lsbCB0aGVyZWZvcmUgZm9jdXMgb24gZ2VuZXJhdGluZyBkaXZlcnNlIHBhY2tldCBwYXlsb2FkcyB3aXRoIHZhcnlpbmcgaGVhZGVyIHNpemVzLCBvZmZzZXRzLCBhbmQgR1NPIHNldHRpbmdzLCBhbmQgdGhlbiBpbmplY3RpbmcgdGhlbSB0aHJvdWdoIHRoZSBpZGVudGlmaWVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgc2NlbmFyaW9zIHRoYXQgbWlnaHQgdHJpZ2dlciBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgaGVhZGVyIG1hbmlwdWxhdGlvbiBvciBgc2tiYCByZS1zZWdtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZ2VuZXJhdGVkIGNvdmVyYWdlIHJlcG9ydHMgdG8gaWRlbnRpZnkgYW55IGFyZWFzIHdoZXJlIG5ldyBvciB1bmV4cGVjdGVkIGNvZGUgaXMgcmVhY2hlZCwgaW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGlzIGhpdHRpbmcgYWxsIGFyZWFzIG9mIHRoZSBtb2RpZmllZCBjb2RlLiBUaGlzIHdpbGwgYmUgdGhlIG1haW4gYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSByb2J1c3RuZXNzIG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19feGZybV90cmFuc3BvcnRfcHJlcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYy0yMi0jaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyMzpzdGF0aWMgaW50IF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjQtXHRcdFx0XHQgdW5zaWduZWQgaW50IGhzaXplKVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NzM9c3RhdGljIGludCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTg2LVx0XHRpZiAoeC1cdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUKVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo4NzpcdFx0XHRyZXR1cm4gX194ZnJtX3RyYW5zcG9ydF9wcmVwKHgsIHNrYixcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtODgtXHRcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTg5LVx0XHRpZiAoeC1cdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUNilcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6OTA6XHRcdFx0cmV0dXJuIF9feGZybV90cmFuc3BvcnRfcHJlcCh4LCBza2IsXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTkxLVx0XHRcdFx0XHRcdCAgICAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFhGUk0gQ292ZXJhZ2UgYW5kIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGN1cnJlbnQgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSB3YXkgdGhpbmdzIGFyZSBzZXQgdXAsIGB2YWxpZGF0ZV94bWl0X3hmcm1gIG5lYXRseSBjb3ZlcnMgYHhmcm1fb3V0ZXJfbW9kZV9wcmVwYCwgd2hpY2ggaW4gdHVybiBjYWxscyBhIHNlcmllcyBvZiBwcmVwIGZ1bmN0aW9uczogYF9feGZybV90cmFuc3BvcnRfcHJlcGAsIGBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcGAsIGFuZCBgX194ZnJtX21vZGVfYmVldF9wcmVwYC4gU28sIGB2YWxpZGF0ZV94bWl0X3hmcm1gIGhhbmRsZXMgdGhvc2UgcHJlcGVyYXRpb24gZnVuY3Rpb25zLgoKTm93LCB3aGF0IGFib3V0IHRoZSBJUFRGUyBlbmNhcCBhZGQgZnVuY3Rpb25zPyBBaCwgYGlwdGZzX2VuY2FwX2FkZF9pcHY0YCBhbmQgYGlwdGZzX2VuY2FwX2FkZF9pcHY2YD8gVGhleSYjMzk7cmUgY2FsbGVkIGJ5IGBpcHRmc19wcmVwYXJlX291dHB1dGAsIHdoaWNoIGlzIHRoZSBgLnByZXBhcmVfb3V0cHV0YCBjYWxsYmFjayBmb3IgYGlwdGZzX21vZGVfY2JzYC4gQW5kIHRoYXQgZ2V0cyBjYWxsZWQgZHVyaW5nIFhGUk0gb3V0cHV0IHByb2Nlc3NpbmcuIFRoYXQgbWFrZXMgc2Vuc2U7IGB4ZnJtX291dHB1dGAgZW5jb21wYXNzZXMgdGhpcy4KClRoZW4gdGhlcmUgYXJlIGZ1bmN0aW9ucyBsaWtlIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCwgYHhmcm02X3RyYW5zcG9ydF9vdXRwdXRgLCBgeGZybTZfcm9fb3V0cHV0YCwgYHhmcm00X2JlZXRfZW5jYXBfYWRkYCwgYHhmcm00X3R1bm5lbF9lbmNhcF9hZGRgLCBgeGZybTZfdHVubmVsX2VuY2FwX2FkZGAsIGFuZCBgeGZybTZfYmVldF9lbmNhcF9hZGRgLiBUaGVzZSBhcmUgY2FsbGVkIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0aHJvdWdoIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCwgYW5kIGV2ZW50dWFsbHkgYnkgYHhmcm1fb3V0cHV0YC4gU28sIGB4ZnJtX291dHB1dGAgaXMgdGhlIGVuY29tcGFzc2luZyBmdW5jdGlvbiBoZXJlIGFzIHdlbGwuIFRoZSBzeW1ib2xzIHVzZWQgZm9yIGZvY3VzIGhlcmUgc2VlbSB3ZWxsLWNob3Nlbiwgb3ZlcmFsbC4KCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgZmluYWwgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlIGhhdmUgYElORVRfRVNQYCwgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQYCwgYElORVQ2X0VTUF9PRkZMT0FEYCwgYW5kIGBYRlJNX0lQVEZTYC4KCkhtbSwgYW55dGhpbmcgZWxzZT8gYENPTkZJR19YRlJNX09GRkxPQURgIGlzIHNlbGVjdGVkIGJ5IGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYC4gTm93LCBgQ09ORklHX1hGUk1gIGlzIHNlbGVjdGVkIGJ5IGBYRlJNX0lQVEZTYC4gV2FpdCBhIG1vbWVudCwgYmVjYXVzZSBgWEZSTV9JUFRGU2AgKmRlcGVuZHMqIG9uIGBYRlJNYCwgc28gYFhGUk1gICptdXN0KiBiZSBlbmFibGVkLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGEgY29yZSBuZXR3b3JraW5nIGZlYXR1cmUsIGBYRlJNYCBpcyBhbG1vc3QgY2VydGFpbmx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IGtlcm5lbHMuIFRoZXJlZm9yZSwgSSB3aWxsIGp1c3QgbGlzdCB0aGUgc3BlY2lmaWNzLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBuYXR1cmUgb2YgYFhGUk1gLCBpcyBpdCBhIGJvb2wgb3IgdHJpc3RhdGU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNJCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZy00LSNcbm5ldC94ZnJtL0tjb25maWc6NTpjb25maWcgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy02LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjA3OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCb29sZWFuIExvZ2ljKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBhIGBib29sYCBoZXJlLCBidXQgaXQmIzM5O3Mgbm90IGJlaW5nIGV4cGxpY2l0bHkgcHJvbXB0ZWQuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIOKAkyB0cnVlIG9yIGZhbHNlIOKAkyBpcyBiZWluZyAqZGVyaXZlZCogZnJvbSBzb21ldGhpbmcgZWxzZSwgc29tZSBvdGhlciBzZWxlY3Rpb24gY3JpdGVyaWEuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIGRlcGVuZGVudCB2YXJpYWJsZS4gVGhlIGtleSBpcyB3aGF0JiMzOTtzIGRyaXZpbmcgdGhpcyBwYXJ0aWN1bGFyIGJvb2xlYW4uIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHRoaW5ncyBsaWtlIGBJTkVUX0VTUGAuIElmIHRoYXQmIzM5O3Mgc2V0LCAqdGhhdCogbGlrZWx5IGRldGVybWluZXMgdGhlIHN0YXRlIG9mICp0aGlzKiBwYXJ0aWN1bGFyIGBib29sYCDigJMgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyByZWxhdGlvbnNoaXAgdG8gYFhGUk1gLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgZHJpdmVyIG9mIHRoaXMgYGJvb2xgLiBJdCYjMzk7cyBhIGNhc2NhZGluZyBlZmZlY3Qgb2YgY29uZmlndXJhdGlvbiwgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGxvZ2ljIGNoYWluIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUX0VTUCQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1Bcbm5ldC9pcHY0L0tjb25maWctMzU1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEVTUCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjQyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBDaGVjazogSU5FVF9FU1AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBgSU5FVF9FU1BgIG1vZHVsZSBpcyBwbGF5aW5nIG5pY2UuIEkgd2FudCB0byB0aG9yb3VnaGx5IGFzc2VzcyBpdHMgZGVwZW5kZW5jeSB0cmVlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29ya2luZyBzdGFjaywgcG90ZW50aWFsbHkgaW5jbHVkaW5nIHRoZSBzb2NrZXQgaW1wbGVtZW50YXRpb25zLCBhbnkgcmVsZXZhbnQgY3J5cHRvZ3JhcGhpYyBsaWJyYXJpZXMsIGFuZCBldmVuIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciBpZiB3ZSBhcmUgdGFsa2luZyBhYm91dCBhbiBlbWJlZGRlZCBzeXN0ZW0uIEkgd2FudCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHZlcnNpb24gY29uZmxpY3RzIG9yIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1vZHVsZXMgdGhhdCBtYXkgYmUgbG9hZGVkLiBBbnkgaW5jb21wYXRpYmxlIHZlcnNpb25zIHdpbGwgbGlrZWx5IHRyaWdnZXIgc29tZSBmcnVzdHJhdGluZyBydW50aW1lIGVycm9ycywgdGhhdCBJJiMzOTtkIGxpa2UgdG8gcHJvYWN0aXZlbHkgcHJldmVudC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgSSBjYW4gZmluZCB0aGUgZGVwZW5kZW5jeSBtYW5pZmVzdCBhbmQgdGhlbiBjb21wYXJlIHRoaXMgYWdhaW5zdCB3aGF0IGlzIGN1cnJlbnRseSBydW5uaW5nLiBJIG5lZWQgdG8gYWxzbyBhc3Nlc3MgYW55IGRpcmVjdCBvciBpbmRpcmVjdCBkZXBlbmRlbmNpZXMgYW5kIGhvdyBlYWNoIG9mIHRoZW0gbWlnaHQgaW1wYWN0IGVhY2ggb3RoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzU0Olx0Y29uZmlnIElORVRfRVNQXG4gMzU1Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4gMzU2Olx0XHRzZWxlY3QgWEZSTV9FU1BcbiAzNTc6XHRcdGhlbHBcbiAzNTg6XHRcdCAgU3VwcG9ydCBmb3IgSVBzZWMgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpLlxuIDM1OTpcdFxuIDM2MDpcdFx0ICBFU1AgY2FuIGJlIHVzZWQgd2l0aCB2YXJpb3VzIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMuXG4gMzYxOlx0XHQgIEJlc2lkZXMgZW5hYmxpbmcgRVNQIHN1cHBvcnQgaXRzZWxmLCB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBnZW5lcmljXG4gMzYyOlx0XHQgIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmVcbiAzNjM6XHRcdCAgaW1wbGVtZW50ZWQuICBJZiB5b3UgbmVlZCBhbnkgb3RoZXIgYWxnb3JpdGhtcywgeW91JiMzOTtsbCBuZWVkIHRvIGVuYWJsZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgzMQoJCQkJCQkJb3V0cHV0OiAyOTQKCQkJCQkJCXRob3VnaHRzOiAzMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlIEkmIzM5O20gbG9va2luZyBhdCBmb2N1c2VzIG9uIHByZXZlbnRpbmcgaW50ZWdlciBvdmVyZmxvd3Mgd2l0aGluIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgaGVhZGVyIG9mZnNldCBtYW5pcHVsYXRpb24uIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBjaGVja3MgYXJvdW5kIGZ1bmN0aW9ucyBsaWtlIGBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAgYW5kIGBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWxgLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIHNlbGVjdGluZyBgWEZSTV9FU1BgLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IGltcGxpZXMgaXQmIzM5O3MgYWxzbyBzZWxlY3RpbmcgYFhGUk1gIGl0c2VsZiDigJMgc3RhbmRhcmQgcHJvY2VkdXJlLgoKSSYjMzk7bGwgYmUgc2V0dGluZyB1cCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGVzdGluZyBhbmQgdmVyaWZpY2F0aW9uIHByb2Nlc3M6IGBJTkVUX0VTUGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUGAsIGBJTkVUNl9FU1BfT0ZGTE9BRGAsIGFuZCBhbHNvIGBYRlJNX0lQVEZTYC4gVGhpcyBzaG91bGQgY292ZXIgdGhlIHJlbGV2YW50IElQc2VjIGltcGxlbWVudGF0aW9ucy4KCkkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzIGR1cmluZyBteSBpbnZlc3RpZ2F0aW9uOiBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGBza2Jfc2VnbWVudGAsIGByYXdfc2VuZG1zZ2AsIGByYXd2Nl9zZW5kbXNnYCwgYHZhbGlkYXRlX3htaXRfeGZybWAsIGFuZCBgeGZybV9vdXRwdXRgLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIG5ldHdvcmtpbmcgKGBza2J1ZmYuY2ApLCByYXcgc29ja2V0cyAoYHJhdy5jYCksIGFuZCBlc3BlY2lhbGx5IElQc2VjL1hGUk0gb2ZmbG9hZGluZyBhbmQgZW5jYXBzdWxhdGlvbiBjb2RlIChgeGZybV9kZXZpY2UuY2AsIGB4ZnJtX2lwdGZzLmNgLCBgeGZybV9vdXRwdXQuY2AsIGBlc3A0X29mZmxvYWQuY2AsIGBlc3A2X29mZmxvYWQuY2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0JiMzOTtzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgaGVhZGVyIG1hbmlwdWxhdGlvbi4KCkdpdmVuIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIHRoaXMsIEkgbmVlZCB0byBwdXQgdGhpcyB0aHJvdWdoIGEgdGhvcm91Z2ggZnV6emluZyByZWdpbWUuIEl0JiMzOTtzIGNydWNpYWwgdG8gY29uZmlybSB0aGF0IHRoZXNlIG5ldyBib3VuZHMgY2hlY2tzIGRvICpub3QqIGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMsIHRoYXQgdGhleSBjb3JyZWN0bHkgaGFuZGxlIGFsbCB2YWxpZCBwYWNrZXQgc2NlbmFyaW9zLCBhbmQgdGhhdCB0aGV5IHByZXZlbnQgdGhlIHRhcmdldGVkIG92ZXJmbG93cyBhcyBpbnRlbmRlZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGNoZWNrcyB0aGVtc2VsdmVzIGFyZSBzb3VuZCBhbmQgbm90IHN1c2NlcHRpYmxlIHRvIGJ5cGFzcy4KClJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVRfRVNQX09GRkxPQUQmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwc2tiX2V4cGFuZF9oZWFkJiMzNDssCiAgICAmIzM0O3NrYl9jb3B5X2V4cGFuZCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudF9saXN0JiMzNDssCiAgICAmIzM0O3NrYl9zZWdtZW50JiMzNDssCiAgICAmIzM0O3Jhd19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3Jhd3Y2X3NlbmRtc2cmIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfeG1pdF94ZnJtJiMzNDssCiAgICAmIzM0O3hmcm1fb3V0cHV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgY2FyZWZ1bCBib3VuZHMgY2hlY2tpbmcgdG8gc2tiIGhlYWRlciBvZmZzZXQgdXBkYXRlcyAoZS5nLiwgc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwsIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bCkgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIChza2J1ZmYuYyksIHJhdyBzb2NrZXRzIChyYXcuYyksIGFuZCBJUHNlYy9YRlJNIG9mZmxvYWRpbmcgYW5kIGVuY2Fwc3VsYXRpb24gKHhmcm1fZGV2aWNlLmMsIHhmcm1faXB0ZnMuYywgeGZybV9vdXRwdXQuYywgZXNwNF9vZmZsb2FkLmMsIGVzcDZfb2ZmbG9hZC5jKS4gU2luY2UgdGhpcyBtb2RpZmllcyBjb3JlIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBoZWFkZXIgbWFuaXB1bGF0aW9uIGxvZ2ljLCBpdCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBvdmVyZmxvdyBjaGVja3MgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkcm9wIHZhbGlkIHBhY2tldHMsIGFuZCB0aGF0IHRoZXkgY29ycmVjdGx5IHByZXZlbnQgb3ZlcmZsb3dzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUF9PRkZMT0FEJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUNl9FU1BfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHNrYl9leHBhbmRfaGVhZCYjMzQ7LAogICAgJiMzNDtza2JfY29weV9leHBhbmQmIzM0OywKICAgICYjMzQ7c2tiX3NlZ21lbnRfbGlzdCYjMzQ7LAogICAgJiMzNDtza2Jfc2VnbWVudCYjMzQ7LAogICAgJiMzNDtyYXdfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtyYXd2Nl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX3htaXRfeGZybSYjMzQ7LAogICAgJiMzNDt4ZnJtX291dHB1dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGNhcmVmdWwgYm91bmRzIGNoZWNraW5nIHRvIHNrYiBoZWFkZXIgb2Zmc2V0IHVwZGF0ZXMgKGUuZy4sIHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsLCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwpIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbmV0d29ya2luZyAoc2tidWZmLmMpLCByYXcgc29ja2V0cyAocmF3LmMpLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nIGFuZCBlbmNhcHN1bGF0aW9uICh4ZnJtX2RldmljZS5jLCB4ZnJtX2lwdGZzLmMsIHhmcm1fb3V0cHV0LmMsIGVzcDRfb2ZmbG9hZC5jLCBlc3A2X29mZmxvYWQuYykuIFNpbmNlIHRoaXMgbW9kaWZpZXMgY29yZSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgaGVhZGVyIG1hbmlwdWxhdGlvbiBsb2dpYywgaXQgaXMgaGlnaGx5IGZ1bmN0aW9uYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgb3ZlcmZsb3cgY2hlY2tzIGRvIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgZHJvcCB2YWxpZCBwYWNrZXRzLCBhbmQgdGhhdCB0aGV5IGNvcnJlY3RseSBwcmV2ZW50IG92ZXJmbG93cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjUyOjU2LjY5NjMwNTk1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTI2ODg4MDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiWEZSTV9JUFRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInNrYl9jb3B5X2V4cGFuZFwiLFxuICAgIFwic2tiX3NlZ21lbnRfbGlzdFwiLFxuICAgIFwic2tiX3NlZ21lbnRcIixcbiAgICBcInJhd19zZW5kbXNnXCIsXG4gICAgXCJyYXd2Nl9zZW5kbXNnXCIsXG4gICAgXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgICBcInhmcm1fb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBjYXJlZnVsIGJvdW5kcyBjaGVja2luZyB0byBza2IgaGVhZGVyIG9mZnNldCB1cGRhdGVzIChlLmcuLCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCwgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgKHNrYnVmZi5jKSwgcmF3IHNvY2tldHMgKHJhdy5jKSwgYW5kIElQc2VjL1hGUk0gb2ZmbG9hZGluZyBhbmQgZW5jYXBzdWxhdGlvbiAoeGZybV9kZXZpY2UuYywgeGZybV9pcHRmcy5jLCB4ZnJtX291dHB1dC5jLCBlc3A0X29mZmxvYWQuYywgZXNwNl9vZmZsb2FkLmMpLiBTaW5jZSB0aGlzIG1vZGlmaWVzIGNvcmUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGhlYWRlciBtYW5pcHVsYXRpb24gbG9naWMsIGl0IGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IG92ZXJmbG93IGNoZWNrcyBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGRyb3AgdmFsaWQgcGFja2V0cywgYW5kIHRoYXQgdGhleSBjb3JyZWN0bHkgcHJldmVudCBvdmVyZmxvd3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjUyOjU2LjY5NjMxNjI5MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2MzMzODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzQ3Yjk5Y2U1NmIzYTU4ZmU3ZTE0ZTk0YWQ1YjQ4YmRjOGVmODYwZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyIDA1OjUyOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXFxuaW5kZXggMjJlZGExZDU0YTBlOC4uYzhlMmZiMjE3NjRhOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbkBAIC0zMTI2LDYgKzMxMjYsMzQgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gb2Zmc2V0O1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrXFxuK3NrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGludCBvZmZzZXQpXFxuK3tcXG4rXFx0aWYgKHVubGlrZWx5KG9mZnNldCBcXHUwMDNjIDAgfHwgb2Zmc2V0IFxcdTAwM2U9IFUxNl9NQVgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyIFxcdTAwM2U9IFUxNl9NQVggLSBvZmZzZXQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0O1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xcbitza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBpbnQgb2Zmc2V0KVxcbit7XFxuK1xcdGlmIChvZmZzZXQgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGlmICh1bmxpa2VseSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHRpZiAodW5saWtlbHkob2Zmc2V0IFxcdTAwM2U9IFUxNl9NQVgpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgXFx1MDAzZT0gVTE2X01BWCAtIG9mZnNldCkpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IG9mZnNldDtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX25ldHdvcmtfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0cmV0dXJuIHNrYi1cXHUwMDNlaGVhZCArIHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXI7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5pbmRleCBiYTNkYmFjODBmYjQ5Li5kODE3N2U2NzcyMTY0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NrYnVmZi5jXFxuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcXG5AQCAtMzg3LDYgKzM4Nyw5IEBAIHUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwobmFwaV9za2JfY2FjaGVfZ2V0X2J1bGspO1xcbiBcXG4rc3RhdGljIGludCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZik7XFxuK3N0YXRpYyBpbnQgc2tiX3RyYW5zcG9ydF9oZWFkZXJfYWRkX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZik7XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19maW5hbGl6ZV9za2JfYXJvdW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4ge1xcbkBAIC05NzYsNyArOTc5LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxcbiBcXHRza2JfcHV0KG5za2IsIHNpemUpO1xcbiBcXG4gXFx0aGVhZF9vZmYgPSBza2JfaGVhZHJvb20obnNrYikgLSBza2JfaGVhZHJvb20oc2tiKTtcXG4tXFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuc2tiLCBoZWFkX29mZik7XFxuK1xcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLCBoZWFkX29mZik7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0Y29uc3VtZV9za2IobnNrYik7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4gXFxuIFxcdG9mZiA9IHNpemU7XFxuIFxcdGxlbiA9IHNrYi1cXHUwMDNlbGVuIC0gb2ZmO1xcbkBAIC0yMTQwLDYgKzIxNDcsODYgQEAgdm9pZCBza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKTtcXG4gXFxuK3N0YXRpYyBib29sIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpXFxuK3tcXG4rXFx0aWYgKGFkZCBcXHUwMDNjPSAwKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChhZGQgXFx1MDAzZSBVMTZfTUFYKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBvZmZzZXQgXFx1MDAzZSBVMTZfTUFYIC0gYWRkO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3codW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFkZClcXG4re1xcbitcXHRpZiAoYWRkIFxcdTAwM2M9IDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGFkZCBcXHUwMDNlPSBVMTZfTUFYKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiBvZmZzZXQgXFx1MDAzZT0gVTE2X01BWCAtIGFkZDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpXFxuK3tcXG4rXFx0aWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIsIG9mZikpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0aWYgKHNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2VtYWNfaGVhZGVyLCBvZmYpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0aWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciwgb2ZmKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XFxuK1xcdFxcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXFx1MDAzZWlubmVyX25ldHdvcmtfaGVhZGVyLCBvZmYpKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0aWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cXHUwMDNlaW5uZXJfbWFjX2hlYWRlciwgb2ZmKSlcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cXHUwMDNlY3N1bV9zdGFydCwgb2ZmKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpXFxuK3tcXG4rXFx0aWYgKHNrYl9oZWFkZXJzX29mZnNldF9vdmVyZmxvdyhza2IsIG9mZikpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXG4rXFx0aWYgKHNrYi1cXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpXFxuK1xcdFxcdHNrYi1cXHUwMDNlY3N1bV9zdGFydCArPSBvZmY7XFxuK1xcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpXFxuK1xcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBvZmY7XFxuK1xcdHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKz0gb2ZmO1xcbitcXHRpZiAoc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxcbitcXHRcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgKz0gb2ZmO1xcbitcXHRpZiAoc2tiLVxcdTAwM2Vpbm5lcl90cmFuc3BvcnRfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLVxcdTAwM2Vpbm5lcl90cmFuc3BvcnRfaGVhZGVyKSl+MFUpXFxuK1xcdFxcdHNrYi1cXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciArPSBvZmY7XFxuK1xcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XFxuK1xcdFxcdHNrYi1cXHUwMDNlaW5uZXJfbmV0d29ya19oZWFkZXIgKz0gb2ZmO1xcbitcXHRcXHRza2ItXFx1MDAzZWlubmVyX21hY19oZWFkZXIgKz0gb2ZmO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxcbit7XFxuK1xcdGlmIChvZmYgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2ICFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXHRpZiAoc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxcbitcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4rXFxuK1xcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBvZmY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCBza2JfY29weV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcXG4ge1xcbiBcXHRfX2NvcHlfc2tiX2hlYWRlcihuZXcsIG9sZCk7XFxuQEAgLTIzMDQsNiArMjM5MSw5IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxcbiBcXG4gXFx0QlVHX09OKHNrYl9zaGFyZWQoc2tiKSk7XFxuIFxcbitcXHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgbmhlYWQpKVxcbitcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4rXFxuIFxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbiBcXG4gXFx0aWYgKHNrYl9wZm1lbWFsbG9jKHNrYikpXFxuQEAgLTIzNTQsNyArMjQ0NCw3IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxcbiBcXHRvZmYgICAgICAgICAgID0gbmhlYWQ7XFxuICNlbmRpZlxcbiBcXHRza2ItXFx1MDAzZXRhaWxcXHQgICAgICArPSBvZmY7XFxuLVxcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUoc2tiLCBuaGVhZCk7XFxuK1xcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChza2IsIG5oZWFkKTtcXG4gXFx0c2tiLVxcdTAwM2VjbG9uZWQgICA9IDA7XFxuIFxcdHNrYi1cXHUwMDNlaGRyX2xlbiAgPSAwO1xcbiBcXHRza2ItXFx1MDAzZW5vaGRyICAgID0gMDtcXG5AQCAtMjU0MSw3ICsyNjMxLDEwIEBAIHN0cnVjdCBza19idWZmICpza2JfY29weV9leHBhbmQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFxuIFxcdHNrYl9jb3B5X2hlYWRlcihuLCBza2IpO1xcbiBcXG4tXFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKTtcXG4rXFx0aWYgKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKSkge1xcbitcXHRcXHRrZnJlZV9za2Iobik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gbjtcXG4gfVxcbkBAIC00NjgwLDcgKzQ3NzMsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHR1bnNpZ25lZCBpbnQgZGVsdGFfbGVuID0gMDtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnRhaWwgPSBOVUxMO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgKnRtcDtcXG4tXFx0aW50IGxlbl9kaWZmLCBlcnI7XFxuK1xcdGludCBoZWFkX29mZiwgbGVuX2RpZmYsIGVycjtcXG4gXFxuIFxcdC8qIE9ubHkgc2tiX2dyb19yZWNlaXZlX2xpc3QgZ2VuZXJhdGVkIHNrYnMgYXJyaXZlIGhlcmUgKi9cXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRSghKHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSk7XFxuQEAgLTQ3MzIsOCArNDgyNSwxNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRsZW5fZGlmZiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4obnNrYikgLSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XFxuIFxcdFxcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XFxuIFxcbi1cXHRcXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIHNrYl9oZWFkcm9vbShuc2tiKSAtIHNrYl9oZWFkcm9vbShza2IpKTtcXG4tXFx0XFx0bnNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBsZW5fZGlmZjtcXG4rXFx0XFx0aGVhZF9vZmYgPSBza2JfaGVhZHJvb20obnNrYikgLSBza2JfaGVhZHJvb20oc2tiKTtcXG4rXFx0XFx0ZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsIGhlYWRfb2ZmKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4rXFx0XFx0XFx0bnNrYi1cXHUwMDNlbmV4dCA9IGxpc3Rfc2tiO1xcbitcXHRcXHRcXHRnb3RvIGVycl9saXN0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGVyciA9IHNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKG5za2IsIGxlbl9kaWZmKTtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4rXFx0XFx0XFx0bnNrYi1cXHUwMDNlbmV4dCA9IGxpc3Rfc2tiO1xcbitcXHRcXHRcXHRnb3RvIGVycl9saXN0O1xcbitcXHRcXHR9XFxuIFxcdFxcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgLXRubF9obGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgbnNrYi1cXHUwMDNlZGF0YSAtIHRubF9obGVuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgb2Zmc2V0ICsgdG5sX2hsZW4pO1xcbkBAIC00NzU5LDkgKzQ4NjEsMTEgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50X2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0cmV0dXJuIHNrYjtcXG4gXFxuIGVycl9saW5lYXJpemU6XFxuK1xcdGVyciA9IC1FTk9NRU07XFxuK2Vycl9saXN0OlxcbiBcXHRrZnJlZV9za2JfbGlzdChza2ItXFx1MDAzZW5leHQpO1xcbiBcXHRza2ItXFx1MDAzZW5leHQgPSBOVUxMO1xcbi1cXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChza2Jfc2VnbWVudF9saXN0KTtcXG4gXFxuQEAgLTQ5NjEsNyArNTA2NSwxMSBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnQoc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLFxcbiBcXG4gXFx0XFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgaGVhZF9za2IpO1xcbiBcXG4tXFx0XFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuc2tiLCBza2JfaGVhZHJvb20obnNrYikgLSBoZWFkcm9vbSk7XFxuK1xcdFxcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRza2JfaGVhZHJvb20obnNrYikgLSBoZWFkcm9vbSk7XFxuK1xcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0c2tiX3Jlc2V0X21hY19sZW4obnNrYik7XFxuIFxcbiBcXHRcXHRza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhX29mZnNldChoZWFkX3NrYiwgLXRubF9obGVuLFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0X29mZmxvYWQuYyBiL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXFxuaW5kZXggYWJkNzcxNjJmNWU3NS4uYTIyZWYwNDRlZWNiMiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xcbisrKyBiL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXFxuQEAgLTEzOCw3ICsxMzgsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpO1xcbiBcXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xcbiBcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW47XFxuK1xcdGlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XFxuIFxcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0X29mZmxvYWRzW3hvLVxcdTAwM2Vwcm90b10pO1xcbiBcXHRpZiAobGlrZWx5KG9wcyBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudCkpXFxuIFxcdFxcdHNlZ3MgPSBvcHMtXFx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTtcXG5AQCAtMTU1LDIzICsxNTYsMjcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNF9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbiBcXHRjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wcztcXG4gXFx0dTggcHJvdG8gPSB4by1cXHUwMDNlcHJvdG87XFxuIFxcbi1cXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0geC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcXG4rXFx0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFxuIFxcdGlmICh4LVxcdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxuIFxcdFxcdGlmIChwcm90byA9PSBJUFBST1RPX0JFRVRQSCkge1xcbiBcXHRcXHRcXHRzdHJ1Y3QgaXBfYmVldF9waGRyICpwaCA9XFxuIFxcdFxcdFxcdFxcdChzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHBoLVxcdTAwM2VoZHJsZW4gKiA4O1xcbitcXHRcXHRcXHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgcGgtXFx1MDAzZWhkcmxlbiAqIDgpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0XFx0XFx0cHJvdG8gPSBwaC1cXHUwMDNlbmV4dGhkcjtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbitcXHRcXHRpbnQgb2Zmc2V0O1xcbiBcXHRcXHRfX2JlMTYgZnJhZztcXG4gXFxuLVxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPVxcbi1cXHRcXHRcXHRpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXFx1MDAyNnByb3RvLCBcXHUwMDI2ZnJhZyk7XFxuK1xcdFxcdG9mZnNldCA9IGlwdjZfc2tpcF9leHRoZHIoc2tiLCAwLCBcXHUwMDI2cHJvdG8sIFxcdTAwMjZmcmFnKTtcXG4rXFx0XFx0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIG9mZnNldCkpXFxuK1xcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xcbiBcXHRcXHRpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApXFxuIFxcdFxcdFxcdHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZ3NvX3R5cGUgfD0gU0tCX0dTT19UQ1BWNDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jXFxuaW5kZXggN2Y3NGQ4Yjk1YTM3My4uMTYzNTRiZjc2ZGFkMSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9yYXcuY1xcbisrKyBiL25ldC9pcHY0L3Jhdy5jXFxuQEAgLTM1Niw2ICszNTYsOCBAQCBzdGF0aWMgaW50IHJhd19zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aTQgKmZsNCxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHRobGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtXFx1MDAzZWRzdC5kZXYpO1xcbitcXHRpZiAoaGxlbiBcXHUwMDNlPSBVMTZfTUFYIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR0bGVuID0gcnQtXFx1MDAzZWRzdC5kZXYtXFx1MDAzZW5lZWRlZF90YWlscm9vbTtcXG4gXFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzayxcXG4gXFx0XFx0XFx0XFx0ICBsZW5ndGggKyBobGVuICsgdGxlbiArIDE1LFxcbkBAIC0zOTksNiArNDAxLDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxuIFxcdGVyciA9IC1FSU5WQUw7XFxuIFxcdGlmIChpcGhsZW4gXFx1MDAzZSBsZW5ndGggfHwgaXBobGVuIFxcdTAwM2Mgc2l6ZW9mKCppcGgpKVxcbiBcXHRcXHRnb3RvIGVycm9yX2ZyZWU7XFxuK1xcdGlmIChobGVuIFxcdTAwM2U9IFUxNl9NQVggLSBpcGhsZW4pXFxuK1xcdFxcdGdvdG8gZXJyb3JfZnJlZTtcXG4gXFxuIFxcdGlmIChpcGhsZW4gXFx1MDAzZT0gc2l6ZW9mKCppcGgpKSB7XFxuIFxcdFxcdGlmICghaXBoLVxcdTAwM2VzYWRkcilcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuY1xcbmluZGV4IDIyODk1NTIxYTU3ZDAuLmUxMjNmMGE5NzgyYjIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNcXG4rKysgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuY1xcbkBAIC0xNzQsNyArMTc0LDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl90cmFuc3BvcnRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuIFxcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0c3RydWN0IHhmcm1fb2ZmbG9hZCAqeG8gPSB4ZnJtX29mZmxvYWQoc2tiKTtcXG4gXFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuO1xcbitcXHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbikpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FT1ZFUkZMT1cpO1xcbiBcXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldDZfb2ZmbG9hZHNbeG8tXFx1MDAzZXByb3RvXSk7XFxuIFxcdGlmIChsaWtlbHkob3BzIFxcdTAwMjZcXHUwMDI2IG9wcy1cXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KSlcXG4gXFx0XFx0c2VncyA9IG9wcy1cXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KHNrYiwgZmVhdHVyZXMpO1xcbkBAIC0xOTEsNyArMTkyLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbiBcXHRjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wcztcXG4gXFx0dTggcHJvdG8gPSB4by1cXHUwMDNlcHJvdG87XFxuIFxcbi1cXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0geC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcXG4rXFx0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFxuIFxcdGlmICh4LVxcdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxuIFxcdFxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciAtPVxcbkBAIC0yMDEsNyArMjAzLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbiBcXHRcXHRcXHRzdHJ1Y3QgaXBfYmVldF9waGRyICpwaCA9XFxuIFxcdFxcdFxcdFxcdChzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHBoLVxcdTAwM2VoZHJsZW4gKiA4O1xcbitcXHRcXHRcXHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgcGgtXFx1MDAzZWhkcmxlbiAqIDgpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0XFx0XFx0cHJvdG8gPSBwaC1cXHUwMDNlbmV4dGhkcjtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IElQVjRfQkVFVF9QSE1BWExFTjtcXG5AQCAtMjEwLDEwICsyMTMsMTIgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbiBcXHRcXHRpZiAocHJvdG8gPT0gSVBQUk9UT19UQ1ApXFxuIFxcdFxcdFxcdHNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZ3NvX3R5cGUgfD0gU0tCX0dTT19UQ1BWNjtcXG4gXFx0fSBlbHNlIHtcXG4rXFx0XFx0aW50IG9mZnNldDtcXG4gXFx0XFx0X19iZTE2IGZyYWc7XFxuIFxcbi1cXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz1cXG4tXFx0XFx0XFx0aXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFxcdTAwMjZwcm90bywgXFx1MDAyNmZyYWcpO1xcbitcXHRcXHRvZmZzZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXFx1MDAyNnByb3RvLCBcXHUwMDI2ZnJhZyk7XFxuK1xcdFxcdGlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBvZmZzZXQpKVxcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHByb3RvID09IElQUFJPVE9fSVBJUClcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuY1xcbmluZGV4IGI4OGQzNjRlNzhhYWUuLmZhMjIzZWMwMjM5NjQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvcmF3LmNcXG4rKysgYi9uZXQvaXB2Ni9yYXcuY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2NrZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5AQCAtNjEzLDYgKzYxNCw5IEBAIHN0YXRpYyBpbnQgcmF3djZfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW5ndGgsXFxuIFxcdGlmIChmbGFnc1xcdTAwMjZNU0dfUFJPQkUpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0aWYgKGhsZW4gXFx1MDAzZT0gVTE2X01BWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLFxcbiBcXHRcXHRcXHRcXHQgIGxlbmd0aCArIGhsZW4gKyB0bGVuICsgMTUsXFxuIFxcdFxcdFxcdFxcdCAgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQsIFxcdTAwMjZlcnIpO1xcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2RldmljZS5jIGIvbmV0L3hmcm0veGZybV9kZXZpY2UuY1xcbmluZGV4IGYxNTNiZjY5NWI5ZGQuLjJhMDliZDJlZWM0OTMgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0veGZybV9kZXZpY2UuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fZGV2aWNlLmNcXG5AQCAtMjAsOCArMjAsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG4gXFxuICNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxuLXN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXFxuK3N0YXRpYyBpbnQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGhzaXplKVxcbiB7XFxuIFxcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XFxuIFxcbkBAIC0zMCwzMCArMzAsMzMgQEAgc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0geC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcXG4gXFxuIFxcdHBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGhzaXplKVxcbi1cXG4rc3RhdGljIGludCBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGhzaXplKVxcbiB7XFxuIFxcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XFxuIFxcbi1cXHRpZiAoeG8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9HU09fU0VHTUVOVClcXG4tXFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIGhzaXplO1xcbitcXHRpZiAoeG8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9HU09fU0VHTUVOVCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKVxcbitcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4gXFxuIFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuIFxcdHBza2JfcHVsbChza2IsXFxuIFxcdFxcdCAgc2tiLVxcdTAwM2VtYWNfbGVuICsgeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXFx1MDAzZXByb3BzLmVuY19oZHJfbGVuKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX2JlZXRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXFxuK3N0YXRpYyBpbnQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGhzaXplKVxcbiB7XFxuIFxcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XFxuIFxcdGludCBwaGxlbiA9IDA7XFxuIFxcbi1cXHRpZiAoeG8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9HU09fU0VHTUVOVClcXG4tXFx0XFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIGhzaXplO1xcbitcXHRpZiAoeG8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9HU09fU0VHTUVOVCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKVxcbitcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4gXFxuIFxcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XFxuIFxcdGlmICh4LVxcdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XFxuQEAgLTYzLDEwICs2NiwxMSBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdH1cXG4gXFxuIFxcdHBza2JfcHVsbChza2IsIHNrYi1cXHUwMDNlbWFjX2xlbiArIGhzaXplICsgKHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4gLSBwaGxlbikpO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyogQWRqdXN0IHBvaW50ZXJzIGludG8gdGhlIHBhY2tldCB3aGVuIElQc2VjIGlzIGRvbmUgYXQgbGF5ZXIyICovXFxuLXN0YXRpYyB2b2lkIHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitzdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHN3aXRjaCAoeC1cXHUwMDNlb3V0ZXJfbW9kZS5lbmNhcCkge1xcbiBcXHRjYXNlIFhGUk1fTU9ERV9JUFRGUzpcXG5AQCAtOTgsNiArMTAyLDggQEAgc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGNhc2UgWEZSTV9NT0RFX0lOX1RSSUdHRVI6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHhtaXRfeGZybV9jaGVja19vdmVyZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbkBAIC0xNzUsNyArMTgxLDEyIEBAIHN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyXFxuIFxcbiBcXHRpZiAoIXNrYi1cXHUwMDNlbmV4dCkge1xcbiBcXHRcXHRlc3BfZmVhdHVyZXMgfD0gc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWdzb19wYXJ0aWFsX2ZlYXR1cmVzO1xcbi1cXHRcXHR4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IpO1xcbitcXHRcXHRlcnIgPSB4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSwgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xcbitcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHhvLVxcdTAwM2VmbGFncyB8PSBYRlJNX0RFVl9SRVNVTUU7XFxuIFxcbkBAIC0yMDEsNyArMjEyLDEzIEBAIHN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyXFxuIFxcdFxcdHhvID0geGZybV9vZmZsb2FkKHNrYjIpO1xcbiBcXHRcXHR4by1cXHUwMDNlZmxhZ3MgfD0gWEZSTV9ERVZfUkVTVU1FO1xcbiBcXG4tXFx0XFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiMik7XFxuK1xcdFxcdGVyciA9IHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYjIpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSwgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xcbitcXHRcXHRcXHRza2IyLVxcdTAwM2VuZXh0ID0gbnNrYjtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiX2xpc3Qoc2tiMik7XFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRlcnIgPSB4LVxcdTAwM2V0eXBlX29mZmxvYWQtXFx1MDAzZXhtaXQoeCwgc2tiMiwgZXNwX2ZlYXR1cmVzKTtcXG4gXFx0XFx0aWYgKCFlcnIpIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuaW5kZXggNTk3YWVkZWFjMjZlYi4uMTNiNjJiY2Q5ZTA1MyAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG5AQCAtMjM3OSw3ICsyMzc5LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFxuIFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAtKHgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4gLSB4LVxcdTAwM2Vwcm9wcy5lbmNfaGRyX2xlbikpO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXG4gXFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xcbiBcXHR0b3BfaXBoLVxcdTAwM2VpaGwgPSA1O1xcbkBAIC0yNDI2LDcgKzI0MjcsOCBAQCBzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuICsgeC1cXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpO1xcbi1cXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgc2l6ZW9mKCp0b3BfaXBoKTtcXG4rXFx0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxcbitcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4gXFxuIFxcdHRvcF9pcGggPSBpcHY2X2hkcihza2IpO1xcbiBcXHR0b3BfaXBoLVxcdTAwM2V2ZXJzaW9uID0gNjtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9vdXRwdXQuYyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcXG5pbmRleCBjYzM1YzJmY2JiZTA5Li4wY2ViZTc1MmNhOTgwIDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXFxuQEAgLTczLDcgKzczLDggQEAgc3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICtcXG4gXFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTtcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIGlobDtcXG4rXFx0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGlobCkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgaWhsKTtcXG4gXFx0bWVtbW92ZShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaXBoLCBpaGwpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTc5LDcgKzE4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYixcXG4gXFx0XFx0XFx0ICAgKHByZXZoZHIgLSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi1cXHUwMDNlZGF0YSk7XFxuIFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaGRyX2xlbikpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7XFxuIFxcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTIwOSw3ICsyMTEsOCBAQCBzdGF0aWMgaW50IHhmcm02X3JvX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3NldF9tYWNfaGVhZGVyKHNrYixcXG4gXFx0XFx0XFx0ICAgKHByZXZoZHIgLSB4LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSAtIHNrYi1cXHUwMDNlZGF0YSk7XFxuIFxcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAteC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaGRyX2xlbikpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHRfX3NrYl9wdWxsKHNrYiwgaGRyX2xlbik7XFxuIFxcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcXG4gXFxuQEAgLTI0MSw3ICsyNDQsOCBAQCBzdGF0aWMgaW50IHhmcm00X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICs9IElQVjRfQkVFVF9QSE1BWExFTjtcXG4gXFx0c2tiLVxcdTAwM2VtYWNfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArXFxuIFxcdFxcdFxcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXG4gXFx0eGZybTRfYmVldF9tYWtlX2hlYWRlcihza2IpO1xcbiBcXG5AQCAtMjg4LDcgKzI5Miw4IEBAIHN0YXRpYyBpbnQgeGZybTRfdHVubmVsX2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVxcdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKTtcXG4gXFx0c2tiLVxcdTAwM2VtYWNfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArXFxuIFxcdFxcdFxcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHR0b3BfaXBoID0gaXBfaGRyKHNrYik7XFxuIFxcbiBcXHR0b3BfaXBoLVxcdTAwM2VpaGwgPSA1O1xcbkBAIC0zMzUsNyArMzQwLDggQEAgc3RhdGljIGludCB4ZnJtNl90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXFx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xcbiBcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICtcXG4gXFx0XFx0XFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XFxuLVxcdHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xcbitcXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbiBcXHR0b3BfaXBoID0gaXB2Nl9oZHIoc2tiKTtcXG4gXFxuIFxcdHRvcF9pcGgtXFx1MDAzZXZlcnNpb24gPSA2O1xcbkBAIC0zNzQsNyArMzgwLDggQEAgc3RhdGljIGludCB4ZnJtNl9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0c2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArPSBJUFY0X0JFRVRfUEhNQVhMRU47XFxuIFxcdHNrYi1cXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cXHUwMDNlbmV0d29ya19oZWFkZXIgK1xcbiBcXHRcXHRcXHQgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTtcXG4tXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVxcdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XFxuK1xcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBzaXplb2YoKnRvcF9pcGgpKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuIFxcdHBoID0gX19za2JfcHVsbChza2IsIFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS1cXHUwMDNlaWhsIC0gaGRyX2xlbik7XFxuIFxcbiBcXHR4ZnJtNl9iZWV0X21ha2VfaGVhZGVyKHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjUyOjU3LjMxNTg2NzQ2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYwMDY0OTMwOTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiWEZSTV9JUFRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInNrYl9jb3B5X2V4cGFuZFwiLFxuICAgIFwic2tiX3NlZ21lbnRfbGlzdFwiLFxuICAgIFwic2tiX3NlZ21lbnRcIixcbiAgICBcInJhd19zZW5kbXNnXCIsXG4gICAgXCJyYXd2Nl9zZW5kbXNnXCIsXG4gICAgXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgICBcInhmcm1fb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBjYXJlZnVsIGJvdW5kcyBjaGVja2luZyB0byBza2IgaGVhZGVyIG9mZnNldCB1cGRhdGVzIChlLmcuLCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCwgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgKHNrYnVmZi5jKSwgcmF3IHNvY2tldHMgKHJhdy5jKSwgYW5kIElQc2VjL1hGUk0gb2ZmbG9hZGluZyBhbmQgZW5jYXBzdWxhdGlvbiAoeGZybV9kZXZpY2UuYywgeGZybV9pcHRmcy5jLCB4ZnJtX291dHB1dC5jLCBlc3A0X29mZmxvYWQuYywgZXNwNl9vZmZsb2FkLmMpLiBTaW5jZSB0aGlzIG1vZGlmaWVzIGNvcmUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGhlYWRlciBtYW5pcHVsYXRpb24gbG9naWMsIGl0IGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IG92ZXJmbG93IGNoZWNrcyBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGRyb3AgdmFsaWQgcGFja2V0cywgYW5kIHRoYXQgdGhleSBjb3JyZWN0bHkgcHJldmVudCBvdmVyZmxvd3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0N2I5OWNlNTZiM2E1OGZlN2UxNGU5NGFkNWI0OGJkYzhlZjg2MGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDA1OjUyOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDIyZWRhMWQ1NGEwZTguLmM4ZTJmYjIxNzY0YTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtMzEyNiw2ICszMTI2LDM0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IG9mZnNldDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVja1xuK3NrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGludCBvZmZzZXQpXG4re1xuK1x0aWYgKHVubGlrZWx5KG9mZnNldCBcdTAwM2MgMCB8fCBvZmZzZXQgXHUwMDNlPSBVMTZfTUFYKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciBcdTAwM2U9IFUxNl9NQVggLSBvZmZzZXQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIG9mZnNldDtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrXG4rc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgaW50IG9mZnNldClcbit7XG4rXHRpZiAob2Zmc2V0IFx1MDAzZSAwKSB7XG4rXHRcdGlmICh1bmxpa2VseSghc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChza2IpKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGlmICh1bmxpa2VseShvZmZzZXQgXHUwMDNlPSBVMTZfTUFYKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdGlmICh1bmxpa2VseShza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciBcdTAwM2U9IFUxNl9NQVggLSBvZmZzZXQpKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IG9mZnNldDtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9uZXR3b3JrX2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHJldHVybiBza2ItXHUwMDNlaGVhZCArIHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlcjtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBiYTNkYmFjODBmYjQ5Li5kODE3N2U2NzcyMTY0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMzg3LDYgKzM4Nyw5IEBAIHUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5hcGlfc2tiX2NhY2hlX2dldF9idWxrKTtcbiBcbitzdGF0aWMgaW50IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKTtcbitzdGF0aWMgaW50IHNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmYpO1xuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZpbmFsaXplX3NrYl9hcm91bmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBzaXplKVxuIHtcbkBAIC05NzYsNyArOTc5LDExIEBAIGludCBza2JfcHBfY293X2RhdGEoc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiLFxuIFx0c2tiX3B1dChuc2tiLCBzaXplKTtcbiBcbiBcdGhlYWRfb2ZmID0gc2tiX2hlYWRyb29tKG5za2IpIC0gc2tiX2hlYWRyb29tKHNrYik7XG4tXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG5za2IsIGhlYWRfb2ZmKTtcbitcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLCBoZWFkX29mZik7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGNvbnN1bWVfc2tiKG5za2IpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuIFxuIFx0b2ZmID0gc2l6ZTtcbiBcdGxlbiA9IHNrYi1cdTAwM2VsZW4gLSBvZmY7XG5AQCAtMjE0MCw2ICsyMTQ3LDg2IEBAIHZvaWQgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGUpO1xuIFxuK3N0YXRpYyBib29sIHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpXG4re1xuK1x0aWYgKGFkZCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChhZGQgXHUwMDNlIFUxNl9NQVgpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIG9mZnNldCBcdTAwM2UgVTE2X01BWCAtIGFkZDtcbit9XG4rXG4rc3RhdGljIGJvb2wgc2tiX3RyYW5zcG9ydF9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhZGQpXG4re1xuK1x0aWYgKGFkZCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChhZGQgXHUwMDNlPSBVMTZfTUFYKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiBvZmZzZXQgXHUwMDNlPSBVMTZfTUFYIC0gYWRkO1xuK31cbitcbitzdGF0aWMgYm9vbCBza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZilcbit7XG4rXHRpZiAoc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyLCBvZmYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX3RyYW5zcG9ydF9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZW1hY19oZWFkZXIsIG9mZikpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0aWYgKHNrYl9oZWFkZXJfb2Zmc2V0X292ZXJmbG93KHNrYi1cdTAwM2Vpbm5lcl90cmFuc3BvcnRfaGVhZGVyLCBvZmYpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmIChza2JfaW5uZXJfbmV0d29ya19oZWFkZXJfd2FzX3NldChza2IpKSB7XG4rXHRcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfbmV0d29ya19oZWFkZXIsIG9mZikpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdGlmIChza2JfaGVhZGVyX29mZnNldF9vdmVyZmxvdyhza2ItXHUwMDNlaW5uZXJfbWFjX2hlYWRlciwgb2ZmKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgXHUwMDI2XHUwMDI2XG4rXHQgICAgc2tiX2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZWNzdW1fc3RhcnQsIG9mZikpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW50IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuK3tcbitcdGlmIChza2JfaGVhZGVyc19vZmZzZXRfb3ZlcmZsb3coc2tiLCBvZmYpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcbitcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpXG4rXHRcdHNrYi1cdTAwM2Vjc3VtX3N0YXJ0ICs9IG9mZjtcbitcdGlmIChza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpXG4rXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IG9mZjtcbitcdHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArPSBvZmY7XG4rXHRpZiAoc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxuK1x0XHRza2ItXHUwMDNlbWFjX2hlYWRlciArPSBvZmY7XG4rXHRpZiAoc2tiLVx1MDAzZWlubmVyX3RyYW5zcG9ydF9oZWFkZXIgIT0gKHR5cGVvZihza2ItXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlcikpfjBVKVxuK1x0XHRza2ItXHUwMDNlaW5uZXJfdHJhbnNwb3J0X2hlYWRlciArPSBvZmY7XG4rXHRpZiAoc2tiX2lubmVyX25ldHdvcmtfaGVhZGVyX3dhc19zZXQoc2tiKSkge1xuK1x0XHRza2ItXHUwMDNlaW5uZXJfbmV0d29ya19oZWFkZXIgKz0gb2ZmO1xuK1x0XHRza2ItXHUwMDNlaW5uZXJfbWFjX2hlYWRlciArPSBvZmY7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBza2JfdHJhbnNwb3J0X2hlYWRlcl9hZGRfY2FyZWZ1bChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ZmKVxuK3tcbitcdGlmIChvZmYgXHUwMDNlIDAgXHUwMDI2XHUwMDI2ICFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1x0aWYgKHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSBcdTAwMjZcdTAwMjZcbitcdCAgICBza2JfdHJhbnNwb3J0X2hlYWRlcl9vZmZzZXRfb3ZlcmZsb3coc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIsIG9mZikpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1xuK1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gb2ZmO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHZvaWQgc2tiX2NvcHlfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG4ge1xuIFx0X19jb3B5X3NrYl9oZWFkZXIobmV3LCBvbGQpO1xuQEAgLTIzMDQsNiArMjM5MSw5IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLFxuIFxuIFx0QlVHX09OKHNrYl9zaGFyZWQoc2tiKSk7XG4gXG4rXHRpZiAoc2tiX2hlYWRlcnNfb2Zmc2V0X292ZXJmbG93KHNrYiwgbmhlYWQpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbitcbiBcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuIFxuIFx0aWYgKHNrYl9wZm1lbWFsbG9jKHNrYikpXG5AQCAtMjM1NCw3ICsyNDQ0LDcgQEAgaW50IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRhaWwsXG4gXHRvZmYgICAgICAgICAgID0gbmhlYWQ7XG4gI2VuZGlmXG4gXHRza2ItXHUwMDNldGFpbFx0ICAgICAgKz0gb2ZmO1xuLVx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShza2IsIG5oZWFkKTtcbitcdHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChza2IsIG5oZWFkKTtcbiBcdHNrYi1cdTAwM2VjbG9uZWQgICA9IDA7XG4gXHRza2ItXHUwMDNlaGRyX2xlbiAgPSAwO1xuIFx0c2tiLVx1MDAzZW5vaGRyICAgID0gMDtcbkBAIC0yNTQxLDcgKzI2MzEsMTAgQEAgc3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0c2tiX2NvcHlfaGVhZGVyKG4sIHNrYik7XG4gXG4tXHRza2JfaGVhZGVyc19vZmZzZXRfdXBkYXRlKG4sIG5ld2hlYWRyb29tIC0gb2xkaGVhZHJvb20pO1xuK1x0aWYgKHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuLCBuZXdoZWFkcm9vbSAtIG9sZGhlYWRyb29tKSkge1xuK1x0XHRrZnJlZV9za2Iobik7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuIFxuIFx0cmV0dXJuIG47XG4gfVxuQEAgLTQ2ODAsNyArNDc3Myw3IEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHR1bnNpZ25lZCBpbnQgZGVsdGFfbGVuID0gMDtcbiBcdHN0cnVjdCBza19idWZmICp0YWlsID0gTlVMTDtcbiBcdHN0cnVjdCBza19idWZmICpuc2tiLCAqdG1wO1xuLVx0aW50IGxlbl9kaWZmLCBlcnI7XG4rXHRpbnQgaGVhZF9vZmYsIGxlbl9kaWZmLCBlcnI7XG4gXG4gXHQvKiBPbmx5IHNrYl9ncm9fcmVjZWl2ZV9saXN0IGdlbmVyYXRlZCBza2JzIGFycml2ZSBoZXJlICovXG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKCEoc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb190eXBlIFx1MDAyNiBTS0JfR1NPX0ZSQUdMSVNUKSk7XG5AQCAtNDczMiw4ICs0ODI1LDE3IEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudF9saXN0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGxlbl9kaWZmID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihuc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcbiBcdFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgc2tiKTtcbiBcbi1cdFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuc2tiLCBza2JfaGVhZHJvb20obnNrYikgLSBza2JfaGVhZHJvb20oc2tiKSk7XG4tXHRcdG5za2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSBsZW5fZGlmZjtcbitcdFx0aGVhZF9vZmYgPSBza2JfaGVhZHJvb20obnNrYikgLSBza2JfaGVhZHJvb20oc2tiKTtcbitcdFx0ZXJyID0gc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKG5za2IsIGhlYWRfb2ZmKTtcbitcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbitcdFx0XHRuc2tiLVx1MDAzZW5leHQgPSBsaXN0X3NrYjtcbitcdFx0XHRnb3RvIGVycl9saXN0O1xuK1x0XHR9XG4rXHRcdGVyciA9IHNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsKG5za2IsIGxlbl9kaWZmKTtcbitcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbitcdFx0XHRuc2tiLVx1MDAzZW5leHQgPSBsaXN0X3NrYjtcbitcdFx0XHRnb3RvIGVycl9saXN0O1xuK1x0XHR9XG4gXHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgLXRubF9obGVuLFxuIFx0XHRcdFx0XHRcdCBuc2tiLVx1MDAzZWRhdGEgLSB0bmxfaGxlbixcbiBcdFx0XHRcdFx0XHQgb2Zmc2V0ICsgdG5sX2hsZW4pO1xuQEAgLTQ3NTksOSArNDg2MSwxMSBAQCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIHNrYjtcbiBcbiBlcnJfbGluZWFyaXplOlxuK1x0ZXJyID0gLUVOT01FTTtcbitlcnJfbGlzdDpcbiBcdGtmcmVlX3NrYl9saXN0KHNrYi1cdTAwM2VuZXh0KTtcbiBcdHNrYi1cdTAwM2VuZXh0ID0gTlVMTDtcbi1cdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnRfbGlzdCk7XG4gXG5AQCAtNDk2MSw3ICs1MDY1LDExIEBAIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXG4gXG4gXHRcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIGhlYWRfc2tiKTtcbiBcbi1cdFx0c2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZShuc2tiLCBza2JfaGVhZHJvb20obnNrYikgLSBoZWFkcm9vbSk7XG4rXHRcdGVyciA9IHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bChuc2tiLFxuK1x0XHRcdFx0XHRcdFx0c2tiX2hlYWRyb29tKG5za2IpIC0gaGVhZHJvb20pO1xuK1x0XHRpZiAodW5saWtlbHkoZXJyKSlcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0c2tiX3Jlc2V0X21hY19sZW4obnNrYik7XG4gXG4gXHRcdHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KGhlYWRfc2tiLCAtdG5sX2hsZW4sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmMgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuaW5kZXggYWJkNzcxNjJmNWU3NS4uYTIyZWYwNDRlZWNiMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2VzcDRfb2ZmbG9hZC5jXG4rKysgYi9uZXQvaXB2NC9lc3A0X29mZmxvYWQuY1xuQEAgLTEzOCw3ICsxMzgsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4rXHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldF9vZmZsb2Fkc1t4by1cdTAwM2Vwcm90b10pO1xuIFx0aWYgKGxpa2VseShvcHMgXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQpKVxuIFx0XHRzZWdzID0gb3BzLVx1MDAzZWNhbGxiYWNrcy5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTtcbkBAIC0xNTUsMjMgKzE1NiwyNyBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm00X2JlZXRfZ3NvX3NlZ21lbnQoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4gXHRjb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKm9wcztcbiBcdHU4IHByb3RvID0geG8tXHUwMDNlcHJvdG87XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4rXHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXG4gXHRpZiAoeC1cdTAwM2VzZWwuZmFtaWx5ICE9IEFGX0lORVQ2KSB7XG4gXHRcdGlmIChwcm90byA9PSBJUFBST1RPX0JFRVRQSCkge1xuIFx0XHRcdHN0cnVjdCBpcF9iZWV0X3BoZHIgKnBoID1cbiBcdFx0XHRcdChzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXG4tXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gcGgtXHUwMDNlaGRybGVuICogODtcbitcdFx0XHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgcGgtXHUwMDNlaGRybGVuICogOCkpXG4rXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdFx0XHRwcm90byA9IHBoLVx1MDAzZW5leHRoZHI7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0gSVBWNF9CRUVUX1BITUFYTEVOO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuK1x0XHRpbnQgb2Zmc2V0O1xuIFx0XHRfX2JlMTYgZnJhZztcbiBcbi1cdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz1cbi1cdFx0XHRpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZyYWcpO1xuK1x0XHRvZmZzZXQgPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwgMCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZyYWcpO1xuK1x0XHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgb2Zmc2V0KSlcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdFx0aWYgKHByb3RvID09IElQUFJPVE9fVENQKVxuIFx0XHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX1RDUFY0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Jhdy5jIGIvbmV0L2lwdjQvcmF3LmNcbmluZGV4IDdmNzRkOGI5NWEzNzMuLjE2MzU0YmY3NmRhZDEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9yYXcuY1xuKysrIGIvbmV0L2lwdjQvcmF3LmNcbkBAIC0zNTYsNiArMzU2LDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0aGxlbiA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LVx1MDAzZWRzdC5kZXYpO1xuK1x0aWYgKGhsZW4gXHUwMDNlPSBVMTZfTUFYIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0dGxlbiA9IHJ0LVx1MDAzZWRzdC5kZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xuIFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzayxcbiBcdFx0XHRcdCAgbGVuZ3RoICsgaGxlbiArIHRsZW4gKyAxNSxcbkBAIC0zOTksNiArNDAxLDggQEAgc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4gXHRlcnIgPSAtRUlOVkFMO1xuIFx0aWYgKGlwaGxlbiBcdTAwM2UgbGVuZ3RoIHx8IGlwaGxlbiBcdTAwM2Mgc2l6ZW9mKCppcGgpKVxuIFx0XHRnb3RvIGVycm9yX2ZyZWU7XG4rXHRpZiAoaGxlbiBcdTAwM2U9IFUxNl9NQVggLSBpcGhsZW4pXG4rXHRcdGdvdG8gZXJyb3JfZnJlZTtcbiBcbiBcdGlmIChpcGhsZW4gXHUwMDNlPSBzaXplb2YoKmlwaCkpIHtcbiBcdFx0aWYgKCFpcGgtXHUwMDNlc2FkZHIpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmMgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuY1xuaW5kZXggMjI4OTU1MjFhNTdkMC4uZTEyM2YwYTk3ODJiMiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2VzcDZfb2ZmbG9hZC5jXG4rKysgYi9uZXQvaXB2Ni9lc3A2X29mZmxvYWQuY1xuQEAgLTE3NCw3ICsxNzQsOCBAQCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdHN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciArPSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW47XG4rXHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHRvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldDZfb2ZmbG9hZHNbeG8tXHUwMDNlcHJvdG9dKTtcbiBcdGlmIChsaWtlbHkob3BzIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlY2FsbGJhY2tzLmdzb19zZWdtZW50KSlcbiBcdFx0c2VncyA9IG9wcy1cdTAwM2VjYWxsYmFja3MuZ3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7XG5AQCAtMTkxLDcgKzE5Miw4IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdGNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqb3BzO1xuIFx0dTggcHJvdG8gPSB4by1cdTAwM2Vwcm90bztcbiBcbi1cdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbitcdGlmICghc2tiX2FkZF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcbiBcdGlmICh4LVx1MDAzZXNlbC5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbiBcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT1cbkBAIC0yMDEsNyArMjAzLDggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICp4ZnJtNl9iZWV0X2dzb19zZWdtZW50KHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuIFx0XHRcdHN0cnVjdCBpcF9iZWV0X3BoZHIgKnBoID1cbiBcdFx0XHRcdChzdHJ1Y3QgaXBfYmVldF9waGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXG4tXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gcGgtXHUwMDNlaGRybGVuICogODtcbitcdFx0XHRpZiAoIXNrYl9hZGRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgcGgtXHUwMDNlaGRybGVuICogOCkpXG4rXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU9WRVJGTE9XKTtcbiBcdFx0XHRwcm90byA9IHBoLVx1MDAzZW5leHRoZHI7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgLT0gSVBWNF9CRUVUX1BITUFYTEVOO1xuQEAgLTIxMCwxMCArMjEzLDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeGZybTZfYmVldF9nc29fc2VnbWVudChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbiBcdFx0aWYgKHByb3RvID09IElQUFJPVE9fVENQKVxuIFx0XHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX1RDUFY2O1xuIFx0fSBlbHNlIHtcbitcdFx0aW50IG9mZnNldDtcbiBcdFx0X19iZTE2IGZyYWc7XG4gXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICs9XG4tXHRcdFx0aXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFx1MDAyNnByb3RvLCBcdTAwMjZmcmFnKTtcbitcdFx0b2Zmc2V0ID0gaXB2Nl9za2lwX2V4dGhkcihza2IsIDAsIFx1MDAyNnByb3RvLCBcdTAwMjZmcmFnKTtcbitcdFx0aWYgKCFza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIG9mZnNldCkpXG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVPVkVSRkxPVyk7XG4gXHR9XG4gXG4gXHRpZiAocHJvdG8gPT0gSVBQUk9UT19JUElQKVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmNcbmluZGV4IGI4OGQzNjRlNzhhYWUuLmZhMjIzZWMwMjM5NjQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yYXcuY1xuKysrIGIvbmV0L2lwdjYvcmF3LmNcbkBAIC0xNSw2ICsxNSw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NvY2tldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtNjEzLDYgKzYxNCw5IEBAIHN0YXRpYyBpbnQgcmF3djZfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW5ndGgsXG4gXHRpZiAoZmxhZ3NcdTAwMjZNU0dfUFJPQkUpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0aWYgKGhsZW4gXHUwMDNlPSBVMTZfTUFYKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssXG4gXHRcdFx0XHQgIGxlbmd0aCArIGhsZW4gKyB0bGVuICsgMTUsXG4gXHRcdFx0XHQgIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQsIFx1MDAyNmVycik7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9kZXZpY2UuYyBiL25ldC94ZnJtL3hmcm1fZGV2aWNlLmNcbmluZGV4IGYxNTNiZjY5NWI5ZGQuLjJhMDliZDJlZWM0OTMgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2RldmljZS5jXG4rKysgYi9uZXQveGZybS94ZnJtX2RldmljZS5jXG5AQCAtMjAsOCArMjAsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcdTAwM2VcbiBcbiAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxuLXN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi1cdFx0XHRcdCAgdW5zaWduZWQgaW50IGhzaXplKVxuK3N0YXRpYyBpbnQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0IHVuc2lnbmVkIGludCBoc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgeGZybV9vZmZsb2FkICp4byA9IHhmcm1fb2ZmbG9hZChza2IpO1xuIFxuQEAgLTMwLDMwICszMCwzMyBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyIC09IHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbjtcbiBcbiBcdHBza2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBoc2l6ZSlcbi1cbitzdGF0aWMgaW50IF9feGZybV9tb2RlX3R1bm5lbF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IGhzaXplKVxuIHtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXG4tXHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQpXG4tXHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICsgaHNpemU7XG4rXHRpZiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1NPX1NFR01FTlQgXHUwMDI2XHUwMDI2XG4rXHQgICAgIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgaHNpemUpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbiBcdHNrYl9yZXNldF9tYWNfbGVuKHNrYik7XG4gXHRwc2tiX3B1bGwoc2tiLFxuIFx0XHQgIHNrYi1cdTAwM2VtYWNfbGVuICsgeC1cdTAwM2Vwcm9wcy5oZWFkZXJfbGVuIC0geC1cdTAwM2Vwcm9wcy5lbmNfaGRyX2xlbik7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX194ZnJtX21vZGVfYmVldF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgaHNpemUpXG4rc3RhdGljIGludCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IGhzaXplKVxuIHtcbiBcdHN0cnVjdCB4ZnJtX29mZmxvYWQgKnhvID0geGZybV9vZmZsb2FkKHNrYik7XG4gXHRpbnQgcGhsZW4gPSAwO1xuIFxuLVx0aWYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UKVxuLVx0XHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIGhzaXplO1xuK1x0aWYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dTT19TRUdNRU5UIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhzaXplKSlcbitcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gXG4gXHRza2JfcmVzZXRfbWFjX2xlbihza2IpO1xuIFx0aWYgKHgtXHUwMDNlc2VsLmZhbWlseSAhPSBBRl9JTkVUNikge1xuQEAgLTYzLDEwICs2NiwxMSBAQCBzdGF0aWMgdm9pZCBfX3hmcm1fbW9kZV9iZWV0X3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHR9XG4gXG4gXHRwc2tiX3B1bGwoc2tiLCBza2ItXHUwMDNlbWFjX2xlbiArIGhzaXplICsgKHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHBobGVuKSk7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyogQWRqdXN0IHBvaW50ZXJzIGludG8gdGhlIHBhY2tldCB3aGVuIElQc2VjIGlzIGRvbmUgYXQgbGF5ZXIyICovXG4tc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCB4ZnJtX291dGVyX21vZGVfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzd2l0Y2ggKHgtXHUwMDNlb3V0ZXJfbW9kZS5lbmNhcCkge1xuIFx0Y2FzZSBYRlJNX01PREVfSVBURlM6XG5AQCAtOTgsNiArMTAyLDggQEAgc3RhdGljIHZvaWQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRjYXNlIFhGUk1fTU9ERV9JTl9UUklHR0VSOlxuIFx0XHRicmVhaztcbiBcdH1cbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgeG1pdF94ZnJtX2NoZWNrX292ZXJmbG93KHN0cnVjdCBza19idWZmICpza2IpXG5AQCAtMTc1LDcgKzE4MSwxMiBAQCBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1clxuIFxuIFx0aWYgKCFza2ItXHUwMDNlbmV4dCkge1xuIFx0XHRlc3BfZmVhdHVyZXMgfD0gc2tiLVx1MDAzZWRldi1cdTAwM2Vnc29fcGFydGlhbF9mZWF0dXJlcztcbi1cdFx0eGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKTtcbitcdFx0ZXJyID0geGZybV9vdXRlcl9tb2RlX3ByZXAoeCwgc2tiKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSwgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4gXG4gXHRcdHhvLVx1MDAzZWZsYWdzIHw9IFhGUk1fREVWX1JFU1VNRTtcbiBcbkBAIC0yMDEsNyArMjEyLDEzIEBAIHN0cnVjdCBza19idWZmICp2YWxpZGF0ZV94bWl0X3hmcm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyXG4gXHRcdHhvID0geGZybV9vZmZsb2FkKHNrYjIpO1xuIFx0XHR4by1cdTAwM2VmbGFncyB8PSBYRlJNX0RFVl9SRVNVTUU7XG4gXG4tXHRcdHhmcm1fb3V0ZXJfbW9kZV9wcmVwKHgsIHNrYjIpO1xuK1x0XHRlcnIgPSB4ZnJtX291dGVyX21vZGVfcHJlcCh4LCBza2IyKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdFhGUk1fSU5DX1NUQVRTKHhzX25ldCh4KSwgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IpO1xuK1x0XHRcdHNrYjItXHUwMDNlbmV4dCA9IG5za2I7XG4rXHRcdFx0a2ZyZWVfc2tiX2xpc3Qoc2tiMik7XG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbiBcbiBcdFx0ZXJyID0geC1cdTAwM2V0eXBlX29mZmxvYWQtXHUwMDNleG1pdCh4LCBza2IyLCBlc3BfZmVhdHVyZXMpO1xuIFx0XHRpZiAoIWVycikge1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuaW5kZXggNTk3YWVkZWFjMjZlYi4uMTNiNjJiY2Q5ZTA1MyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuKysrIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXG5AQCAtMjM3OSw3ICsyMzc5LDggQEAgc3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdHNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAtKHgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pKTtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xuIFx0dG9wX2lwaC1cdTAwM2VpaGwgPSA1O1xuQEAgLTI0MjYsNyArMjQyNyw4IEBAIHN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiArIHgtXHUwMDNlcHJvcHMuZW5jX2hkcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuIFx0dG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7XG4gXHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA2O1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMgYi9uZXQveGZybS94ZnJtX291dHB1dC5jXG5pbmRleCBjYzM1YzJmY2JiZTA5Li4wY2ViZTc1MmNhOTgwIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuKysrIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuY1xuQEAgLTczLDcgKzczLDggQEAgc3RhdGljIGludCB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgK1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIGlobDtcbitcdGlmICghc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiLCBpaGwpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBpaGwpO1xuIFx0bWVtbW92ZShza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgaXBoLCBpaGwpO1xuIFx0cmV0dXJuIDA7XG5AQCAtMTc5LDcgKzE4MCw4IEBAIHN0YXRpYyBpbnQgeGZybTZfdHJhbnNwb3J0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsXG4gXHRcdFx0ICAgKHByZXZoZHIgLSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pIC0gc2tiLVx1MDAzZWRhdGEpO1xuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTtcbiBcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcbiBcdHJldHVybiAwO1xuQEAgLTIwOSw3ICsyMTEsOCBAQCBzdGF0aWMgaW50IHhmcm02X3JvX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsXG4gXHRcdFx0ICAgKHByZXZoZHIgLSB4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pIC0gc2tiLVx1MDAzZWRhdGEpO1xuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBoZHJfbGVuO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIGhkcl9sZW4pKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdF9fc2tiX3B1bGwoc2tiLCBoZHJfbGVuKTtcbiBcdG1lbW1vdmUoaXB2Nl9oZHIoc2tiKSwgaXBoLCBoZHJfbGVuKTtcbiBcbkBAIC0yNDEsNyArMjQ0LDggQEAgc3RhdGljIGludCB4ZnJtNF9iZWV0X2VuY2FwX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0c2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICs9IElQVjRfQkVFVF9QSE1BWExFTjtcbiBcdHNrYi1cdTAwM2VtYWNfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICtcbiBcdFx0XHQgIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgcHJvdG9jb2wpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbiBcdHhmcm00X2JlZXRfbWFrZV9oZWFkZXIoc2tiKTtcbiBcbkBAIC0yODgsNyArMjkyLDggQEAgc3RhdGljIGludCB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC14LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4pO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgK1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xuIFxuIFx0dG9wX2lwaC1cdTAwM2VpaGwgPSA1O1xuQEAgLTMzNSw3ICszNDAsOCBAQCBzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9lbmNhcF9hZGQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLXgtXHUwMDNlcHJvcHMuaGVhZGVyX2xlbik7XG4gXHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArXG4gXHRcdFx0ICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik7XG4tXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciArIHNpemVvZigqdG9wX2lwaCk7XG4rXHRpZiAoIXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYiwgc2l6ZW9mKCp0b3BfaXBoKSkpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFx0dG9wX2lwaCA9IGlwdjZfaGRyKHNrYik7XG4gXG4gXHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA2O1xuQEAgLTM3NCw3ICszODAsOCBAQCBzdGF0aWMgaW50IHhmcm02X2JlZXRfZW5jYXBfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKz0gSVBWNF9CRUVUX1BITUFYTEVOO1xuIFx0c2tiLVx1MDAzZW1hY19oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgK1xuIFx0XHRcdCAgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpO1xuLVx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgKyBzaXplb2YoKnRvcF9pcGgpO1xuK1x0aWYgKCFza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IsIHNpemVvZigqdG9wX2lwaCkpKVxuK1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcdHBoID0gX19za2JfcHVsbChza2IsIFhGUk1fTU9ERV9TS0JfQ0Ioc2tiKS1cdTAwM2VpaGwgLSBoZHJfbGVuKTtcbiBcbiBcdHhmcm02X2JlZXRfbWFrZV9oZWFkZXIoc2tiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjUyOjU3LjMxNTg3MDM4MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MDgxNDM5ODkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJvdW5kcyBDaGVja2luZyBQYXRjaCBmb3IgU0tCIEhlYWRlciBPZmZzZXRzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0J3MgbWFraW5nIHNvbWUgY3JpdGljYWwgY2hhbmdlcyByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgU0tCIChTb2NrZXQgQnVmZmVyKSBoZWFkZXIgb2Zmc2V0cy4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IGludHJvZHVjaW5nIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzIHdoZW4gbWFuaXB1bGF0aW5nIGhlYWRlcnMgbGlrZSBgbmV0d29ya19oZWFkZXJgLCBhbmQgYHRyYW5zcG9ydF9oZWFkZXJgLCB3aGljaCBhcmUgYHUxNmAgZmllbGRzLCBhY3Jvc3MgYG5ldC9jb3JlL3NrYnVmZi5jYCwgYW5kIGEgbnVtYmVyIG9mIElQc2VjL1hGUk0gcmVsYXRlZCBmaWxlcy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNoYW5nZSBpbXBhY3RpbmcgY29yZSBuZXR3b3JraW5nIGFuZCBzZWN1cml0eSwgd2hpY2ggbWVhbnMgaXQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGtleSBzeW1ib2xzLCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIGRpcmVjdGx5IHRvdWNoZWQgYW5kIGNoYW5nZWQgYnkgdGhlIHBhdGNoLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIHRoZXNlIGZ1bmN0aW9uczogYHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bGAgKHdoaWNoIGFwcGVhcnMgdG8gYmUgYSBzdGF0aWMgZnVuY3Rpb24pLCBhbmQgYHNrYl90cmFuc3BvcnRfaGVhZGVyX2FkZF9jYXJlZnVsYCAoYWxzbyBzdGF0aWMpLiBXZSBhbHNvIGhhdmUgdGhlIGFkZGl0aW9uIG9mIGBza2JfYWRkX3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bGAuIEFsb25nIHdpdGggdGhlc2UsIEkgbmVlZCB0byBjb25zaWRlciBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGFuZCBgc2tiX3NlZ21lbnRgIGFsb25nIHdpdGggYSBsaXN0IG9mIHhmcm0gZnVuY3Rpb25zLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCB3aGljaCBBUEkgZW50cnkgcG9pbnRzIGFyZSBub24tc3RhdGljIGFuZCBub3QgaW5saW5lZCwgc2luY2UgdGhvc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBwbGFjZXMgdG8gaW50cm9kdWNlIGlzc3VlcywgYW5kIHRoZXJlZm9yZSB0aGUgYmVzdCBwbGFjZXMgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBBZnRlciBjb25zaWRlcmluZyB0aGUgbGlzdCwgSSd2ZSBnb3QgbXkgZXllIG9uIGBwc2tiX2V4cGFuZF9oZWFkYCwgYHNrYl9jb3B5X2V4cGFuZGAsIGBza2Jfc2VnbWVudF9saXN0YCwgYHNrYl9zZWdtZW50YCwgYW5kIGB2YWxpZGF0ZV94bWl0X3hmcm1gLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgdG8gc2VlIHdoYXQgdGhlIGlucHV0cyBhcmUsIGFuZCBob3cgdGhhdCByZWxhdGVzIHRvIHRoZSBoZWFkZXJzLlxuXG5XYWl0LCBgcmF3X3NlbmRfaGRyaW5jYCBhbmQgYHJhd3Y2X3NlbmRfaGRyaW5jYCBhcmUgc3RhdGljIGZ1bmN0aW9ucywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY2FsbCBjb250ZXh0cyB0byBwcm9wZXJseSBpbmNsdWRlIHRoZW0uIEEgcXVpY2sgbG9vayByZXZlYWxzIHRoYXQgYHJhd19zZW5kbXNnYCBjYWxscyBgcmF3X3NlbmRfaGRyaW5jYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGNhbGxzIGByYXd2Nl9zZW5kX2hkcmluY2AuIFNvIEkgc2hvdWxkIGluY2x1ZGUgYHJhd19zZW5kbXNnYCBhbmQgYHJhd3Y2X3NlbmRtc2dgIGluIG15IHBsYW4uXG5cbkZpbmFsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgdmFsaWRhdGVfeG1pdF94ZnJtYCBpcyBpbmRlZWQgYW4gZXhwb3J0ZWQgZnVuY3Rpb24gdGhhdCBJIGNhbiBkaXJlY3RseSBmdXp6LiBJdCdzIGluIGBuZXQveGZybS94ZnJtX2RldmljZS5jYC5cblxuV2l0aCB0aGlzIHVuZGVyc3RhbmRpbmcsIEkgY2FuIG5vdyBkZXNpZ24gYSB0YXJnZXRlZCBmdXp6aW5nIHN0cmF0ZWd5IHRvIGhpdCB0aGUgY3JpdGljYWwgYXJlYXMgd2hlcmUgaW50ZWdlciBvdmVyZmxvd3MgYXJlIG5vdyBiZWluZyBndWFyZGVkIGFnYWluc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6NTU6MjguMTMwMjc0MDY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NjczNjIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jPTEwOT1zdGF0aWMgaW5saW5lIGJvb2wgeG1pdF94ZnJtX2NoZWNrX292ZXJmbG93KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTEyMC1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjEyMTpzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF94ZnJtKHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzLCBib29sICphZ2FpbilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTEyMi17XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1My19XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyNTQ6RVhQT1JUX1NZTUJPTF9HUEwodmFsaWRhdGVfeG1pdF94ZnJtKTtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6NTU6MjguODE3MDcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0MTE5Mjg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqWEZSTSBNb2R1bGUgRXhwbG9yYXRpb24qKlxuXG5SaWdodCwgc28gYHZhbGlkYXRlX3htaXRfeGZybWAgaXMgZGVmaW5pdGVseSBleHBvcnRlZDsgSSBrbmV3IHRoYXQuIE5vdywgd2hhdCBhYm91dCB0aGF0IGBpcHRmc19lbmNhcF9hZGRfaXB2NGAgZnVuY3Rpb24/IEkgc2VlbSB0byByZW1lbWJlciBzZWVpbmcgdGhhdCBzb21ld2hlcmUuLi4gYWgsIHllcywgSSdtIHByZXR0eSBzdXJlIGl0J3MgaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIEknbGwgaGF2ZSB0byBkb3VibGUtY2hlY2ssIGJ1dCB0aGF0IHJpbmdzIGEgYmVsbC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA1OjU1OjMxLjg1ODI2ODEzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA0ODE4NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfZW5jYXBfYWRkX2lwdjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMzIxPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kZWxheV90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM1OS0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM2MDogKiBpcHRmc19lbmNhcF9hZGRfaXB2NCgpIC0gYWRkIG91dGVyIGVuY2Fwc1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzYxLSAqIEB4OiB4ZnJtIHN0YXRlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3MS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM3MjpzdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzczLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNDY0PXN0YXRpYyBpbnQgaXB0ZnNfcHJlcGFyZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2Ni1cXHRpZiAoeC1cXHUwMDNlb3V0ZXJfbW9kZS5mYW1pbHkgPT0gQUZfSU5FVClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2NzpcXHRcXHRyZXR1cm4gaXB0ZnNfZW5jYXBfYWRkX2lwdjQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2OC1cXHRpZiAoeC1cXHUwMDNlb3V0ZXJfbW9kZS5mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDU6NTU6MzEuOTk4NzYxMzg5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMDk1MjY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlN0YXRpYyBDb251bmRydW1zKipcblxuSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCdzIGNhbGxpbmcgc29tZXRoaW5nIHN0YXRpYyDigJMgc3BlY2lmaWNhbGx5LCBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLiBUaGF0IGZ1bmN0aW9uIGlzICphbHNvKiBzdGF0aWM/IE9rYXksIHRoYXQncyBpbW1lZGlhdGVseSByYWlzaW5nIGEgZmxhZy4gU3RhdGljIG1ldGhvZHMgYXJlIHNjb3BlZCB3aXRoaW4gdGhlIGNsYXNzIHRoZXkncmUgZGVmaW5lZCBpbiBhbmQgY2FuJ3QgYmUgY2FsbGVkIGRpcmVjdGx5IG9uIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MuIFNvLCB0aGlzIHRlbGxzIG1lIGEgY291cGxlIG9mIHRoaW5ncyByaWdodCBhd2F5OiB0aGUgY29udGV4dCBvZiB0aGlzIG11c3QgYWxsIGJlIHdpdGhpbiBhIHNpbmdsZSBjb21waWxhdGlvbiB1bml0LCBvciBtYXliZSBhIGxpYnJhcnkgd2l0aCBzb21lIGxpbWl0YXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhleSB3ZW50IHRoaXMgcm91dGUuIFdoeSBub3QgZW5jYXBzdWxhdGUgaXQgaW4gYW4gb2JqZWN0LCBnaXZlbiB0aGUgY29udGV4dD8gV2hhdCBpcyB0aGUgKmRlc2lnbiBpbnRlbnRpb24qIGhlcmU/IElzIHRoZXJlIGEgcmVhc29uIGZvciB0aGlzIHN0YXRpYy1vbi1zdGF0aWMgcGF0dGVybiB0aGF0IGp1c3RpZmllcyB0aGUgcG90ZW50aWFsIGZvciByZWR1Y2VkIGZsZXhpYmlsaXR5IG9yIHRlc3RhYmlsaXR5PyBUaGlzIGlzIHdvcnRoIGRpZ2dpbmcgZGVlcGVyIGludG8uIEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mIHV0aWxpdHkgZnVuY3Rpb24sIG9yIGlzIHRoZXJlIGEgYmlnZ2VyIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb24gaGVyZT8gR290dGEgc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MzgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNTo1NTozNS40Mjk3MTgzNzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MTE2ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX3ByZXBhcmVfb3V0cHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9MjQxOT1zdGF0aWMgaW50IGlwdGZzX2VuY2FwX2FkZF9pcHY2KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0NTQtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI0NTU6ICogaXB0ZnNfcHJlcGFyZV9vdXRwdXQoKSAtICBwcmVwYXJlIHRoZSBza2IgZm9yIG91dHB1dFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDU2LSAqIEB4OiB4ZnJtIHN0YXRlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjQ2My0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjQ2NDpzdGF0aWMgaW50IGlwdGZzX3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNDY1LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzYyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzcyLVxcdC5vdXRwdXQgPSBpcHRmc19vdXRwdXRfY29sbGVjdCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc3MzpcXHQucHJlcGFyZV9vdXRwdXQgPSBpcHRmc19wcmVwYXJlX291dHB1dCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc3NC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNTo1NTozNS41NzM4NDIzMzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUwMzU4MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENhbGxiYWNrIExhYnlyaW50aCoqXG5cbkFscmlnaHQsIHRoYXQncyBhIGNhbGxiYWNrLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0J3MgY29ubmVjdGVkIHRvLiBMZXQncyB0cmFjZSB0aGlzIGJhY2suIEhtbSwgdGhpcyBmZWVscyBmYW1pbGlhci4uLiBhbG1vc3QgbGlrZSBJJ3ZlIHNlZW4gc29tZXRoaW5nIHNpbWlsYXIuIE15IG1pbmQgaXMgYWxyZWFkeSBqdW1waW5nIHRvIHBvdGVudGlhbCByZWxhdGVkIGZ1bmN0aW9uIGNhbGxzLlxuXG5XaGVyZSBkb2VzIHRoaXMgY29tZSBpbnRvIHBsYXk/IEl0J3MgbWFraW5nIG1lIGNvbnNpZGVyIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nLiBDb3VsZCB0aGlzIGJlIHJlbGF0ZWQgdG8gdGhlIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCBmdW5jdGlvbj8gVGhhdCdzIHRoZSBmaXJzdCBwbGFjZSBteSBleHBlcmllbmNlIGxlYWRzIG1lLiBJcyB0aGF0IGEgbGlrZWx5IGNhbmRpZGF0ZT8gUGVyaGFwcyB0aGF0IGlzIHdoZXJlIHRoZSBmbG93IGludGVyc2VjdHMgYW5kIHRoaXMgY2FsbGJhY2sgaXMgaW52b2tlZC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBjb250ZXh0IGZvciB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NjksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNTo1NTozOC42MjQyMDQwNjJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTU2MDc2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtNF90cmFuc3BvcnRfb3V0cHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuYz01MT1zdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqc2tiX2RzdF9wb3Aoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjMtICovXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2NDpzdGF0aWMgaW50IHhmcm00X3RyYW5zcG9ydF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02NS17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTQ2Nz1zdGF0aWMgaW50IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ3OC1cXHRcXHRpZiAoeC1cXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQpXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0Nzk6XFx0XFx0XFx0cmV0dXJuIHhmcm00X3RyYW5zcG9ydF9vdXRwdXQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQ4MC1cXHRcXHRpZiAoeC1cXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNTo1NTozOC43ODM3NzQzNDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NjkyNDAwMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkFuYWx5emluZyBgeGZybV9vdXRlcl9tb2RlX291dHB1dGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgc29tZXRoaW5nIHN0YXRpYywgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGJ5IGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YC4gVGhlIGZhY3QgdGhhdCBpdCdzIHN0YXRpYyBpbW1lZGlhdGVseSBwb2ludHMgbWUgdG93YXJkIGNlcnRhaW4gYXNzdW1wdGlvbnMgYWJvdXQgc2NvcGUgYW5kIGxpZmV0aW1lLiBTdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgY29udGV4dCB1c3VhbGx5IG1lYW4gdGhleSdyZSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgb3IgZmlsZSwgYW5kIHRoZXkgYXJlIHVzdWFsbHkgZGVmaW5lZCBhdCBnbG9iYWwgc2NvcGUuIFdlIGFyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgbGV2ZWwgb2YgZGF0YSBlbmNhcHN1bGF0aW9uLiBOb3csIHRoZSBrZXkgaXMgdGhlIGNhbGxpbmcgZnVuY3Rpb247IGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YC4gVGhhdCBuYW1lIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgb3V0cHV0IHN0YWdlIG9mIHNvbWUga2luZCBvZiB0cmFuc2Zvcm1hdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYW4gXCJvdXRlciBtb2RlLlwiIEdpdmVuIHRoZSB4ZnJtIHByZWZpeCwgSSdtIHRoaW5raW5nIHdlJ3JlIGluIHRoZSByZWFsbSBvZiB0aGUgWEZSTSBzdWJzeXN0ZW0uIFRoYXQgbWVhbnMgdGhpcyBzdGF0aWMgZW50aXR5IGlzIHByb2JhYmx5IG1hbmFnaW5nIHNvbWUgaW50ZXJuYWwgc3RhdGUgb3IgZnVuY3Rpb25hbGl0eSBzcGVjaWZpYyB0byBob3cgcGFja2V0cyBhcmUgaGFuZGxlZCB3aGVuIGdvaW5nICpvdXQqIHRocm91Z2ggdGhlIG91dGVyIGVuY2Fwc3VsYXRpb24gKG9yIGRlY2Fwc3VsYXRpb24sIGRlcGVuZGluZyBvbiBjb250ZXh0KS4gVGhpcyBtZWFucyBpdCBpcyBsaWtlbHkgaW52b2x2ZWQgd2l0aCB0aGluZ3MgbGlrZSBoZWFkZXJzIG9yIGNoZWNrc3VtLiBJIHdpbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byBpdHMgc3RydWN0dXJlIHRvIGV2YWx1YXRlIHRoZSBleGFjdCByb2xlIGl0IHBsYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA2MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjI0LjQ3NjE3OTQxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyODc0MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fb3V0ZXJfbW9kZV9vdXRwdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9vdXRwdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jPTQ0MT1zdGF0aWMgaW50IHhmcm02X3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy00NjYtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo0Njc6c3RhdGljIGludCB4ZnJtX291dGVyX21vZGVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDY4LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNDk4LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfUEtUR0VOKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NDk5OmludCBwa3RnZW5feGZybV9vdXRlcl9tb2RlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMC17XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1MDE6XFx0cmV0dXJuIHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwMi19XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1MDM6RVhQT1JUX1NZTUJPTF9HUEwocGt0Z2VuX3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTA0LSNlbmRpZlxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz01MDY9c3RhdGljIGludCB4ZnJtX291dHB1dF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNTIzLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NTI0OlxcdFxcdGVyciA9IHhmcm1fb3V0ZXJfbW9kZV9vdXRwdXQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUyNS1cXHRcXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjI1LjAzOTA2MTE3MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjEzOTUwNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgWEZSTSBPdXRwdXQgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgeGZybV9vdXRwdXRgIHN0dWZmLiBJJ20gZm9jdXNpbmcgb24gaG93IHBhY2tldHMgZ2V0IHNlbnQgb3V0LiBJJ3ZlIG5vdGljZWQgYHhmcm1fb3V0cHV0X29uZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgY2FsbHMgaXQsIHNwZWNpZmljYWxseS4gVGhhdCdzIHN0YXRpY2FsbHkgZGVjbGFyZWQsIHdoaWNoIHN1Z2dlc3RzIGEgY2VydGFpbiBsZXZlbCBvZiBjb250cm9sIG9yIHBlcmhhcHMgb3B0aW1pemF0aW9uIGF0IGNvbXBpbGUgdGltZS4gTm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgeGZybV9vdXRwdXRgIGZpdHMgaW50byB0aGUgcGljdHVyZSBtb3JlIGJyb2FkbHkuIFdoYXQncyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3bz8gSXMgYHhmcm1fb3V0cHV0YCB0aGUgY29yZSwgZ2VuZXJpYyBmdW5jdGlvbiwgYW5kIGB4ZnJtX291dHB1dF9vbmVgIGEgc3BlY2lhbGl6ZWQgaW5zdGFuY2Ugb3IgaGVscGVyPyBPciBpcyBpdCB0aGUgb3RoZXIgd2F5IGFyb3VuZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWluIGFuZCB1bmRlcnN0YW5kIHdoZXJlIGB4ZnJtX291dHB1dGAgZ2V0cyBjYWxsZWQgZnJvbSwgYW5kIGhvdywgaW4gY29udHJhc3QgdG8gYHhmcm1fb3V0cHV0X29uZWAuIEknbSBndWVzc2luZyB0aGF0IHVuZGVyc3RhbmRpbmcgdGhlaXIgaW50ZXJhY3Rpb24gaXMga2V5IHRvIGhvdyB0aGUgc3lzdGVtIGFjdHVhbGx5IG91dHB1dHMgdHJhbnNmb3JtZWQgcGFja2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMToyOC4yNTMwMTYwMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzAzODk2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX291dHB1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX291dHB1dC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMi0vKlxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6MzogKiB4ZnJtX291dHB1dC5jIC0gQ29tbW9uIElQc2VjIGVuY2Fwc3VsYXRpb24gY29kZS5cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTQtICpcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtMjYtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzoyNzpzdGF0aWMgaW50IHhmcm1fb3V0cHV0MihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy0yOC1zdGF0aWMgaW50IHhmcm1faW5uZXJfZXh0cmFjdF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpO1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYz01MDM9RVhQT1JUX1NZTUJPTF9HUEwocGt0Z2VuX3hmcm1fb3V0ZXJfbW9kZV9vdXRwdXQpO1xcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy01MDUtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo1MDY6c3RhdGljIGludCB4ZnJtX291dHB1dF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTUwNy17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTU5OS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYwMDppbnQgeGZybV9vdXRwdXRfcmVzdW1lKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYwMS17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYwMy1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjYwNDpcXHR3aGlsZSAobGlrZWx5KChlcnIgPSB4ZnJtX291dHB1dF9vbmUoc2tiLCBlcnIpKSA9PSAwKSkge1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjA1LVxcdFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYxNS1cXHRcXHRcXHQgICAgICBORl9JTkVUX1BPU1RfUk9VVElORywgbmV0LCBzaywgc2tiLFxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjE2OlxcdFxcdFxcdCAgICAgIE5VTEwsIHNrYl9kc3Qoc2tiKS1cXHUwMDNlZGV2LCB4ZnJtX291dHB1dDIpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjE3LVxcdFxcdGlmICh1bmxpa2VseShlcnIgIT0gMSkpXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYyNi19XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo2Mjc6RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9vdXRwdXRfcmVzdW1lKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTYyOC1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTYyOT1zdGF0aWMgaW50IHhmcm1fZGV2X2RpcmVjdF9vdXRwdXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjYyLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6NjYzOnN0YXRpYyBpbnQgeGZybV9vdXRwdXQyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY0LXtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY2NTpcXHRyZXR1cm4geGZybV9vdXRwdXRfcmVzdW1lKHNrLCBza2IsIDEpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNjY2LX1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2Ny1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY2ODpzdGF0aWMgaW50IHhmcm1fb3V0cHV0X2dzbyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY2OS17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTY4NC1cXHRcXHRza2JfbWFya19ub3Rfb25fbGlzdChzZWdzKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjY4NTpcXHRcXHRlcnIgPSB4ZnJtX291dHB1dDIobmV0LCBzaywgc2Vncyk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy02ODYtXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jPTcwNj1zdGF0aWMgdm9pZCB4ZnJtX2dldF9pbm5lcl9pcHByb3RvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy03NTYtXFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo3NTc6aW50IHhmcm1fb3V0cHV0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc1OC17XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTc5Ni1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjc5NzpcXHRcXHRyZXR1cm4geGZybV9vdXRwdXRfcmVzdW1lKHNrLCBza2IsIDApO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtNzk4LVxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODIwLVxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWlubmVyX3Byb3RvY29sIFxcdTAwMjZcXHUwMDI2IHgtXFx1MDAzZXByb3BzLm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTClcXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjgyMTpcXHRcXHRcXHRcXHRyZXR1cm4geGZybV9vdXRwdXRfZ3NvKG5ldCwgc2ssIHNrYik7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04MjItXFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgzMC1cXHRcXHRpZiAoc2tiX2lzX2dzbyhza2IpKVxcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmM6ODMxOlxcdFxcdFxcdHJldHVybiB4ZnJtX291dHB1dF9nc28obmV0LCBzaywgc2tiKTtcXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTgzMi1cXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jLTg0My1vdXQ6XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYzo4NDQ6XFx0cmV0dXJuIHhmcm1fb3V0cHV0MihuZXQsIHNrLCBza2IpO1xcbm5ldC94ZnJtL3hmcm1fb3V0cHV0LmMtODQ1LX1cXG5uZXQveGZybS94ZnJtX291dHB1dC5jOjg0NjpFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX291dHB1dCk7XFxubmV0L3hmcm0veGZybV9vdXRwdXQuYy04NDctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjI4LjM1NjA2NzY0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTI2OTc4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkZvY3VzIFN5bWJvbCBDb25zaWRlcmF0aW9ucyBmb3IgUGFja2V0IFRyYW5zZm9ybWF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQga2V5IGZ1bmN0aW9ucyBmb3IgbWFya2luZyBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gcGFja2V0IHRyYW5zZm9ybWF0aW9ucy4gVGhlIGZhY3QgdGhhdCBgeGZybV9vdXRwdXRgIGlzIGV4cG9ydGVkIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgbWVhbmluZyB3ZSBjYW4gZGVmaW5pdGVseSBob29rIGludG8gdGhhdC4gVGhhdCdzIGEgY29yZSBmdW5jdGlvbiwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZm9jdXMgdGhlcmUuXG5cbk5vdywgZm9yIGFjdHVhbCBjYW5kaWRhdGVzLCBJIGltbWVkaWF0ZWx5IHRoaW5rIG9mIGEgZmV3IGtleSByb3V0aW5lcyB0aGF0IGRlYWwgd2l0aCBidWZmZXIgbWFuaXB1bGF0aW9uIGR1cmluZyB0cmFuc2Zvcm1hdGlvbjogYHBza2JfZXhwYW5kX2hlYWRgLCBgc2tiX2NvcHlfZXhwYW5kYCwgYHNrYl9zZWdtZW50X2xpc3RgLCBhbmQgYHNrYl9zZWdtZW50YC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZvciBoYW5kbGluZyB0aGUgU0tCcyBpbnZvbHZlZCBhbmQgY291bGQgcmV2ZWFsIGltcG9ydGFudCBwb2ludHMgZm9yIG91ciBmb2N1cy4gSXQncyBhbG1vc3QgY2VydGFpbiB0aGF0IG9uZSBvciBtb3JlIG9mIHRoZW0gd2lsbCBiZSBzdWl0YWJsZS5cblxuV2UgYWxzbyBoYXZlIHRvIHJlbWVtYmVyIGB4ZnJtX291dHB1dGAgaXRzZWxmIG5lZWRzIGNvbnNpZGVyYXRpb24uXG5cbldhaXQgYSBzZWNvbmQsIGxldCdzIG5vdCBiZSBoYXN0eSEgV2UgY2FuJ3QgZm9yZ2V0IGFib3V0IHRob3NlICpyYXcqIHNvY2tldHMuIGByYXdfc2VuZG1zZ2AgYW5kIGByYXd2Nl9zZW5kbXNnYCBhcmUgYWN0dWFsbHkgYWxzbyBxdWl0ZSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZXkgY2FsbCBgcmF3X3NlbmRfaGRyaW5jYCBhbmQgYHJhd3Y2X3NlbmRfaGRyaW5jYC4gVGhpcyBpcyBhIHZlcnkgdmFsaWQgcG9pbnQhIFRob3NlICpjb3VsZCogYmUganVzdCBhcywgb3IgZXZlbiBtb3JlLCByZXZlYWxpbmcgdGhhbiBzb21lIG9mIHRoZSBvdGhlcnMsIGFzIHRoZSBoZWFkZXIgaW5jbHVzaW9uIG1pZ2h0IGJlIGEgY3JpdGljYWwgc3RhZ2UuIEkgbmVlZCB0byBiZSBzdXJlIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGVtIGFsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDE6MzIuMzY4NzY5NTMxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjgyNjY4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXdfc2VuZG1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9yYXcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9yYXcuYz00NjI9c3RhdGljIGludCByYXdfZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwgaW50IGxlbiwgaW50IG9kZCxcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTQ5Mi1cXG5uZXQvaXB2NC9yYXcuYzo0OTM6c3RhdGljIGludCByYXdfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcXG5uZXQvaXB2NC9yYXcuYy00OTQte1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9OTQzPXN0cnVjdCBwcm90byByYXdfcHJvdCA9IHtcXG4tLVxcbm5ldC9pcHY0L3Jhdy5jLTk1My1cXHQuZ2V0c29ja29wdFxcdCAgID0gcmF3X2dldHNvY2tvcHQsXFxubmV0L2lwdjQvcmF3LmM6OTU0OlxcdC5zZW5kbXNnXFx0ICAgPSByYXdfc2VuZG1zZyxcXG5uZXQvaXB2NC9yYXcuYy05NTUtXFx0LnJlY3Ztc2dcXHQgICA9IHJhd19yZWN2bXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMTozMi40NTE2MDMwMDZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2MDUxNjgyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIFNlbmRtc2cgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCByYXcgc29ja2V0cywgYW5kIHRoZSBsb2dpY2FsIGVudHJ5IHBvaW50IGZvciBzZW5kaW5nIGEgbWVzc2FnZSBoYXMgdG8gYmUgYHJhd19zZW5kbXNnYC4gTm8gcXVlc3Rpb24gdGhlcmUuIE5vdywgdGhlIHJlYWwgbml0dHktZ3JpdHR5IGxpZXMgZGVlcGVyLCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgdGhlIElQdjYgc3BlY2lmaWMgdmVyc2lvbiBoYW5kbGVzIGl0LiBMZXQncyBkaWcgaW50byBgcmF3djZfc2VuZG1zZ2AgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJdCdzIHRpbWUgdG8gY2hlY2sgd2hhdCBraW5kIG9mIHByb2Nlc3NpbmcgYW5kIGRhdGEgaGFuZGxpbmcgdGhhdCBtb2R1bGUgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMTozNS40MTIxMjYwOTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTc0Nzg1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyYXd2Nl9zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L3Jhdy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3Jhdy5jPTcxNT1zdGF0aWMgaW50IHJhdzZfZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50IG9mZnNldCwgaW50IGxlbiwgaW50IG9kZCxcXG4tLVxcbm5ldC9pcHY2L3Jhdy5jLTc0NS1cXG5uZXQvaXB2Ni9yYXcuYzo3NDY6c3RhdGljIGludCByYXd2Nl9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbm5ldC9pcHY2L3Jhdy5jLTc0Ny17XFxuLS1cXG5uZXQvaXB2Ni9yYXcuYz0xMjAwPXN0cnVjdCBwcm90byByYXd2Nl9wcm90ID0ge1xcbi0tXFxubmV0L2lwdjYvcmF3LmMtMTIxMC1cXHQuZ2V0c29ja29wdFxcdCAgID0gcmF3djZfZ2V0c29ja29wdCxcXG5uZXQvaXB2Ni9yYXcuYzoxMjExOlxcdC5zZW5kbXNnXFx0ICAgPSByYXd2Nl9zZW5kbXNnLFxcbm5ldC9pcHY2L3Jhdy5jLTEyMTItXFx0LnJlY3Ztc2dcXHQgICA9IHJhd3Y2X3JlY3Ztc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjM1LjU0MTkyODA1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NjMzMzQyNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUmF3djYgU2VuZG1zZyBQYXRoIGFuZCBYRlJNIE9mZmxvYWQqKlxuXG5Pa2F5LCBzbyBgcmF3djZfc2VuZG1zZ2Ag4oCTIHRoYXTigJlzIHRoZSBBUEkgZW50cnkgcG9pbnQsIGdvdCBpdC4gTm93LCB3aGF0J3MgdGhlIGRlYWwgd2l0aCBgQ09ORklHX1hGUk1fT0ZGTE9BRGA/IEkgcmVjYWxsIHNlZWluZyBpdCBwb3AgdXAgaW4gc29tZSByZWxhdGVkIGNvbnRleHRzLiBMZXQgbWUgZGlnIGEgYml0IGRlZXBlci5cblxuUmlnaHQsIGluIGBuZXQveGZybS94ZnJtX2RldmljZS5jYCwgdGhlcmUncyBhIHdob2xlIHN1aXRlIG9mIGZ1bmN0aW9ucyDigJMgYF9feGZybV90cmFuc3BvcnRfcHJlcGAsIGBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcGAsIGBfX3hmcm1fbW9kZV9iZWV0X3ByZXBgLCBgeGZybV9vdXRlcl9tb2RlX3ByZXBgLCBhbmQgYHZhbGlkYXRlX3htaXRfeGZybWAg4oCTIGFsbCBndWFyZGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3IuIEVuYWJsaW5nIGBYRlJNX09GRkxPQURgIGlzIGRlZmluaXRlbHkgb24gdGhlIHJhZGFyLiBJdCBzZWVtcyBjcnVjaWFsIHRvIHRoZSBvdmVyYWxsIGZsb3csIHNwZWNpZmljYWxseSBmb3Igb2ZmbG9hZGluZyB0cmFuc2Zvcm1hdGlvbnMuXG5cbk5vdywgbGV0J3MgbG9vayBhdCBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gSXQncyByZWxhdGVkIHRvIElQLVRGUywgYW5kIEkgc2VlIGBpcHRmc19lbmNhcF9hZGRfaXB2NGAgYW5kIGBpcHRmc19lbmNhcF9hZGRfaXB2NmAgaW4gdGhlcmUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCBgeGZybV9pcHRmcy5jYCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIGdpdmVzIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBJUHNlYyBhbmQgSVAtVEZTIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIGJyb2FkZXIgb2ZmbG9hZCBtZWNoYW5pc21zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMTo0MC4yMDUyNjc2MTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODIzMzYwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2lwdGZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgKz0geGZybV9pbnRlcmZhY2Uub1xcbm5ldC94ZnJtL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG5uZXQveGZybS9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgKz0gZXNwaW50Y3Aub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMTo0MC4zNDM1MDc4ODZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NTc2NTE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKklQc2VjIE9mZmxvYWQgQ29uc2lkZXJhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBpbXBsaWNhdGlvbiBpcyBwcmV0dHkgY2xlYXI6IHdlIG5lZWQgdG8gZW5zdXJlIGBYRlJNX0lQVEZTYCBpcyBlbmFibGVkLiBJdCBzb3VuZHMgbGlrZSBzb21lb25lJ3MgZWl0aGVyIGVuY291bnRlcmluZyBhbiBpc3N1ZSB3aXRoIG9yIHBsYW5uaW5nIHRvIGxldmVyYWdlIElQc2VjIHRyYWZmaWMgZmlsdGVyaW5nLCBhbmQgdGhhdCBsaWtlbHkgaGluZ2VzIG9uIGhhdmluZyB0aGUgYXBwcm9wcmlhdGUgaW5mcmFzdHJ1Y3R1cmUgaW4gcGxhY2UuXG5cblNvLCBsZXQncyBkaXZlIGludG8gdGhlIHNwZWNpZmljcywgdG8gYmUgc3VyZS4gTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGV4YW1pbmUgdGhlIG9mZmxvYWQgaW1wbGVtZW50YXRpb25zIGZvciBFU1AgaW4gYm90aCBJUHY0IGFuZCBJUHY2IGNvbnRleHRzLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBjaGVjayBgbmV0L2lwdjQvZXNwNF9vZmZsb2FkLmNgIGFuZCBgbmV0L2lwdjYvZXNwNl9vZmZsb2FkLmNgLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgaG93IHRoZSBvZmZsb2FkIHBhdGhzIGFyZSBzZXQgdXAgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGZpbHRlcmluZyBtZWNoYW5pc21zLiBJJ2xsIG5lZWQgdG8gc2VlIGlmIHRoZSBpbnRlcmFjdGlvbnMgYXJlIGVmZmljaWVudCBhbmQgY29ycmVjdCwgYW5kIHdoZXRoZXIgYFhGUk1fSVBURlNgIGlzIGNvcnJlY3RseSBpbnRlZ3JhdGVkLiBJJ20gYXNzdW1pbmcgdGhhdCBwcm9wZXIgb2ZmbG9hZCBpbnRlZ3JhdGlvbiBpcyBlc3NlbnRpYWwuIEkgd2FudCB0byBzZWUgaG93IHRoZSBvZmZsb2FkIHBhdGggYW5kIHRoZSBmaXJld2FsbCBwYXRoIGludGVyYWN0IHdpdGggZWFjaCBvdGhlci4gVGhpcyB3aWxsIG1ha2UgaXQgcG9zc2libGUgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBpbmVmZmljaWVuY2llcywgb3IgZXZlbiBidWdzIHJlbGF0ZWQgdG8gdGhlIHRyYWZmaWMgZmlsdGVyaW5nIGFuZCB0aGUgSVBTZWMgb2ZmbG9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMTo0My44MjkyNzcwMTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzI4MDc5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlc3A0X29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9MzY9b2JqLSQoQ09ORklHX0lORVRfRVNQKSArPSBlc3A0Lm9cXG5uZXQvaXB2NC9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRCkgKz0gZXNwNF9vZmZsb2FkLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfSU5FVF9JUENPTVApICs9IGlwY29tcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjQzLjk0NjU3NjA3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MDExNDU0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkVTUCBPZmZsb2FkIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGJhc2VkIG9uIHdoYXQgSSdtIHRoaW5raW5nIGhlcmUsIEkgbmVlZCB0byBtYWtlIHN1cmUgYElORVRfRVNQX09GRkxPQURgIGFuZCBgSU5FVDZfRVNQX09GRkxPQURgIGFyZSBlbmFibGVkLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBjcnVjaWFsLiBUaGlzIGlzIGFib3V0IG1ha2luZyBzdXJlIHRoYXQgSVBzZWMgRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIChFU1ApIG9mZmxvYWRpbmcgaXMgYWN0aXZlIGZvciBib3RoIElQdjQgYW5kIElQdjYgdHJhZmZpYy4gV2UncmUgb2J2aW91c2x5IGxvb2tpbmcgdG8gbGV2ZXJhZ2UgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHdoZXJlIGF2YWlsYWJsZSwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IG9uIGhpZ2hlci1iYW5kd2lkdGggY29ubmVjdGlvbnMuIFRoZSByZWFzb25pbmcgaGVyZSBpcyBiYXNpYzogQ1BVIGN5Y2xlcyBhcmUgZXhwZW5zaXZlLCBhbmQgZGVkaWNhdGluZyB0aGVtIHRvIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB0YXNrcyB3aGVuIHRoZSBOSUMgY2FuIGhhbmRsZSBpdCBpcyBqdXN0IGluZWZmaWNpZW50LiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUgcGxhdGZvcm0ncyBoYXJkd2FyZSBpcyBjYXBhYmxlIG9mIEVTUCBvZmZsb2FkIGFuZCB0aGF0IHRoZSByZWxldmFudCBkcml2ZXIgc3VwcG9ydCBpcyBwcmVzZW50OyBpZiBub3QsIHdlJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgZmlyc3QsIG9yIHRoZSBiZW5lZml0cyB3aWxsIG5ldmVyIG1hbmlmZXN0LiBVbHRpbWF0ZWx5LCBzZXR0aW5nIHRoZXNlIG9wdGlvbnMgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGFjaGlldmluZyBvcHRpbWFsIHRocm91Z2hwdXQgYW5kIHJlZHVjaW5nIGxhdGVuY3kgd2l0aCBJUHNlYy1wcm90ZWN0ZWQgY29tbXVuaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzQ4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDE6NTMuNzQ3NzI2NzZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3OTcyNzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcDZfb2ZmbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT0zMT1vYmotJChDT05GSUdfSU5FVDZfRVNQKSArPSBlc3A2Lm9cXG5uZXQvaXB2Ni9NYWtlZmlsZTozMjpvYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICs9IGVzcDZfb2ZmbG9hZC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMzMtb2JqLSQoQ09ORklHX0lORVQ2X0lQQ09NUCkgKz0gaXBjb21wNi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjUzLjgzNTcwNzQ3NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODU3NTc4NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE9mZmxvYWQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYCBoYXZlIGFueSBsdXJraW5nIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nIGJleW9uZCB0aGUgb2J2aW91czsgYXJlIHRoZXJlIGFueSBzdWJ0bGUsIGluZGlyZWN0IGNvbm5lY3Rpb25zIHRvIG90aGVyIGZlYXR1cmVzIG9yIG1vZHVsZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFRoaXMgaXNuJ3QganVzdCBhYm91dCBpZGVudGlmeWluZyB3aGF0J3MgKnJlcXVpcmVkKiBmb3IgdGhlbSB0byBmdW5jdGlvbiwgYnV0IGFsc28gYWJvdXQgdW5kZXJzdGFuZGluZyB3aGF0IHRoZXkgbWlnaHQgKmltcGFjdCogb3IgYmUgaW1wYWN0ZWQgYnkuIEknbSBsb29raW5nIGZvciBhIGNvbXBsZXRlIHBpY3R1cmUgYmVmb3JlIHByb2NlZWRpbmcuIFRpbWUgdG8gZGlnIGluIGFuZCBhdm9pZCBhbnkgZnV0dXJlIHN1cnByaXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxMzAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMTo1Ni42OTMyOTExMzFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNTA2NTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zNTQ9Y29uZmlnIElORVRfRVNQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAxOjU2Ljc4NDgwNTE0NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMwMTEzNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgYElORVRfRVNQX09GRkxPQURgIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgSU5FVF9FU1BfT0ZGTE9BRGAuIEdpdmVuIHRoYXQgaXQncyBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIElQc2VjIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCAoRVNQKSBvZmZsb2FkLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBmaXRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgYG5ldC9pcHY0L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgdHlwaWNhbCBwbGFjZSBmb3IgSVB2NC1zcGVjaWZpYyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGFzc3VtaW5nIHRoaXMgaXMgYSBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbi4gTGV0J3Mgc3RhcnQgdGhlcmUuIEknbGwgb3BlbiB0aGF0IEtjb25maWcgZmlsZSBhbmQgbG9vayBmb3IgYElORVRfRVNQX09GRkxPQURgIChvciBzaW1pbGFyKS4gVGhhdCB3aWxsIHRlbGwgbWUgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGRlcGVuZCBvbiBpdCwgYW5kIHdoYXQgaXQgZGVwZW5kcyBvbi4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIGFib3V0IGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZsaWN0cywgZW5hYmxpbmcgbWUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCB3aXRoaW4gYSBiaWdnZXIgcGljdHVyZS4gVGhhdCdzIHRoZSBzbWFydCBtb3ZlIGJlZm9yZSBnZXR0aW5nIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MDAuMjE0OTU1MzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI0NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzY5LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY5OlxcdGNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuIDM3MDpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXFxcIlxcbiAzNzE6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0VTUFxcbiAzNzI6XFx0XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbiAzNzM6XFx0XFx0ZGVmYXVsdCBuXFxuIDM3NDpcXHRcXHRoZWxwXFxuIDM3NTpcXHRcXHQgIFN1cHBvcnQgZm9yIEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkLiBUaGlzIG1ha2VzIHNlbnNlXFxuIDM3NjpcXHRcXHQgIG9ubHkgaWYgdGhpcyBzeXN0ZW0gcmVhbGx5IGRvZXMgSVBzZWMgYW5kIHdhbnQgdG8gZG8gaXRcXG4gMzc3OlxcdFxcdCAgd2l0aCBoaWdoIHRocm91Z2hwdXQuIEEgdHlwaWNhbCBkZXNrdG9wIHN5c3RlbSBkb2VzIG5vdFxcbiAzNzg6XFx0XFx0ICBuZWVkIGl0LCBldmVuIGlmIGl0IGRvZXMgSVBzZWMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjAwLjIxNTI4NDY2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjk5ODcwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGRlcGVuZGVuY2llcywgc3VtbWFyaXplZCBhcyBhIHRob3VnaHQgcHJvY2VzcyBJIG1pZ2h0IGhhdmU6XG5cbioqTmV0d29yayBTZWN1cml0eSBNb2R1bGUgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG5ldHdvcmsgc2VjdXJpdHkgbW9kdWxlIGNvbmZpZ3VyYXRpb25zLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHJlYWxseS4gSXQgc2VlbXMgdGhhdCB0aGUgYElORVRfRVNQX09GRkxPQURgIGZlYXR1cmUsIHRoYXQncyByZWxpYW50IG9uIHRoZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gb2YgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpLCBpcyBuYXR1cmFsbHkgZGVwZW5kZW50IG9uIHRoZSBjb3JlIGBJTkVUX0VTUGAgbW9kdWxlLiBNYWtlcyBwZXJmZWN0IHNlbnNlOyBvZmZsb2FkaW5nIHNvbWV0aGluZyByZXF1aXJlcyB0aGUgYmFzZSBmdW5jdGlvbmFsaXR5IHRvIGV4aXN0LCBzbyBFU1AgaGFzIHRvIGJlIGVuYWJsZWQgZmlyc3QuIFNpbWlsYXJseSwgdGhlIGBJTkVUNl9FU1BfT0ZGTE9BRGAgZmVhdHVyZSwgaGFuZGxpbmcgRVNQIG9mZmxvYWQgZm9yIElQdjYgdHJhZmZpYywgY2xlYXJseSBpcyBjb250aW5nZW50IG9uIHRoZSBmb3VuZGF0aW9uYWwgYElORVQ2X0VTUGAgbW9kdWxlIGJlaW5nIHByZXNlbnQgYW5kIGZ1bmN0aW9uYWwuIEl0J3MgYSBjbGVhbiBoaWVyYXJjaGljYWwgZGVwZW5kZW5jeTsgb2ZmbG9hZCBkZXBlbmRzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4gTm90aGluZyB0b28gY29tcGxleCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4ODYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjAzLjU4NTI3NTM4N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjYzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0Y29uZmlnIElQVjZfR1JFXFxuIDIxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG4gMjEyOlxcdFxcdHNlbGVjdCBJUFY2X1RVTk5FTFxcbiAyMTM6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMjE0OlxcdFxcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXFxuIDIxNTpcXHRcXHRoZWxwXFxuIDIxNjpcXHRcXHQgIFR1bm5lbGluZyBtZWFucyBlbmNhcHN1bGF0aW5nIGRhdGEgb2Ygb25lIHByb3RvY29sIHR5cGUgd2l0aGluXFxuIDIxNzpcXHRcXHQgIGFub3RoZXIgcHJvdG9jb2wgYW5kIHNlbmRpbmcgaXQgb3ZlciBhIGNoYW5uZWwgdGhhdCB1bmRlcnN0YW5kcyB0aGVcXG4gMjE4OlxcdFxcdCAgZW5jYXBzdWxhdGluZyBwcm90b2NvbC4gVGhpcyBwYXJ0aWN1bGFyIHR1bm5lbGluZyBkcml2ZXIgaW1wbGVtZW50c1xcbiAyMTk6XFx0XFx0ICBHUkUgKEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uKSBhbmQgYXQgdGhpcyB0aW1lIGFsbG93c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMjowMy41ODU0MDQ1MjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0MzEyMDEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRmluZGluZyB0aGUgSVB2NiBFU1AgT2ZmbG9hZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSdtIGRpdmluZyBpbnRvIHRoaXMuIExldCBtZSBzZWUuLi4gSSBuZWVkIHRvIGxvY2F0ZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIElQdjYgRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIChFU1ApIG9mZmxvYWQuIFdoZXJlIGlzIHRoYXQgZGVmaW5lZD8gQWgsIHJpZ2h0LCBpdCdzIGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIElQdjYgbmV0d29yayBzdGFjaywgc28gSSBzaG91bGQgYmUgbG9va2luZyBpbiB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSdtIHByZXR0eSBzdXJlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGtlcHQgaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gb3BlbiB0aGUgYG5ldC9pcHY2L0tjb25maWdgIGZpbGUuIFRoYXQgc2hvdWxkIGhhdmUgd2hhdCBJJ20gbG9va2luZyBmb3IgLSBgSU5FVDZfRVNQX09GRkxPQURgLiBMZXQgbWUgZ28gZmluZCB0aGF0Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzA2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMjowNi42Mjg1MjkzMjRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTEzNDE5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVDZfRVNQX09GRkxPQURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTYyPWNvbmZpZyBJTkVUNl9FU1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNzYtXFxubmV0L2lwdjYvS2NvbmZpZzo3Nzpjb25maWcgSU5FVDZfRVNQX09GRkxPQURcXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MDYuNzQ3NjcyNTY3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODk3NTgzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgSVB2NiBjb25maWd1cmF0aW9uLiBMZXQncyBzdGFydCB3aXRoIHRoZSBzb3VyY2Ugb2YgdHJ1dGgsIGFuZCBmb3IgdGhpcywgSSdtIHRoaW5raW5nIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgYG5ldC9pcHY2YCBkaXJlY3RvcnkgaXMgdGhlIGJlc3QgcGxhY2UgdG8gYmVnaW4uIFNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgNzcgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50LiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IHNldHRpbmdzIGluIG1vcmUgZGV0YWlsLCBhbmQgc2VlaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgaXMgYSBnb29kIHdheSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MjcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMjowOS41Mzc0MzU3ODdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzc6XFx0Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxuICA3ODpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuICA3OTpcXHRcXHRkZXBlbmRzIG9uIElORVQ2X0VTUFxcbiAgODA6XFx0XFx0c2VsZWN0IFhGUk1fT0ZGTE9BRFxcbiAgODE6XFx0XFx0ZGVmYXVsdCBuXFxuICA4MjpcXHRcXHRoZWxwXFxuICA4MzpcXHRcXHQgIFN1cHBvcnQgZm9yIEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkLiBUaGlzIG1ha2VzIHNlbnNlXFxuICA4NDpcXHRcXHQgIG9ubHkgaWYgdGhpcyBzeXN0ZW0gcmVhbGx5IGRvZXMgSVBzZWMgYW5kIHdhbnQgdG8gZG8gaXRcXG4gIDg1OlxcdFxcdCAgd2l0aCBoaWdoIHRocm91Z2hwdXQuIEEgdHlwaWNhbCBkZXNrdG9wIHN5c3RlbSBkb2VzIG5vdFxcbiAgODY6XFx0XFx0ICBuZWVkIGl0LCBldmVuIGlmIGl0IGRvZXMgSVBzZWMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjA5LjUzNzU0Mjc5N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMwNDcyNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipJTkVUNl9FU1BfT0ZGTE9BRCBhbmQgdGhlIEJpZ2dlciBQaWN0dXJlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiBhbmQgaW1tZWRpYXRlbHkgYSBkZXBlbmRlbmN5IHN0YW5kcyBvdXQuIFNwZWNpZmljYWxseSwgdGhpcyBgSU5FVDZfRVNQX09GRkxPQURgIHRoaW5n4oCmIHllYWgsIGl0IGNsZWFybHkgaGluZ2VzIG9uIGBJTkVUNl9FU1BgIGJlaW5nIGVuYWJsZWQuIFRoYXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBubyBzdXJwcmlzZXMgdGhlcmUuXG5cbkJ1dCBub3csIEknbSB0aGlua2luZyBiZXlvbmQgdGhhdCBpbW1lZGlhdGUgbGluay4gV2hhdCdzIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBzb21ldGhpbmcgbGlrZSBgWEZSTV9JUFRGU2A/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaGFzIGFuIGltcGFjdCBvbiB0aGUgSVBzZWMgc3RhY2sgY29uZmlndXJhdGlvbiBhbmQgaG93IHRoZXNlIGZlYXR1cmVzIHBsYXkgd2l0aCBlYWNoIG90aGVyLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IGNvbmZsaWN0cyBvciBjby1kZXBlbmRlbmNpZXMgSSdtIG92ZXJsb29raW5nIGhlcmUgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgaW5zdGFiaWxpdHkgaWYgbm90IGFjY291bnRlZCBmb3IuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nJ3MgaW50ZWdyYXRlZCBhbmQgcGxheWluZyBuaWNlbHkgdG9nZXRoZXIuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MTIuNjY4MDI3Mzg5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDU0MzI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTV9JUFRGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTQwLVxcbm5ldC94ZnJtL0tjb25maWc6MTQxOmNvbmZpZyBYRlJNX0lQVEZTXFxubmV0L3hmcm0vS2NvbmZpZy0xNDItXFx0dHJpc3RhdGUgXFxcIklQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMjoxMi43NTI1Nzg0NjRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3OTY5ODE3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIFhGUk0gS2NvbmZpZyBPcHRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgbmV0L3hmcm0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE0MS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgWEZSTSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBzd2l0Y2hlcyB0aGF0IGRldGVybWluZSB3aGljaCBYRlJNIGZ1bmN0aW9uYWxpdGllcyBhcmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgbGlrZWx5IHRoZXJlJ3MgYSBkZXBlbmRlbmN5IGNoYWluIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGFuZCB0aGF0IHRoaXMgc2VjdGlvbiBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB3aGljaCBYRlJNIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgb3IgYnVpbHQgYXMgbW9kdWxlcy4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBncmFudWxhciBjb250cm9scywgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gb3RoZXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IG5ldyBvcHRpb25zIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgSSBkdWcgaW50byB0aGlzIGFyZWEuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGF2YWlsYWJsZSBrbm9icyBmb3IgWEZSTSBpbiB0aGUgY3VycmVudCBrZXJuZWwgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMyNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjE1LjkzMjI3OTM4MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MTpcXHRjb25maWcgWEZSTV9JUFRGU1xcbiAxNDI6XFx0XFx0dHJpc3RhdGUgXFxcIklQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbiAxNDM6XFx0XFx0ZGVwZW5kcyBvbiBYRlJNXFxuIDE0NDpcXHRcXHRoZWxwXFxuIDE0NTpcXHRcXHQgIEluZm9ybWF0aW9uIG9uIHRoZSBJUC1URlMvQUdHRlJBRyBlbmNhcHN1bGF0aW9uIGNhbiBiZSBmb3VuZFxcbiAxNDY6XFx0XFx0ICBpbiBSRkMgOTM0Ny4gVGhpcyBmZWF0dXJlIHN1cHBvcnRzIGRlbWFuZCBkcml2ZW4gKGkuZS4sXFxuIDE0NzpcXHRcXHQgIG5vbi1jb25zdGFudCBzZW5kIHJhdGUpIElQLVRGUyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVcXG4gMTQ4OlxcdFxcdCAgQUdHRlJBRyBFU1AgcGF5bG9hZCBlbmNhcHN1bGF0aW9uLiBUaGlzIHBheWxvYWQgdHlwZVxcbiAxNDk6XFx0XFx0ICBzdXBwb3J0cyBhZ2dyZWdhdGlvbiBhbmQgZnJhZ21lbnRhdGlvbiBvZiB0aGUgaW5uZXIgSVBcXG4gMTUwOlxcdFxcdCAgcGFja2V0IHN0cmVhbSB3aGljaCBpbiB0dXJuIHlpZWxkcyBoaWdoZXIgc21hbGwtcGFja2V0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjE1LjkzMjM1NzYwMloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ4NDk1NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGdldHRpbmcgYFhGUk1fSVBURlNgIHVwIGFuZCBydW5uaW5nLCBhbmQgYXMgSSBzdXNwZWN0ZWQsIGl0J3MgZGVwZW5kZW50IG9uIGBYRlJNYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBMZXQncyBtYWtlIHN1cmUgd2UndmUgZ290IGFsbCB0aGUgcmlnaHQgY29tcG9uZW50cyBlbmFibGVkLiBNeSBjaGVja2xpc3Qgd2lsbCBpbmNsdWRlIHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgSU5FVF9FU1BgLCBgSU5FVF9FU1BfT0ZGTE9BRGAsIGBJTkVUNl9FU1BgLCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYC4gVGhlc2UgYXJlIGFsbCBwcmV0dHkgc3RhbmRhcmQgZm9yIGVuYWJsaW5nIEVTUC5cblxuTm93LCB3ZSBkZWZpbml0ZWx5IG5lZWQgYFhGUk1fSVBURlNgIGl0c2VsZiwgdGhhdCdzIHRoZSBjb3JlLiBUaGVuLCBJIG5lZWQgdG8gbG9vayBhdCBgWEZSTV9PRkZMT0FEYC4gIEkgYmVsaWV2ZSB0aGlzIGlzIGltcGxpY2l0bHkgc2VsZWN0ZWQgYnkgYm90aCBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAsIGJ1dCBJJ2xsIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQgaWYgcG9zc2libGUsIGV2ZW4gdGhvdWdoIGl0J3MgYSBgc2VsZWN0YCBvcHRpb24sIG1lYW5pbmcgaXQgbWlnaHQgbm90IGJlIGRpcmVjdGx5IHNlbGVjdGFibGUuIEl0J3MgYWx3YXlzIGdvb2QgcHJhY3RpY2UgdG8gZG91YmxlLWNoZWNrIHRoZXNlIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmRpdGlvbnMgZm9yIGBYRlJNX09GRkxPQURgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjE5Ljg4MDg1ODQ5NloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1NjQ4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMC1cXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcXG5uZXQveGZybS9LY29uZmlnLTEyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MTkuOTU1NDMwOTYyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjAyMzg2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBsaWNhdGlvbnMgb2YgdGhpcyBDb25maWd1cmF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgbmV3IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJdCdzIGEgYm9vbGVhbiwgYnV0IGl0J3Mgbm90IGV4cG9zZWQgd2l0aCBhIGRpcmVjdCBwcm9tcHQsIHdoaWNoIGlzIHVudXN1YWwuIFRoaXMgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgaXQncyBpbXBsaWNpdGx5IGVuYWJsZWQgYnkgb3RoZXIgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBgSU5FVF9FU1BfT0ZGTE9BRGAgYW5kIGBJTkVUNl9FU1BfT0ZGTE9BRGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBrbm93ICp3aHkqIHRoaXMgaXMgc2V0IHVwIHRoZSB3YXkgaXQgaXMuXG5cbk15IG5leHQgc3RlcCBpcyBhbHdheXMgdG8gY2hlY2sgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIGlzIHVzZWQuIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvaXB2NC9yYXcuY2AgYW5kIGBuZXQvaXB2Ni9yYXcuY2AsIHdoaWNoIGFyZSBjb21waWxlZCB3aGVuZXZlciBgSU5FVGAgYW5kIGBJUFY2YCBhcmUgZW5hYmxlZCByZXNwZWN0aXZlbHkuIEdpdmVuIHRoYXQgdGhvc2UgYXJlIHByZXR0eSBmb3VuZGF0aW9uYWwsIGl0IHN1Z2dlc3RzIHRoaXMgc2V0dGluZyBpcyBjb25uZWN0ZWQgdG8gbG93ZXItbGV2ZWwgbmV0d29ya2luZyBhc3BlY3RzLiBUaGVuIEkgc2VlIGBuZXQvY29yZS9za2J1ZmYuY2AgaXMgdG91Y2hlZCwgd2hpY2ggbWVhbnMgdGhlIGNoYW5nZXMgd2lsbCBhZmZlY3QgZnVuZGFtZW50YWwgYnVmZmVyIGhhbmRsaW5nLiBPa2F5LCBnZXR0aW5nIG1vcmUgc2VyaW91cyBub3cuXG5cblRoZSByZWFsIHBvaW50IG9mIGludGVyZXN0IGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLiBUaGF0J3MgdGhlIGtleS4gVGhhdCBmaWxlIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19YRlJNX09GRkxPQURgIGlzIGVuYWJsZWQgKG9yIHBvc3NpYmx5IGp1c3QgYENPTkZJR19YRlJNYCkuIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgc2VlIGlmIHRoYXQgaXMgdGhlIGNhc2UuIEknbGwgbmVlZCB0byBleGFtaW5lIHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGRlcGVuZGVuY2llcy4gSXQgaXMgbGlrZWx5IHRoYXQgYENPTkZJR19YRlJNX09GRkxPQURgIGlzIGVuYWJsZWQuIElmIHNvLCB0aGlzIGlzIHJlbGF0ZWQgdG8gdHJhbnNmb3JtYXRpb24gb2ZmbG9hZCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGNvbnNpZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI0OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMjoyNS4xMTU2NzQwNjdaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Njg3NDUyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE1LVxcdFxcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZToxNjpcXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTctXFx0XFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MjUuNTgyNTU1ODRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3MTE3NTgzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBQbGFuIGZvciBJbnRlZ2VyIE92ZXJmbG93IFByb3RlY3Rpb24gaW4gUGFja2V0IFByb2Nlc3NpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGNydWNpYWwgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MgZHVyaW5nIGBza2JgIGhlYWRlciB1cGRhdGVzLiBUaGlzIGFmZmVjdHMgYSB3aWRlIHN3YXRoZSBvZiB0aGUga2VybmVsOiBjb3JlIG5ldHdvcmtpbmcsIHJhdyBzb2NrZXRzLCBhbmQgSVBzZWMvWEZSTSBvZmZsb2FkaW5nLiBUaGlzIGlzIGEgKmhpZ2gtaW1wYWN0KiBjaGFuZ2UsIHRvdWNoaW5nIGZ1bmRhbWVudGFsIHBhY2tldCBoYW5kbGluZyBsb2dpYy4gSSBuZWVkIHRvIGJlICp0aG9yb3VnaCogd2l0aCBteSBmdXp6aW5nIGFwcHJvYWNoLlxuXG5GaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gYnVpbGRpbmcgd2l0aCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIEZyb20gdGhlIGNvZGUsIHRoZSBrZXkgY29uZmlncyBmb3IgZW5hYmxpbmcgdGhlIHJlbGV2YW50IGZlYXR1cmVzIGFyZTogYElORVRfRVNQYCwgYElORVRfRVNQX09GRkxPQURgLCBgSU5FVDZfRVNQYCwgYElORVQ2X0VTUF9PRkZMT0FEYCwgYW5kIGBYRlJNX0lQVEZTYC4gRW5hYmxpbmcgdGhlc2Ugd2lsbCBlbnN1cmUgdGhlIG9mZmxvYWQtc3BlY2lmaWMgY29kZSBwYXRocyBhcmUgcHJlc2VudCBpbiBgeGZybV9kZXZpY2Uub2AsIHdoZXJlIHRoZSBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIG1vZGlmaWNhdGlvbnMgcmVzaWRlLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIEkgbmVlZCB0byB0YXJnZXQuIEkndmUgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBlbnRyeSBwb2ludHM6IGBwc2tiX2V4cGFuZF9oZWFkYCwgYHNrYl9jb3B5X2V4cGFuZGAsIGBza2Jfc2VnbWVudF9saXN0YCwgYHNrYl9zZWdtZW50YCwgYHJhd19zZW5kbXNnYCwgYHJhd3Y2X3NlbmRtc2dgLCBgdmFsaWRhdGVfeG1pdF94ZnJtYCwgYW5kIGB4ZnJtX291dHB1dGAuIEkndmUgdmVyaWZpZWQgdGhhdCBhbGwgb2YgdGhlc2UgYXJlIGV4cG9ydGVkLCB3aGljaCBpcyBleGNlbGxlbnQuIFRoZXkgYXJlIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmb3IgZnV6emluZy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYW55dGhpbmcgZWxzZSBpcyByZWFjaGFibGUuIEkgc2VlIHRoYXQgYHhmcm00X3RyYW5zcG9ydF9nc29fc2VnbWVudGAgYW5kIGB4ZnJtNF9iZWV0X2dzb19zZWdtZW50YCBhcmUgc3RhdGljLCBidXQgdGhlc2UgYXJlIGNhbGxlZCB2aWEgYGluZXRfb2ZmbG9hZHNbSVBQUk9UT19FU1BdYCwgYW5kIHRoZSBzYW1lIHdpdGggYHhmcm02X3RyYW5zcG9ydF9nc29fc2VnbWVudGAgYW5kIGB4ZnJtNl9iZWV0X2dzb19zZWdtZW50YCwgd2l0aCBgaW5ldDZfb2ZmbG9hZHNbSVBQUk9UT19FU1BdYC4gVGhlc2UgYXJlIEdTTyBzZWdtZW50IGZ1bmN0aW9ucywgdHJpZ2dlcmVkIGJ5IHNlbmRpbmcgcGFja2V0cyB3aXRoIEdTTyBlbmFibGVkLiBUaGVyZWZvcmUsIGZ1enppbmcgYHNrYl9zZWdtZW50YCBhbmQgYHNrYl9zZWdtZW50X2xpc3RgIHdpbGwgY292ZXIgdGhlc2UgR1NPIHBhdGhzIGluZGlyZWN0bHkuXG5cbkZpbmFsbHksIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBwYXRjaCBhZ2FpbiB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cywgc2luY2UgSSBuZWVkIHRvIGJlIGFzIGNvbXByZWhlbnNpdmUgYXMgcG9zc2libGUuIEkga25vdyB0aGF0IGByYXdfc2VuZG1zZ2AgY2FsbHMgYHJhd19zZW5kX2hkcmluY2AgYW5kIGByYXd2Nl9zZW5kbXNnYCBjYWxscyBgcmF3djZfc2VuZF9oZHJpbmNgLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRvIHVzZSB0aGVzZSBhbmQgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGZ1enogdGhpcy4gSW4gYWRkaXRpb24sIEkgd2lsbCB2ZXJpZnkgaWYgYF9feGZybV90cmFuc3BvcnRfcHJlcGAsIGBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcGAsIGFuZCBgX194ZnJtX21vZGVfYmVldF9wcmVwYCBhcmUgY2FsbGVkLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBmdXp6IGB2YWxpZGF0ZV94bWl0X3hmcm1gIHdoaWNoIGNhbGxzIGB4ZnJtX291dGVyX21vZGVfcHJlcGAuXG5cbk15IGZ1enppbmcgc3RyYXRlZ3kgd2lsbCB0aGVyZWZvcmUgZm9jdXMgb24gZ2VuZXJhdGluZyBkaXZlcnNlIHBhY2tldCBwYXlsb2FkcyB3aXRoIHZhcnlpbmcgaGVhZGVyIHNpemVzLCBvZmZzZXRzLCBhbmQgR1NPIHNldHRpbmdzLCBhbmQgdGhlbiBpbmplY3RpbmcgdGhlbSB0aHJvdWdoIHRoZSBpZGVudGlmaWVkIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHNwZWNpZmljYWxseSB0YXJnZXQgc2NlbmFyaW9zIHRoYXQgbWlnaHQgdHJpZ2dlciBpbnRlZ2VyIG92ZXJmbG93cyBkdXJpbmcgaGVhZGVyIG1hbmlwdWxhdGlvbiBvciBgc2tiYCByZS1zZWdtZW50YXRpb24uIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBnZW5lcmF0ZWQgY292ZXJhZ2UgcmVwb3J0cyB0byBpZGVudGlmeSBhbnkgYXJlYXMgd2hlcmUgbmV3IG9yIHVuZXhwZWN0ZWQgY29kZSBpcyByZWFjaGVkLCBpbiBvcmRlciB0byBtYWtlIHN1cmUgdGhlIGZ1enppbmcgaXMgaGl0dGluZyBhbGwgYXJlYXMgb2YgdGhlIG1vZGlmaWVkIGNvZGUuIFRoaXMgd2lsbCBiZSB0aGUgbWFpbiBhcHByb2FjaCB0byBlbnN1cmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5MjgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MzYuMjk0MzE4MDM4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM5ODg4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3hmcm1fdHJhbnNwb3J0X3ByZXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jLTIyLSNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyMzpzdGF0aWMgaW50IF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTI0LVxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgaHNpemUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTczPXN0YXRpYyBpbnQgeGZybV9vdXRlcl9tb2RlX3ByZXAoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTg2LVxcdFxcdGlmICh4LVxcdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUKVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6ODc6XFx0XFx0XFx0cmV0dXJuIF9feGZybV90cmFuc3BvcnRfcHJlcCh4LCBza2IsXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy04OC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTg5LVxcdFxcdGlmICh4LVxcdTAwM2VvdXRlcl9tb2RlLmZhbWlseSA9PSBBRl9JTkVUNilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjkwOlxcdFxcdFxcdHJldHVybiBfX3hmcm1fdHJhbnNwb3J0X3ByZXAoeCwgc2tiLFxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtOTEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6MzYuMzU1NzIzOTk1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNzM4MDA4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgWEZSTSBDb3ZlcmFnZSBhbmQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBzZWUuIE15IGN1cnJlbnQgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSB3YXkgdGhpbmdzIGFyZSBzZXQgdXAsIGB2YWxpZGF0ZV94bWl0X3hmcm1gIG5lYXRseSBjb3ZlcnMgYHhmcm1fb3V0ZXJfbW9kZV9wcmVwYCwgd2hpY2ggaW4gdHVybiBjYWxscyBhIHNlcmllcyBvZiBwcmVwIGZ1bmN0aW9uczogYF9feGZybV90cmFuc3BvcnRfcHJlcGAsIGBfX3hmcm1fbW9kZV90dW5uZWxfcHJlcGAsIGFuZCBgX194ZnJtX21vZGVfYmVldF9wcmVwYC4gU28sIGB2YWxpZGF0ZV94bWl0X3hmcm1gIGhhbmRsZXMgdGhvc2UgcHJlcGVyYXRpb24gZnVuY3Rpb25zLlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhlIElQVEZTIGVuY2FwIGFkZCBmdW5jdGlvbnM/IEFoLCBgaXB0ZnNfZW5jYXBfYWRkX2lwdjRgIGFuZCBgaXB0ZnNfZW5jYXBfYWRkX2lwdjZgPyBUaGV5J3JlIGNhbGxlZCBieSBgaXB0ZnNfcHJlcGFyZV9vdXRwdXRgLCB3aGljaCBpcyB0aGUgYC5wcmVwYXJlX291dHB1dGAgY2FsbGJhY2sgZm9yIGBpcHRmc19tb2RlX2Nic2AuIEFuZCB0aGF0IGdldHMgY2FsbGVkIGR1cmluZyBYRlJNIG91dHB1dCBwcm9jZXNzaW5nLiBUaGF0IG1ha2VzIHNlbnNlOyBgeGZybV9vdXRwdXRgIGVuY29tcGFzc2VzIHRoaXMuXG5cblRoZW4gdGhlcmUgYXJlIGZ1bmN0aW9ucyBsaWtlIGB4ZnJtNF90cmFuc3BvcnRfb3V0cHV0YCwgYHhmcm02X3RyYW5zcG9ydF9vdXRwdXRgLCBgeGZybTZfcm9fb3V0cHV0YCwgYHhmcm00X2JlZXRfZW5jYXBfYWRkYCwgYHhmcm00X3R1bm5lbF9lbmNhcF9hZGRgLCBgeGZybTZfdHVubmVsX2VuY2FwX2FkZGAsIGFuZCBgeGZybTZfYmVldF9lbmNhcF9hZGRgLiBUaGVzZSBhcmUgY2FsbGVkIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0aHJvdWdoIGB4ZnJtX291dGVyX21vZGVfb3V0cHV0YCwgYW5kIGV2ZW50dWFsbHkgYnkgYHhmcm1fb3V0cHV0YC4gU28sIGB4ZnJtX291dHB1dGAgaXMgdGhlIGVuY29tcGFzc2luZyBmdW5jdGlvbiBoZXJlIGFzIHdlbGwuIFRoZSBzeW1ib2xzIHVzZWQgZm9yIGZvY3VzIGhlcmUgc2VlbSB3ZWxsLWNob3Nlbiwgb3ZlcmFsbC5cblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGZpbmFsIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBXZSBoYXZlIGBJTkVUX0VTUGAsIGBJTkVUX0VTUF9PRkZMT0FEYCwgYElORVQ2X0VTUGAsIGBJTkVUNl9FU1BfT0ZGTE9BRGAsIGFuZCBgWEZSTV9JUFRGU2AuXG5cbkhtbSwgYW55dGhpbmcgZWxzZT8gYENPTkZJR19YRlJNX09GRkxPQURgIGlzIHNlbGVjdGVkIGJ5IGBJTkVUX0VTUF9PRkZMT0FEYCBhbmQgYElORVQ2X0VTUF9PRkZMT0FEYC4gTm93LCBgQ09ORklHX1hGUk1gIGlzIHNlbGVjdGVkIGJ5IGBYRlJNX0lQVEZTYC4gV2FpdCBhIG1vbWVudCwgYmVjYXVzZSBgWEZSTV9JUFRGU2AgKmRlcGVuZHMqIG9uIGBYRlJNYCwgc28gYFhGUk1gICptdXN0KiBiZSBlbmFibGVkLiBHaXZlbiB0aGF0IGl0J3MgYSBjb3JlIG5ldHdvcmtpbmcgZmVhdHVyZSwgYFhGUk1gIGlzIGFsbW9zdCBjZXJ0YWlubHkgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1vc3Qga2VybmVscy4gVGhlcmVmb3JlLCBJIHdpbGwganVzdCBsaXN0IHRoZSBzcGVjaWZpY3MuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBuYXR1cmUgb2YgYFhGUk1gLCBpcyBpdCBhIGJvb2wgb3IgdHJpc3RhdGU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODgyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjQ0LjQyOTUyODMzNFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExNTI1NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6NDQuNTQxMDU5Mzc3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjcwMjcxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCb29sZWFuIExvZ2ljKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgYSBgYm9vbGAgaGVyZSwgYnV0IGl0J3Mgbm90IGJlaW5nIGV4cGxpY2l0bHkgcHJvbXB0ZWQuIFRoYXQgbWVhbnMgaXRzIHN0YXRlIOKAkyB0cnVlIG9yIGZhbHNlIOKAkyBpcyBiZWluZyAqZGVyaXZlZCogZnJvbSBzb21ldGhpbmcgZWxzZSwgc29tZSBvdGhlciBzZWxlY3Rpb24gY3JpdGVyaWEuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzLiBJdCdzIGVzc2VudGlhbGx5IGEgZGVwZW5kZW50IHZhcmlhYmxlLiBUaGUga2V5IGlzIHdoYXQncyBkcml2aW5nIHRoaXMgcGFydGljdWxhciBib29sZWFuLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSBpbW1lZGlhdGVseSB0aGluayBvZiB0aGluZ3MgbGlrZSBgSU5FVF9FU1BgLiBJZiB0aGF0J3Mgc2V0LCAqdGhhdCogbGlrZWx5IGRldGVybWluZXMgdGhlIHN0YXRlIG9mICp0aGlzKiBwYXJ0aWN1bGFyIGBib29sYCDigJMgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyByZWxhdGlvbnNoaXAgdG8gYFhGUk1gLiBUaGF0J3MgdGhlIGxpa2VseSBkcml2ZXIgb2YgdGhpcyBgYm9vbGAuIEl0J3MgYSBjYXNjYWRpbmcgZWZmZWN0IG9mIGNvbmZpZ3VyYXRpb24sIGlzbid0IGl0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGxvZ2ljIGNoYWluIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MDc5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MDI6NDcuODA4MDkwMTcxWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTY1ODUyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSU5FVF9FU1AkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzUzLVxcbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxcbm5ldC9pcHY0L0tjb25maWctMzU1LVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjowMjo0Ny44Nzc3NTc3NTdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2NTQwNDg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZXBlbmRlbmN5IENoZWNrOiBJTkVUX0VTUCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBgSU5FVF9FU1BgIG1vZHVsZSBpcyBwbGF5aW5nIG5pY2UuIEkgd2FudCB0byB0aG9yb3VnaGx5IGFzc2VzcyBpdHMgZGVwZW5kZW5jeSB0cmVlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JraW5nIHN0YWNrLCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgdGhlIHNvY2tldCBpbXBsZW1lbnRhdGlvbnMsIGFueSByZWxldmFudCBjcnlwdG9ncmFwaGljIGxpYnJhcmllcywgYW5kIGV2ZW4gdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyIGlmIHdlIGFyZSB0YWxraW5nIGFib3V0IGFuIGVtYmVkZGVkIHN5c3RlbS4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdmVyc2lvbiBjb25mbGljdHMgb3IgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcyB0aGF0IG1heSBiZSBsb2FkZWQuIEFueSBpbmNvbXBhdGlibGUgdmVyc2lvbnMgd2lsbCBsaWtlbHkgdHJpZ2dlciBzb21lIGZydXN0cmF0aW5nIHJ1bnRpbWUgZXJyb3JzLCB0aGF0IEknZCBsaWtlIHRvIHByb2FjdGl2ZWx5IHByZXZlbnQuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgY2FuIGZpbmQgdGhlIGRlcGVuZGVuY3kgbWFuaWZlc3QgYW5kIHRoZW4gY29tcGFyZSB0aGlzIGFnYWluc3Qgd2hhdCBpcyBjdXJyZW50bHkgcnVubmluZy4gSSBuZWVkIHRvIGFsc28gYXNzZXNzIGFueSBkaXJlY3Qgb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIGFuZCBob3cgZWFjaCBvZiB0aGVtIG1pZ2h0IGltcGFjdCBlYWNoIG90aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjUwLjk0MzE2Njk5MloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM1NCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1NDpcXHRjb25maWcgSU5FVF9FU1BcXG4gMzU1OlxcdFxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbiAzNTY6XFx0XFx0c2VsZWN0IFhGUk1fRVNQXFxuIDM1NzpcXHRcXHRoZWxwXFxuIDM1ODpcXHRcXHQgIFN1cHBvcnQgZm9yIElQc2VjIEVTUCAoRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkKS5cXG4gMzU5OlxcdFxcbiAzNjA6XFx0XFx0ICBFU1AgY2FuIGJlIHVzZWQgd2l0aCB2YXJpb3VzIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobXMuXFxuIDM2MTpcXHRcXHQgIEJlc2lkZXMgZW5hYmxpbmcgRVNQIHN1cHBvcnQgaXRzZWxmLCB0aGlzIG9wdGlvbiBlbmFibGVzIHRoZSBnZW5lcmljXFxuIDM2MjpcXHRcXHQgIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmVcXG4gMzYzOlxcdFxcdCAgaW1wbGVtZW50ZWQuICBJZiB5b3UgbmVlZCBhbnkgb3RoZXIgYWxnb3JpdGhtcywgeW91J2xsIG5lZWQgdG8gZW5hYmxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjUwLjk0MzI0NjI1MloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTM0MDE3ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlIEknbSBsb29raW5nIGF0IGZvY3VzZXMgb24gcHJldmVudGluZyBpbnRlZ2VyIG92ZXJmbG93cyB3aXRoaW4gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSBoZWFkZXIgb2Zmc2V0IG1hbmlwdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGNoZWNrcyBhcm91bmQgZnVuY3Rpb25zIGxpa2UgYHNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsYCBhbmQgYHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bGAuIEkgc2VlIHRoYXQgdGhlIGNvZGUgaXMgc2VsZWN0aW5nIGBYRlJNX0VTUGAsIGFuZCBJJ20gcHJldHR5IHN1cmUgdGhhdCBpbXBsaWVzIGl0J3MgYWxzbyBzZWxlY3RpbmcgYFhGUk1gIGl0c2VsZiDigJMgc3RhbmRhcmQgcHJvY2VkdXJlLlxuXG5JJ2xsIGJlIHNldHRpbmcgdXAgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHRlc3RpbmcgYW5kIHZlcmlmaWNhdGlvbiBwcm9jZXNzOiBgSU5FVF9FU1BgLCBgSU5FVF9FU1BfT0ZGTE9BRGAsIGBJTkVUNl9FU1BgLCBgSU5FVDZfRVNQX09GRkxPQURgLCBhbmQgYWxzbyBgWEZSTV9JUFRGU2AuIFRoaXMgc2hvdWxkIGNvdmVyIHRoZSByZWxldmFudCBJUHNlYyBpbXBsZW1lbnRhdGlvbnMuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzIGR1cmluZyBteSBpbnZlc3RpZ2F0aW9uOiBgcHNrYl9leHBhbmRfaGVhZGAsIGBza2JfY29weV9leHBhbmRgLCBgc2tiX3NlZ21lbnRfbGlzdGAsIGBza2Jfc2VnbWVudGAsIGByYXdfc2VuZG1zZ2AsIGByYXd2Nl9zZW5kbXNnYCwgYHZhbGlkYXRlX3htaXRfeGZybWAsIGFuZCBgeGZybV9vdXRwdXRgLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIG5ldHdvcmtpbmcgKGBza2J1ZmYuY2ApLCByYXcgc29ja2V0cyAoYHJhdy5jYCksIGFuZCBlc3BlY2lhbGx5IElQc2VjL1hGUk0gb2ZmbG9hZGluZyBhbmQgZW5jYXBzdWxhdGlvbiBjb2RlIChgeGZybV9kZXZpY2UuY2AsIGB4ZnJtX2lwdGZzLmNgLCBgeGZybV9vdXRwdXQuY2AsIGBlc3A0X29mZmxvYWQuY2AsIGBlc3A2X29mZmxvYWQuY2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBoZWFkZXIgbWFuaXB1bGF0aW9uLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGlzLCBJIG5lZWQgdG8gcHV0IHRoaXMgdGhyb3VnaCBhIHRob3JvdWdoIGZ1enppbmcgcmVnaW1lLiBJdCdzIGNydWNpYWwgdG8gY29uZmlybSB0aGF0IHRoZXNlIG5ldyBib3VuZHMgY2hlY2tzIGRvICpub3QqIGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMsIHRoYXQgdGhleSBjb3JyZWN0bHkgaGFuZGxlIGFsbCB2YWxpZCBwYWNrZXQgc2NlbmFyaW9zLCBhbmQgdGhhdCB0aGV5IHByZXZlbnQgdGhlIHRhcmdldGVkIG92ZXJmbG93cyBhcyBpbnRlbmRlZC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGNoZWNrcyB0aGVtc2VsdmVzIGFyZSBzb3VuZCBhbmQgbm90IHN1c2NlcHRpYmxlIHRvIGJ5cGFzcy5cblxuUmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODMxLCJPdXRwdXRUb2tlbnMiOjI5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjAyOjU3Ljg3NzI2NzA3NloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3OTA0OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVF9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BfT0ZGTE9BRFwiLFxuICAgIFwiWEZSTV9JUFRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBza2JfZXhwYW5kX2hlYWRcIixcbiAgICBcInNrYl9jb3B5X2V4cGFuZFwiLFxuICAgIFwic2tiX3NlZ21lbnRfbGlzdFwiLFxuICAgIFwic2tiX3NlZ21lbnRcIixcbiAgICBcInJhd19zZW5kbXNnXCIsXG4gICAgXCJyYXd2Nl9zZW5kbXNnXCIsXG4gICAgXCJ2YWxpZGF0ZV94bWl0X3hmcm1cIixcbiAgICBcInhmcm1fb3V0cHV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBjYXJlZnVsIGJvdW5kcyBjaGVja2luZyB0byBza2IgaGVhZGVyIG9mZnNldCB1cGRhdGVzIChlLmcuLCBza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCwgc2tiX2hlYWRlcnNfb2Zmc2V0X3VwZGF0ZV9jYXJlZnVsKSB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG5ldHdvcmtpbmcgKHNrYnVmZi5jKSwgcmF3IHNvY2tldHMgKHJhdy5jKSwgYW5kIElQc2VjL1hGUk0gb2ZmbG9hZGluZyBhbmQgZW5jYXBzdWxhdGlvbiAoeGZybV9kZXZpY2UuYywgeGZybV9pcHRmcy5jLCB4ZnJtX291dHB1dC5jLCBlc3A0X29mZmxvYWQuYywgZXNwNl9vZmZsb2FkLmMpLiBTaW5jZSB0aGlzIG1vZGlmaWVzIGNvcmUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGhlYWRlciBtYW5pcHVsYXRpb24gbG9naWMsIGl0IGlzIGhpZ2hseSBmdW5jdGlvbmFsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IG92ZXJmbG93IGNoZWNrcyBkbyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIGRyb3AgdmFsaWQgcGFja2V0cywgYW5kIHRoYXQgdGhleSBjb3JyZWN0bHkgcHJldmVudCBvdmVyZmxvd3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVRfRVNQX09GRkxPQURcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQX09GRkxPQURcIixcbiAgICBcIlhGUk1fSVBURlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwc2tiX2V4cGFuZF9oZWFkXCIsXG4gICAgXCJza2JfY29weV9leHBhbmRcIixcbiAgICBcInNrYl9zZWdtZW50X2xpc3RcIixcbiAgICBcInNrYl9zZWdtZW50XCIsXG4gICAgXCJyYXdfc2VuZG1zZ1wiLFxuICAgIFwicmF3djZfc2VuZG1zZ1wiLFxuICAgIFwidmFsaWRhdGVfeG1pdF94ZnJtXCIsXG4gICAgXCJ4ZnJtX291dHB1dFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgY2FyZWZ1bCBib3VuZHMgY2hlY2tpbmcgdG8gc2tiIGhlYWRlciBvZmZzZXQgdXBkYXRlcyAoZS5nLiwgc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwsIHNrYl9oZWFkZXJzX29mZnNldF91cGRhdGVfY2FyZWZ1bCkgdG8gcHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBuZXR3b3JraW5nIChza2J1ZmYuYyksIHJhdyBzb2NrZXRzIChyYXcuYyksIGFuZCBJUHNlYy9YRlJNIG9mZmxvYWRpbmcgYW5kIGVuY2Fwc3VsYXRpb24gKHhmcm1fZGV2aWNlLmMsIHhmcm1faXB0ZnMuYywgeGZybV9vdXRwdXQuYywgZXNwNF9vZmZsb2FkLmMsIGVzcDZfb2ZmbG9hZC5jKS4gU2luY2UgdGhpcyBtb2RpZmllcyBjb3JlIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBoZWFkZXIgbWFuaXB1bGF0aW9uIGxvZ2ljLCBpdCBpcyBoaWdobHkgZnVuY3Rpb25hbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBvdmVyZmxvdyBjaGVja3MgZG8gbm90IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBkcm9wIHZhbGlkIHBhY2tldHMsIGFuZCB0aGF0IHRoZXkgY29ycmVjdGx5IHByZXZlbnQgb3ZlcmZsb3dzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowwcgpk[1] Phase: Succeeded StartedAt: 2026-08-02 06:03:10 +0000 UTC FinishedAt: 2026-08-02 06:03:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 06:03:10 +0000 UTC FinishedAt: 2026-08-02 06:03:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2] Phase: Succeeded StartedAt: 2026-08-02 06:03:10 +0000 UTC FinishedAt: 2026-08-02 09:58:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 06:03:13 +0000 UTC FinishedAt: 2026-08-02 09:58:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 06:03:13 +0000 UTC FinishedAt: 2026-08-02 06:03:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 06:03:13 +0000 UTC FinishedAt: 2026-08-02 06:03:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwcgpk/series-workflowwcgpk-convert-artifact-2400776181/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 06:03:37 +0000 UTC FinishedAt: 2026-08-02 06:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 06:03:37 +0000 UTC FinishedAt: 2026-08-02 06:34:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c8dbd473-cfe0-4fe7-ab45-c480332fe930,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-workflowwcgpk/series-workflowwcgpk-convert-artifact-2400776181/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": "65c44c9d-8f49-4942-9878-f442b250879f", "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-workflowwcgpk/series-workflowwcgpk-build-action-3543943643/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 06:03:37 +0000 UTC FinishedAt: 2026-08-02 06:34:04 +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:*c8dbd473-cfe0-4fe7-ab45-c480332fe930,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-workflowwcgpk/series-workflowwcgpk-convert-artifact-2400776181/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": "65c44c9d-8f49-4942-9878-f442b250879f", "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-workflowwcgpk/series-workflowwcgpk-build-action-3543943643/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 06:34:26 +0000 UTC FinishedAt: 2026-08-02 06:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 06:34:26 +0000 UTC FinishedAt: 2026-08-02 06:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 06:34:26 +0000 UTC FinishedAt: 2026-08-02 06:34:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 06:34:26 +0000 UTC FinishedAt: 2026-08-02 06:34:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwcgpk/series-workflowwcgpk-convert-artifact-4128491856/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 06:34:37 +0000 UTC FinishedAt: 2026-08-02 06:36:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 06:34:37 +0000 UTC FinishedAt: 2026-08-02 06:36:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*65c44c9d-8f49-4942-9878-f442b250879f,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-workflowwcgpk/series-workflowwcgpk-build-action-3543943643/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-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 06:36:40 +0000 UTC FinishedAt: 2026-08-02 06:36:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 06:36:40 +0000 UTC FinishedAt: 2026-08-02 06:36:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 06:36:40 +0000 UTC FinishedAt: 2026-08-02 06:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 06:36:40 +0000 UTC FinishedAt: 2026-08-02 06:54:53 +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:*c8dbd473-cfe0-4fe7-ab45-c480332fe930,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-workflowwcgpk/series-workflowwcgpk-convert-artifact-4128491856/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": "042aef12-f075-4b0d-a5fd-646ce3437bc1", "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-workflowwcgpk/series-workflowwcgpk-build-action-1035503308/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 06:36:41 +0000 UTC FinishedAt: 2026-08-02 06:54:43 +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:*c8dbd473-cfe0-4fe7-ab45-c480332fe930,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-workflowwcgpk/series-workflowwcgpk-convert-artifact-4128491856/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": "042aef12-f075-4b0d-a5fd-646ce3437bc1", "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-workflowwcgpk/series-workflowwcgpk-build-action-1035503308/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 06:54:53 +0000 UTC FinishedAt: 2026-08-02 06:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 06:54:53 +0000 UTC FinishedAt: 2026-08-02 06:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 06:54:53 +0000 UTC FinishedAt: 2026-08-02 06:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 06:54:53 +0000 UTC FinishedAt: 2026-08-02 06:56:51 +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:*042aef12-f075-4b0d-a5fd-646ce3437bc1,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-workflowwcgpk/series-workflowwcgpk-build-action-1035503308/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-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 06:57:01 +0000 UTC FinishedAt: 2026-08-02 09:58:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 06:57:01 +0000 UTC FinishedAt: 2026-08-02 09:58:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"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:*65c44c9d-8f49-4942-9878-f442b250879f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*042aef12-f075-4b0d-a5fd-646ce3437bc1,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-workflowwcgpk/series-workflowwcgpk-build-action-3543943643/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-workflowwcgpk/series-workflowwcgpk-build-action-1035503308/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 06:57:01 +0000 UTC FinishedAt: 2026-08-02 06:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 06:57:01 +0000 UTC FinishedAt: 2026-08-02 06:57:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"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-workflowwcgpk/series-workflowwcgpk-convert-artifact-1696448329/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 06:57:01 +0000 UTC FinishedAt: 2026-08-02 06:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 06:57:01 +0000 UTC FinishedAt: 2026-08-02 06:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 06:57:01 +0000 UTC FinishedAt: 2026-08-02 06:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 06:57:25 +0000 UTC FinishedAt: 2026-08-02 09:58:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwcgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pskb_expand_head","skb_copy_expand","skb_segment_list","skb_segment","raw_sendmsg","rawv6_sendmsg","validate_xmit_xfrm","xfrm_output"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"af39eb111ce6b5eba9c08513b62c4868eb7e7fd5","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_ESP","INET_ESP_OFFLOAD","INET6_ESP","INET6_ESP_OFFLOAD","XFRM_IPTFS"],"series_id":"25f2a158-c9c6-4f37-8703-e8df04faface","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 06:57:25 +0000 UTC FinishedAt: 2026-08-02 09:58:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*65c44c9d-8f49-4942-9878-f442b250879f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*042aef12-f075-4b0d-a5fd-646ce3437bc1,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-workflowwcgpk/series-workflowwcgpk-build-action-3543943643/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-workflowwcgpk/series-workflowwcgpk-build-action-1035503308/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-workflowwcgpk/series-workflowwcgpk-convert-artifact-1696448329/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,}