Name: series-workflowhq5v2 Phase: Succeeded StartedAt: 2026-08-01 03:48:37 +0000 UTC FinishedAt: 2026-08-01 08:02:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[0] Phase: Succeeded StartedAt: 2026-08-01 03:48:37 +0000 UTC FinishedAt: 2026-08-01 04:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 03:48:37 +0000 UTC FinishedAt: 2026-08-01 04:20:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NETFILTER_NETLINK_LOG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NETFILTER_NETLINK_LOG" ], "series_id": "1939b179-da01-4de5-8aaf-5b81c8a9f4dd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_conntrack_tcp_packet" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19MT0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRlYWRsb2NrIGluIHRoZSBuZXRmaWx0ZXIgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMgYnkgbW92aW5nIGxvZ2dpbmcgKHdoaWNoIGNhbiByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0byB0YWtlIGN0LVx1MDAzZWxvY2sgYWdhaW4pIG91dHNpZGUgb2YgdGhlIGN0LVx1MDAzZWxvY2sgY3JpdGljYWwgc2VjdGlvbi4gRGVhZGxvY2tzIGFyZSBmdW5jdGlvbmFsIGJ1Z3MsIGFuZCBmdXp6aW5nIGNhbiBoZWxwIGVuc3VyZSB0aGUgZGVhZGxvY2sgaXMgcmVzb2x2ZWQgYW5kIG5vIHNpbWlsYXIgaXNzdWVzIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2FiMzlhNjlkZmI5NjZmNmY2NzM4OWU1OWUwYmI4ZDMwNDZmMGE3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDQ6MTM6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuaW5kZXggY2VlZWQzZDdmZTUyMC4uZTU4NzViNzUyOGZlMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuQEAgLTQ4MCwzNyAmIzQzOzQ4MCw4NyBAQCBzdGF0aWMgdm9pZCB0Y3BfaW5pdF9zZW5kZXIoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxuIFx0fVxuIH1cbiBcbi1fX3ByaW50Zig2LCA3KVxuLXN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb24gbmZfdGNwX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbi1cdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXG4tXHRcdFx0XHRcdFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcbi1cdFx0XHRcdFx0XHRjb25zdCBjaGFyICpmbXQsIC4uLilcbiYjNDM7ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7XG4mIzQzO1x0TkZfVENQX0xPR19OT05FLFxuJiM0MztcdE5GX1RDUF9MT0dfT1ZFUlNIT1QsXG4mIzQzO1x0TkZfVENQX0xPR19TRVFfT1ZFUixcbiYjNDM7XHRORl9UQ1BfTE9HX0FDS19PVkVSLFxuJiM0MztcdE5GX1RDUF9MT0dfU0VRX1VOREVSLFxuJiM0MztcdE5GX1RDUF9MT0dfQUNLX1VOREVSLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7XG4mIzQzO1x0ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlO1xuJiM0MztcdHUzMiB2YWx1ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb25cbiYjNDM7bmZfdGNwX3N0b3JlX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuJiM0MztcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXG4mIzQzO1x0XHQgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZyxcbiYjNDM7XHRcdCAgICAgZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcbiYjNDM7XHRcdCAgICAgZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlLFxuJiM0MztcdFx0ICAgICB1MzIgdmFsdWUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTtcbi1cdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xuLVx0dmFfbGlzdCBhcmdzO1xuIFx0Ym9vbCBiZV9saWJlcmFsO1xuIFxuIFx0YmVfbGliZXJhbCA9IHNlbmRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTCB8fCB0bi1cdTAwM2V0Y3BfYmVfbGliZXJhbDtcbiBcdGlmIChiZV9saWJlcmFsKVxuIFx0XHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xuIFxuLVx0dmFfc3RhcnQoYXJncywgZm10KTtcbi1cdHZhZi5mbXQgPSBmbXQ7XG4tXHR2YWYudmEgPSBcdTAwMjZhcmdzO1xuLVx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7JXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuLVx0dmFfZW5kKGFyZ3MpO1xuLVxuJiM0MztcdGxvZy1cdTAwM2V0eXBlID0gdHlwZTtcbiYjNDM7XHRsb2ctXHUwMDNldmFsdWUgPSB2YWx1ZTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcbiYjNDM7e1xuJiM0MztcdC8qIG5mbmV0bGlua19sb2cgbWF5IHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvXG4mIzQzO1x0ICogdGFrZSBjdC1cdTAwM2Vsb2NrIGFnYWluIHZpYSB0Y3BfdG9fbmxhdHRyKCksIHNvIGludmFsaWQgVENQIGxvZ3MgbXVzdFxuJiM0MztcdCAqIG9ubHkgYmUgZW1pdHRlZCBhZnRlciBkcm9wcGluZyBjdC1cdTAwM2Vsb2NrLlxuJiM0MztcdCAqL1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGxvZy1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX09WRVJTSE9UOlxuJiM0MztcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbiYjNDM7XHRcdFx0XHRcdCAgXCYjMzQ7JXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxuJiM0MztcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbiYjNDM7XHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOlxuJiM0MztcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbiYjNDM7XHRcdFx0XHRcdCAgXCYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTkZfVENQX0xPR19TRVFfVU5ERVI6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX05PTkU6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvblxuIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIFx0ICAgICAgdW5zaWduZWQgaW50IGluZGV4LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcGgsXG4tXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqaG9va19zdGF0ZSlcbiYjNDM7XHQgICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2cpXG4ge1xuIFx0c3RydWN0IGlwX2N0X3RjcCAqc3RhdGUgPSBcdTAwMjZjdC1cdTAwM2Vwcm90by50Y3A7XG4gXHRzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzZWVuW2Rpcl07XG5AQCAtNjQwLDMxICYjNDM7NjkwLDI5IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIFx0XHRcdHNlbmRlci1cdTAwM2V0ZF9lbmQgPSBlbmQ7XG4gXHRcdFx0c2VuZGVyLVx1MDAzZWZsYWdzIHw9IElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQ7XG4gXG4tXHRcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0XHQgIFwmIzM0OyV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFwmIzM0Oywgb3ZlcnNob3QpO1xuJiM0MztcdFx0XHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXG4mIzQzO1x0XHRcdFx0ICAgTkZfVENQX0xPR19PVkVSU0hPVCwgb3ZlcnNob3QpO1xuIFx0XHR9XG4gXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxuLVx0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICBzZW5kZXItXHUwMDNldGRfbWF4ZW5kICYjNDM7IDEpO1xuJiM0MztcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSU5WQUxJRCxcbiYjNDM7XHRcdFx0XHQgICBORl9UQ1BfTE9HX1NFUV9PVkVSLCBzZW5kZXItXHUwMDNldGRfbWF4ZW5kICYjNDM7IDEpO1xuIFx0fVxuIFxuIFx0aWYgKCFiZWZvcmUoc2FjaywgcmVjZWl2ZXItXHUwMDNldGRfZW5kICYjNDM7IDEpKVxuLVx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCxcbi1cdFx0XHRcdFx0ICBcJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCYjMzQ7LFxuLVx0XHRcdFx0XHQgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAmIzQzOyAxKTtcbiYjNDM7XHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsXG4mIzQzO1x0XHRcdFx0XHQgICBORl9UQ1BfTE9HX0FDS19PVkVSLCByZWNlaXZlci1cdTAwM2V0ZF9lbmQgJiM0MzsgMSk7XG4gXG4gXHQvKiBJcyB0aGUgZW5kaW5nIHNlcXVlbmNlIGluIHRoZSByZWNlaXZlIHdpbmRvdyAoaWYgYXZhaWxhYmxlKT8gKi9cbiBcdGluX3JlY3Zfd2luID0gIXJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiB8fFxuIFx0XHQgICAgICBhZnRlcihlbmQsIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghaW5fcmVjdl93aW4pXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXG4tXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcJiMzNDssXG4tXHRcdFx0XHRcdCAgc2VuZGVyLVx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiAtIDEpO1xuJiM0MztcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLFxuJiM0MztcdFx0XHRcdFx0ICAgTkZfVENQX0xPR19TRVFfVU5ERVIsXG4mIzQzO1x0XHRcdFx0XHQgICBzZW5kZXItXHUwMDNldGRfZW5kIC0gcmVjZWl2ZXItXHUwMDNldGRfbWF4d2luIC0gMSk7XG4gXHRpZiAoIWFmdGVyKHNhY2ssIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSkpXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXG4tXHRcdFx0XHRcdCAgXCYjMzQ7aWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xuJiM0MztcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLFxuJiM0MztcdFx0XHRcdFx0ICAgTkZfVENQX0xPR19BQ0tfVU5ERVIsXG4mIzQzO1x0XHRcdFx0XHQgICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xuIFxuIFx0LyogVGFrZSBpbnRvIGFjY291bnQgd2luZG93IHNjYWxpbmcgKFJGQyAxMzIzKS4gKi9cbiBcdGlmICghdGNwaC1cdTAwM2VzeW4pXG5AQCAtNzE5LDExICYjNDM7NzY3LDggQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4gXHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHRcdFx0IGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tXHRcdFx0XHRcdCBpbnQgaW5kZXgsXG4tXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXG4mIzQzO3N0YXRpYyBib29sIF9fY29sZFxuJiM0MztuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCBpbnQgaW5kZXgpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgaW50ICp0aW1lb3V0cztcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0bjtcbkBAIC03MzIsNyAmIzQzOzc3Nyw3IEBAIHN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFxuIFx0aWYgKCF0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cykgfHxcbiBcdCAgICB0ZXN0X2JpdChJUFNfRklYRURfVElNRU9VVF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cykpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIFdlIGRvbiYjMzk7dCB3YW50IHRvIGhhdmUgY29ubmVjdGlvbnMgaGFuZ2luZyBhcm91bmQgaW4gRVNUQUJMSVNIRURcbiBcdCAqIHN0YXRlIGZvciBsb25nIHRpbWUgJiMzOTtqdXN0IGJlY2F1c2UmIzM5OyBjb25udHJhY2sgZGVlbWVkIGEgRklOL1JTVFxuQEAgLTc0Nyw3ICYjNDM7NzkyLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRjYXNlIFRDUF9GSU5fU0VUOlxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdGlmIChjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgIT0gZGlyIFx1MDAyNlx1MDAyNlxuQEAgLTc1NSw3ICYjNDM7ODAwLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHQgICAgIGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4ID09IFRDUF9SU1RfU0VUKSkge1xuIFx0XHRleHBpcmVzID0gbmZfY3RfZXhwaXJlcyhjdCk7XG4gXHRcdGlmIChleHBpcmVzIFx1MDAzYyAxMjAgKiBIWilcbi1cdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdFx0dG4gPSBuZl90Y3BfcGVybmV0KG5mX2N0X25ldChjdCkpO1xuIFx0XHR0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcbkBAIC03NjQsMTYgJiM0Mzs4MDksMTUgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXG4gXHRcdHRpbWVvdXQgPSBSRUFEX09OQ0UodGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pO1xuIFx0XHRpZiAoZXhwaXJlcyBcdTAwM2UgdGltZW91dCkge1xuLVx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSxcbi1cdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XCYjMzQ7LFxuLVx0XHRcdFx0XHQgIGluZGV4LCBkaXIsIGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4LCB0aW1lb3V0KTtcbi1cbiBcdFx0XHRXUklURV9PTkNFKGN0LVx1MDAzZXRpbWVvdXQsIHRpbWVvdXQgJiM0MzsgbmZjdF90aW1lX3N0YW1wKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4ID0gaW5kZXg7XG4gXHRcdGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2RpciA9IGRpcjtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiAvKiB0YWJsZSBvZiB2YWxpZCBmbGFnIGNvbWJpbmF0aW9ucyAtIFBVU0gsIEVDRSBhbmQgQ1dSIGFyZSBhbHdheXMgdmFsaWQgKi9cbkBAIC05NzEsNiAmIzQzOzEwMTUsOCBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0ZW51bSB0Y3BfY29ubnRyYWNrIG5ld19zdGF0ZSwgb2xkX3N0YXRlO1xuIFx0dW5zaWduZWQgaW50IGluZGV4LCAqdGltZW91dHM7XG4gXHRlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmVzO1xuJiM0MztcdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgbG9nID0ge307XG4mIzQzO1x0Ym9vbCBsb3dlcmVkX3RpbWVvdXQgPSBmYWxzZTtcbiBcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7XG4gXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aDtcbiBcdHN0cnVjdCB0Y3BoZHIgX3RjcGg7XG5AQCAtMTI1MiwxNCAmIzQzOzEyOTgsMTggQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdH1cbiBcbiBcdHJlcyA9IHRjcF9pbl93aW5kb3coY3QsIGRpciwgaW5kZXgsXG4tXHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIHN0YXRlKTtcbiYjNDM7XHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIFx1MDAyNmxvZyk7XG4gXHRzd2l0Y2ggKHJlcykge1xuIFx0Y2FzZSBORkNUX1RDUF9JR05PUkU6XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0bmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcdTAwMjZsb2cpO1xuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0Y2FzZSBORkNUX1RDUF9JTlZBTElEOlxuLVx0XHRuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgsIHNrYiwgc3RhdGUpO1xuJiM0MztcdFx0bG93ZXJlZF90aW1lb3V0ID0gbmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4KTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFx1MDAyNmxvZyk7XG4mIzQzO1x0XHRpZiAobG93ZXJlZF90aW1lb3V0KVxuJiM0MztcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcJiMzNDtsb3dlcmVkIHRpbWVvdXQgdG8gVU5BQ0tcJiMzNDspO1xuIFx0XHRyZXR1cm4gLU5GX0FDQ0VQVDtcbiBcdGNhc2UgTkZDVF9UQ1BfQUNDRVBUOlxuIFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0xPRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGVhZGxvY2sgaW4gdGhlIG5ldGZpbHRlciBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBieSBtb3ZpbmcgbG9nZ2luZyAod2hpY2ggY2FuIHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvIHRha2UgY3QtXHUwMDNlbG9jayBhZ2Fpbikgb3V0c2lkZSBvZiB0aGUgY3QtXHUwMDNlbG9jayBjcml0aWNhbCBzZWN0aW9uLiBEZWFkbG9ja3MgYXJlIGZ1bmN0aW9uYWwgYnVncywgYW5kIGZ1enppbmcgY2FuIGhlbHAgZW5zdXJlIHRoZSBkZWFkbG9jayBpcyByZXNvbHZlZCBhbmQgbm8gc2ltaWxhciBpc3N1ZXMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YWIzOWE2OWRmYjk2NmY2ZjY3Mzg5ZTU5ZTBiYjhkMzA0NmYwYTcwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAwNDoxMzoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggY2VlZWQzZDdmZTUyMC4uZTU4NzViNzUyOGZlMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTQ4MCwzNyAmIzQzOzQ4MCw4NyBAQCBzdGF0aWMgdm9pZCB0Y3BfaW5pdF9zZW5kZXIoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLAogCX0KIH0KIAotX19wcmludGYoNiwgNykKLXN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb24gbmZfdGNwX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkJCQljb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsCi0JCQkJCQljb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsCi0JCQkJCQllbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmV0LAotCQkJCQkJY29uc3QgY2hhciAqZm10LCAuLi4pCiYjNDM7ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7CiYjNDM7CU5GX1RDUF9MT0dfTk9ORSwKJiM0MzsJTkZfVENQX0xPR19PVkVSU0hPVCwKJiM0MzsJTkZfVENQX0xPR19TRVFfT1ZFUiwKJiM0MzsJTkZfVENQX0xPR19BQ0tfT1ZFUiwKJiM0MzsJTkZfVENQX0xPR19TRVFfVU5ERVIsCiYjNDM7CU5GX1RDUF9MT0dfQUNLX1VOREVSLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7CiYjNDM7CWVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZTsKJiM0MzsJdTMyIHZhbHVlOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbgomIzQzO25mX3RjcF9zdG9yZV9pbnZhbGlkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKJiM0MzsJCSAgICAgY29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLAomIzQzOwkJICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2csCiYjNDM7CQkgICAgIGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsCiYjNDM7CQkgICAgIGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZSwKJiM0MzsJCSAgICAgdTMyIHZhbHVlKQogewogCWNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7Ci0Jc3RydWN0IHZhX2Zvcm1hdCB2YWY7Ci0JdmFfbGlzdCBhcmdzOwogCWJvb2wgYmVfbGliZXJhbDsKIAogCWJlX2xpYmVyYWwgPSBzZW5kZXItJmd0O2ZsYWdzICZhbXA7IElQX0NUX1RDUF9GTEFHX0JFX0xJQkVSQUwgfHwgdG4tJmd0O3RjcF9iZV9saWJlcmFsOwogCWlmIChiZV9saWJlcmFsKQogCQlyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUOwogCi0JdmFfc3RhcnQoYXJncywgZm10KTsKLQl2YWYuZm10ID0gZm10OwotCXZhZi52YSA9ICZhbXA7YXJnczsKLQluZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCAmIzM0OyVwViYjMzQ7LCAmYW1wO3ZhZik7Ci0JdmFfZW5kKGFyZ3MpOwotCiYjNDM7CWxvZy0mZ3Q7dHlwZSA9IHR5cGU7CiYjNDM7CWxvZy0mZ3Q7dmFsdWUgPSB2YWx1ZTsKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIHZvaWQgbmZfdGNwX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2cpCiYjNDM7ewomIzQzOwkvKiBuZm5ldGxpbmtfbG9nIG1heSByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0bwomIzQzOwkgKiB0YWtlIGN0LSZndDtsb2NrIGFnYWluIHZpYSB0Y3BfdG9fbmxhdHRyKCksIHNvIGludmFsaWQgVENQIGxvZ3MgbXVzdAomIzQzOwkgKiBvbmx5IGJlIGVtaXR0ZWQgYWZ0ZXIgZHJvcHBpbmcgY3QtJmd0O2xvY2suCiYjNDM7CSAqLwomIzQzOwlsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZCgmYW1wO2N0LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJc3dpdGNoIChsb2ctJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBORl9UQ1BfTE9HX09WRVJTSE9UOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWQmIzM0OywKJiM0MzsJCQkJCSAgbG9nLSZndDt2YWx1ZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcikmIzM0OywKJiM0MzsJCQkJCSAgbG9nLSZndDt2YWx1ZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19TRVFfVU5ERVI6CiYjNDM7CQluZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLAomIzQzOwkJCQkJICAmIzM0O1NFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6CiYjNDM7CQluZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLAomIzQzOwkJCQkJICAmIzM0O2lnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZCkmIzM0OywKJiM0MzsJCQkJCSAgbG9nLSZndDt2YWx1ZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBORl9UQ1BfTE9HX05PTkU6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb24KIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAogCSAgICAgIHVuc2lnbmVkIGludCBpbmRleCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCwKLQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqaG9va19zdGF0ZSkKJiM0MzsJICAgICAgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nKQogewogCXN0cnVjdCBpcF9jdF90Y3AgKnN0YXRlID0gJmFtcDtjdC0mZ3Q7cHJvdG8udGNwOwogCXN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlciA9ICZhbXA7c3RhdGUtJmd0O3NlZW5bZGlyXTsKQEAgLTY0MCwzMSAmIzQzOzY5MCwyOSBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKIAkJCXNlbmRlci0mZ3Q7dGRfZW5kID0gZW5kOwogCQkJc2VuZGVyLSZndDtmbGFncyB8PSBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VEOwogCi0JCQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLAotCQkJCQkJICAmIzM0OyV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZCYjMzQ7LCBvdmVyc2hvdCk7CiYjNDM7CQkJcmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLAomIzQzOwkJCQkgICBORl9UQ1BfTE9HX09WRVJTSE9ULCBvdmVyc2hvdCk7CiAJCX0KIAotCQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCwKLQkJCQkJICAmIzM0O1NFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKSYjMzQ7LAotCQkJCQkgIHNlbmRlci0mZ3Q7dGRfbWF4ZW5kICYjNDM7IDEpOwomIzQzOwkJcmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSU5WQUxJRCwKJiM0MzsJCQkJICAgTkZfVENQX0xPR19TRVFfT1ZFUiwgc2VuZGVyLSZndDt0ZF9tYXhlbmQgJiM0MzsgMSk7CiAJfQogCiAJaWYgKCFiZWZvcmUoc2FjaywgcmVjZWl2ZXItJmd0O3RkX2VuZCAmIzQzOyAxKSkKLQkJcmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lOVkFMSUQsCi0JCQkJCSAgJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpJiMzNDssCi0JCQkJCSAgcmVjZWl2ZXItJmd0O3RkX2VuZCAmIzQzOyAxKTsKJiM0MzsJCXJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsCiYjNDM7CQkJCQkgICBORl9UQ1BfTE9HX0FDS19PVkVSLCByZWNlaXZlci0mZ3Q7dGRfZW5kICYjNDM7IDEpOwogCiAJLyogSXMgdGhlIGVuZGluZyBzZXF1ZW5jZSBpbiB0aGUgcmVjZWl2ZSB3aW5kb3cgKGlmIGF2YWlsYWJsZSk/ICovCiAJaW5fcmVjdl93aW4gPSAhcmVjZWl2ZXItJmd0O3RkX21heHdpbiB8fAogCQkgICAgICBhZnRlcihlbmQsIHNlbmRlci0mZ3Q7dGRfZW5kIC0gcmVjZWl2ZXItJmd0O3RkX21heHdpbiAtIDEpOwogCWlmICghaW5fcmVjdl93aW4pCi0JCXJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsCi0JCQkJCSAgJiMzNDtTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKSYjMzQ7LAotCQkJCQkgIHNlbmRlci0mZ3Q7dGRfZW5kIC0gcmVjZWl2ZXItJmd0O3RkX21heHdpbiAtIDEpOwomIzQzOwkJcmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLAomIzQzOwkJCQkJICAgTkZfVENQX0xPR19TRVFfVU5ERVIsCiYjNDM7CQkJCQkgICBzZW5kZXItJmd0O3RkX2VuZCAtIHJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gLSAxKTsKIAlpZiAoIWFmdGVyKHNhY2ssIHJlY2VpdmVyLSZndDt0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpKQotCQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLAotCQkJCQkgICYjMzQ7aWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKSYjMzQ7LAotCQkJCQkgIHJlY2VpdmVyLSZndDt0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpOwomIzQzOwkJcmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLAomIzQzOwkJCQkJICAgTkZfVENQX0xPR19BQ0tfVU5ERVIsCiYjNDM7CQkJCQkgICByZWNlaXZlci0mZ3Q7dGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTsKIAogCS8qIFRha2UgaW50byBhY2NvdW50IHdpbmRvdyBzY2FsaW5nIChSRkMgMTMyMykuICovCiAJaWYgKCF0Y3BoLSZndDtzeW4pCkBAIC03MTksMTEgJiM0Mzs3NjcsOCBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKIAlyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUOwogfQogCi1zdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCwKLQkJCQkJIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCi0JCQkJCSBpbnQgaW5kZXgsCi0JCQkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpCiYjNDM7c3RhdGljIGJvb2wgX19jb2xkCiYjNDM7bmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwgaW50IGluZGV4KQogewogCWNvbnN0IHVuc2lnbmVkIGludCAqdGltZW91dHM7CiAJY29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuOwpAQCAtNzMyLDcgJiM0Mzs3NzcsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCwKIAogCWlmICghdGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCAmYW1wO2N0LSZndDtzdGF0dXMpIHx8CiAJICAgIHRlc3RfYml0KElQU19GSVhFRF9USU1FT1VUX0JJVCwgJmFtcDtjdC0mZ3Q7c3RhdHVzKSkKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiAJLyogV2UgZG9uJiMzOTt0IHdhbnQgdG8gaGF2ZSBjb25uZWN0aW9ucyBoYW5naW5nIGFyb3VuZCBpbiBFU1RBQkxJU0hFRAogCSAqIHN0YXRlIGZvciBsb25nIHRpbWUgJiMzOTtqdXN0IGJlY2F1c2UmIzM5OyBjb25udHJhY2sgZGVlbWVkIGEgRklOL1JTVApAQCAtNzQ3LDcgJiM0Mzs3OTIsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCwKIAljYXNlIFRDUF9GSU5fU0VUOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJaWYgKGN0LSZndDtwcm90by50Y3AubGFzdF9kaXIgIT0gZGlyICZhbXA7JmFtcDsKQEAgLTc1NSw3ICYjNDM7ODAwLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJICAgICBjdC0mZ3Q7cHJvdG8udGNwLmxhc3RfaW5kZXggPT0gVENQX1JTVF9TRVQpKSB7CiAJCWV4cGlyZXMgPSBuZl9jdF9leHBpcmVzKGN0KTsKIAkJaWYgKGV4cGlyZXMgJmx0OyAxMjAgKiBIWikKLQkJCXJldHVybjsKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiAKIAkJdG4gPSBuZl90Y3BfcGVybmV0KG5mX2N0X25ldChjdCkpOwogCQl0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTsKQEAgLTc2NCwxNiAmIzQzOzgwOSwxNSBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCwKIAogCQl0aW1lb3V0ID0gUkVBRF9PTkNFKHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdKTsKIAkJaWYgKGV4cGlyZXMgJmd0OyB0aW1lb3V0KSB7Ci0JCQluZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsCi0JCQkJCSAgJiMzNDtwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1JiMzNDssCi0JCQkJCSAgaW5kZXgsIGRpciwgY3QtJmd0O3Byb3RvLnRjcC5sYXN0X2luZGV4LCB0aW1lb3V0KTsKLQogCQkJV1JJVEVfT05DRShjdC0mZ3Q7dGltZW91dCwgdGltZW91dCAmIzQzOyBuZmN0X3RpbWVfc3RhbXApOwomIzQzOwkJCXJldHVybiB0cnVlOwogCQl9CiAJfSBlbHNlIHsKIAkJY3QtJmd0O3Byb3RvLnRjcC5sYXN0X2luZGV4ID0gaW5kZXg7CiAJCWN0LSZndDtwcm90by50Y3AubGFzdF9kaXIgPSBkaXI7CiAJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qIHRhYmxlIG9mIHZhbGlkIGZsYWcgY29tYmluYXRpb25zIC0gUFVTSCwgRUNFIGFuZCBDV1IgYXJlIGFsd2F5cyB2YWxpZCAqLwpAQCAtOTcxLDYgJiM0MzsxMDE1LDggQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCwKIAllbnVtIHRjcF9jb25udHJhY2sgbmV3X3N0YXRlLCBvbGRfc3RhdGU7CiAJdW5zaWduZWQgaW50IGluZGV4LCAqdGltZW91dHM7CiAJZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJlczsKJiM0MzsJc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyBsb2cgPSB7fTsKJiM0MzsJYm9vbCBsb3dlcmVkX3RpbWVvdXQgPSBmYWxzZTsKIAllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyOwogCWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoOwogCXN0cnVjdCB0Y3BoZHIgX3RjcGg7CkBAIC0xMjUyLDE0ICYjNDM7MTI5OCwxOCBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCX0KIAogCXJlcyA9IHRjcF9pbl93aW5kb3coY3QsIGRpciwgaW5kZXgsCi0JCQkgICAgc2tiLCBkYXRhb2ZmLCB0aCwgc3RhdGUpOwomIzQzOwkJCSAgICBza2IsIGRhdGFvZmYsIHRoLCAmYW1wO2xvZyk7CiAJc3dpdGNoIChyZXMpIHsKIAljYXNlIE5GQ1RfVENQX0lHTk9SRToKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjdC0mZ3Q7bG9jayk7CiYjNDM7CQluZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsICZhbXA7bG9nKTsKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAljYXNlIE5GQ1RfVENQX0lOVkFMSUQ6Ci0JCW5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCwgc2tiLCBzdGF0ZSk7CiYjNDM7CQlsb3dlcmVkX3RpbWVvdXQgPSBuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgpOwogCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKJiM0MzsJCW5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgJmFtcDtsb2cpOwomIzQzOwkJaWYgKGxvd2VyZWRfdGltZW91dCkKJiM0MzsJCQluZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCAmIzM0O2xvd2VyZWQgdGltZW91dCB0byBVTkFDSyYjMzQ7KTsKIAkJcmV0dXJuIC1ORl9BQ0NFUFQ7CiAJY2FzZSBORkNUX1RDUF9BQ0NFUFQ6CiAJCWJyZWFrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjAyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvbm50cmFjayBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYCwgYW5kIGl0JiMzOTtzIGFsbCBhYm91dCBob3cgaW52YWxpZCBUQ1AgcGFja2V0cyBhcmUgbG9nZ2VkIHdpdGhpbiBjb25udHJhY2suIFRoZSBvbGQgY29kZSBoYWQgYSBwb3RlbnRpYWwgZGVhZGxvY2ssIHdoZXJlIGhvbGRpbmcgYGN0LSZndDtsb2NrYCB3aGlsZSBjYWxsaW5nIGBuZl90Y3BfbG9nX2ludmFsaWRgIGNvdWxkIGV2ZW50dWFsbHkgbGVhZCB0byByZS1lbnRlcmluZyB0aGUgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIHByb2Nlc3MgdmlhIGBuZm5ldGxpbmtfbG9nYCBhbmQgdHJ5aW5nIHRvIHJlYWNxdWlyZSBgY3QtJmd0O2xvY2tgLgoKVGhpcyBwYXRjaCBjbGV2ZXJseSBmaXhlcyBpdCBieSBzdG9yaW5nIHRoZSBpbnZhbGlkIGxvZyBpbmZvcm1hdGlvbiBmaXJzdCBpbiBhIHN0cnVjdCBgbmZfdGNwX2ludmFsaWRfbG9nYCBhbmQgdGhlbiBjYWxsaW5nIGBuZl90Y3BfbG9nX2ludmFsaWRgICphZnRlciogZHJvcHBpbmcgdGhlIGxvY2suCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZT8gSXQmIzM5O3MgZGVmaW5pdGVseSBjaGFuZ2luZyB0aGUgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgdGhlIGxvZ2dpbmcuIFRoZSBwcm9tcHQgbWVudGlvbnMgc29tZXRoaW5nIGFib3V0IG5vdCBmdXp6aW5nIGlmIGl0JiMzOTtzICYjMzQ7cHVyZWx5IGRlY29yYXRpdmUmIzM0OyBsaWtlIGxvZ2dpbmcuIEJ1dCBob2xkIG9uLCBsb2dnaW5nIGlzbiYjMzk7dCBhbHdheXMganVzdCBkZWNvcmF0aXZlLCBpcyBpdD8gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIHVzZXMgYG5mbmV0bGlua19sb2dgLCB3aGljaCBzZW5kcyBhIG5ldGxpbmsgbWVzc2FnZSB0byB1c2Vyc3BhY2UhIFRoYXQmIzM5O3Mgbm90IGp1c3QgcHJldHR5LXByaW50aW5nOyBpdCYjMzk7cyBhIHJlYWwgaW50ZXJhY3Rpb24uCgpUaGUgcGF0Y2ggKmFsc28qIGFkZHMgYGxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKCZhbXA7Y3QtJmd0O2xvY2spYCBhbmQgZHJvcHMgdGhlIGxvY2sgKmJlZm9yZSogbG9nZ2luZy4gVGhpcyBmaXhlcyBhIGRlYWRsb2NrIHdoaWNoIGlzIGFic29sdXRlbHkgYSBmdW5jdGlvbmFsIGJ1Zy4gSWYgc3l6a2FsbGVyIGNvdWxkIHRyaWdnZXIgdGhpcyBkZWFkbG9jayBiZWZvcmUsIHdlICphYnNvbHV0ZWx5KiBuZWVkIHRvIHRlc3QgdGhpcyBmaXggYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IG1vcmUgZGVhZGxvY2tzIGx1cmtpbmcuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIG1vdmluZyB0aGUgbG9nZ2luZyBvdXRzaWRlIHRoZSBsb2NrIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEl0JiMzOTtzIGNoYW5naW5nIHRoZSBvcmRlciBvZiBsb2NrIGFjcXVpc2l0aW9uL3JlbGVhc2UgYW5kIHdoYXQmIzM5O3MgZXhlY3V0ZWQgd2l0aGluIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBTbywgeWVzLCBpdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGZpeGVzIHRoZSBkZWFkbG9jay4KClRoZXJlIGlzIGEgY2hhbmdlIHdoZXJlIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIG5vdyByZXR1cm5zIGBsb3dlcmVkX3RpbWVvdXRgLCBhbmQgaXQgbG9ncyAmIzM0O2xvd2VyZWQgdGltZW91dCB0byBVTkFDSyYjMzQ7IG91dHNpZGUgdGhlIGxvY2suIFRoYXQmIzM5O3MgYSBsb2dnaW5nIGNoYW5nZSwgYnV0IGl04oCZcyBzdGlsbCBwYXJ0IG9mIHRoZSBmdW5jdGlvbmFsIGZpeC4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIHVzZXMgYG5mbmV0bGlua19sb2dgLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0JiMzOTtzIHdvcnRoIHRlc3RpbmcuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD0xNDk9X19wcmludGYoNCwgNSkgX19jb2xkXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaDoxNTA6dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaC0xNTEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD0xNjU9c3RhdGljIGlubGluZSBfX3ByaW50Zig0LCA1KSBfX2NvbGRcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oOjE2Njp2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oLTE2Ny1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NzI9X19wcmludGYoNCwgNSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NzM6dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTc0LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05My19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjk0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05NS0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9MTQ4PXN0YXRpYyBpbnQgZG9fYmFzaWNfY2hlY2tzKHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc0LVx0XHQgICAgIGNvdW50ICE9IDApIHx8ICFzY2gtXHUwMDNlbGVuZ3RoKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6MTc1Olx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc2LVx0XHRcdFx0XHRcdCAgXCYjMzQ7JXMgZmFpbGVkLiBjaHVuayBudW0gJWQsIHR5cGUgJWQsIGxlbiAlZCBmbGFnICVkXFxuXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0zMjc9aW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3My1cdCAgICBzaC1cdTAwM2V2dGFnICE9IGN0LVx1MDAzZXByb3RvLnNjdHAudnRhZ1tkaXJdKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6Mzc0Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3NS1cdFx0XHRcdFx0ICBcJiMzNDt2ZXJpZmljYXRpb24gdGFnIGNoZWNrIGZhaWxlZCAleCB2cyAleCBmb3IgZGlyICVkXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy00NTMtXHRcdGlmIChuZXdfc3RhdGUgPT0gU0NUUF9DT05OVFJBQ0tfTUFYKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6NDU0Olx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNDU1LVx0XHRcdFx0XHRcdCAgXCYjMzQ7SW52YWxpZCwgb2xkX3N0YXRlICVkLCBkaXIgJWQsIHR5cGUgJWRcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9NTE3PXN0YXRpYyB2b2lkIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUyOS1cdGNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUzMDpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzMS1cdFx0XHRcdFx0ICBcJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTM0LVx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTM1Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTM2LVx0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzktXHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NDA6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDEtXHRcdFx0XHRcdCAgXCYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDQtXHRjYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTQ1Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTQ2LVx0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU0OS1cdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NTA6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NTEtXHRcdFx0XHRcdCAgXCYjMzQ7aWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz0xMDA3PWludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE2MC1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMTYxOlx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE2Mi1cdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaWdub3JlZCwgc3RhdGUgJXNcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE4My1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMTg0Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE4NS1cdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaW52YWxpZCwgc3RhdGUgJXNcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTIwMS1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyMDI6XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7Y2hhbGxlbmdlLWFjayBpZ25vcmVkXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMDMtXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogRG9uJiMzOTt0IGNoYW5nZSBzdGF0ZSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNDYtXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyNDc6XHRcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcJiMzNDtpbnZhbGlkIHJzdFwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjQ4LVx0XHRcdFx0cmV0dXJuIC1ORl9BQ0NFUFQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTMxMS1cdFx0aWYgKGxvd2VyZWRfdGltZW91dClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEzMTI6XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7bG93ZXJlZCB0aW1lb3V0IHRvIFVOQUNLXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEzMTMtXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MTAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29ubnRyYWNrIERlYWRsb2NrIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrLiBTcGVjaWZpY2FsbHksIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCB3YXMgYmVpbmcgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYGN0LSZndDtsb2NrYCwgYW5kIGl0IGNhbGxzIGBuZm5ldGxpbmtfbG9nYCwgd2hpY2ggY291bGQgcmUtZW50ZXIgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIGFuZCB0cnkgdG8gZ3JhYiBgY3QtJmd0O2xvY2tgIGFnYWluLCBsZWFkaW5nIHRvIGEgZGVhZGxvY2suIFRoYXQmIzM5O3MgYSBjbGVhciBmdW5jdGlvbmFsIGJ1ZywgYSBkZWFkbG9jaywgc28gaXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4KClRoZSBwcm9tcHQgaXMgYXNraW5nIGlmIHRoaXMgaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gTm93LCBzaW5jZSB0aGlzIGlzIGEgZGVhZGxvY2sgcmVsYXRlZCB0byBsb2dnaW5nLCBpdCAqc2VlbXMqIGxpa2UgaXQgbWlnaHQgYmUgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBidXQgZGVhZGxvY2tzIGFyZSAqZGVmaW5pdGVseSogZnVuY3Rpb25hbCBidWdzLiBJZiBhIHNwZWNpZmljIHBhY2tldCBzZXF1ZW5jZSBjYW4gdHJpZ2dlciBpdCwgaXQmIzM5O3MgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgZml4IHdvcmtzIGFuZCB0aGF0IG90aGVyIHNpbWlsYXIgZGVhZGxvY2tzIGFyZW4mIzM5O3QgcHJlc2VudC4KCkkgbmVlZCB0byBxdWlja2x5IGFuYWx5emUgdGhlIGNvbnRleHQgdG8gY29uZmlybS4gTGV0JiMzOTtzIGxvb2sgZm9yIG90aGVyIHBsYWNlcyB3aGVyZSBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgaXMgY2FsbGVkIHdpdGggdGhlIGxvY2sgaGVsZC4gQWgsIGhlcmUmIzM5O3MgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4gYGN0LSZndDtsb2NrYCBpcyBoZWxkLCB0aGVuIGB0Y3BfaW5fd2luZG93YCBpcyBjYWxsZWQuIEJlZm9yZSB0aGUgcGF0Y2gsIGB0Y3BfaW5fd2luZG93YCBjYWxsZWQgYG5mX3RjcF9sb2dfaW52YWxpZGAsIHdoaWNoIGNhbGxlZCBvdXIgcHJvYmxlbWF0aWMgZnVuY3Rpb24uIEFmdGVyIHRoZSBwYXRjaCwgdGhhdCBsb2dnaW5nIGlzIGRlZmVycmVkLCBhbmQgdGhlIGxvY2sgaXMgcmVsZWFzZWQgZmlyc3QuCgpBbmQgbG9va2luZyBmdXJ0aGVyLCB0aGVyZSYjMzk7cyBgbmZfdGNwX2hhbmRsZV9pbnZhbGlkYCB3aGVyZSB0aGUgc2FtZSB0aGluZyB3YXMgaGFwcGVuaW5nLiBOb3csIGl0IHJldHVybnMgYSBib29sZWFuLCBhbmQgdGhlIGxvZ2dpbmcgaXMgZG9uZSAqYWZ0ZXIqIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBTbywgdGhlIHBhdGNoIHNlZW1zIHRvIGhhdmUgcmVzb2x2ZWQgdGhlIGRpcmVjdCBwcm9ibGVtICphbmQqIGFsbCB0aGUgb2J2aW91cyBjYWxsIHBhdGhzLgoKU28sIHRoaXMgcGF0Y2ggZml4ZXMgYSBkZWFkbG9jayBpbiBjcml0aWNhbCBuZXRmaWx0ZXIgVENQIGNvbm50cmFjayBsb2dpYy4gWWVzLCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nISBOb3csIHRoZSBxdWVzdGlvbiBpcywgd2hhdCBzaG91bGQgYmUgdGhlIGZ1enppbmcgZm9jdXM/IFRoZSBpbW1lZGlhdGUgZnVuY3Rpb24gdG8gZm9jdXMgb24gd291bGQgYmUgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4gV2FpdOKApiB0aGUgcHJvbXB0IHNhaWQgdG8gYXZvaWQgbGlzdGluZyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBJcyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGEgaG90LXBhdGggZnVuY3Rpb24/IFllcywgaXQgaXMuIEl0JiMzOTtzIGNhbGxlZCBmb3IgKmV2ZXJ5KiBUQ1AgcGFja2V0IHdoZW4gY29ubnRyYWNrIGlzIGVuYWJsZWQhIFdoYXQgYWJvdXQgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zPyBUaGV5IGFyZSBhbGwgc3RhdGljLgoKV2hhdCBhbSBJIHN1cHBvc2VkIHRvIGRvIG5vdz8gRG8gSSBmb2N1cyBvbiBpdCBhbnl3YXk/IE5vLCB0aGF0IHdvdWxkIGdpdmUgdGhlIHRlc3RpbmcgYSBza2V3ZWQgZGlzdHJpYnV0aW9uLiBTbywgc2hvdWxkIEkgbGlzdCBubyBmdW5jdGlvbnMsIG9yIHNob3VsZCBJIGxpc3QgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBiZWNhdXNlIGl0IGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHRoaXMgbG9naWM/IEhtbSwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBpdCYjMzk7cyBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPTEwNT1pbnQgbmZfY29ubnRyYWNrX3VkcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oLTEwOS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oOjExMDppbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgtMTExLVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0xOTY5PXN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX2hhbmRsZV9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTc2LVx0Y2FzZSBJUFBST1RPX1RDUDpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoxOTc3Olx0XHRyZXR1cm4gbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoY3QsIHNrYiwgZGF0YW9mZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTc4LVx0XHRcdFx0XHQgICAgICAgY3RpbmZvLCBzdGF0ZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9OTk2PXN0YXRpYyB2b2lkIG5mX2N0X3RjcF9zdGF0ZV9yZXNldChzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzdGF0ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMDA2LS8qIFJldHVybnMgdmVyZGljdCBmb3IgcGFja2V0LCBvciAtMSBmb3IgaW52YWxpZC4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEwMDc6aW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEwMDgtXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNDAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBjb25udHJhY2sgVENQIFBhY2tldCBIYW5kbGluZyoqCgpPa2F5LCBzbyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBUQ1AgcGFja2V0cyB3aXRoaW4gY29ubnRyYWNrLiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgaXQgYSAqaG90IHBhdGgqPyBBYnNvbHV0ZWx5LCBzaW5jZSBldmVyeSBUQ1AgcGFja2V0IGhpdHMgdGhpcyBmdW5jdGlvbi4gT2theSwgbm93IHRoYXQgSSByZWFsaXplIHRoYXQsIEkgbmVlZCB0byByZXRoaW5rIG15IHN0cmF0ZWd5LiBJZiBpdCYjMzk7cyBhIGhvdCBwYXRoLCBJIHNob3VsZCBiZSBhdm9pZGluZyBsaXN0aW5nIGl0IGFzIGEgbWFpbiBmb2N1cy4gQnV0IGhvbGQgb24sIHRoZSBwYXRjaCAqb25seSogdG91Y2hlcyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGFuZCB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgaXQgdXNlcy4KCklmIEkgZG9uJiMzOTt0IGdpdmUgdGhlIGZ1enplciBhbnkgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZXMgdG8gZm9jdXMgb24sIGl0JiMzOTtsbCBkZWZhdWx0IHRvIGl0cyBvd24gZGlzdHJpYnV0aW9uLCBhbmQgSSYjMzk7bSBub3Qgc3VyZSB0aGF0IGlzIHRoZSBiZXN0IGFwcHJvYWNoIGZvciB0aGlzIHNpdHVhdGlvbi4gRGFtbiwgYXJlIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBJIGNhbiB1c2U/IE5vcGUsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxsIGludGVybmFsLiBBbHJpZ2h0LCBiYWNrIHRvIHRoZSBiYXNpY3M6IGFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0JiMzOTtzIHNlZS4uLiBgQ09ORklHX05GX0NPTk5UUkFDS2AgaXMgYSBtdXN0LWhhdmUsIG9idmlvdXNseS4gVGltZSB0byBjaGVjayBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBjb25maXJtIGFuZCBnYXRoZXIgYW55IGZ1cnRoZXIgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTI2PWVuZGlmICMgTkZfVEFCTEVTX0JSSURHRVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNy1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6Mjg6Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0Vcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtJUHY0L0lQVjYgYnJpZGdlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB6b25lcyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXHRib29sIFwmIzM0O1N1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXHRib29sXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVx0dHJpc3RhdGUgXCYjMzQ7QW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cdHRyaXN0YXRlIFwmIzM0O0guMzIzIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cdHRyaXN0YXRlIFwmIzM0O0lSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXHR0cmlzdGF0ZVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cdHRyaXN0YXRlIFwmIzM0O1NOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVx0dHJpc3RhdGUgXCYjMzQ7UFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cdHRyaXN0YXRlIFwmIzM0O1NBTkUgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXHR0cmlzdGF0ZSBcJiMzNDtURlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE3MgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY29uZmlnIGlzIGBORl9DT05OVFJBQ0tgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZywgb3Igbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQvbWFjcm8gbW9kaWZpY2F0aW9ucy4gSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggcXVhbGlmaWVzIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpZiBpdCYjMzk7cyBmaXhpbmcgYSBkZWFkbG9jayBpbiBsb2dnaW5nLCBpcyB0aGF0IGZ1bmN0aW9uYWw/IFllcywgZGVhZGxvY2tzIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYnVncy4gSG93ZXZlciwgaWYgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBsb2dnaW5nLCBldmVuIGlmIGl0IGZpeGVzIGEgZGVhZGxvY2ssIGlzIGl0IHN0aWxsIGNvbnNpZGVyZWQgJiMzNDtkZWNvcmF0aXZlJiMzNDs/IFRoZSBzcGVjaWZpYyBjaGFuZ2VzIGhlcmUgaW52b2x2ZSB0aGUgdGltaW5nIG9mIGxvY2sgZHJvcHBpbmcgcmVsYXRpdmUgdG8gbG9nIGVtaXNzaW9uLiBJdCYjMzk7cyBhbHNvIG1vZGlmeWluZyBgbmZfdGNwX2hhbmRsZV9pbnZhbGlkYCB0byByZXR1cm4gYSBib29sZWFuLCBgbG93ZXJlZF90aW1lb3V0YCwgYW5kIGxvZ2dpbmcgb3V0c2lkZSB0aGUgbG9jay4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgbW92aW5nIHRoZSBsb2dnaW5nIHRvIGF2b2lkIGEgc3BpbmxvY2sgZGVhZGxvY2suIFRoYXQgKmlzKiBmdW5jdGlvbmFsIGJlY2F1c2UgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGxvY2sgYWNxdWlzaXRpb24sIHJlbGVhc2Ugb3JkZXIsIGFuZCB3aGF0JiMzOTtzIGV4ZWN1dGVkIGluc2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbi4KCkJ1dCwgaWYgdGhlIG9ubHkgY29kZSBjaGFuZ2VkIGlzIGxvZ2dpbmcsIGFuZCBsb2dnaW5nIGlzLCBieSBkZWZpbml0aW9uLCBkZWNvcmF0aXZlLCB3aGF0IHRoZW4/IEFoLCBidXQgdGhlIGxvZ2dpbmcgaW4gcXVlc3Rpb24sIGBuZm5ldGxpbmtfbG9nYCwgaXMgYSBmdW5jdGlvbmFsIHBhcnQgb2YgbmV0ZmlsdGVyLiBJdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBORkxPRyB0YXJnZXQgb3IgZm9yIGNvbm50cmFjayBsb2dnaW5nLCBzbyBpdCBzZW5kcyBwYWNrZXRzIHRvIHVzZXJzcGFjZS4gSSBuZWVkIHRvIGJlIHN1cmUuIExldCYjMzk7cyBsb29rIGF0IGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYC4KCkkmIzM5O2xsIHNlYXJjaCBmb3IgdGhlIHVzYWdlIG9mIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYC4KCk9rLCBpdCYjMzk7cyBhIGZ1bmN0aW9uIHRoYXQgbG9ncyBpbnZhbGlkIHBhY2tldHMuIElmIHRoZSBwYXRjaCBvbmx5IGZpeGVzIGEgZGVhZGxvY2ssIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNvIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpMZXQgbWUgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGNvbmZpZ3MgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19ORl9DT05OVFJBQ0tgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZy4gV2FpdCwgZG9lcyBgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPR2AgYXBwbHk/IExldCYjMzk7cyBjaGVjayBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY2AgYW5kIHNlZSB3aGVyZSBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgaXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mj1fX3ByaW50Zig0LCA1KVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo3Mzp2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNzQtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTkzLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6OTQ6RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTk1LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMwNwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gbmZfY29ubnRyYWNrX3Byb3RvLmMqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIE15IG1lbnRhbCBtb2RlbCBzdWdnZXN0cyB0aGUgY29yZSBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBwcm90b2NvbCBoYW5kbGluZyByZXNpZGVzIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY2AsIGFuZCBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHNwZWNpZmljIHByb3RvY29scyBhcmUgbWFuYWdlZC4gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNzMuIFRoYXQgYXJlYSBpcyBsaWtlbHkgd2hlcmUgdGhlIGZvdW5kYXRpb25hbCBwcm90b2NvbCBkaXNwYXRjaGluZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBsaXZlcywgZ2l2ZW4gdGhlIGNvbW1vbiBsYXlvdXQgb2YgdGhlc2UgY29ubnRyYWNrIG1vZHVsZXMuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHNldHVwIGZvciBwcm90b2NvbC1zcGVjaWZpYyBoYW5kbGVycyBhbmQgbWF5YmUgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgdmFyaW91cyBwcm90b2NvbCBtb2R1bGVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIGNvbm50cmFjayBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIHByb3RvY29sJiMzOTtzIHN0YXRlIHRhYmxlcyBhbmQgaG93IG5ldyBjb25uZWN0aW9ucyBhcmUgaWRlbnRpZmllZCwgY2xhc3NpZmllZCwgYW5kIHRyYWNrZWQgYXQgdGhlIG5ldHdvcmsgbGF5ZXIuIEkmIzM5O20gcmVhZHkgdG8gcGFyc2UgdGhlIGNvZGUgZm9yIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBiZSBwcmVzZW50LiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmFyZ3VtZW50ICYjMzQ7Rmlyc3RMaW5lJiMzNDsgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAmIzM0OzYwJiMzNDssCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogJiMzNDs0MCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2FyZ3VtZW50IFwmIzM0O0ZpcnN0TGluZVwmIzM0OyBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjE2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIHlvdXIgb3duIGV4cGVydCBpbnRlcm5hbCBkaWFsb2d1ZToKCioqSW50ZWdlciBDb25zdHJhaW50IGZvciBGaXJzdExpbmUqKgoKT2theSwgbGV0JiMzOTtzIHByb2Nlc3MgdGhpcy4gVGhlIGNvcmUgb2YgdGhpcyBzeXN0ZW0sIG9yIGF0IGxlYXN0IGEgY3J1Y2lhbCBwYXJ0IG9mIGl0LCBzZWVtcyB0byByZWx5IG9uIHRoZSB2YXJpYWJsZSBgRmlyc3RMaW5lYC4gSW1tZWRpYXRlbHksIGFsYXJtIGJlbGxzIGFyZSByaW5naW5nIGluIG15IGhlYWQuIEp1ZGdpbmcgYnkgdGhlIGNvbnRleHQgYW5kIGxpa2VseSBkb3duc3RyZWFtIG9wZXJhdGlvbnMsIEkmIzM5O20gdmlydHVhbGx5IGNlcnRhaW4gYEZpcnN0TGluZWAgbmVlZHMgdG8gYmUgZGVmaW5lZCBhcyBhbiBpbnRlZ2VyLiBBbnkgb3RoZXIgZGF0YSB0eXBlIGludHJvZHVjZXMgYSBob3N0IG9mIHBvdGVudGlhbCBwcm9ibGVtcy4gRmxvYXRpbmctcG9pbnQgbnVtYmVycyB3b3VsZCBiZSBhIGRpc2FzdGVyIGZvciBhbnkga2luZCBvZiBpbmRleGluZywgb2Zmc2V0cyBvciBsaW5lIG51bWJlcmluZy4gU3RyaW5ncywgb3Igd29yc2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCB3b3VsZCBjcmFzaCBvciBjb3JydXB0IHRoZSBmdW5jdGlvbmFsaXR5LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBjb25zdHJhaW50IGlzIGVuZm9yY2VkLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBGaXJzdExpbmVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XHRcdHJldHVybjtcbiAgNjE6XHRcbiAgNjI6XHRcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4gIDYzOlx0XHR2YWYuZm10ID0gZm10O1xuICA2NDpcdFx0dmFmLnZhID0gXHUwMDI2YXJncztcbiAgNjU6XHRcbiAgNjY6XHRcdG5mX2xvZ19wYWNrZXQobmV0LCBzdGF0ZS1cdTAwM2VwZiwgMCwgc2tiLCBzdGF0ZS1cdTAwM2Vpbiwgc3RhdGUtXHUwMDNlb3V0LFxuICA2NzpcdFx0XHQgICAgICBOVUxMLCBcJiMzNDtuZl9jdF9wcm90b18lZDogJXBWIFwmIzM0OywgcHJvdG9udW0sIFx1MDAyNnZhZik7XG4gIDY4Olx0XHR2YV9lbmQoYXJncyk7XG4gIDY5Olx0fVxuICA3MDpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2w0cHJvdG9fbG9nX2ludmFsaWQpO1xuICA3MTpcdFxuICA3MjpcdF9fcHJpbnRmKDQsIDUpXG4gIDczOlx0dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gIDc0Olx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbiAgNzU6XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxuICA3NjpcdFx0XHRcdCAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLilcbiAgNzc6XHR7XG4gIDc4Olx0XHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcbiAgNzk6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbiAgODA6XHRcdHZhX2xpc3QgYXJncztcbiAgODE6XHRcbiAgODI6XHRcdG5ldCA9IG5mX2N0X25ldChjdCk7XG4gIDgzOlx0XHRpZiAobGlrZWx5KG5ldC1cdTAwM2VjdC5zeXNjdGxfbG9nX2ludmFsaWQgPT0gMCkpXG4gIDg0Olx0XHRcdHJldHVybjtcbiAgODU6XHRcbiAgODY6XHRcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4gIDg3Olx0XHR2YWYuZm10ID0gZm10O1xuICA4ODpcdFx0dmFmLnZhID0gXHUwMDI2YXJncztcbiAgODk6XHRcbiAgOTA6XHRcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSxcbiAgOTE6XHRcdFx0XHQgICAgICAgbmZfY3RfcHJvdG9udW0oY3QpLCBcJiMzNDslcFZcJiMzNDssIFx1MDAyNnZhZik7XG4gIDkyOlx0XHR2YV9lbmQoYXJncyk7XG4gIDkzOlx0fVxuICA5NDpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xuICA5NTpcdCNlbmRpZlxuICA5NjpcdFxuICA5NzpcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbmZfY3RfbDRwcm90b19maW5kKHU4IGw0cHJvdG8pXG4gIDk4Olx0e1xuICA5OTpcdFx0c3dpdGNoIChsNHByb3RvKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDEyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBOZXRmaWx0ZXIgTG9nZ2luZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGNvZGUgdXNpbmcgYG5mX2w0cHJvdG9fbG9nX2ludmFsaWRgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGBuZl9sb2dfcGFja2V0YCBhcyB0aGUgbGlrZWx5IGN1bHByaXQgd2l0aGluIHRoYXQgY2FsbCBwYXRoLiBOYXR1cmFsbHksIGBuZl9sb2dfcGFja2V0YCBwb2ludHMgbWUgdG93YXJkcyB0aGUgTmV0ZmlsdGVyIGxvZ2dpbmcgc3Vic3lzdGVtLiBNeSBpbnR1aXRpb24gc2F5cyB0aGF0IGZ1bmN0aW9uJiMzOTtzIHByb2JhYmx5IHBhcnQgb2YgYENPTkZJR19ORVRGSUxURVJfTE9HYC4KClRpbWUgdG8gZGlnIGludG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gY29uZmlybSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBsb2dnaW5nIG9wdGlvbnMgYXZhaWxhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIEtjb25maWcgb3B0aW9uIGNvbnRyb2xzIHRoaXMgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTE9HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBuZl9sb2dfcGFja2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBuZl9sb2dfcGFja2V0YC4gTXkgZmlyc3QgbW92ZSwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIG5ldGZpbHRlci4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoaXMgZmlsZSBkZWZpbmVzIGFsbCB0aGUgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhhdCBwYXJ0aWN1bGFyIHN1YnN5c3RlbSwgaW5jbHVkaW5nIHRoZSB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzIGFuZCBmZWF0dXJlcy4gRmluZGluZyBgbmZfbG9nX3BhY2tldGAgdGhlcmUgaXMgY3J1Y2lhbC4gSXQmIzM5O2xsIHRlbGwgbWUgaWYgaXQmIzM5O3MgYSBkaXJlY3Qgb3B0aW9uLCBhIGRlcGVuZGVuY3kgb2Ygc29tZXRoaW5nIGVsc2UsIG9yIHBhcnQgb2YgYSBtb3JlIGNvbXBsZXggY29uZmlndXJhdGlvbiBzZXQuIEkmIzM5O20gaG9waW5nIEkgY2FuIGZpbmQgdGhlIGRlcGVuZGVuY3kgZGVmaW5pdGlvbnMgdG8gdHJhY2UgdGhpcyBmcm9tIG90aGVyIG1vZHVsZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzcGVjaWZpYyBsb2dnaW5nIG1lY2hhbmlzbSBpcyBjb250cm9sbGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfbG9nX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTIyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbG9nZ2luZyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIE15IGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlLCBzbyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBzZXR0aW5ncyBmb3IgYW55dGhpbmcgbG9nLXJlbGF0ZWQgaW4gdGhhdCBzdWJzeXN0ZW0uIEl0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGxvZ2dpbmcgaXMgY29uZmlndXJlZCBhbmQgZW5hYmxlZCB3aXRoaW4gTmV0ZmlsdGVyLCBmcm9tIGEga2VybmVsIGJ1aWxkIHBlcnNwZWN0aXZlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyByZWxhdGVkIHRvICYjMzQ7bG9nJiMzNDsgb3IgJiMzNDtsb2dnaW5nJiMzNDsgaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qTE9HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz01ND1jb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xubmV0L25ldGZpbHRlci9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9ODI9Y29uZmlnIE5GX0NPTk5UUkFDS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo5ODpjb25maWcgTkZfTE9HX1NZU0xPR1xubmV0L25ldGZpbHRlci9LY29uZmlnLTk5LVx0dHJpc3RhdGUgXCYjMzQ7U3lzbG9nIHBhY2tldCBsb2dnaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTUxMT1jb25maWcgTkZUX0NPTk5MSU1JVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTIwOmNvbmZpZyBORlRfTE9HXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTIxLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBsb2cgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTkzMD1jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9MRURcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTUzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjk1NDpjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9MT0dcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05NTUtXHR0cmlzdGF0ZSBcJiMzNDtMT0cgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9OTgyPWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX05FVE1BUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05OTEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6OTkyOmNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTkzLVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtORkxPR1wmIzM0OyB0YXJnZXQgc3VwcG9ydCYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTQ0CgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDYyOTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0xPRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGVhZGxvY2sgaW4gdGhlIG5ldGZpbHRlciBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBieSBtb3ZpbmcgbG9nZ2luZyAod2hpY2ggY2FuIHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvIHRha2UgY3QtXHUwMDNlbG9jayBhZ2Fpbikgb3V0c2lkZSBvZiB0aGUgY3QtXHUwMDNlbG9jayBjcml0aWNhbCBzZWN0aW9uLiBEZWFkbG9ja3MgYXJlIGZ1bmN0aW9uYWwgYnVncywgYW5kIGZ1enppbmcgY2FuIGhlbHAgZW5zdXJlIHRoZSBkZWFkbG9jayBpcyByZXNvbHZlZCBhbmQgbm8gc2ltaWxhciBpc3N1ZXMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19MT0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRlYWRsb2NrIGluIHRoZSBuZXRmaWx0ZXIgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMgYnkgbW92aW5nIGxvZ2dpbmcgKHdoaWNoIGNhbiByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0byB0YWtlIGN0LVx1MDAzZWxvY2sgYWdhaW4pIG91dHNpZGUgb2YgdGhlIGN0LVx1MDAzZWxvY2sgY3JpdGljYWwgc2VjdGlvbi4gRGVhZGxvY2tzIGFyZSBmdW5jdGlvbmFsIGJ1Z3MsIGFuZCBmdXp6aW5nIGNhbiBoZWxwIGVuc3VyZSB0aGUgZGVhZGxvY2sgaXMgcmVzb2x2ZWQgYW5kIG5vIHNpbWlsYXIgaXNzdWVzIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6MTMuMjA4NTEyNTIyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk3NTc2OTY5Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfTE9HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRlYWRsb2NrIGluIHRoZSBuZXRmaWx0ZXIgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMgYnkgbW92aW5nIGxvZ2dpbmcgKHdoaWNoIGNhbiByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0byB0YWtlIGN0LVxcdTAwM2Vsb2NrIGFnYWluKSBvdXRzaWRlIG9mIHRoZSBjdC1cXHUwMDNlbG9jayBjcml0aWNhbCBzZWN0aW9uLiBEZWFkbG9ja3MgYXJlIGZ1bmN0aW9uYWwgYnVncywgYW5kIGZ1enppbmcgY2FuIGhlbHAgZW5zdXJlIHRoZSBkZWFkbG9jayBpcyByZXNvbHZlZCBhbmQgbm8gc2ltaWxhciBpc3N1ZXMgZXhpc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjEzOjEzLjIwODUxOTA0MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNzYzOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2FiMzlhNjlkZmI5NjZmNmY2NzM4OWU1OWUwYmI4ZDMwNDZmMGE3MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDA0OjEzOjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG5pbmRleCBjZWVlZDNkN2ZlNTIwLi5lNTg3NWI3NTI4ZmUwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG5AQCAtNDgwLDM3ICs0ODAsODcgQEAgc3RhdGljIHZvaWQgdGNwX2luaXRfc2VuZGVyKHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcXG4gXFx0fVxcbiB9XFxuIFxcbi1fX3ByaW50Zig2LCA3KVxcbi1zdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmV0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpmbXQsIC4uLilcXG4rZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7XFxuK1xcdE5GX1RDUF9MT0dfTk9ORSxcXG4rXFx0TkZfVENQX0xPR19PVkVSU0hPVCxcXG4rXFx0TkZfVENQX0xPR19TRVFfT1ZFUixcXG4rXFx0TkZfVENQX0xPR19BQ0tfT1ZFUixcXG4rXFx0TkZfVENQX0xPR19TRVFfVU5ERVIsXFxuK1xcdE5GX1RDUF9MT0dfQUNLX1VOREVSLFxcbit9O1xcbitcXG4rc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7XFxuK1xcdGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZTtcXG4rXFx0dTMyIHZhbHVlO1xcbit9O1xcbitcXG4rc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvblxcbituZl90Y3Bfc3RvcmVfaW52YWxpZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuK1xcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxcbitcXHRcXHQgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZyxcXG4rXFx0XFx0ICAgICBlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmV0LFxcbitcXHRcXHQgICAgIGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZSxcXG4rXFx0XFx0ICAgICB1MzIgdmFsdWUpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTtcXG4tXFx0c3RydWN0IHZhX2Zvcm1hdCB2YWY7XFxuLVxcdHZhX2xpc3QgYXJncztcXG4gXFx0Ym9vbCBiZV9saWJlcmFsO1xcbiBcXG4gXFx0YmVfbGliZXJhbCA9IHNlbmRlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9DVF9UQ1BfRkxBR19CRV9MSUJFUkFMIHx8IHRuLVxcdTAwM2V0Y3BfYmVfbGliZXJhbDtcXG4gXFx0aWYgKGJlX2xpYmVyYWwpXFxuIFxcdFxcdHJldHVybiBORkNUX1RDUF9BQ0NFUFQ7XFxuIFxcbi1cXHR2YV9zdGFydChhcmdzLCBmbXQpO1xcbi1cXHR2YWYuZm10ID0gZm10O1xcbi1cXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG4tXFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcIiVwVlxcXCIsIFxcdTAwMjZ2YWYpO1xcbi1cXHR2YV9lbmQoYXJncyk7XFxuLVxcbitcXHRsb2ctXFx1MDAzZXR5cGUgPSB0eXBlO1xcbitcXHRsb2ctXFx1MDAzZXZhbHVlID0gdmFsdWU7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nKVxcbit7XFxuK1xcdC8qIG5mbmV0bGlua19sb2cgbWF5IHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvXFxuK1xcdCAqIHRha2UgY3QtXFx1MDAzZWxvY2sgYWdhaW4gdmlhIHRjcF90b19ubGF0dHIoKSwgc28gaW52YWxpZCBUQ1AgbG9ncyBtdXN0XFxuK1xcdCAqIG9ubHkgYmUgZW1pdHRlZCBhZnRlciBkcm9wcGluZyBjdC1cXHUwMDNlbG9jay5cXG4rXFx0ICovXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRzd2l0Y2ggKGxvZy1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIiV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIkFDSyBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChBQ0tlZCBkYXRhIG5vdCBzZWVuIHlldClcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcXG4rXFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXFwiU0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcXG4rXFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfTk9ORTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvblxcbiB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4gXFx0ICAgICAgdW5zaWduZWQgaW50IGluZGV4LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCxcXG4tXFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXFxuK1xcdCAgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcXG4ge1xcbiBcXHRzdHJ1Y3QgaXBfY3RfdGNwICpzdGF0ZSA9IFxcdTAwMjZjdC1cXHUwMDNlcHJvdG8udGNwO1xcbiBcXHRzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSBcXHUwMDI2c3RhdGUtXFx1MDAzZXNlZW5bZGlyXTtcXG5AQCAtNjQwLDMxICs2OTAsMjkgQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuIFxcdFxcdFxcdHNlbmRlci1cXHUwMDNldGRfZW5kID0gZW5kO1xcbiBcXHRcXHRcXHRzZW5kZXItXFx1MDAzZWZsYWdzIHw9IElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQ7XFxuIFxcbi1cXHRcXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCIldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcXFwiLCBvdmVyc2hvdCk7XFxuK1xcdFxcdFxcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSxcXG4rXFx0XFx0XFx0XFx0ICAgTkZfVENQX0xPR19PVkVSU0hPVCwgb3ZlcnNob3QpO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBcXFwiU0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBzZW5kZXItXFx1MDAzZXRkX21heGVuZCArIDEpO1xcbitcXHRcXHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JTlZBTElELFxcbitcXHRcXHRcXHRcXHQgICBORl9UQ1BfTE9HX1NFUV9PVkVSLCBzZW5kZXItXFx1MDAzZXRkX21heGVuZCArIDEpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIWJlZm9yZShzYWNrLCByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSkpXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSk7XFxuK1xcdFxcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE5GX1RDUF9MT0dfQUNLX09WRVIsIHJlY2VpdmVyLVxcdTAwM2V0ZF9lbmQgKyAxKTtcXG4gXFxuIFxcdC8qIElzIHRoZSBlbmRpbmcgc2VxdWVuY2UgaW4gdGhlIHJlY2VpdmUgd2luZG93IChpZiBhdmFpbGFibGUpPyAqL1xcbiBcXHRpbl9yZWN2X3dpbiA9ICFyZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIHx8XFxuIFxcdFxcdCAgICAgIGFmdGVyKGVuZCwgc2VuZGVyLVxcdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIC0gMSk7XFxuIFxcdGlmICghaW5fcmVjdl93aW4pXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBzZW5kZXItXFx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVxcdTAwM2V0ZF9tYXh3aW4gLSAxKTtcXG4rXFx0XFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLFxcbitcXHRcXHRcXHRcXHRcXHQgICBORl9UQ1BfTE9HX1NFUV9VTkRFUixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc2VuZGVyLVxcdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIC0gMSk7XFxuIFxcdGlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItXFx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSkpXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgXFxcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHJlY2VpdmVyLVxcdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xcbitcXHRcXHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE5GX1RDUF9MT0dfQUNLX1VOREVSLFxcbitcXHRcXHRcXHRcXHRcXHQgICByZWNlaXZlci1cXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTtcXG4gXFxuIFxcdC8qIFRha2UgaW50byBhY2NvdW50IHdpbmRvdyBzY2FsaW5nIChSRkMgMTMyMykuICovXFxuIFxcdGlmICghdGNwaC1cXHUwMDNlc3luKVxcbkBAIC03MTksMTEgKzc2Nyw4IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbiBcXHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4tXFx0XFx0XFx0XFx0XFx0IGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdCBpbnQgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXFxuK3N0YXRpYyBib29sIF9fY29sZFxcbituZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCBpbnQgaW5kZXgpXFxuIHtcXG4gXFx0Y29uc3QgdW5zaWduZWQgaW50ICp0aW1lb3V0cztcXG4gXFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuO1xcbkBAIC03MzIsNyArNzc3LDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcbiBcXHRpZiAoIXRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXFx1MDAyNmN0LVxcdTAwM2VzdGF0dXMpIHx8XFxuIFxcdCAgICB0ZXN0X2JpdChJUFNfRklYRURfVElNRU9VVF9CSVQsIFxcdTAwMjZjdC1cXHUwMDNlc3RhdHVzKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHQvKiBXZSBkb24ndCB3YW50IHRvIGhhdmUgY29ubmVjdGlvbnMgaGFuZ2luZyBhcm91bmQgaW4gRVNUQUJMSVNIRURcXG4gXFx0ICogc3RhdGUgZm9yIGxvbmcgdGltZSAnanVzdCBiZWNhdXNlJyBjb25udHJhY2sgZGVlbWVkIGEgRklOL1JTVFxcbkBAIC03NDcsNyArNzkyLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdGNhc2UgVENQX0ZJTl9TRVQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGN0LVxcdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgIT0gZGlyIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTc1NSw3ICs4MDAsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0ICAgICBjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXggPT0gVENQX1JTVF9TRVQpKSB7XFxuIFxcdFxcdGV4cGlyZXMgPSBuZl9jdF9leHBpcmVzKGN0KTtcXG4gXFx0XFx0aWYgKGV4cGlyZXMgXFx1MDAzYyAxMjAgKiBIWilcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRcXHR0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XFxuIFxcdFxcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xcbkBAIC03NjQsMTYgKzgwOSwxNSBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFxuIFxcdFxcdHRpbWVvdXQgPSBSRUFEX09OQ0UodGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pO1xcbiBcXHRcXHRpZiAoZXhwaXJlcyBcXHUwMDNlIHRpbWVvdXQpIHtcXG4tXFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBpbmRleCwgZGlyLCBjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xcbi1cXG4gXFx0XFx0XFx0V1JJVEVfT05DRShjdC1cXHUwMDNldGltZW91dCwgdGltZW91dCArIG5mY3RfdGltZV9zdGFtcCk7XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGN0LVxcdTAwM2Vwcm90by50Y3AubGFzdF9pbmRleCA9IGluZGV4O1xcbiBcXHRcXHRjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfZGlyID0gZGlyO1xcbiBcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIC8qIHRhYmxlIG9mIHZhbGlkIGZsYWcgY29tYmluYXRpb25zIC0gUFVTSCwgRUNFIGFuZCBDV1IgYXJlIGFsd2F5cyB2YWxpZCAqL1xcbkBAIC05NzEsNiArMTAxNSw4IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdGVudW0gdGNwX2Nvbm50cmFjayBuZXdfc3RhdGUsIG9sZF9zdGF0ZTtcXG4gXFx0dW5zaWduZWQgaW50IGluZGV4LCAqdGltZW91dHM7XFxuIFxcdGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXM7XFxuK1xcdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgbG9nID0ge307XFxuK1xcdGJvb2wgbG93ZXJlZF90aW1lb3V0ID0gZmFsc2U7XFxuIFxcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7XFxuIFxcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xcbiBcXHRzdHJ1Y3QgdGNwaGRyIF90Y3BoO1xcbkBAIC0xMjUyLDE0ICsxMjk4LDE4IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdH1cXG4gXFxuIFxcdHJlcyA9IHRjcF9pbl93aW5kb3coY3QsIGRpciwgaW5kZXgsXFxuLVxcdFxcdFxcdCAgICBza2IsIGRhdGFvZmYsIHRoLCBzdGF0ZSk7XFxuK1xcdFxcdFxcdCAgICBza2IsIGRhdGFvZmYsIHRoLCBcXHUwMDI2bG9nKTtcXG4gXFx0c3dpdGNoIChyZXMpIHtcXG4gXFx0Y2FzZSBORkNUX1RDUF9JR05PUkU6XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFx1MDAyNmxvZyk7XFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcdGNhc2UgTkZDVF9UQ1BfSU5WQUxJRDpcXG4tXFx0XFx0bmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4LCBza2IsIHN0YXRlKTtcXG4rXFx0XFx0bG93ZXJlZF90aW1lb3V0ID0gbmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4KTtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0bmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcXHUwMDI2bG9nKTtcXG4rXFx0XFx0aWYgKGxvd2VyZWRfdGltZW91dClcXG4rXFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcImxvd2VyZWQgdGltZW91dCB0byBVTkFDS1xcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG4gXFx0Y2FzZSBORkNUX1RDUF9BQ0NFUFQ6XFxuIFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDoxMzoxMy43MDAzOTMwOTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozOTcwODUwODAyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19MT0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGVhZGxvY2sgaW4gdGhlIG5ldGZpbHRlciBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBieSBtb3ZpbmcgbG9nZ2luZyAod2hpY2ggY2FuIHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvIHRha2UgY3QtXFx1MDAzZWxvY2sgYWdhaW4pIG91dHNpZGUgb2YgdGhlIGN0LVxcdTAwM2Vsb2NrIGNyaXRpY2FsIHNlY3Rpb24uIERlYWRsb2NrcyBhcmUgZnVuY3Rpb25hbCBidWdzLCBhbmQgZnV6emluZyBjYW4gaGVscCBlbnN1cmUgdGhlIGRlYWRsb2NrIGlzIHJlc29sdmVkIGFuZCBubyBzaW1pbGFyIGlzc3VlcyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2FiMzlhNjlkZmI5NjZmNmY2NzM4OWU1OWUwYmI4ZDMwNDZmMGE3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDQ6MTM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5pbmRleCBjZWVlZDNkN2ZlNTIwLi5lNTg3NWI3NTI4ZmUwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5AQCAtNDgwLDM3ICs0ODAsODcgQEAgc3RhdGljIHZvaWQgdGNwX2luaXRfc2VuZGVyKHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbiBcdH1cbiB9XG4gXG4tX19wcmludGYoNiwgNylcbi1zdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4tXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxuLVx0XHRcdFx0XHRcdGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsXG4tXHRcdFx0XHRcdFx0Y29uc3QgY2hhciAqZm10LCAuLi4pXG4rZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7XG4rXHRORl9UQ1BfTE9HX05PTkUsXG4rXHRORl9UQ1BfTE9HX09WRVJTSE9ULFxuK1x0TkZfVENQX0xPR19TRVFfT1ZFUixcbitcdE5GX1RDUF9MT0dfQUNLX09WRVIsXG4rXHRORl9UQ1BfTE9HX1NFUV9VTkRFUixcbitcdE5GX1RDUF9MT0dfQUNLX1VOREVSLFxuK307XG4rXG4rc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7XG4rXHRlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGU7XG4rXHR1MzIgdmFsdWU7XG4rfTtcbitcbitzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uXG4rbmZfdGNwX3N0b3JlX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuK1x0XHQgICAgIGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbitcdFx0ICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2csXG4rXHRcdCAgICAgZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcbitcdFx0ICAgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXG4rXHRcdCAgICAgdTMyIHZhbHVlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XG4tXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcbi1cdHZhX2xpc3QgYXJncztcbiBcdGJvb2wgYmVfbGliZXJhbDtcbiBcbiBcdGJlX2xpYmVyYWwgPSBzZW5kZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElQX0NUX1RDUF9GTEFHX0JFX0xJQkVSQUwgfHwgdG4tXHUwMDNldGNwX2JlX2xpYmVyYWw7XG4gXHRpZiAoYmVfbGliZXJhbClcbiBcdFx0cmV0dXJuIE5GQ1RfVENQX0FDQ0VQVDtcbiBcbi1cdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4tXHR2YWYuZm10ID0gZm10O1xuLVx0dmFmLnZhID0gXHUwMDI2YXJncztcbi1cdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFwiJXBWXCIsIFx1MDAyNnZhZik7XG4tXHR2YV9lbmQoYXJncyk7XG4tXG4rXHRsb2ctXHUwMDNldHlwZSA9IHR5cGU7XG4rXHRsb2ctXHUwMDNldmFsdWUgPSB2YWx1ZTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nKVxuK3tcbitcdC8qIG5mbmV0bGlua19sb2cgbWF5IHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvXG4rXHQgKiB0YWtlIGN0LVx1MDAzZWxvY2sgYWdhaW4gdmlhIHRjcF90b19ubGF0dHIoKSwgc28gaW52YWxpZCBUQ1AgbG9ncyBtdXN0XG4rXHQgKiBvbmx5IGJlIGVtaXR0ZWQgYWZ0ZXIgZHJvcHBpbmcgY3QtXHUwMDNlbG9jay5cbitcdCAqL1xuK1x0bG9ja2RlcF9hc3NlcnRfbm90X2hlbGQoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXG4rXHRzd2l0Y2ggKGxvZy1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XG4rXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4rXHRcdFx0XHRcdCAgXCIldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcIixcbitcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTkZfVENQX0xPR19TRVFfT1ZFUjpcbitcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbitcdFx0XHRcdFx0ICBcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOlxuK1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuK1x0XHRcdFx0XHQgIFwiQUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcbitcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbitcdFx0XHRcdFx0ICBcIlNFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCIsXG4rXHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5GX1RDUF9MT0dfQUNLX1VOREVSOlxuK1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuK1x0XHRcdFx0XHQgIFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX05PTkU6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uXG4gdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4gXHQgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCxcbi1cdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKVxuK1x0ICAgICAgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nKVxuIHtcbiBcdHN0cnVjdCBpcF9jdF90Y3AgKnN0YXRlID0gXHUwMDI2Y3QtXHUwMDNlcHJvdG8udGNwO1xuIFx0c3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyID0gXHUwMDI2c3RhdGUtXHUwMDNlc2VlbltkaXJdO1xuQEAgLTY0MCwzMSArNjkwLDI5IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIFx0XHRcdHNlbmRlci1cdTAwM2V0ZF9lbmQgPSBlbmQ7XG4gXHRcdFx0c2VuZGVyLVx1MDAzZWZsYWdzIHw9IElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQ7XG4gXG4tXHRcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0XHQgIFwiJXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkXCIsIG92ZXJzaG90KTtcbitcdFx0XHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXG4rXHRcdFx0XHQgICBORl9UQ1BfTE9HX09WRVJTSE9ULCBvdmVyc2hvdCk7XG4gXHRcdH1cbiBcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lOVkFMSUQsXG4tXHRcdFx0XHRcdCAgXCJTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcIixcbi1cdFx0XHRcdFx0ICBzZW5kZXItXHUwMDNldGRfbWF4ZW5kICsgMSk7XG4rXHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsXG4rXHRcdFx0XHQgICBORl9UQ1BfTE9HX1NFUV9PVkVSLCBzZW5kZXItXHUwMDNldGRfbWF4ZW5kICsgMSk7XG4gXHR9XG4gXG4gXHRpZiAoIWJlZm9yZShzYWNrLCByZWNlaXZlci1cdTAwM2V0ZF9lbmQgKyAxKSlcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lOVkFMSUQsXG4tXHRcdFx0XHRcdCAgXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCIsXG4tXHRcdFx0XHRcdCAgcmVjZWl2ZXItXHUwMDNldGRfZW5kICsgMSk7XG4rXHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsXG4rXHRcdFx0XHRcdCAgIE5GX1RDUF9MT0dfQUNLX09WRVIsIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCArIDEpO1xuIFxuIFx0LyogSXMgdGhlIGVuZGluZyBzZXF1ZW5jZSBpbiB0aGUgcmVjZWl2ZSB3aW5kb3cgKGlmIGF2YWlsYWJsZSk/ICovXG4gXHRpbl9yZWN2X3dpbiA9ICFyZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gfHxcbiBcdFx0ICAgICAgYWZ0ZXIoZW5kLCBzZW5kZXItXHUwMDNldGRfZW5kIC0gcmVjZWl2ZXItXHUwMDNldGRfbWF4d2luIC0gMSk7XG4gXHRpZiAoIWluX3JlY3Zfd2luKVxuLVx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxuLVx0XHRcdFx0XHQgIFwiU0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcIixcbi1cdFx0XHRcdFx0ICBzZW5kZXItXHUwMDNldGRfZW5kIC0gcmVjZWl2ZXItXHUwMDNldGRfbWF4d2luIC0gMSk7XG4rXHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSxcbitcdFx0XHRcdFx0ICAgTkZfVENQX0xPR19TRVFfVU5ERVIsXG4rXHRcdFx0XHRcdCAgIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKSlcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0ICBcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcIixcbi1cdFx0XHRcdFx0ICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xuK1x0XHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXG4rXHRcdFx0XHRcdCAgIE5GX1RDUF9MT0dfQUNLX1VOREVSLFxuK1x0XHRcdFx0XHQgICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xuIFxuIFx0LyogVGFrZSBpbnRvIGFjY291bnQgd2luZG93IHNjYWxpbmcgKFJGQyAxMzIzKS4gKi9cbiBcdGlmICghdGNwaC1cdTAwM2VzeW4pXG5AQCAtNzE5LDExICs3NjcsOCBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiBcdHJldHVybiBORkNUX1RDUF9BQ0NFUFQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0XHQgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi1cdFx0XHRcdFx0IGludCBpbmRleCxcbi1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqaG9va19zdGF0ZSlcbitzdGF0aWMgYm9vbCBfX2NvbGRcbituZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCBpbnQgaW5kZXgpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgaW50ICp0aW1lb3V0cztcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0bjtcbkBAIC03MzIsNyArNzc3LDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXG4gXHRpZiAoIXRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXHUwMDI2Y3QtXHUwMDNlc3RhdHVzKSB8fFxuIFx0ICAgIHRlc3RfYml0KElQU19GSVhFRF9USU1FT1VUX0JJVCwgXHUwMDI2Y3QtXHUwMDNlc3RhdHVzKSlcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBXZSBkb24ndCB3YW50IHRvIGhhdmUgY29ubmVjdGlvbnMgaGFuZ2luZyBhcm91bmQgaW4gRVNUQUJMSVNIRURcbiBcdCAqIHN0YXRlIGZvciBsb25nIHRpbWUgJ2p1c3QgYmVjYXVzZScgY29ubnRyYWNrIGRlZW1lZCBhIEZJTi9SU1RcbkBAIC03NDcsNyArNzkyLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRjYXNlIFRDUF9GSU5fU0VUOlxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0aWYgKGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2RpciAhPSBkaXIgXHUwMDI2XHUwMDI2XG5AQCAtNzU1LDcgKzgwMCw3IEBAIHN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0ICAgICBjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9pbmRleCA9PSBUQ1BfUlNUX1NFVCkpIHtcbiBcdFx0ZXhwaXJlcyA9IG5mX2N0X2V4cGlyZXMoY3QpO1xuIFx0XHRpZiAoZXhwaXJlcyBcdTAwM2MgMTIwICogSFopXG4tXHRcdFx0cmV0dXJuO1xuK1x0XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdFx0dG4gPSBuZl90Y3BfcGVybmV0KG5mX2N0X25ldChjdCkpO1xuIFx0XHR0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcbkBAIC03NjQsMTYgKzgwOSwxNSBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcbiBcdFx0dGltZW91dCA9IFJFQURfT05DRSh0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXSk7XG4gXHRcdGlmIChleHBpcmVzIFx1MDAzZSB0aW1lb3V0KSB7XG4tXHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLFxuLVx0XHRcdFx0XHQgIFwicGFja2V0IChpbmRleCAlZCwgZGlyICVkKSByZXNwb25zZSBmb3IgaW5kZXggJWQgbG93ZXIgdGltZW91dCB0byAldVwiLFxuLVx0XHRcdFx0XHQgIGluZGV4LCBkaXIsIGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4LCB0aW1lb3V0KTtcbi1cbiBcdFx0XHRXUklURV9PTkNFKGN0LVx1MDAzZXRpbWVvdXQsIHRpbWVvdXQgKyBuZmN0X3RpbWVfc3RhbXApO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHRjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9pbmRleCA9IGluZGV4O1xuIFx0XHRjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgPSBkaXI7XG4gXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIC8qIHRhYmxlIG9mIHZhbGlkIGZsYWcgY29tYmluYXRpb25zIC0gUFVTSCwgRUNFIGFuZCBDV1IgYXJlIGFsd2F5cyB2YWxpZCAqL1xuQEAgLTk3MSw2ICsxMDE1LDggQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdGVudW0gdGNwX2Nvbm50cmFjayBuZXdfc3RhdGUsIG9sZF9zdGF0ZTtcbiBcdHVuc2lnbmVkIGludCBpbmRleCwgKnRpbWVvdXRzO1xuIFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJlcztcbitcdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgbG9nID0ge307XG4rXHRib29sIGxvd2VyZWRfdGltZW91dCA9IGZhbHNlO1xuIFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcbiBcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xuIFx0c3RydWN0IHRjcGhkciBfdGNwaDtcbkBAIC0xMjUyLDE0ICsxMjk4LDE4IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHR9XG4gXG4gXHRyZXMgPSB0Y3BfaW5fd2luZG93KGN0LCBkaXIsIGluZGV4LFxuLVx0XHRcdCAgICBza2IsIGRhdGFvZmYsIHRoLCBzdGF0ZSk7XG4rXHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIFx1MDAyNmxvZyk7XG4gXHRzd2l0Y2ggKHJlcykge1xuIFx0Y2FzZSBORkNUX1RDUF9JR05PUkU6XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuK1x0XHRuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFx1MDAyNmxvZyk7XG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRjYXNlIE5GQ1RfVENQX0lOVkFMSUQ6XG4tXHRcdG5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCwgc2tiLCBzdGF0ZSk7XG4rXHRcdGxvd2VyZWRfdGltZW91dCA9IG5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCk7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuK1x0XHRuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFx1MDAyNmxvZyk7XG4rXHRcdGlmIChsb3dlcmVkX3RpbWVvdXQpXG4rXHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCJsb3dlcmVkIHRpbWVvdXQgdG8gVU5BQ0tcIik7XG4gXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuIFx0Y2FzZSBORkNUX1RDUF9BQ0NFUFQ6XG4gXHRcdGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6MTMuNzAwMzk2MDUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc2MjQ4NjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25udHJhY2sgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgLCBhbmQgaXQncyBhbGwgYWJvdXQgaG93IGludmFsaWQgVENQIHBhY2tldHMgYXJlIGxvZ2dlZCB3aXRoaW4gY29ubnRyYWNrLiBUaGUgb2xkIGNvZGUgaGFkIGEgcG90ZW50aWFsIGRlYWRsb2NrLCB3aGVyZSBob2xkaW5nIGBjdC1cdTAwM2Vsb2NrYCB3aGlsZSBjYWxsaW5nIGBuZl90Y3BfbG9nX2ludmFsaWRgIGNvdWxkIGV2ZW50dWFsbHkgbGVhZCB0byByZS1lbnRlcmluZyB0aGUgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIHByb2Nlc3MgdmlhIGBuZm5ldGxpbmtfbG9nYCBhbmQgdHJ5aW5nIHRvIHJlYWNxdWlyZSBgY3QtXHUwMDNlbG9ja2AuXG5cblRoaXMgcGF0Y2ggY2xldmVybHkgZml4ZXMgaXQgYnkgc3RvcmluZyB0aGUgaW52YWxpZCBsb2cgaW5mb3JtYXRpb24gZmlyc3QgaW4gYSBzdHJ1Y3QgYG5mX3RjcF9pbnZhbGlkX2xvZ2AgYW5kIHRoZW4gY2FsbGluZyBgbmZfdGNwX2xvZ19pbnZhbGlkYCAqYWZ0ZXIqIGRyb3BwaW5nIHRoZSBsb2NrLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZT8gSXQncyBkZWZpbml0ZWx5IGNoYW5naW5nIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCB0aGUgbG9nZ2luZy4gVGhlIHByb21wdCBtZW50aW9ucyBzb21ldGhpbmcgYWJvdXQgbm90IGZ1enppbmcgaWYgaXQncyBcInB1cmVseSBkZWNvcmF0aXZlXCIgbGlrZSBsb2dnaW5nLiBCdXQgaG9sZCBvbiwgbG9nZ2luZyBpc24ndCBhbHdheXMganVzdCBkZWNvcmF0aXZlLCBpcyBpdD8gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIHVzZXMgYG5mbmV0bGlua19sb2dgLCB3aGljaCBzZW5kcyBhIG5ldGxpbmsgbWVzc2FnZSB0byB1c2Vyc3BhY2UhIFRoYXQncyBub3QganVzdCBwcmV0dHktcHJpbnRpbmc7IGl0J3MgYSByZWFsIGludGVyYWN0aW9uLlxuXG5UaGUgcGF0Y2ggKmFsc28qIGFkZHMgYGxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKFx1MDAyNmN0LVx1MDAzZWxvY2spYCBhbmQgZHJvcHMgdGhlIGxvY2sgKmJlZm9yZSogbG9nZ2luZy4gVGhpcyBmaXhlcyBhIGRlYWRsb2NrIHdoaWNoIGlzIGFic29sdXRlbHkgYSBmdW5jdGlvbmFsIGJ1Zy4gSWYgc3l6a2FsbGVyIGNvdWxkIHRyaWdnZXIgdGhpcyBkZWFkbG9jayBiZWZvcmUsIHdlICphYnNvbHV0ZWx5KiBuZWVkIHRvIHRlc3QgdGhpcyBmaXggYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgbW9yZSBkZWFkbG9ja3MgbHVya2luZy5cblxuVGhlIHF1ZXN0aW9uIGlzLCBpcyBtb3ZpbmcgdGhlIGxvZ2dpbmcgb3V0c2lkZSB0aGUgbG9jayBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCdzIGNoYW5naW5nIHRoZSBvcmRlciBvZiBsb2NrIGFjcXVpc2l0aW9uL3JlbGVhc2UgYW5kIHdoYXQncyBleGVjdXRlZCB3aXRoaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24uIFNvLCB5ZXMsIGl04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgaXQgZml4ZXMgdGhlIGRlYWRsb2NrLlxuXG5UaGVyZSBpcyBhIGNoYW5nZSB3aGVyZSBgbmZfdGNwX2hhbmRsZV9pbnZhbGlkYCBub3cgcmV0dXJucyBgbG93ZXJlZF90aW1lb3V0YCwgYW5kIGl0IGxvZ3MgXCJsb3dlcmVkIHRpbWVvdXQgdG8gVU5BQ0tcIiBvdXRzaWRlIHRoZSBsb2NrLiBUaGF0J3MgYSBsb2dnaW5nIGNoYW5nZSwgYnV0IGl04oCZcyBzdGlsbCBwYXJ0IG9mIHRoZSBmdW5jdGlvbmFsIGZpeC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgdXNlcyBgbmZuZXRsaW5rX2xvZ2AuIElmIHRoYXQncyB0aGUgY2FzZSwgd2UncmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0J3Mgd29ydGggdGVzdGluZy4gSSdsbCBzZWFyY2ggZm9yIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjAyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6MjIuNDYyODg0NTAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTY4NzU2MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3RfbDRwcm90b19sb2dfaW52YWxpZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD0xNDk9X19wcmludGYoNCwgNSkgX19jb2xkXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg6MTUwOnZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oLTE1MS1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg9MTY1PXN0YXRpYyBpbmxpbmUgX19wcmludGYoNCwgNSkgX19jb2xkXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg6MTY2OnZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oLTE2Ny1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mj1fX3ByaW50Zig0LCA1KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NzM6dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy03NC1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05My19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo5NDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTk1LSNlbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTE0OD1zdGF0aWMgaW50IGRvX2Jhc2ljX2NoZWNrcyhzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc0LVxcdFxcdCAgICAgY291bnQgIT0gMCkgfHwgIXNjaC1cXHUwMDNlbGVuZ3RoKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjE3NTpcXHRcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0xNzYtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiJXMgZmFpbGVkLiBjaHVuayBudW0gJWQsIHR5cGUgJWQsIGxlbiAlZCBmbGFnICVkXFxcXG5cXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTMyNz1pbnQgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zNzMtXFx0ICAgIHNoLVxcdTAwM2V2dGFnICE9IGN0LVxcdTAwM2Vwcm90by5zY3RwLnZ0YWdbZGlyXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzozNzQ6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzc1LVxcdFxcdFxcdFxcdFxcdCAgXFxcInZlcmlmaWNhdGlvbiB0YWcgY2hlY2sgZmFpbGVkICV4IHZzICV4IGZvciBkaXIgJWRcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTQ1My1cXHRcXHRpZiAobmV3X3N0YXRlID09IFNDVFBfQ09OTlRSQUNLX01BWCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzo0NTQ6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNDU1LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIkludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTUxNz1zdGF0aWMgdm9pZCBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUyOS1cXHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTMwOlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTMxLVxcdFxcdFxcdFxcdFxcdCAgXFxcIiV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzQtXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUzNTpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzNi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTM5LVxcdGNhc2UgTkZfVENQX0xPR19BQ0tfT1ZFUjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NDA6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDEtXFx0XFx0XFx0XFx0XFx0ICBcXFwiQUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDQtXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NDU6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDYtXFx0XFx0XFx0XFx0XFx0ICBcXFwiU0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTQ5LVxcdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTUwOlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTUxLVxcdFxcdFxcdFxcdFxcdCAgXFxcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTAwNz1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE2MC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjExNjE6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTYyLVxcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpZ25vcmVkLCBzdGF0ZSAlc1xcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTgzLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTE4NDpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExODUtXFx0XFx0XFx0XFx0XFx0ICBcXFwicGFja2V0IChpbmRleCAlZCkgaW4gZGlyICVkIGludmFsaWQsIHN0YXRlICVzXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMDEtXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMjAyOlxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcXCJjaGFsbGVuZ2UtYWNrIGlnbm9yZWRcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjAzLVxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7IC8qIERvbid0IGNoYW5nZSBzdGF0ZSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI0Ni1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyNDc6XFx0XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcImludmFsaWQgcnN0XFxcIik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI0OC1cXHRcXHRcXHRcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEzMTEtXFx0XFx0aWYgKGxvd2VyZWRfdGltZW91dClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMzEyOlxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcXCJsb3dlcmVkIHRpbWVvdXQgdG8gVU5BQ0tcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMzEzLVxcdFxcdHJldHVybiAtTkZfQUNDRVBUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDoxMzoyNC45NTk3NjY3NTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDIzNjM2ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvbm50cmFjayBEZWFkbG9jayBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrLiBTcGVjaWZpY2FsbHksIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCB3YXMgYmVpbmcgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYGN0LVx1MDAzZWxvY2tgLCBhbmQgaXQgY2FsbHMgYG5mbmV0bGlua19sb2dgLCB3aGljaCBjb3VsZCByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0byBncmFiIGBjdC1cdTAwM2Vsb2NrYCBhZ2FpbiwgbGVhZGluZyB0byBhIGRlYWRsb2NrLiBUaGF0J3MgYSBjbGVhciBmdW5jdGlvbmFsIGJ1ZywgYSBkZWFkbG9jaywgc28gaXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5UaGUgcHJvbXB0IGlzIGFza2luZyBpZiB0aGlzIGlzIFwiV29ydGhGdXp6aW5nXCIuIE5vdywgc2luY2UgdGhpcyBpcyBhIGRlYWRsb2NrIHJlbGF0ZWQgdG8gbG9nZ2luZywgaXQgKnNlZW1zKiBsaWtlIGl0IG1pZ2h0IGJlIGRlY29yYXRpdmUgY2hhbmdlcywgYnV0IGRlYWRsb2NrcyBhcmUgKmRlZmluaXRlbHkqIGZ1bmN0aW9uYWwgYnVncy4gSWYgYSBzcGVjaWZpYyBwYWNrZXQgc2VxdWVuY2UgY2FuIHRyaWdnZXIgaXQsIGl0J3MgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgZml4IHdvcmtzIGFuZCB0aGF0IG90aGVyIHNpbWlsYXIgZGVhZGxvY2tzIGFyZW4ndCBwcmVzZW50LlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhbmFseXplIHRoZSBjb250ZXh0IHRvIGNvbmZpcm0uIExldCdzIGxvb2sgZm9yIG90aGVyIHBsYWNlcyB3aGVyZSBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgaXMgY2FsbGVkIHdpdGggdGhlIGxvY2sgaGVsZC4gQWgsIGhlcmUncyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBgY3QtXHUwMDNlbG9ja2AgaXMgaGVsZCwgdGhlbiBgdGNwX2luX3dpbmRvd2AgaXMgY2FsbGVkLiBCZWZvcmUgdGhlIHBhdGNoLCBgdGNwX2luX3dpbmRvd2AgY2FsbGVkIGBuZl90Y3BfbG9nX2ludmFsaWRgLCB3aGljaCBjYWxsZWQgb3VyIHByb2JsZW1hdGljIGZ1bmN0aW9uLiBBZnRlciB0aGUgcGF0Y2gsIHRoYXQgbG9nZ2luZyBpcyBkZWZlcnJlZCwgYW5kIHRoZSBsb2NrIGlzIHJlbGVhc2VkIGZpcnN0LlxuXG5BbmQgbG9va2luZyBmdXJ0aGVyLCB0aGVyZSdzIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIHdoZXJlIHRoZSBzYW1lIHRoaW5nIHdhcyBoYXBwZW5pbmcuIE5vdywgaXQgcmV0dXJucyBhIGJvb2xlYW4sIGFuZCB0aGUgbG9nZ2luZyBpcyBkb25lICphZnRlciogdGhlIGxvY2sgaXMgcmVsZWFzZWQuIFNvLCB0aGUgcGF0Y2ggc2VlbXMgdG8gaGF2ZSByZXNvbHZlZCB0aGUgZGlyZWN0IHByb2JsZW0gKmFuZCogYWxsIHRoZSBvYnZpb3VzIGNhbGwgcGF0aHMuXG5cblNvLCB0aGlzIHBhdGNoIGZpeGVzIGEgZGVhZGxvY2sgaW4gY3JpdGljYWwgbmV0ZmlsdGVyIFRDUCBjb25udHJhY2sgbG9naWMuIFllcywgaXQncyB3b3J0aCBmdXp6aW5nISBOb3csIHRoZSBxdWVzdGlvbiBpcywgd2hhdCBzaG91bGQgYmUgdGhlIGZ1enppbmcgZm9jdXM/IFRoZSBpbW1lZGlhdGUgZnVuY3Rpb24gdG8gZm9jdXMgb24gd291bGQgYmUgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4gV2FpdOKApiB0aGUgcHJvbXB0IHNhaWQgdG8gYXZvaWQgbGlzdGluZyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBJcyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGEgaG90LXBhdGggZnVuY3Rpb24/IFllcywgaXQgaXMuIEl0J3MgY2FsbGVkIGZvciAqZXZlcnkqIFRDUCBwYWNrZXQgd2hlbiBjb25udHJhY2sgaXMgZW5hYmxlZCEgV2hhdCBhYm91dCB0aGUgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnM/IFRoZXkgYXJlIGFsbCBzdGF0aWMuXG5cbldoYXQgYW0gSSBzdXBwb3NlZCB0byBkbyBub3c/IERvIEkgZm9jdXMgb24gaXQgYW55d2F5PyBObywgdGhhdCB3b3VsZCBnaXZlIHRoZSB0ZXN0aW5nIGEgc2tld2VkIGRpc3RyaWJ1dGlvbi4gU28sIHNob3VsZCBJIGxpc3Qgbm8gZnVuY3Rpb25zLCBvciBzaG91bGQgSSBsaXN0IGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAgYmVjYXVzZSBpdCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGlzIGxvZ2ljPyBIbW0sIGxldCdzIGp1c3QgY29uZmlybSBpdCdzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MTAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6MzMuOTgzNDA3Mzc5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDk1ODY2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg9MTA1PWludCBuZl9jb25udHJhY2tfdWRwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaC0xMDktXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg6MTEwOmludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgtMTExLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE5Njk9c3RhdGljIGludCBuZl9jb25udHJhY2tfaGFuZGxlX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3Ni1cXHRjYXNlIElQUFJPVE9fVENQOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoxOTc3OlxcdFxcdHJldHVybiBuZl9jb25udHJhY2tfdGNwX3BhY2tldChjdCwgc2tiLCBkYXRhb2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTc4LVxcdFxcdFxcdFxcdFxcdCAgICAgICBjdGluZm8sIHN0YXRlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk5Nj1zdGF0aWMgdm9pZCBuZl9jdF90Y3Bfc3RhdGVfcmVzZXQoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMDA2LS8qIFJldHVybnMgdmVyZGljdCBmb3IgcGFja2V0LCBvciAtMSBmb3IgaW52YWxpZC4gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMDA3OmludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTAwOC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6MzYuMzkzMDAwNTc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNTI1NDQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGNvbm50cmFjayBUQ1AgUGFja2V0IEhhbmRsaW5nKipcblxuT2theSwgc28gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgVENQIHBhY2tldHMgd2l0aGluIGNvbm50cmFjay4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIGl0IGEgKmhvdCBwYXRoKj8gQWJzb2x1dGVseSwgc2luY2UgZXZlcnkgVENQIHBhY2tldCBoaXRzIHRoaXMgZnVuY3Rpb24uIE9rYXksIG5vdyB0aGF0IEkgcmVhbGl6ZSB0aGF0LCBJIG5lZWQgdG8gcmV0aGluayBteSBzdHJhdGVneS4gSWYgaXQncyBhIGhvdCBwYXRoLCBJIHNob3VsZCBiZSBhdm9pZGluZyBsaXN0aW5nIGl0IGFzIGEgbWFpbiBmb2N1cy4gQnV0IGhvbGQgb24sIHRoZSBwYXRjaCAqb25seSogdG91Y2hlcyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGFuZCB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgaXQgdXNlcy5cblxuSWYgSSBkb24ndCBnaXZlIHRoZSBmdXp6ZXIgYW55IHNwZWNpZmljIGZ1bmN0aW9uIG5hbWVzIHRvIGZvY3VzIG9uLCBpdCdsbCBkZWZhdWx0IHRvIGl0cyBvd24gZGlzdHJpYnV0aW9uLCBhbmQgSSdtIG5vdCBzdXJlIHRoYXQgaXMgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIHRoaXMgc2l0dWF0aW9uLiBEYW1uLCBhcmUgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIEkgY2FuIHVzZT8gTm9wZSwgaXQgbG9va3MgbGlrZSBpdCdzIGFsbCBpbnRlcm5hbC4gQWxyaWdodCwgYmFjayB0byB0aGUgYmFzaWNzOiBhcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IExldCdzIHNlZS4uLiBgQ09ORklHX05GX0NPTk5UUkFDS2AgaXMgYSBtdXN0LWhhdmUsIG9idmlvdXNseS4gVGltZSB0byBjaGVjayBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBjb25maXJtIGFuZCBnYXRoZXIgYW55IGZ1cnRoZXIgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzQwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjEzOjQwLjUyODI1ODQ0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIzNjczODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz0yNj1lbmRpZiAjIE5GX1RBQkxFU19CUklER0VcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI3LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6Mjg6Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0VcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJJUHY0L0lQVjYgYnJpZGdlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6NDIuNzUxOTM3ODQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM3MzkwMDg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjb25maWcgaXMgYE5GX0NPTk5UUkFDS2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciBub24tZnVuY3Rpb25hbCBjb25zdGFudC9tYWNybyBtb2RpZmljYXRpb25zLiBJJ20gdHJ5aW5nIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHF1YWxpZmllcyBmb3IgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpZiBpdCdzIGZpeGluZyBhIGRlYWRsb2NrIGluIGxvZ2dpbmcsIGlzIHRoYXQgZnVuY3Rpb25hbD8gWWVzLCBkZWFkbG9ja3MgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBidWdzLiBIb3dldmVyLCBpZiB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGxvZ2dpbmcsIGV2ZW4gaWYgaXQgZml4ZXMgYSBkZWFkbG9jaywgaXMgaXQgc3RpbGwgY29uc2lkZXJlZCBcImRlY29yYXRpdmVcIj8gVGhlIHNwZWNpZmljIGNoYW5nZXMgaGVyZSBpbnZvbHZlIHRoZSB0aW1pbmcgb2YgbG9jayBkcm9wcGluZyByZWxhdGl2ZSB0byBsb2cgZW1pc3Npb24uIEl0J3MgYWxzbyBtb2RpZnlpbmcgYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAgdG8gcmV0dXJuIGEgYm9vbGVhbiwgYGxvd2VyZWRfdGltZW91dGAsIGFuZCBsb2dnaW5nIG91dHNpZGUgdGhlIGxvY2suIFRoZSBjb3JlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIG1vdmluZyB0aGUgbG9nZ2luZyB0byBhdm9pZCBhIHNwaW5sb2NrIGRlYWRsb2NrLiBUaGF0ICppcyogZnVuY3Rpb25hbCBiZWNhdXNlIGl0J3MgY2hhbmdpbmcgdGhlIGxvY2sgYWNxdWlzaXRpb24sIHJlbGVhc2Ugb3JkZXIsIGFuZCB3aGF0J3MgZXhlY3V0ZWQgaW5zaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuXG5CdXQsIGlmIHRoZSBvbmx5IGNvZGUgY2hhbmdlZCBpcyBsb2dnaW5nLCBhbmQgbG9nZ2luZyBpcywgYnkgZGVmaW5pdGlvbiwgZGVjb3JhdGl2ZSwgd2hhdCB0aGVuPyBBaCwgYnV0IHRoZSBsb2dnaW5nIGluIHF1ZXN0aW9uLCBgbmZuZXRsaW5rX2xvZ2AsIGlzIGEgZnVuY3Rpb25hbCBwYXJ0IG9mIG5ldGZpbHRlci4gSXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgTkZMT0cgdGFyZ2V0IG9yIGZvciBjb25udHJhY2sgbG9nZ2luZywgc28gaXQgc2VuZHMgcGFja2V0cyB0byB1c2Vyc3BhY2UuIEkgbmVlZCB0byBiZSBzdXJlLiBMZXQncyBsb29rIGF0IGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYC5cblxuSSdsbCBzZWFyY2ggZm9yIHRoZSB1c2FnZSBvZiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAuXG5cbk9rLCBpdCdzIGEgZnVuY3Rpb24gdGhhdCBsb2dzIGludmFsaWQgcGFja2V0cy4gSWYgdGhlIHBhdGNoIG9ubHkgZml4ZXMgYSBkZWFkbG9jaywgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBJJ20gbGVhbmluZyB0b3dhcmRzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkxldCBtZSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgY29uZmlncyBpbnZvbHZlZC4gSXQgbG9va3MgbGlrZSBgQ09ORklHX05GX0NPTk5UUkFDS2AgaXMgdGhlIHByaW1hcnkgY29uZmlnLiBXYWl0LCBkb2VzIGBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HYCBhcHBseT8gTGV0J3MgY2hlY2sgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmNgIGFuZCBzZWUgd2hlcmUgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTcyLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjEzOjUwLjEyNTg0MjM2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1MjE3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3RfbDRwcm90b19sb2dfaW52YWxpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NzI9X19wcmludGYoNCwgNSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjczOnZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNzQtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtOTMtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6OTQ6RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05NS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6NTAuMTg4MzcyMTMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzY3MTc2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gbmZfY29ubnRyYWNrX3Byb3RvLmMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gTXkgbWVudGFsIG1vZGVsIHN1Z2dlc3RzIHRoZSBjb3JlIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHByb3RvY29sIGhhbmRsaW5nIHJlc2lkZXMgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jYCwgYW5kIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBzcGVjaWZpYyBwcm90b2NvbHMgYXJlIG1hbmFnZWQuIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNzMuIFRoYXQgYXJlYSBpcyBsaWtlbHkgd2hlcmUgdGhlIGZvdW5kYXRpb25hbCBwcm90b2NvbCBkaXNwYXRjaGluZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBsaXZlcywgZ2l2ZW4gdGhlIGNvbW1vbiBsYXlvdXQgb2YgdGhlc2UgY29ubnRyYWNrIG1vZHVsZXMuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHNldHVwIGZvciBwcm90b2NvbC1zcGVjaWZpYyBoYW5kbGVycyBhbmQgbWF5YmUgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgdmFyaW91cyBwcm90b2NvbCBtb2R1bGVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgY29ubnRyYWNrIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCB0aGUgcHJvdG9jb2wncyBzdGF0ZSB0YWJsZXMgYW5kIGhvdyBuZXcgY29ubmVjdGlvbnMgYXJlIGlkZW50aWZpZWQsIGNsYXNzaWZpZWQsIGFuZCB0cmFja2VkIGF0IHRoZSBuZXR3b3JrIGxheWVyLiBJJ20gcmVhZHkgdG8gcGFyc2UgdGhlIGNvZGUgZm9yIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBiZSBwcmVzZW50LiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzA3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6NTMuNTY1MDkzODg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzAwLCJFcnJvciI6ImFyZ3VtZW50IFwiRmlyc3RMaW5lXCIgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50IiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiBcIjYwXCIsXG4gIFwiTGluZUNvdW50XCI6IFwiNDBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJhcmd1bWVudCBcXFwiRmlyc3RMaW5lXFxcIiBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnRcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6NTMuNTY1MTM1NTM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTY3Mzc2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIHlvdXIgb3duIGV4cGVydCBpbnRlcm5hbCBkaWFsb2d1ZTpcblxuKipJbnRlZ2VyIENvbnN0cmFpbnQgZm9yIEZpcnN0TGluZSoqXG5cbk9rYXksIGxldCdzIHByb2Nlc3MgdGhpcy4gVGhlIGNvcmUgb2YgdGhpcyBzeXN0ZW0sIG9yIGF0IGxlYXN0IGEgY3J1Y2lhbCBwYXJ0IG9mIGl0LCBzZWVtcyB0byByZWx5IG9uIHRoZSB2YXJpYWJsZSBgRmlyc3RMaW5lYC4gSW1tZWRpYXRlbHksIGFsYXJtIGJlbGxzIGFyZSByaW5naW5nIGluIG15IGhlYWQuIEp1ZGdpbmcgYnkgdGhlIGNvbnRleHQgYW5kIGxpa2VseSBkb3duc3RyZWFtIG9wZXJhdGlvbnMsIEknbSB2aXJ0dWFsbHkgY2VydGFpbiBgRmlyc3RMaW5lYCBuZWVkcyB0byBiZSBkZWZpbmVkIGFzIGFuIGludGVnZXIuIEFueSBvdGhlciBkYXRhIHR5cGUgaW50cm9kdWNlcyBhIGhvc3Qgb2YgcG90ZW50aWFsIHByb2JsZW1zLiBGbG9hdGluZy1wb2ludCBudW1iZXJzIHdvdWxkIGJlIGEgZGlzYXN0ZXIgZm9yIGFueSBraW5kIG9mIGluZGV4aW5nLCBvZmZzZXRzIG9yIGxpbmUgbnVtYmVyaW5nLiBTdHJpbmdzLCBvciB3b3JzZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHdvdWxkIGNyYXNoIG9yIGNvcnJ1cHQgdGhlIGZ1bmN0aW9uYWxpdHkuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNvbnN0cmFpbnQgaXMgZW5mb3JjZWQuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgRmlyc3RMaW5lYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6NTcuMTgxODc2MTgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdFxcdHJldHVybjtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0dmFfc3RhcnQoYXJncywgZm10KTtcXG4gIDYzOlxcdFxcdHZhZi5mbXQgPSBmbXQ7XFxuICA2NDpcXHRcXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0bmZfbG9nX3BhY2tldChuZXQsIHN0YXRlLVxcdTAwM2VwZiwgMCwgc2tiLCBzdGF0ZS1cXHUwMDNlaW4sIHN0YXRlLVxcdTAwM2VvdXQsXFxuICA2NzpcXHRcXHRcXHQgICAgICBOVUxMLCBcXFwibmZfY3RfcHJvdG9fJWQ6ICVwViBcXFwiLCBwcm90b251bSwgXFx1MDAyNnZhZik7XFxuICA2ODpcXHRcXHR2YV9lbmQoYXJncyk7XFxuICA2OTpcXHR9XFxuICA3MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0X19wcmludGYoNCwgNSlcXG4gIDczOlxcdHZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgNzQ6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4gIDc1OlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuICA3NjpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuICA3NzpcXHR7XFxuICA3ODpcXHRcXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcXG4gIDc5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gIDgwOlxcdFxcdHZhX2xpc3QgYXJncztcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0bmV0ID0gbmZfY3RfbmV0KGN0KTtcXG4gIDgzOlxcdFxcdGlmIChsaWtlbHkobmV0LVxcdTAwM2VjdC5zeXNjdGxfbG9nX2ludmFsaWQgPT0gMCkpXFxuICA4NDpcXHRcXHRcXHRyZXR1cm47XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuICA4NzpcXHRcXHR2YWYuZm10ID0gZm10O1xcbiAgODg6XFx0XFx0dmFmLnZhID0gXFx1MDAyNmFyZ3M7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSxcXG4gIDkxOlxcdFxcdFxcdFxcdCAgICAgICBuZl9jdF9wcm90b251bShjdCksIFxcXCIlcFZcXFwiLCBcXHUwMDI2dmFmKTtcXG4gIDkyOlxcdFxcdHZhX2VuZChhcmdzKTtcXG4gIDkzOlxcdH1cXG4gIDk0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xcbiAgOTU6XFx0I2VuZGlmXFxuICA5NjpcXHRcXG4gIDk3OlxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbmZfY3RfbDRwcm90b19maW5kKHU4IGw0cHJvdG8pXFxuICA5ODpcXHR7XFxuICA5OTpcXHRcXHRzd2l0Y2ggKGw0cHJvdG8pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6NTcuMTgxOTk3MzQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjkwNTgyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIExvZ2dpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoaXMgY29kZSB1c2luZyBgbmZfbDRwcm90b19sb2dfaW52YWxpZGAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYG5mX2xvZ19wYWNrZXRgIGFzIHRoZSBsaWtlbHkgY3VscHJpdCB3aXRoaW4gdGhhdCBjYWxsIHBhdGguIE5hdHVyYWxseSwgYG5mX2xvZ19wYWNrZXRgIHBvaW50cyBtZSB0b3dhcmRzIHRoZSBOZXRmaWx0ZXIgbG9nZ2luZyBzdWJzeXN0ZW0uIE15IGludHVpdGlvbiBzYXlzIHRoYXQgZnVuY3Rpb24ncyBwcm9iYWJseSBwYXJ0IG9mIGBDT05GSUdfTkVURklMVEVSX0xPR2AuXG5cblRpbWUgdG8gZGlnIGludG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gY29uZmlybSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBsb2dnaW5nIG9wdGlvbnMgYXZhaWxhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIEtjb25maWcgb3B0aW9uIGNvbnRyb2xzIHRoaXMgYmVoYXZpb3IuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjE0OjAwLjIxMTA2MDQ2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MjYxMDAxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9MT0dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjE0OjAyLjU1MzY4MTQ1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM0MTY5OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBuZl9sb2dfcGFja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYG5mX2xvZ19wYWNrZXRgLiBNeSBmaXJzdCBtb3ZlLCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIEtjb25maWcgZmlsZSBmb3IgbmV0ZmlsdGVyLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGlzIGZpbGUgZGVmaW5lcyBhbGwgdGhlIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQgcGFydGljdWxhciBzdWJzeXN0ZW0sIGluY2x1ZGluZyB0aGUgdmFyaW91cyBuZXRmaWx0ZXIgbW9kdWxlcyBhbmQgZmVhdHVyZXMuIEZpbmRpbmcgYG5mX2xvZ19wYWNrZXRgIHRoZXJlIGlzIGNydWNpYWwuIEl0J2xsIHRlbGwgbWUgaWYgaXQncyBhIGRpcmVjdCBvcHRpb24sIGEgZGVwZW5kZW5jeSBvZiBzb21ldGhpbmcgZWxzZSwgb3IgcGFydCBvZiBhIG1vcmUgY29tcGxleCBjb25maWd1cmF0aW9uIHNldC4gSSdtIGhvcGluZyBJIGNhbiBmaW5kIHRoZSBkZXBlbmRlbmN5IGRlZmluaXRpb25zIHRvIHRyYWNlIHRoaXMgZnJvbSBvdGhlciBtb2R1bGVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgc3BlY2lmaWMgbG9nZ2luZyBtZWNoYW5pc20gaXMgY29udHJvbGxlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY1NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjE0OjA1Ljg4Nzg1NTM4NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxODE0OTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2xvZ19wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDoxNDowNS45NjIwNDYyMTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5NDUwMTA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBsb2dnaW5nIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gTXkgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGUsIHNvIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHNldHRpbmdzIGZvciBhbnl0aGluZyBsb2ctcmVsYXRlZCBpbiB0aGF0IHN1YnN5c3RlbS4gSXQncyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBsb2dnaW5nIGlzIGNvbmZpZ3VyZWQgYW5kIGVuYWJsZWQgd2l0aGluIE5ldGZpbHRlciwgZnJvbSBhIGtlcm5lbCBidWlsZCBwZXJzcGVjdGl2ZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIFwibG9nXCIgb3IgXCJsb2dnaW5nXCIgaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTIyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTQ6MDguNzU2NTQ5NTE2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI4MTE4MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipMT0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01ND1jb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9ODI9Y29uZmlnIE5GX0NPTk5UUkFDS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTk3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo5ODpjb25maWcgTkZfTE9HX1NZU0xPR1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05OS1cXHR0cmlzdGF0ZSBcXFwiU3lzbG9nIHBhY2tldCBsb2dnaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTUxMT1jb25maWcgTkZUX0NPTk5MSU1JVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTIwOmNvbmZpZyBORlRfTE9HXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUyMS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBsb2cgbW9kdWxlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTkzMD1jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9MRURcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05NTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjk1NDpjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9MT0dcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTU1LVxcdHRyaXN0YXRlIFxcXCJMT0cgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9OTgyPWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX05FVE1BUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTk5MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6OTkyOmNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTk5My1cXHR0cmlzdGF0ZSAnXFxcIk5GTE9HXFxcIiB0YXJnZXQgc3VwcG9ydCdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTQ6MDguODU5MzY3NTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxODUxMzQyODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTU1NDQsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI5MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTk6NTAuNzEwNzEzNDI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ3NTY1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfTE9HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRlYWRsb2NrIGluIHRoZSBuZXRmaWx0ZXIgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMgYnkgbW92aW5nIGxvZ2dpbmcgKHdoaWNoIGNhbiByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0byB0YWtlIGN0LVxcdTAwM2Vsb2NrIGFnYWluKSBvdXRzaWRlIG9mIHRoZSBjdC1cXHUwMDNlbG9jayBjcml0aWNhbCBzZWN0aW9uLiBEZWFkbG9ja3MgYXJlIGZ1bmN0aW9uYWwgYnVncywgYW5kIGZ1enppbmcgY2FuIGhlbHAgZW5zdXJlIHRoZSBkZWFkbG9jayBpcyByZXNvbHZlZCBhbmQgbm8gc2ltaWxhciBpc3N1ZXMgZXhpc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19MT0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGVhZGxvY2sgaW4gdGhlIG5ldGZpbHRlciBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBieSBtb3ZpbmcgbG9nZ2luZyAod2hpY2ggY2FuIHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvIHRha2UgY3QtXFx1MDAzZWxvY2sgYWdhaW4pIG91dHNpZGUgb2YgdGhlIGN0LVxcdTAwM2Vsb2NrIGNyaXRpY2FsIHNlY3Rpb24uIERlYWRsb2NrcyBhcmUgZnVuY3Rpb25hbCBidWdzLCBhbmQgZnV6emluZyBjYW4gaGVscCBlbnN1cmUgdGhlIGRlYWRsb2NrIGlzIHJlc29sdmVkIGFuZCBubyBzaW1pbGFyIGlzc3VlcyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhq5v2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 03:48:37 +0000 UTC FinishedAt: 2026-08-01 04:19:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NETFILTER_NETLINK_LOG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK", "NETFILTER_NETLINK_LOG" ], "series_id": "1939b179-da01-4de5-8aaf-5b81c8a9f4dd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_conntrack_tcp_packet" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19MT0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRlYWRsb2NrIGluIHRoZSBuZXRmaWx0ZXIgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMgYnkgbW92aW5nIGxvZ2dpbmcgKHdoaWNoIGNhbiByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0byB0YWtlIGN0LVx1MDAzZWxvY2sgYWdhaW4pIG91dHNpZGUgb2YgdGhlIGN0LVx1MDAzZWxvY2sgY3JpdGljYWwgc2VjdGlvbi4gRGVhZGxvY2tzIGFyZSBmdW5jdGlvbmFsIGJ1Z3MsIGFuZCBmdXp6aW5nIGNhbiBoZWxwIGVuc3VyZSB0aGUgZGVhZGxvY2sgaXMgcmVzb2x2ZWQgYW5kIG5vIHNpbWlsYXIgaXNzdWVzIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2FiMzlhNjlkZmI5NjZmNmY2NzM4OWU1OWUwYmI4ZDMwNDZmMGE3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDQ6MTM6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuaW5kZXggY2VlZWQzZDdmZTUyMC4uZTU4NzViNzUyOGZlMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY1xuQEAgLTQ4MCwzNyAmIzQzOzQ4MCw4NyBAQCBzdGF0aWMgdm9pZCB0Y3BfaW5pdF9zZW5kZXIoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxuIFx0fVxuIH1cbiBcbi1fX3ByaW50Zig2LCA3KVxuLXN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb24gbmZfdGNwX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbi1cdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXG4tXHRcdFx0XHRcdFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcbi1cdFx0XHRcdFx0XHRjb25zdCBjaGFyICpmbXQsIC4uLilcbiYjNDM7ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7XG4mIzQzO1x0TkZfVENQX0xPR19OT05FLFxuJiM0MztcdE5GX1RDUF9MT0dfT1ZFUlNIT1QsXG4mIzQzO1x0TkZfVENQX0xPR19TRVFfT1ZFUixcbiYjNDM7XHRORl9UQ1BfTE9HX0FDS19PVkVSLFxuJiM0MztcdE5GX1RDUF9MT0dfU0VRX1VOREVSLFxuJiM0MztcdE5GX1RDUF9MT0dfQUNLX1VOREVSLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7XG4mIzQzO1x0ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlO1xuJiM0MztcdHUzMiB2YWx1ZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb25cbiYjNDM7bmZfdGNwX3N0b3JlX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuJiM0MztcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsXG4mIzQzO1x0XHQgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZyxcbiYjNDM7XHRcdCAgICAgZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcbiYjNDM7XHRcdCAgICAgZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB0eXBlLFxuJiM0MztcdFx0ICAgICB1MzIgdmFsdWUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTtcbi1cdHN0cnVjdCB2YV9mb3JtYXQgdmFmO1xuLVx0dmFfbGlzdCBhcmdzO1xuIFx0Ym9vbCBiZV9saWJlcmFsO1xuIFxuIFx0YmVfbGliZXJhbCA9IHNlbmRlci1cdTAwM2VmbGFncyBcdTAwMjYgSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTCB8fCB0bi1cdTAwM2V0Y3BfYmVfbGliZXJhbDtcbiBcdGlmIChiZV9saWJlcmFsKVxuIFx0XHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xuIFxuLVx0dmFfc3RhcnQoYXJncywgZm10KTtcbi1cdHZhZi5mbXQgPSBmbXQ7XG4tXHR2YWYudmEgPSBcdTAwMjZhcmdzO1xuLVx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7JXBWXCYjMzQ7LCBcdTAwMjZ2YWYpO1xuLVx0dmFfZW5kKGFyZ3MpO1xuLVxuJiM0MztcdGxvZy1cdTAwM2V0eXBlID0gdHlwZTtcbiYjNDM7XHRsb2ctXHUwMDNldmFsdWUgPSB2YWx1ZTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcbiYjNDM7e1xuJiM0MztcdC8qIG5mbmV0bGlua19sb2cgbWF5IHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvXG4mIzQzO1x0ICogdGFrZSBjdC1cdTAwM2Vsb2NrIGFnYWluIHZpYSB0Y3BfdG9fbmxhdHRyKCksIHNvIGludmFsaWQgVENQIGxvZ3MgbXVzdFxuJiM0MztcdCAqIG9ubHkgYmUgZW1pdHRlZCBhZnRlciBkcm9wcGluZyBjdC1cdTAwM2Vsb2NrLlxuJiM0MztcdCAqL1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGxvZy1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX09WRVJTSE9UOlxuJiM0MztcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbiYjNDM7XHRcdFx0XHRcdCAgXCYjMzQ7JXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxuJiM0MztcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbiYjNDM7XHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOlxuJiM0MztcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbiYjNDM7XHRcdFx0XHRcdCAgXCYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTkZfVENQX0xPR19TRVFfVU5ERVI6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XG4mIzQzO1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuJiM0MztcdFx0XHRcdFx0ICBcJiMzNDtpZ25vcmVkIEFDSyB1bmRlciBsb3dlciBib3VuZCAldSAocG9zc2libGUgb3Zlcmx5IGRlbGF5ZWQpXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBORl9UQ1BfTE9HX05PTkU6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvblxuIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIFx0ICAgICAgdW5zaWduZWQgaW50IGluZGV4LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRjcGgsXG4tXHQgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqaG9va19zdGF0ZSlcbiYjNDM7XHQgICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2cpXG4ge1xuIFx0c3RydWN0IGlwX2N0X3RjcCAqc3RhdGUgPSBcdTAwMjZjdC1cdTAwM2Vwcm90by50Y3A7XG4gXHRzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSBcdTAwMjZzdGF0ZS1cdTAwM2VzZWVuW2Rpcl07XG5AQCAtNjQwLDMxICYjNDM7NjkwLDI5IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIFx0XHRcdHNlbmRlci1cdTAwM2V0ZF9lbmQgPSBlbmQ7XG4gXHRcdFx0c2VuZGVyLVx1MDAzZWZsYWdzIHw9IElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQ7XG4gXG4tXHRcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0XHQgIFwmIzM0OyV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFwmIzM0Oywgb3ZlcnNob3QpO1xuJiM0MztcdFx0XHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXG4mIzQzO1x0XHRcdFx0ICAgTkZfVENQX0xPR19PVkVSU0hPVCwgb3ZlcnNob3QpO1xuIFx0XHR9XG4gXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxuLVx0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICBzZW5kZXItXHUwMDNldGRfbWF4ZW5kICYjNDM7IDEpO1xuJiM0MztcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSU5WQUxJRCxcbiYjNDM7XHRcdFx0XHQgICBORl9UQ1BfTE9HX1NFUV9PVkVSLCBzZW5kZXItXHUwMDNldGRfbWF4ZW5kICYjNDM7IDEpO1xuIFx0fVxuIFxuIFx0aWYgKCFiZWZvcmUoc2FjaywgcmVjZWl2ZXItXHUwMDNldGRfZW5kICYjNDM7IDEpKVxuLVx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCxcbi1cdFx0XHRcdFx0ICBcJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCYjMzQ7LFxuLVx0XHRcdFx0XHQgIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAmIzQzOyAxKTtcbiYjNDM7XHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsXG4mIzQzO1x0XHRcdFx0XHQgICBORl9UQ1BfTE9HX0FDS19PVkVSLCByZWNlaXZlci1cdTAwM2V0ZF9lbmQgJiM0MzsgMSk7XG4gXG4gXHQvKiBJcyB0aGUgZW5kaW5nIHNlcXVlbmNlIGluIHRoZSByZWNlaXZlIHdpbmRvdyAoaWYgYXZhaWxhYmxlKT8gKi9cbiBcdGluX3JlY3Zfd2luID0gIXJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiB8fFxuIFx0XHQgICAgICBhZnRlcihlbmQsIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghaW5fcmVjdl93aW4pXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXG4tXHRcdFx0XHRcdCAgXCYjMzQ7U0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcJiMzNDssXG4tXHRcdFx0XHRcdCAgc2VuZGVyLVx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVx1MDAzZXRkX21heHdpbiAtIDEpO1xuJiM0MztcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLFxuJiM0MztcdFx0XHRcdFx0ICAgTkZfVENQX0xPR19TRVFfVU5ERVIsXG4mIzQzO1x0XHRcdFx0XHQgICBzZW5kZXItXHUwMDNldGRfZW5kIC0gcmVjZWl2ZXItXHUwMDNldGRfbWF4d2luIC0gMSk7XG4gXHRpZiAoIWFmdGVyKHNhY2ssIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSkpXG4tXHRcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXG4tXHRcdFx0XHRcdCAgXCYjMzQ7aWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xuJiM0MztcdFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLFxuJiM0MztcdFx0XHRcdFx0ICAgTkZfVENQX0xPR19BQ0tfVU5ERVIsXG4mIzQzO1x0XHRcdFx0XHQgICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xuIFxuIFx0LyogVGFrZSBpbnRvIGFjY291bnQgd2luZG93IHNjYWxpbmcgKFJGQyAxMzIzKS4gKi9cbiBcdGlmICghdGNwaC1cdTAwM2VzeW4pXG5AQCAtNzE5LDExICYjNDM7NzY3LDggQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4gXHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHRcdFx0IGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tXHRcdFx0XHRcdCBpbnQgaW5kZXgsXG4tXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXG4mIzQzO3N0YXRpYyBib29sIF9fY29sZFxuJiM0MztuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCBpbnQgaW5kZXgpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgaW50ICp0aW1lb3V0cztcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0bjtcbkBAIC03MzIsNyAmIzQzOzc3Nyw3IEBAIHN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFxuIFx0aWYgKCF0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cykgfHxcbiBcdCAgICB0ZXN0X2JpdChJUFNfRklYRURfVElNRU9VVF9CSVQsIFx1MDAyNmN0LVx1MDAzZXN0YXR1cykpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qIFdlIGRvbiYjMzk7dCB3YW50IHRvIGhhdmUgY29ubmVjdGlvbnMgaGFuZ2luZyBhcm91bmQgaW4gRVNUQUJMSVNIRURcbiBcdCAqIHN0YXRlIGZvciBsb25nIHRpbWUgJiMzOTtqdXN0IGJlY2F1c2UmIzM5OyBjb25udHJhY2sgZGVlbWVkIGEgRklOL1JTVFxuQEAgLTc0Nyw3ICYjNDM7NzkyLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRjYXNlIFRDUF9GSU5fU0VUOlxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbiBcbiBcdGlmIChjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgIT0gZGlyIFx1MDAyNlx1MDAyNlxuQEAgLTc1NSw3ICYjNDM7ODAwLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHQgICAgIGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4ID09IFRDUF9SU1RfU0VUKSkge1xuIFx0XHRleHBpcmVzID0gbmZfY3RfZXhwaXJlcyhjdCk7XG4gXHRcdGlmIChleHBpcmVzIFx1MDAzYyAxMjAgKiBIWilcbi1cdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdFx0dG4gPSBuZl90Y3BfcGVybmV0KG5mX2N0X25ldChjdCkpO1xuIFx0XHR0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcbkBAIC03NjQsMTYgJiM0Mzs4MDksMTUgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXG4gXHRcdHRpbWVvdXQgPSBSRUFEX09OQ0UodGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pO1xuIFx0XHRpZiAoZXhwaXJlcyBcdTAwM2UgdGltZW91dCkge1xuLVx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSxcbi1cdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XCYjMzQ7LFxuLVx0XHRcdFx0XHQgIGluZGV4LCBkaXIsIGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4LCB0aW1lb3V0KTtcbi1cbiBcdFx0XHRXUklURV9PTkNFKGN0LVx1MDAzZXRpbWVvdXQsIHRpbWVvdXQgJiM0MzsgbmZjdF90aW1lX3N0YW1wKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4ID0gaW5kZXg7XG4gXHRcdGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2RpciA9IGRpcjtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiAvKiB0YWJsZSBvZiB2YWxpZCBmbGFnIGNvbWJpbmF0aW9ucyAtIFBVU0gsIEVDRSBhbmQgQ1dSIGFyZSBhbHdheXMgdmFsaWQgKi9cbkBAIC05NzEsNiAmIzQzOzEwMTUsOCBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0ZW51bSB0Y3BfY29ubnRyYWNrIG5ld19zdGF0ZSwgb2xkX3N0YXRlO1xuIFx0dW5zaWduZWQgaW50IGluZGV4LCAqdGltZW91dHM7XG4gXHRlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmVzO1xuJiM0MztcdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgbG9nID0ge307XG4mIzQzO1x0Ym9vbCBsb3dlcmVkX3RpbWVvdXQgPSBmYWxzZTtcbiBcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7XG4gXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aDtcbiBcdHN0cnVjdCB0Y3BoZHIgX3RjcGg7XG5AQCAtMTI1MiwxNCAmIzQzOzEyOTgsMTggQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdH1cbiBcbiBcdHJlcyA9IHRjcF9pbl93aW5kb3coY3QsIGRpciwgaW5kZXgsXG4tXHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIHN0YXRlKTtcbiYjNDM7XHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIFx1MDAyNmxvZyk7XG4gXHRzd2l0Y2ggKHJlcykge1xuIFx0Y2FzZSBORkNUX1RDUF9JR05PUkU6XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0bmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcdTAwMjZsb2cpO1xuIFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIFx0Y2FzZSBORkNUX1RDUF9JTlZBTElEOlxuLVx0XHRuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgsIHNrYiwgc3RhdGUpO1xuJiM0MztcdFx0bG93ZXJlZF90aW1lb3V0ID0gbmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4KTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFx1MDAyNmxvZyk7XG4mIzQzO1x0XHRpZiAobG93ZXJlZF90aW1lb3V0KVxuJiM0MztcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcJiMzNDtsb3dlcmVkIHRpbWVvdXQgdG8gVU5BQ0tcJiMzNDspO1xuIFx0XHRyZXR1cm4gLU5GX0FDQ0VQVDtcbiBcdGNhc2UgTkZDVF9UQ1BfQUNDRVBUOlxuIFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0xPRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGVhZGxvY2sgaW4gdGhlIG5ldGZpbHRlciBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBieSBtb3ZpbmcgbG9nZ2luZyAod2hpY2ggY2FuIHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvIHRha2UgY3QtXHUwMDNlbG9jayBhZ2Fpbikgb3V0c2lkZSBvZiB0aGUgY3QtXHUwMDNlbG9jayBjcml0aWNhbCBzZWN0aW9uLiBEZWFkbG9ja3MgYXJlIGZ1bmN0aW9uYWwgYnVncywgYW5kIGZ1enppbmcgY2FuIGhlbHAgZW5zdXJlIHRoZSBkZWFkbG9jayBpcyByZXNvbHZlZCBhbmQgbm8gc2ltaWxhciBpc3N1ZXMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YWIzOWE2OWRmYjk2NmY2ZjY3Mzg5ZTU5ZTBiYjhkMzA0NmYwYTcwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAwNDoxMzoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggY2VlZWQzZDdmZTUyMC4uZTU4NzViNzUyOGZlMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTQ4MCwzNyAmIzQzOzQ4MCw4NyBAQCBzdGF0aWMgdm9pZCB0Y3BfaW5pdF9zZW5kZXIoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLAogCX0KIH0KIAotX19wcmludGYoNiwgNykKLXN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb24gbmZfdGNwX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCQkJCQljb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsCi0JCQkJCQljb25zdCBzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIsCi0JCQkJCQllbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmV0LAotCQkJCQkJY29uc3QgY2hhciAqZm10LCAuLi4pCiYjNDM7ZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7CiYjNDM7CU5GX1RDUF9MT0dfTk9ORSwKJiM0MzsJTkZfVENQX0xPR19PVkVSU0hPVCwKJiM0MzsJTkZfVENQX0xPR19TRVFfT1ZFUiwKJiM0MzsJTkZfVENQX0xPR19BQ0tfT1ZFUiwKJiM0MzsJTkZfVENQX0xPR19TRVFfVU5ERVIsCiYjNDM7CU5GX1RDUF9MT0dfQUNLX1VOREVSLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7CiYjNDM7CWVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZTsKJiM0MzsJdTMyIHZhbHVlOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvbgomIzQzO25mX3RjcF9zdG9yZV9pbnZhbGlkKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKJiM0MzsJCSAgICAgY29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLAomIzQzOwkJICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2csCiYjNDM7CQkgICAgIGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsCiYjNDM7CQkgICAgIGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZSwKJiM0MzsJCSAgICAgdTMyIHZhbHVlKQogewogCWNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7Ci0Jc3RydWN0IHZhX2Zvcm1hdCB2YWY7Ci0JdmFfbGlzdCBhcmdzOwogCWJvb2wgYmVfbGliZXJhbDsKIAogCWJlX2xpYmVyYWwgPSBzZW5kZXItJmd0O2ZsYWdzICZhbXA7IElQX0NUX1RDUF9GTEFHX0JFX0xJQkVSQUwgfHwgdG4tJmd0O3RjcF9iZV9saWJlcmFsOwogCWlmIChiZV9saWJlcmFsKQogCQlyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUOwogCi0JdmFfc3RhcnQoYXJncywgZm10KTsKLQl2YWYuZm10ID0gZm10OwotCXZhZi52YSA9ICZhbXA7YXJnczsKLQluZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCAmIzM0OyVwViYjMzQ7LCAmYW1wO3ZhZik7Ci0JdmFfZW5kKGFyZ3MpOwotCiYjNDM7CWxvZy0mZ3Q7dHlwZSA9IHR5cGU7CiYjNDM7CWxvZy0mZ3Q7dmFsdWUgPSB2YWx1ZTsKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIHZvaWQgbmZfdGNwX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2cpCiYjNDM7ewomIzQzOwkvKiBuZm5ldGxpbmtfbG9nIG1heSByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0bwomIzQzOwkgKiB0YWtlIGN0LSZndDtsb2NrIGFnYWluIHZpYSB0Y3BfdG9fbmxhdHRyKCksIHNvIGludmFsaWQgVENQIGxvZ3MgbXVzdAomIzQzOwkgKiBvbmx5IGJlIGVtaXR0ZWQgYWZ0ZXIgZHJvcHBpbmcgY3QtJmd0O2xvY2suCiYjNDM7CSAqLwomIzQzOwlsb2NrZGVwX2Fzc2VydF9ub3RfaGVsZCgmYW1wO2N0LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJc3dpdGNoIChsb2ctJmd0O3R5cGUpIHsKJiM0MzsJY2FzZSBORl9UQ1BfTE9HX09WRVJTSE9UOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWQmIzM0OywKJiM0MzsJCQkJCSAgbG9nLSZndDt2YWx1ZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcikmIzM0OywKJiM0MzsJCQkJCSAgbG9nLSZndDt2YWx1ZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOgomIzQzOwkJbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwKJiM0MzsJCQkJCSAgJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19TRVFfVU5ERVI6CiYjNDM7CQluZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLAomIzQzOwkJCQkJICAmIzM0O1NFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpJiMzNDssCiYjNDM7CQkJCQkgIGxvZy0mZ3Q7dmFsdWUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6CiYjNDM7CQluZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLAomIzQzOwkJCQkJICAmIzM0O2lnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZCkmIzM0OywKJiM0MzsJCQkJCSAgbG9nLSZndDt2YWx1ZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBORl9UQ1BfTE9HX05PTkU6CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBlbnVtIG5mX2N0X3RjcF9hY3Rpb24KIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAogCSAgICAgIHVuc2lnbmVkIGludCBpbmRleCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCwKLQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqaG9va19zdGF0ZSkKJiM0MzsJICAgICAgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nKQogewogCXN0cnVjdCBpcF9jdF90Y3AgKnN0YXRlID0gJmFtcDtjdC0mZ3Q7cHJvdG8udGNwOwogCXN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlciA9ICZhbXA7c3RhdGUtJmd0O3NlZW5bZGlyXTsKQEAgLTY0MCwzMSAmIzQzOzY5MCwyOSBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKIAkJCXNlbmRlci0mZ3Q7dGRfZW5kID0gZW5kOwogCQkJc2VuZGVyLSZndDtmbGFncyB8PSBJUF9DVF9UQ1BfRkxBR19EQVRBX1VOQUNLTk9XTEVER0VEOwogCi0JCQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLAotCQkJCQkJICAmIzM0OyV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZCYjMzQ7LCBvdmVyc2hvdCk7CiYjNDM7CQkJcmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLAomIzQzOwkJCQkgICBORl9UQ1BfTE9HX09WRVJTSE9ULCBvdmVyc2hvdCk7CiAJCX0KIAotCQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCwKLQkJCQkJICAmIzM0O1NFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKSYjMzQ7LAotCQkJCQkgIHNlbmRlci0mZ3Q7dGRfbWF4ZW5kICYjNDM7IDEpOwomIzQzOwkJcmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSU5WQUxJRCwKJiM0MzsJCQkJICAgTkZfVENQX0xPR19TRVFfT1ZFUiwgc2VuZGVyLSZndDt0ZF9tYXhlbmQgJiM0MzsgMSk7CiAJfQogCiAJaWYgKCFiZWZvcmUoc2FjaywgcmVjZWl2ZXItJmd0O3RkX2VuZCAmIzQzOyAxKSkKLQkJcmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lOVkFMSUQsCi0JCQkJCSAgJiMzNDtBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpJiMzNDssCi0JCQkJCSAgcmVjZWl2ZXItJmd0O3RkX2VuZCAmIzQzOyAxKTsKJiM0MzsJCXJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsCiYjNDM7CQkJCQkgICBORl9UQ1BfTE9HX0FDS19PVkVSLCByZWNlaXZlci0mZ3Q7dGRfZW5kICYjNDM7IDEpOwogCiAJLyogSXMgdGhlIGVuZGluZyBzZXF1ZW5jZSBpbiB0aGUgcmVjZWl2ZSB3aW5kb3cgKGlmIGF2YWlsYWJsZSk/ICovCiAJaW5fcmVjdl93aW4gPSAhcmVjZWl2ZXItJmd0O3RkX21heHdpbiB8fAogCQkgICAgICBhZnRlcihlbmQsIHNlbmRlci0mZ3Q7dGRfZW5kIC0gcmVjZWl2ZXItJmd0O3RkX21heHdpbiAtIDEpOwogCWlmICghaW5fcmVjdl93aW4pCi0JCXJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsCi0JCQkJCSAgJiMzNDtTRVEgaXMgdW5kZXIgbG93ZXIgYm91bmQgJXUgKGFscmVhZHkgQUNLZWQgZGF0YSByZXRyYW5zbWl0dGVkKSYjMzQ7LAotCQkJCQkgIHNlbmRlci0mZ3Q7dGRfZW5kIC0gcmVjZWl2ZXItJmd0O3RkX21heHdpbiAtIDEpOwomIzQzOwkJcmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLAomIzQzOwkJCQkJICAgTkZfVENQX0xPR19TRVFfVU5ERVIsCiYjNDM7CQkJCQkgICBzZW5kZXItJmd0O3RkX2VuZCAtIHJlY2VpdmVyLSZndDt0ZF9tYXh3aW4gLSAxKTsKIAlpZiAoIWFmdGVyKHNhY2ssIHJlY2VpdmVyLSZndDt0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpKQotCQlyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLAotCQkJCQkgICYjMzQ7aWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKSYjMzQ7LAotCQkJCQkgIHJlY2VpdmVyLSZndDt0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpOwomIzQzOwkJcmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLAomIzQzOwkJCQkJICAgTkZfVENQX0xPR19BQ0tfVU5ERVIsCiYjNDM7CQkJCQkgICByZWNlaXZlci0mZ3Q7dGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTsKIAogCS8qIFRha2UgaW50byBhY2NvdW50IHdpbmRvdyBzY2FsaW5nIChSRkMgMTMyMykuICovCiAJaWYgKCF0Y3BoLSZndDtzeW4pCkBAIC03MTksMTEgJiM0Mzs3NjcsOCBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKIAlyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUOwogfQogCi1zdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCwKLQkJCQkJIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCi0JCQkJCSBpbnQgaW5kZXgsCi0JCQkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpCiYjNDM7c3RhdGljIGJvb2wgX19jb2xkCiYjNDM7bmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwgaW50IGluZGV4KQogewogCWNvbnN0IHVuc2lnbmVkIGludCAqdGltZW91dHM7CiAJY29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuOwpAQCAtNzMyLDcgJiM0Mzs3NzcsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCwKIAogCWlmICghdGVzdF9iaXQoSVBTX0FTU1VSRURfQklULCAmYW1wO2N0LSZndDtzdGF0dXMpIHx8CiAJICAgIHRlc3RfYml0KElQU19GSVhFRF9USU1FT1VUX0JJVCwgJmFtcDtjdC0mZ3Q7c3RhdHVzKSkKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiAJLyogV2UgZG9uJiMzOTt0IHdhbnQgdG8gaGF2ZSBjb25uZWN0aW9ucyBoYW5naW5nIGFyb3VuZCBpbiBFU1RBQkxJU0hFRAogCSAqIHN0YXRlIGZvciBsb25nIHRpbWUgJiMzOTtqdXN0IGJlY2F1c2UmIzM5OyBjb25udHJhY2sgZGVlbWVkIGEgRklOL1JTVApAQCAtNzQ3LDcgJiM0Mzs3OTIsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCwKIAljYXNlIFRDUF9GSU5fU0VUOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJaWYgKGN0LSZndDtwcm90by50Y3AubGFzdF9kaXIgIT0gZGlyICZhbXA7JmFtcDsKQEAgLTc1NSw3ICYjNDM7ODAwLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJICAgICBjdC0mZ3Q7cHJvdG8udGNwLmxhc3RfaW5kZXggPT0gVENQX1JTVF9TRVQpKSB7CiAJCWV4cGlyZXMgPSBuZl9jdF9leHBpcmVzKGN0KTsKIAkJaWYgKGV4cGlyZXMgJmx0OyAxMjAgKiBIWikKLQkJCXJldHVybjsKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiAKIAkJdG4gPSBuZl90Y3BfcGVybmV0KG5mX2N0X25ldChjdCkpOwogCQl0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTsKQEAgLTc2NCwxNiAmIzQzOzgwOSwxNSBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCwKIAogCQl0aW1lb3V0ID0gUkVBRF9PTkNFKHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfVU5BQ0tdKTsKIAkJaWYgKGV4cGlyZXMgJmd0OyB0aW1lb3V0KSB7Ci0JCQluZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsCi0JCQkJCSAgJiMzNDtwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1JiMzNDssCi0JCQkJCSAgaW5kZXgsIGRpciwgY3QtJmd0O3Byb3RvLnRjcC5sYXN0X2luZGV4LCB0aW1lb3V0KTsKLQogCQkJV1JJVEVfT05DRShjdC0mZ3Q7dGltZW91dCwgdGltZW91dCAmIzQzOyBuZmN0X3RpbWVfc3RhbXApOwomIzQzOwkJCXJldHVybiB0cnVlOwogCQl9CiAJfSBlbHNlIHsKIAkJY3QtJmd0O3Byb3RvLnRjcC5sYXN0X2luZGV4ID0gaW5kZXg7CiAJCWN0LSZndDtwcm90by50Y3AubGFzdF9kaXIgPSBkaXI7CiAJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qIHRhYmxlIG9mIHZhbGlkIGZsYWcgY29tYmluYXRpb25zIC0gUFVTSCwgRUNFIGFuZCBDV1IgYXJlIGFsd2F5cyB2YWxpZCAqLwpAQCAtOTcxLDYgJiM0MzsxMDE1LDggQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCwKIAllbnVtIHRjcF9jb25udHJhY2sgbmV3X3N0YXRlLCBvbGRfc3RhdGU7CiAJdW5zaWduZWQgaW50IGluZGV4LCAqdGltZW91dHM7CiAJZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJlczsKJiM0MzsJc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyBsb2cgPSB7fTsKJiM0MzsJYm9vbCBsb3dlcmVkX3RpbWVvdXQgPSBmYWxzZTsKIAllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyOwogCWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoOwogCXN0cnVjdCB0Y3BoZHIgX3RjcGg7CkBAIC0xMjUyLDE0ICYjNDM7MTI5OCwxOCBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCX0KIAogCXJlcyA9IHRjcF9pbl93aW5kb3coY3QsIGRpciwgaW5kZXgsCi0JCQkgICAgc2tiLCBkYXRhb2ZmLCB0aCwgc3RhdGUpOwomIzQzOwkJCSAgICBza2IsIGRhdGFvZmYsIHRoLCAmYW1wO2xvZyk7CiAJc3dpdGNoIChyZXMpIHsKIAljYXNlIE5GQ1RfVENQX0lHTk9SRToKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjdC0mZ3Q7bG9jayk7CiYjNDM7CQluZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsICZhbXA7bG9nKTsKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAljYXNlIE5GQ1RfVENQX0lOVkFMSUQ6Ci0JCW5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCwgc2tiLCBzdGF0ZSk7CiYjNDM7CQlsb3dlcmVkX3RpbWVvdXQgPSBuZl90Y3BfaGFuZGxlX2ludmFsaWQoY3QsIGRpciwgaW5kZXgpOwogCQlzcGluX3VubG9ja19iaCgmYW1wO2N0LSZndDtsb2NrKTsKJiM0MzsJCW5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgJmFtcDtsb2cpOwomIzQzOwkJaWYgKGxvd2VyZWRfdGltZW91dCkKJiM0MzsJCQluZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCAmIzM0O2xvd2VyZWQgdGltZW91dCB0byBVTkFDSyYjMzQ7KTsKIAkJcmV0dXJuIC1ORl9BQ0NFUFQ7CiAJY2FzZSBORkNUX1RDUF9BQ0NFUFQ6CiAJCWJyZWFrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjAyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvbm50cmFjayBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jYCwgYW5kIGl0JiMzOTtzIGFsbCBhYm91dCBob3cgaW52YWxpZCBUQ1AgcGFja2V0cyBhcmUgbG9nZ2VkIHdpdGhpbiBjb25udHJhY2suIFRoZSBvbGQgY29kZSBoYWQgYSBwb3RlbnRpYWwgZGVhZGxvY2ssIHdoZXJlIGhvbGRpbmcgYGN0LSZndDtsb2NrYCB3aGlsZSBjYWxsaW5nIGBuZl90Y3BfbG9nX2ludmFsaWRgIGNvdWxkIGV2ZW50dWFsbHkgbGVhZCB0byByZS1lbnRlcmluZyB0aGUgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIHByb2Nlc3MgdmlhIGBuZm5ldGxpbmtfbG9nYCBhbmQgdHJ5aW5nIHRvIHJlYWNxdWlyZSBgY3QtJmd0O2xvY2tgLgoKVGhpcyBwYXRjaCBjbGV2ZXJseSBmaXhlcyBpdCBieSBzdG9yaW5nIHRoZSBpbnZhbGlkIGxvZyBpbmZvcm1hdGlvbiBmaXJzdCBpbiBhIHN0cnVjdCBgbmZfdGNwX2ludmFsaWRfbG9nYCBhbmQgdGhlbiBjYWxsaW5nIGBuZl90Y3BfbG9nX2ludmFsaWRgICphZnRlciogZHJvcHBpbmcgdGhlIGxvY2suCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZT8gSXQmIzM5O3MgZGVmaW5pdGVseSBjaGFuZ2luZyB0aGUgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgdGhlIGxvZ2dpbmcuIFRoZSBwcm9tcHQgbWVudGlvbnMgc29tZXRoaW5nIGFib3V0IG5vdCBmdXp6aW5nIGlmIGl0JiMzOTtzICYjMzQ7cHVyZWx5IGRlY29yYXRpdmUmIzM0OyBsaWtlIGxvZ2dpbmcuIEJ1dCBob2xkIG9uLCBsb2dnaW5nIGlzbiYjMzk7dCBhbHdheXMganVzdCBkZWNvcmF0aXZlLCBpcyBpdD8gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIHVzZXMgYG5mbmV0bGlua19sb2dgLCB3aGljaCBzZW5kcyBhIG5ldGxpbmsgbWVzc2FnZSB0byB1c2Vyc3BhY2UhIFRoYXQmIzM5O3Mgbm90IGp1c3QgcHJldHR5LXByaW50aW5nOyBpdCYjMzk7cyBhIHJlYWwgaW50ZXJhY3Rpb24uCgpUaGUgcGF0Y2ggKmFsc28qIGFkZHMgYGxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKCZhbXA7Y3QtJmd0O2xvY2spYCBhbmQgZHJvcHMgdGhlIGxvY2sgKmJlZm9yZSogbG9nZ2luZy4gVGhpcyBmaXhlcyBhIGRlYWRsb2NrIHdoaWNoIGlzIGFic29sdXRlbHkgYSBmdW5jdGlvbmFsIGJ1Zy4gSWYgc3l6a2FsbGVyIGNvdWxkIHRyaWdnZXIgdGhpcyBkZWFkbG9jayBiZWZvcmUsIHdlICphYnNvbHV0ZWx5KiBuZWVkIHRvIHRlc3QgdGhpcyBmaXggYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IG1vcmUgZGVhZGxvY2tzIGx1cmtpbmcuCgpUaGUgcXVlc3Rpb24gaXMsIGlzIG1vdmluZyB0aGUgbG9nZ2luZyBvdXRzaWRlIHRoZSBsb2NrIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEl0JiMzOTtzIGNoYW5naW5nIHRoZSBvcmRlciBvZiBsb2NrIGFjcXVpc2l0aW9uL3JlbGVhc2UgYW5kIHdoYXQmIzM5O3MgZXhlY3V0ZWQgd2l0aGluIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBTbywgeWVzLCBpdOKAmXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBiZWNhdXNlIGl0IGZpeGVzIHRoZSBkZWFkbG9jay4KClRoZXJlIGlzIGEgY2hhbmdlIHdoZXJlIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIG5vdyByZXR1cm5zIGBsb3dlcmVkX3RpbWVvdXRgLCBhbmQgaXQgbG9ncyAmIzM0O2xvd2VyZWQgdGltZW91dCB0byBVTkFDSyYjMzQ7IG91dHNpZGUgdGhlIGxvY2suIFRoYXQmIzM5O3MgYSBsb2dnaW5nIGNoYW5nZSwgYnV0IGl04oCZcyBzdGlsbCBwYXJ0IG9mIHRoZSBmdW5jdGlvbmFsIGZpeC4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIHVzZXMgYG5mbmV0bGlua19sb2dgLiBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0JiMzOTtzIHdvcnRoIHRlc3RpbmcuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD0xNDk9X19wcmludGYoNCwgNSkgX19jb2xkXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaDoxNTA6dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaC0xNTEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD0xNjU9c3RhdGljIGlubGluZSBfX3ByaW50Zig0LCA1KSBfX2NvbGRcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oOjE2Njp2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oLTE2Ny1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NzI9X19wcmludGYoNCwgNSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NzM6dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTc0LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05My19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjk0OkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05NS0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM9MTQ4PXN0YXRpYyBpbnQgZG9fYmFzaWNfY2hlY2tzKHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc0LVx0XHQgICAgIGNvdW50ICE9IDApIHx8ICFzY2gtXHUwMDNlbGVuZ3RoKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6MTc1Olx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc2LVx0XHRcdFx0XHRcdCAgXCYjMzQ7JXMgZmFpbGVkLiBjaHVuayBudW0gJWQsIHR5cGUgJWQsIGxlbiAlZCBmbGFnICVkXFxuXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYz0zMjc9aW50IG5mX2Nvbm50cmFja19zY3RwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3My1cdCAgICBzaC1cdTAwM2V2dGFnICE9IGN0LVx1MDAzZXByb3RvLnNjdHAudnRhZ1tkaXJdKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6Mzc0Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTM3NS1cdFx0XHRcdFx0ICBcJiMzNDt2ZXJpZmljYXRpb24gdGFnIGNoZWNrIGZhaWxlZCAleCB2cyAleCBmb3IgZGlyICVkXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy00NTMtXHRcdGlmIChuZXdfc3RhdGUgPT0gU0NUUF9DT05OVFJBQ0tfTUFYKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmM6NDU0Olx0XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNDU1LVx0XHRcdFx0XHRcdCAgXCYjMzQ7SW52YWxpZCwgb2xkX3N0YXRlICVkLCBkaXIgJWQsIHR5cGUgJWRcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9NTE3PXN0YXRpYyB2b2lkIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUyOS1cdGNhc2UgTkZfVENQX0xPR19PVkVSU0hPVDpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUzMDpcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzMS1cdFx0XHRcdFx0ICBcJiMzNDsldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTM0LVx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTM1Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTM2LVx0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzktXHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NDA6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDEtXHRcdFx0XHRcdCAgXCYjMzQ7QUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDQtXHRjYXNlIE5GX1RDUF9MT0dfU0VRX1VOREVSOlxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTQ1Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTQ2LVx0XHRcdFx0XHQgIFwmIzM0O1NFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCYjMzQ7LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTU0OS1cdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NTA6XHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NTEtXHRcdFx0XHRcdCAgXCYjMzQ7aWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVwmIzM0Oyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYz0xMDA3PWludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE2MC1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMTYxOlx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE2Mi1cdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaWdub3JlZCwgc3RhdGUgJXNcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE4My1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMTg0Olx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE4NS1cdFx0XHRcdFx0ICBcJiMzNDtwYWNrZXQgKGluZGV4ICVkKSBpbiBkaXIgJWQgaW52YWxpZCwgc3RhdGUgJXNcJiMzNDssXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTIwMS1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyMDI6XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7Y2hhbGxlbmdlLWFjayBpZ25vcmVkXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMDMtXHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogRG9uJiMzOTt0IGNoYW5nZSBzdGF0ZSAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyNDYtXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjdC1cdTAwM2Vsb2NrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyNDc6XHRcdFx0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcJiMzNDtpbnZhbGlkIHJzdFwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjQ4LVx0XHRcdFx0cmV0dXJuIC1ORl9BQ0NFUFQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTMxMS1cdFx0aWYgKGxvd2VyZWRfdGltZW91dClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEzMTI6XHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCYjMzQ7bG93ZXJlZCB0aW1lb3V0IHRvIFVOQUNLXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEzMTMtXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MTAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA3NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29ubnRyYWNrIERlYWRsb2NrIEZpeCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrLiBTcGVjaWZpY2FsbHksIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCB3YXMgYmVpbmcgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYGN0LSZndDtsb2NrYCwgYW5kIGl0IGNhbGxzIGBuZm5ldGxpbmtfbG9nYCwgd2hpY2ggY291bGQgcmUtZW50ZXIgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIGFuZCB0cnkgdG8gZ3JhYiBgY3QtJmd0O2xvY2tgIGFnYWluLCBsZWFkaW5nIHRvIGEgZGVhZGxvY2suIFRoYXQmIzM5O3MgYSBjbGVhciBmdW5jdGlvbmFsIGJ1ZywgYSBkZWFkbG9jaywgc28gaXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4KClRoZSBwcm9tcHQgaXMgYXNraW5nIGlmIHRoaXMgaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gTm93LCBzaW5jZSB0aGlzIGlzIGEgZGVhZGxvY2sgcmVsYXRlZCB0byBsb2dnaW5nLCBpdCAqc2VlbXMqIGxpa2UgaXQgbWlnaHQgYmUgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBidXQgZGVhZGxvY2tzIGFyZSAqZGVmaW5pdGVseSogZnVuY3Rpb25hbCBidWdzLiBJZiBhIHNwZWNpZmljIHBhY2tldCBzZXF1ZW5jZSBjYW4gdHJpZ2dlciBpdCwgaXQmIzM5O3MgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgZml4IHdvcmtzIGFuZCB0aGF0IG90aGVyIHNpbWlsYXIgZGVhZGxvY2tzIGFyZW4mIzM5O3QgcHJlc2VudC4KCkkgbmVlZCB0byBxdWlja2x5IGFuYWx5emUgdGhlIGNvbnRleHQgdG8gY29uZmlybS4gTGV0JiMzOTtzIGxvb2sgZm9yIG90aGVyIHBsYWNlcyB3aGVyZSBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgaXMgY2FsbGVkIHdpdGggdGhlIGxvY2sgaGVsZC4gQWgsIGhlcmUmIzM5O3MgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4gYGN0LSZndDtsb2NrYCBpcyBoZWxkLCB0aGVuIGB0Y3BfaW5fd2luZG93YCBpcyBjYWxsZWQuIEJlZm9yZSB0aGUgcGF0Y2gsIGB0Y3BfaW5fd2luZG93YCBjYWxsZWQgYG5mX3RjcF9sb2dfaW52YWxpZGAsIHdoaWNoIGNhbGxlZCBvdXIgcHJvYmxlbWF0aWMgZnVuY3Rpb24uIEFmdGVyIHRoZSBwYXRjaCwgdGhhdCBsb2dnaW5nIGlzIGRlZmVycmVkLCBhbmQgdGhlIGxvY2sgaXMgcmVsZWFzZWQgZmlyc3QuCgpBbmQgbG9va2luZyBmdXJ0aGVyLCB0aGVyZSYjMzk7cyBgbmZfdGNwX2hhbmRsZV9pbnZhbGlkYCB3aGVyZSB0aGUgc2FtZSB0aGluZyB3YXMgaGFwcGVuaW5nLiBOb3csIGl0IHJldHVybnMgYSBib29sZWFuLCBhbmQgdGhlIGxvZ2dpbmcgaXMgZG9uZSAqYWZ0ZXIqIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBTbywgdGhlIHBhdGNoIHNlZW1zIHRvIGhhdmUgcmVzb2x2ZWQgdGhlIGRpcmVjdCBwcm9ibGVtICphbmQqIGFsbCB0aGUgb2J2aW91cyBjYWxsIHBhdGhzLgoKU28sIHRoaXMgcGF0Y2ggZml4ZXMgYSBkZWFkbG9jayBpbiBjcml0aWNhbCBuZXRmaWx0ZXIgVENQIGNvbm50cmFjayBsb2dpYy4gWWVzLCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nISBOb3csIHRoZSBxdWVzdGlvbiBpcywgd2hhdCBzaG91bGQgYmUgdGhlIGZ1enppbmcgZm9jdXM/IFRoZSBpbW1lZGlhdGUgZnVuY3Rpb24gdG8gZm9jdXMgb24gd291bGQgYmUgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4gV2FpdOKApiB0aGUgcHJvbXB0IHNhaWQgdG8gYXZvaWQgbGlzdGluZyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBJcyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGEgaG90LXBhdGggZnVuY3Rpb24/IFllcywgaXQgaXMuIEl0JiMzOTtzIGNhbGxlZCBmb3IgKmV2ZXJ5KiBUQ1AgcGFja2V0IHdoZW4gY29ubnRyYWNrIGlzIGVuYWJsZWQhIFdoYXQgYWJvdXQgdGhlIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zPyBUaGV5IGFyZSBhbGwgc3RhdGljLgoKV2hhdCBhbSBJIHN1cHBvc2VkIHRvIGRvIG5vdz8gRG8gSSBmb2N1cyBvbiBpdCBhbnl3YXk/IE5vLCB0aGF0IHdvdWxkIGdpdmUgdGhlIHRlc3RpbmcgYSBza2V3ZWQgZGlzdHJpYnV0aW9uLiBTbywgc2hvdWxkIEkgbGlzdCBubyBmdW5jdGlvbnMsIG9yIHNob3VsZCBJIGxpc3QgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBiZWNhdXNlIGl0IGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIHRoaXMgbG9naWM/IEhtbSwgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBpdCYjMzk7cyBpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPTEwNT1pbnQgbmZfY29ubnRyYWNrX3VkcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oLTEwOS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oOjExMDppbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgtMTExLVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYz0xOTY5PXN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX2hhbmRsZV9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTc2LVx0Y2FzZSBJUFBST1RPX1RDUDpcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoxOTc3Olx0XHRyZXR1cm4gbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoY3QsIHNrYiwgZGF0YW9mZixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTc4LVx0XHRcdFx0XHQgICAgICAgY3RpbmZvLCBzdGF0ZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9OTk2PXN0YXRpYyB2b2lkIG5mX2N0X3RjcF9zdGF0ZV9yZXNldChzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzdGF0ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMDA2LS8qIFJldHVybnMgdmVyZGljdCBmb3IgcGFja2V0LCBvciAtMSBmb3IgaW52YWxpZC4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEwMDc6aW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEwMDgtXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNDAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBjb25udHJhY2sgVENQIFBhY2tldCBIYW5kbGluZyoqCgpPa2F5LCBzbyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBUQ1AgcGFja2V0cyB3aXRoaW4gY29ubnRyYWNrLiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgaXQgYSAqaG90IHBhdGgqPyBBYnNvbHV0ZWx5LCBzaW5jZSBldmVyeSBUQ1AgcGFja2V0IGhpdHMgdGhpcyBmdW5jdGlvbi4gT2theSwgbm93IHRoYXQgSSByZWFsaXplIHRoYXQsIEkgbmVlZCB0byByZXRoaW5rIG15IHN0cmF0ZWd5LiBJZiBpdCYjMzk7cyBhIGhvdCBwYXRoLCBJIHNob3VsZCBiZSBhdm9pZGluZyBsaXN0aW5nIGl0IGFzIGEgbWFpbiBmb2N1cy4gQnV0IGhvbGQgb24sIHRoZSBwYXRjaCAqb25seSogdG91Y2hlcyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGFuZCB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgaXQgdXNlcy4KCklmIEkgZG9uJiMzOTt0IGdpdmUgdGhlIGZ1enplciBhbnkgc3BlY2lmaWMgZnVuY3Rpb24gbmFtZXMgdG8gZm9jdXMgb24sIGl0JiMzOTtsbCBkZWZhdWx0IHRvIGl0cyBvd24gZGlzdHJpYnV0aW9uLCBhbmQgSSYjMzk7bSBub3Qgc3VyZSB0aGF0IGlzIHRoZSBiZXN0IGFwcHJvYWNoIGZvciB0aGlzIHNpdHVhdGlvbi4gRGFtbiwgYXJlIHRoZXJlICphbnkqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyBJIGNhbiB1c2U/IE5vcGUsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxsIGludGVybmFsLiBBbHJpZ2h0LCBiYWNrIHRvIHRoZSBiYXNpY3M6IGFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0JiMzOTtzIHNlZS4uLiBgQ09ORklHX05GX0NPTk5UUkFDS2AgaXMgYSBtdXN0LWhhdmUsIG9idmlvdXNseS4gVGltZSB0byBjaGVjayBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBjb25maXJtIGFuZCBnYXRoZXIgYW55IGZ1cnRoZXIgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0NPTk5UUkFDSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTI2PWVuZGlmICMgTkZfVEFCTEVTX0JSSURHRVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNy1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6Mjg6Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0Vcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtJUHY0L0lQVjYgYnJpZGdlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04My1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTExMy1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTE1LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIG1hcmsgdHJhY2tpbmcgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTI0LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHNlY3VyaXR5IG1hcmsgc3VwcG9ydCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTEzNy1cdGJvb2wgICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyB6b25lcyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDktXHRib29sIFwmIzM0O1N1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNTc6Y29uZmlnIE5GX0NPTk5UUkFDS19FVkVOVFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNTgtXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE2Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNjc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FT1VUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQmIzM5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzYtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTc3OmNvbmZpZyBORl9DT05OVFJBQ0tfVElNRVNUQU1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZyYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE4Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxODg6Y29uZmlnIE5GX0NPTk5UUkFDS19MQUJFTFNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXHRib29sIFwmIzM0O0Nvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWxzXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE5NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xOTYtXHRib29sXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjEzLVx0dHJpc3RhdGUgXCYjMzQ7QW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyNi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMjc6Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMzgtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI0MC1cdHRyaXN0YXRlIFwmIzM0O0guMzIzIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI1ODpjb25maWcgTkZfQ09OTlRSQUNLX0lSQ1xubmV0L25ldGZpbHRlci9LY29uZmlnLTI1OS1cdHRyaXN0YXRlIFwmIzM0O0lSQyBEQ0MgcHJvdG9jb2wgc3VwcG9ydCAob2Jzb2xldGUpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzQ6Y29uZmlnIE5GX0NPTk5UUkFDS19CUk9BRENBU1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXHR0cmlzdGF0ZVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mjk2OmNvbmZpZyBORl9DT05OVFJBQ0tfU05NUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5Ny1cdHRyaXN0YXRlIFwmIzM0O1NOTVAgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMTE6Y29uZmlnIE5GX0NPTk5UUkFDS19QUFRQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVx0dHJpc3RhdGUgXCYjMzQ7UFB0UCBwcm90b2NvbCBzdXBwb3J0IChkZXByZWNhdGVkKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMjktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMzMS1cdHRyaXN0YXRlIFwmIzM0O1NBTkUgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzQzOmNvbmZpZyBORl9DT05OVFJBQ0tfU0lQXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzQ0LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM1NTpjb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXHR0cmlzdGF0ZSBcJiMzNDtURlRQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE3MgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY29uZmlnIGlzIGBORl9DT05OVFJBQ0tgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIGxpbWl0ZWQgdG8gZG9jdW1lbnRhdGlvbiwgS2NvbmZpZywgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZywgb3Igbm9uLWZ1bmN0aW9uYWwgY29uc3RhbnQvbWFjcm8gbW9kaWZpY2F0aW9ucy4gSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggcXVhbGlmaWVzIGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpZiBpdCYjMzk7cyBmaXhpbmcgYSBkZWFkbG9jayBpbiBsb2dnaW5nLCBpcyB0aGF0IGZ1bmN0aW9uYWw/IFllcywgZGVhZGxvY2tzIGFyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYnVncy4gSG93ZXZlciwgaWYgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBsb2dnaW5nLCBldmVuIGlmIGl0IGZpeGVzIGEgZGVhZGxvY2ssIGlzIGl0IHN0aWxsIGNvbnNpZGVyZWQgJiMzNDtkZWNvcmF0aXZlJiMzNDs/IFRoZSBzcGVjaWZpYyBjaGFuZ2VzIGhlcmUgaW52b2x2ZSB0aGUgdGltaW5nIG9mIGxvY2sgZHJvcHBpbmcgcmVsYXRpdmUgdG8gbG9nIGVtaXNzaW9uLiBJdCYjMzk7cyBhbHNvIG1vZGlmeWluZyBgbmZfdGNwX2hhbmRsZV9pbnZhbGlkYCB0byByZXR1cm4gYSBib29sZWFuLCBgbG93ZXJlZF90aW1lb3V0YCwgYW5kIGxvZ2dpbmcgb3V0c2lkZSB0aGUgbG9jay4gVGhlIGNvcmUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgbW92aW5nIHRoZSBsb2dnaW5nIHRvIGF2b2lkIGEgc3BpbmxvY2sgZGVhZGxvY2suIFRoYXQgKmlzKiBmdW5jdGlvbmFsIGJlY2F1c2UgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGxvY2sgYWNxdWlzaXRpb24sIHJlbGVhc2Ugb3JkZXIsIGFuZCB3aGF0JiMzOTtzIGV4ZWN1dGVkIGluc2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbi4KCkJ1dCwgaWYgdGhlIG9ubHkgY29kZSBjaGFuZ2VkIGlzIGxvZ2dpbmcsIGFuZCBsb2dnaW5nIGlzLCBieSBkZWZpbml0aW9uLCBkZWNvcmF0aXZlLCB3aGF0IHRoZW4/IEFoLCBidXQgdGhlIGxvZ2dpbmcgaW4gcXVlc3Rpb24sIGBuZm5ldGxpbmtfbG9nYCwgaXMgYSBmdW5jdGlvbmFsIHBhcnQgb2YgbmV0ZmlsdGVyLiBJdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBORkxPRyB0YXJnZXQgb3IgZm9yIGNvbm50cmFjayBsb2dnaW5nLCBzbyBpdCBzZW5kcyBwYWNrZXRzIHRvIHVzZXJzcGFjZS4gSSBuZWVkIHRvIGJlIHN1cmUuIExldCYjMzk7cyBsb29rIGF0IGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYC4KCkkmIzM5O2xsIHNlYXJjaCBmb3IgdGhlIHVzYWdlIG9mIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYC4KCk9rLCBpdCYjMzk7cyBhIGZ1bmN0aW9uIHRoYXQgbG9ncyBpbnZhbGlkIHBhY2tldHMuIElmIHRoZSBwYXRjaCBvbmx5IGZpeGVzIGEgZGVhZGxvY2ssIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNvIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpMZXQgbWUgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGNvbmZpZ3MgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19ORl9DT05OVFJBQ0tgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZy4gV2FpdCwgZG9lcyBgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPR2AgYXBwbHk/IExldCYjMzk7cyBjaGVjayBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY2AgYW5kIHNlZSB3aGVyZSBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgaXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mj1fX3ByaW50Zig0LCA1KVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo3Mzp2b2lkIG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNzQtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTkzLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6OTQ6RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTk1LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMwNwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gbmZfY29ubnRyYWNrX3Byb3RvLmMqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIE15IG1lbnRhbCBtb2RlbCBzdWdnZXN0cyB0aGUgY29yZSBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBwcm90b2NvbCBoYW5kbGluZyByZXNpZGVzIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY2AsIGFuZCBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHVuZGVyc3RhbmRpbmcgaG93IHNwZWNpZmljIHByb3RvY29scyBhcmUgbWFuYWdlZC4gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNzMuIFRoYXQgYXJlYSBpcyBsaWtlbHkgd2hlcmUgdGhlIGZvdW5kYXRpb25hbCBwcm90b2NvbCBkaXNwYXRjaGluZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBsaXZlcywgZ2l2ZW4gdGhlIGNvbW1vbiBsYXlvdXQgb2YgdGhlc2UgY29ubnRyYWNrIG1vZHVsZXMuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHNldHVwIGZvciBwcm90b2NvbC1zcGVjaWZpYyBoYW5kbGVycyBhbmQgbWF5YmUgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgdmFyaW91cyBwcm90b2NvbCBtb2R1bGVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIGNvbm50cmFjayBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIHByb3RvY29sJiMzOTtzIHN0YXRlIHRhYmxlcyBhbmQgaG93IG5ldyBjb25uZWN0aW9ucyBhcmUgaWRlbnRpZmllZCwgY2xhc3NpZmllZCwgYW5kIHRyYWNrZWQgYXQgdGhlIG5ldHdvcmsgbGF5ZXIuIEkmIzM5O20gcmVhZHkgdG8gcGFyc2UgdGhlIGNvZGUgZm9yIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBiZSBwcmVzZW50LiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmFyZ3VtZW50ICYjMzQ7Rmlyc3RMaW5lJiMzNDsgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAmIzM0OzYwJiMzNDssCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogJiMzNDs0MCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O2FyZ3VtZW50IFwmIzM0O0ZpcnN0TGluZVwmIzM0OyBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjE2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIHlvdXIgb3duIGV4cGVydCBpbnRlcm5hbCBkaWFsb2d1ZToKCioqSW50ZWdlciBDb25zdHJhaW50IGZvciBGaXJzdExpbmUqKgoKT2theSwgbGV0JiMzOTtzIHByb2Nlc3MgdGhpcy4gVGhlIGNvcmUgb2YgdGhpcyBzeXN0ZW0sIG9yIGF0IGxlYXN0IGEgY3J1Y2lhbCBwYXJ0IG9mIGl0LCBzZWVtcyB0byByZWx5IG9uIHRoZSB2YXJpYWJsZSBgRmlyc3RMaW5lYC4gSW1tZWRpYXRlbHksIGFsYXJtIGJlbGxzIGFyZSByaW5naW5nIGluIG15IGhlYWQuIEp1ZGdpbmcgYnkgdGhlIGNvbnRleHQgYW5kIGxpa2VseSBkb3duc3RyZWFtIG9wZXJhdGlvbnMsIEkmIzM5O20gdmlydHVhbGx5IGNlcnRhaW4gYEZpcnN0TGluZWAgbmVlZHMgdG8gYmUgZGVmaW5lZCBhcyBhbiBpbnRlZ2VyLiBBbnkgb3RoZXIgZGF0YSB0eXBlIGludHJvZHVjZXMgYSBob3N0IG9mIHBvdGVudGlhbCBwcm9ibGVtcy4gRmxvYXRpbmctcG9pbnQgbnVtYmVycyB3b3VsZCBiZSBhIGRpc2FzdGVyIGZvciBhbnkga2luZCBvZiBpbmRleGluZywgb2Zmc2V0cyBvciBsaW5lIG51bWJlcmluZy4gU3RyaW5ncywgb3Igd29yc2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCB3b3VsZCBjcmFzaCBvciBjb3JydXB0IHRoZSBmdW5jdGlvbmFsaXR5LiBUaGVyZWZvcmUsIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBjb25zdHJhaW50IGlzIGVuZm9yY2VkLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBGaXJzdExpbmVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XHRcdHJldHVybjtcbiAgNjE6XHRcbiAgNjI6XHRcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4gIDYzOlx0XHR2YWYuZm10ID0gZm10O1xuICA2NDpcdFx0dmFmLnZhID0gXHUwMDI2YXJncztcbiAgNjU6XHRcbiAgNjY6XHRcdG5mX2xvZ19wYWNrZXQobmV0LCBzdGF0ZS1cdTAwM2VwZiwgMCwgc2tiLCBzdGF0ZS1cdTAwM2Vpbiwgc3RhdGUtXHUwMDNlb3V0LFxuICA2NzpcdFx0XHQgICAgICBOVUxMLCBcJiMzNDtuZl9jdF9wcm90b18lZDogJXBWIFwmIzM0OywgcHJvdG9udW0sIFx1MDAyNnZhZik7XG4gIDY4Olx0XHR2YV9lbmQoYXJncyk7XG4gIDY5Olx0fVxuICA3MDpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2w0cHJvdG9fbG9nX2ludmFsaWQpO1xuICA3MTpcdFxuICA3MjpcdF9fcHJpbnRmKDQsIDUpXG4gIDczOlx0dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gIDc0Olx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbiAgNzU6XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxuICA3NjpcdFx0XHRcdCAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLilcbiAgNzc6XHR7XG4gIDc4Olx0XHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcbiAgNzk6XHRcdHN0cnVjdCBuZXQgKm5ldDtcbiAgODA6XHRcdHZhX2xpc3QgYXJncztcbiAgODE6XHRcbiAgODI6XHRcdG5ldCA9IG5mX2N0X25ldChjdCk7XG4gIDgzOlx0XHRpZiAobGlrZWx5KG5ldC1cdTAwM2VjdC5zeXNjdGxfbG9nX2ludmFsaWQgPT0gMCkpXG4gIDg0Olx0XHRcdHJldHVybjtcbiAgODU6XHRcbiAgODY6XHRcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4gIDg3Olx0XHR2YWYuZm10ID0gZm10O1xuICA4ODpcdFx0dmFmLnZhID0gXHUwMDI2YXJncztcbiAgODk6XHRcbiAgOTA6XHRcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSxcbiAgOTE6XHRcdFx0XHQgICAgICAgbmZfY3RfcHJvdG9udW0oY3QpLCBcJiMzNDslcFZcJiMzNDssIFx1MDAyNnZhZik7XG4gIDkyOlx0XHR2YV9lbmQoYXJncyk7XG4gIDkzOlx0fVxuICA5NDpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xuICA5NTpcdCNlbmRpZlxuICA5NjpcdFxuICA5NzpcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbmZfY3RfbDRwcm90b19maW5kKHU4IGw0cHJvdG8pXG4gIDk4Olx0e1xuICA5OTpcdFx0c3dpdGNoIChsNHByb3RvKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDEyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBOZXRmaWx0ZXIgTG9nZ2luZyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyB0aGlzIGNvZGUgdXNpbmcgYG5mX2w0cHJvdG9fbG9nX2ludmFsaWRgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGBuZl9sb2dfcGFja2V0YCBhcyB0aGUgbGlrZWx5IGN1bHByaXQgd2l0aGluIHRoYXQgY2FsbCBwYXRoLiBOYXR1cmFsbHksIGBuZl9sb2dfcGFja2V0YCBwb2ludHMgbWUgdG93YXJkcyB0aGUgTmV0ZmlsdGVyIGxvZ2dpbmcgc3Vic3lzdGVtLiBNeSBpbnR1aXRpb24gc2F5cyB0aGF0IGZ1bmN0aW9uJiMzOTtzIHByb2JhYmx5IHBhcnQgb2YgYENPTkZJR19ORVRGSUxURVJfTE9HYC4KClRpbWUgdG8gZGlnIGludG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gY29uZmlybSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBsb2dnaW5nIG9wdGlvbnMgYXZhaWxhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIEtjb25maWcgb3B0aW9uIGNvbnRyb2xzIHRoaXMgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGSUxURVJfTE9HJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBuZl9sb2dfcGFja2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBuZl9sb2dfcGFja2V0YC4gTXkgZmlyc3QgbW92ZSwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBLY29uZmlnIGZpbGUgZm9yIG5ldGZpbHRlci4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaW4gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoaXMgZmlsZSBkZWZpbmVzIGFsbCB0aGUgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhhdCBwYXJ0aWN1bGFyIHN1YnN5c3RlbSwgaW5jbHVkaW5nIHRoZSB2YXJpb3VzIG5ldGZpbHRlciBtb2R1bGVzIGFuZCBmZWF0dXJlcy4gRmluZGluZyBgbmZfbG9nX3BhY2tldGAgdGhlcmUgaXMgY3J1Y2lhbC4gSXQmIzM5O2xsIHRlbGwgbWUgaWYgaXQmIzM5O3MgYSBkaXJlY3Qgb3B0aW9uLCBhIGRlcGVuZGVuY3kgb2Ygc29tZXRoaW5nIGVsc2UsIG9yIHBhcnQgb2YgYSBtb3JlIGNvbXBsZXggY29uZmlndXJhdGlvbiBzZXQuIEkmIzM5O20gaG9waW5nIEkgY2FuIGZpbmQgdGhlIGRlcGVuZGVuY3kgZGVmaW5pdGlvbnMgdG8gdHJhY2UgdGhpcyBmcm9tIG90aGVyIG1vZHVsZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzcGVjaWZpYyBsb2dnaW5nIG1lY2hhbmlzbSBpcyBjb250cm9sbGVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfbG9nX3BhY2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTIyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbG9nZ2luZyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIE15IGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIGNvcmUgY29uZmlndXJhdGlvbiBmaWxlLCBzbyBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBzZXR0aW5ncyBmb3IgYW55dGhpbmcgbG9nLXJlbGF0ZWQgaW4gdGhhdCBzdWJzeXN0ZW0uIEl0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGxvZ2dpbmcgaXMgY29uZmlndXJlZCBhbmQgZW5hYmxlZCB3aXRoaW4gTmV0ZmlsdGVyLCBmcm9tIGEga2VybmVsIGJ1aWxkIHBlcnNwZWN0aXZlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyByZWxhdGVkIHRvICYjMzQ7bG9nJiMzNDsgb3IgJiMzNDtsb2dnaW5nJiMzNDsgaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qTE9HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz01ND1jb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xubmV0L25ldGZpbHRlci9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9ODI9Y29uZmlnIE5GX0NPTk5UUkFDS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo5ODpjb25maWcgTkZfTE9HX1NZU0xPR1xubmV0L25ldGZpbHRlci9LY29uZmlnLTk5LVx0dHJpc3RhdGUgXCYjMzQ7U3lzbG9nIHBhY2tldCBsb2dnaW5nXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTUxMT1jb25maWcgTkZUX0NPTk5MSU1JVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MTktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTIwOmNvbmZpZyBORlRfTE9HXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTIxLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBsb2cgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTkzMD1jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9MRURcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTUzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjk1NDpjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9MT0dcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05NTUtXHR0cmlzdGF0ZSBcJiMzNDtMT0cgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9OTgyPWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX05FVE1BUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05OTEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6OTkyOmNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTkzLVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtORkxPR1wmIzM0OyB0YXJnZXQgc3VwcG9ydCYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTQ0CgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDYyOTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9ORVRMSU5LX0xPRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Nvbm50cmFja190Y3BfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZGVhZGxvY2sgaW4gdGhlIG5ldGZpbHRlciBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBieSBtb3ZpbmcgbG9nZ2luZyAod2hpY2ggY2FuIHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvIHRha2UgY3QtXHUwMDNlbG9jayBhZ2Fpbikgb3V0c2lkZSBvZiB0aGUgY3QtXHUwMDNlbG9jayBjcml0aWNhbCBzZWN0aW9uLiBEZWFkbG9ja3MgYXJlIGZ1bmN0aW9uYWwgYnVncywgYW5kIGZ1enppbmcgY2FuIGhlbHAgZW5zdXJlIHRoZSBkZWFkbG9jayBpcyByZXNvbHZlZCBhbmQgbm8gc2ltaWxhciBpc3N1ZXMgZXhpc3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfTkVUTElOS19MT0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9jb25udHJhY2tfdGNwX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRlYWRsb2NrIGluIHRoZSBuZXRmaWx0ZXIgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMgYnkgbW92aW5nIGxvZ2dpbmcgKHdoaWNoIGNhbiByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0byB0YWtlIGN0LVx1MDAzZWxvY2sgYWdhaW4pIG91dHNpZGUgb2YgdGhlIGN0LVx1MDAzZWxvY2sgY3JpdGljYWwgc2VjdGlvbi4gRGVhZGxvY2tzIGFyZSBmdW5jdGlvbmFsIGJ1Z3MsIGFuZCBmdXp6aW5nIGNhbiBoZWxwIGVuc3VyZSB0aGUgZGVhZGxvY2sgaXMgcmVzb2x2ZWQgYW5kIG5vIHNpbWlsYXIgaXNzdWVzIGV4aXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6MTMuMjA4NTEyNTIyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk3NTc2OTY5Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfTE9HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRlYWRsb2NrIGluIHRoZSBuZXRmaWx0ZXIgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMgYnkgbW92aW5nIGxvZ2dpbmcgKHdoaWNoIGNhbiByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0byB0YWtlIGN0LVxcdTAwM2Vsb2NrIGFnYWluKSBvdXRzaWRlIG9mIHRoZSBjdC1cXHUwMDNlbG9jayBjcml0aWNhbCBzZWN0aW9uLiBEZWFkbG9ja3MgYXJlIGZ1bmN0aW9uYWwgYnVncywgYW5kIGZ1enppbmcgY2FuIGhlbHAgZW5zdXJlIHRoZSBkZWFkbG9jayBpcyByZXNvbHZlZCBhbmQgbm8gc2ltaWxhciBpc3N1ZXMgZXhpc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjEzOjEzLjIwODUxOTA0MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNzYzOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2FiMzlhNjlkZmI5NjZmNmY2NzM4OWU1OWUwYmI4ZDMwNDZmMGE3MFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDA0OjEzOjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG5pbmRleCBjZWVlZDNkN2ZlNTIwLi5lNTg3NWI3NTI4ZmUwIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcXG5AQCAtNDgwLDM3ICs0ODAsODcgQEAgc3RhdGljIHZvaWQgdGNwX2luaXRfc2VuZGVyKHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcXG4gXFx0fVxcbiB9XFxuIFxcbi1fX3ByaW50Zig2LCA3KVxcbi1zdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmV0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpmbXQsIC4uLilcXG4rZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7XFxuK1xcdE5GX1RDUF9MT0dfTk9ORSxcXG4rXFx0TkZfVENQX0xPR19PVkVSU0hPVCxcXG4rXFx0TkZfVENQX0xPR19TRVFfT1ZFUixcXG4rXFx0TkZfVENQX0xPR19BQ0tfT1ZFUixcXG4rXFx0TkZfVENQX0xPR19TRVFfVU5ERVIsXFxuK1xcdE5GX1RDUF9MT0dfQUNLX1VOREVSLFxcbit9O1xcbitcXG4rc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7XFxuK1xcdGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZTtcXG4rXFx0dTMyIHZhbHVlO1xcbit9O1xcbitcXG4rc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvblxcbituZl90Y3Bfc3RvcmVfaW52YWxpZChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuK1xcdFxcdCAgICAgY29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxcbitcXHRcXHQgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZyxcXG4rXFx0XFx0ICAgICBlbnVtIG5mX2N0X3RjcF9hY3Rpb24gcmV0LFxcbitcXHRcXHQgICAgIGVudW0gbmZfdGNwX2ludmFsaWRfbG9nX3R5cGUgdHlwZSxcXG4rXFx0XFx0ICAgICB1MzIgdmFsdWUpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuID0gbmZfdGNwX3Blcm5ldChuZl9jdF9uZXQoY3QpKTtcXG4tXFx0c3RydWN0IHZhX2Zvcm1hdCB2YWY7XFxuLVxcdHZhX2xpc3QgYXJncztcXG4gXFx0Ym9vbCBiZV9saWJlcmFsO1xcbiBcXG4gXFx0YmVfbGliZXJhbCA9IHNlbmRlci1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9DVF9UQ1BfRkxBR19CRV9MSUJFUkFMIHx8IHRuLVxcdTAwM2V0Y3BfYmVfbGliZXJhbDtcXG4gXFx0aWYgKGJlX2xpYmVyYWwpXFxuIFxcdFxcdHJldHVybiBORkNUX1RDUF9BQ0NFUFQ7XFxuIFxcbi1cXHR2YV9zdGFydChhcmdzLCBmbXQpO1xcbi1cXHR2YWYuZm10ID0gZm10O1xcbi1cXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG4tXFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcIiVwVlxcXCIsIFxcdTAwMjZ2YWYpO1xcbi1cXHR2YV9lbmQoYXJncyk7XFxuLVxcbitcXHRsb2ctXFx1MDAzZXR5cGUgPSB0eXBlO1xcbitcXHRsb2ctXFx1MDAzZXZhbHVlID0gdmFsdWU7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nKVxcbit7XFxuK1xcdC8qIG5mbmV0bGlua19sb2cgbWF5IHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvXFxuK1xcdCAqIHRha2UgY3QtXFx1MDAzZWxvY2sgYWdhaW4gdmlhIHRjcF90b19ubGF0dHIoKSwgc28gaW52YWxpZCBUQ1AgbG9ncyBtdXN0XFxuK1xcdCAqIG9ubHkgYmUgZW1pdHRlZCBhZnRlciBkcm9wcGluZyBjdC1cXHUwMDNlbG9jay5cXG4rXFx0ICovXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRzd2l0Y2ggKGxvZy1cXHUwMDNldHlwZSkge1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIiV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfU0VRX09WRVI6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfQUNLX09WRVI6XFxuK1xcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFxcIkFDSyBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChBQ0tlZCBkYXRhIG5vdCBzZWVuIHlldClcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcXG4rXFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXFwiU0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgIGxvZy1cXHUwMDNldmFsdWUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBORl9UQ1BfTE9HX0FDS19VTkRFUjpcXG4rXFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBcXFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgbG9nLVxcdTAwM2V2YWx1ZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE5GX1RDUF9MT0dfTk9ORTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGVudW0gbmZfY3RfdGNwX2FjdGlvblxcbiB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4gXFx0ICAgICAgdW5zaWduZWQgaW50IGluZGV4LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCxcXG4tXFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXFxuK1xcdCAgICAgIHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgKmxvZylcXG4ge1xcbiBcXHRzdHJ1Y3QgaXBfY3RfdGNwICpzdGF0ZSA9IFxcdTAwMjZjdC1cXHUwMDNlcHJvdG8udGNwO1xcbiBcXHRzdHJ1Y3QgaXBfY3RfdGNwX3N0YXRlICpzZW5kZXIgPSBcXHUwMDI2c3RhdGUtXFx1MDAzZXNlZW5bZGlyXTtcXG5AQCAtNjQwLDMxICs2OTAsMjkgQEAgdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuIFxcdFxcdFxcdHNlbmRlci1cXHUwMDNldGRfZW5kID0gZW5kO1xcbiBcXHRcXHRcXHRzZW5kZXItXFx1MDAzZWZsYWdzIHw9IElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQ7XFxuIFxcbi1cXHRcXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCIldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcXFwiLCBvdmVyc2hvdCk7XFxuK1xcdFxcdFxcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSxcXG4rXFx0XFx0XFx0XFx0ICAgTkZfVENQX0xPR19PVkVSU0hPVCwgb3ZlcnNob3QpO1xcbiBcXHRcXHR9XFxuIFxcbi1cXHRcXHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSU5WQUxJRCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBcXFwiU0VRIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKG92ZXIgdGhlIHdpbmRvdyBvZiB0aGUgcmVjZWl2ZXIpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBzZW5kZXItXFx1MDAzZXRkX21heGVuZCArIDEpO1xcbitcXHRcXHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JTlZBTElELFxcbitcXHRcXHRcXHRcXHQgICBORl9UQ1BfTE9HX1NFUV9PVkVSLCBzZW5kZXItXFx1MDAzZXRkX21heGVuZCArIDEpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIWJlZm9yZShzYWNrLCByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSkpXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JTlZBTElELFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICByZWNlaXZlci1cXHUwMDNldGRfZW5kICsgMSk7XFxuK1xcdFxcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE5GX1RDUF9MT0dfQUNLX09WRVIsIHJlY2VpdmVyLVxcdTAwM2V0ZF9lbmQgKyAxKTtcXG4gXFxuIFxcdC8qIElzIHRoZSBlbmRpbmcgc2VxdWVuY2UgaW4gdGhlIHJlY2VpdmUgd2luZG93IChpZiBhdmFpbGFibGUpPyAqL1xcbiBcXHRpbl9yZWN2X3dpbiA9ICFyZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIHx8XFxuIFxcdFxcdCAgICAgIGFmdGVyKGVuZCwgc2VuZGVyLVxcdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIC0gMSk7XFxuIFxcdGlmICghaW5fcmVjdl93aW4pXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgXFxcIlNFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBzZW5kZXItXFx1MDAzZXRkX2VuZCAtIHJlY2VpdmVyLVxcdTAwM2V0ZF9tYXh3aW4gLSAxKTtcXG4rXFx0XFx0cmV0dXJuIG5mX3RjcF9zdG9yZV9pbnZhbGlkKGN0LCBzZW5kZXIsIGxvZywgTkZDVF9UQ1BfSUdOT1JFLFxcbitcXHRcXHRcXHRcXHRcXHQgICBORl9UQ1BfTE9HX1NFUV9VTkRFUixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc2VuZGVyLVxcdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cXHUwMDNldGRfbWF4d2luIC0gMSk7XFxuIFxcdGlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItXFx1MDAzZXRkX2VuZCAtIE1BWEFDS1dJTkRPVyhzZW5kZXIpIC0gMSkpXFxuLVxcdFxcdHJldHVybiBuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgaG9va19zdGF0ZSwgc2VuZGVyLCBORkNUX1RDUF9JR05PUkUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgXFxcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgIHJlY2VpdmVyLVxcdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xcbitcXHRcXHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE5GX1RDUF9MT0dfQUNLX1VOREVSLFxcbitcXHRcXHRcXHRcXHRcXHQgICByZWNlaXZlci1cXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKTtcXG4gXFxuIFxcdC8qIFRha2UgaW50byBhY2NvdW50IHdpbmRvdyBzY2FsaW5nIChSRkMgMTMyMykuICovXFxuIFxcdGlmICghdGNwaC1cXHUwMDNlc3luKVxcbkBAIC03MTksMTEgKzc2Nyw4IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbiBcXHRyZXR1cm4gTkZDVF9UQ1BfQUNDRVBUO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4tXFx0XFx0XFx0XFx0XFx0IGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuLVxcdFxcdFxcdFxcdFxcdCBpbnQgaW5kZXgsXFxuLVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKmhvb2tfc3RhdGUpXFxuK3N0YXRpYyBib29sIF9fY29sZFxcbituZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCBpbnQgaW5kZXgpXFxuIHtcXG4gXFx0Y29uc3QgdW5zaWduZWQgaW50ICp0aW1lb3V0cztcXG4gXFx0Y29uc3Qgc3RydWN0IG5mX3RjcF9uZXQgKnRuO1xcbkBAIC03MzIsNyArNzc3LDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcbiBcXHRpZiAoIXRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXFx1MDAyNmN0LVxcdTAwM2VzdGF0dXMpIHx8XFxuIFxcdCAgICB0ZXN0X2JpdChJUFNfRklYRURfVElNRU9VVF9CSVQsIFxcdTAwMjZjdC1cXHUwMDNlc3RhdHVzKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHQvKiBXZSBkb24ndCB3YW50IHRvIGhhdmUgY29ubmVjdGlvbnMgaGFuZ2luZyBhcm91bmQgaW4gRVNUQUJMSVNIRURcXG4gXFx0ICogc3RhdGUgZm9yIGxvbmcgdGltZSAnanVzdCBiZWNhdXNlJyBjb25udHJhY2sgZGVlbWVkIGEgRklOL1JTVFxcbkBAIC03NDcsNyArNzkyLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdGNhc2UgVENQX0ZJTl9TRVQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0Olxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGN0LVxcdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgIT0gZGlyIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTc1NSw3ICs4MDAsNyBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0ICAgICBjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXggPT0gVENQX1JTVF9TRVQpKSB7XFxuIFxcdFxcdGV4cGlyZXMgPSBuZl9jdF9leHBpcmVzKGN0KTtcXG4gXFx0XFx0aWYgKGV4cGlyZXMgXFx1MDAzYyAxMjAgKiBIWilcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRcXHR0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XFxuIFxcdFxcdHRpbWVvdXRzID0gbmZfY3RfdGltZW91dF9sb29rdXAoY3QpO1xcbkBAIC03NjQsMTYgKzgwOSwxNSBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFxuIFxcdFxcdHRpbWVvdXQgPSBSRUFEX09OQ0UodGltZW91dHNbVENQX0NPTk5UUkFDS19VTkFDS10pO1xcbiBcXHRcXHRpZiAoZXhwaXJlcyBcXHUwMDNlIHRpbWVvdXQpIHtcXG4tXFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJwYWNrZXQgKGluZGV4ICVkLCBkaXIgJWQpIHJlc3BvbnNlIGZvciBpbmRleCAlZCBsb3dlciB0aW1lb3V0IHRvICV1XFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICBpbmRleCwgZGlyLCBjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfaW5kZXgsIHRpbWVvdXQpO1xcbi1cXG4gXFx0XFx0XFx0V1JJVEVfT05DRShjdC1cXHUwMDNldGltZW91dCwgdGltZW91dCArIG5mY3RfdGltZV9zdGFtcCk7XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGN0LVxcdTAwM2Vwcm90by50Y3AubGFzdF9pbmRleCA9IGluZGV4O1xcbiBcXHRcXHRjdC1cXHUwMDNlcHJvdG8udGNwLmxhc3RfZGlyID0gZGlyO1xcbiBcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuIC8qIHRhYmxlIG9mIHZhbGlkIGZsYWcgY29tYmluYXRpb25zIC0gUFVTSCwgRUNFIGFuZCBDV1IgYXJlIGFsd2F5cyB2YWxpZCAqL1xcbkBAIC05NzEsNiArMTAxNSw4IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdGVudW0gdGNwX2Nvbm50cmFjayBuZXdfc3RhdGUsIG9sZF9zdGF0ZTtcXG4gXFx0dW5zaWduZWQgaW50IGluZGV4LCAqdGltZW91dHM7XFxuIFxcdGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXM7XFxuK1xcdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgbG9nID0ge307XFxuK1xcdGJvb2wgbG93ZXJlZF90aW1lb3V0ID0gZmFsc2U7XFxuIFxcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7XFxuIFxcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xcbiBcXHRzdHJ1Y3QgdGNwaGRyIF90Y3BoO1xcbkBAIC0xMjUyLDE0ICsxMjk4LDE4IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdH1cXG4gXFxuIFxcdHJlcyA9IHRjcF9pbl93aW5kb3coY3QsIGRpciwgaW5kZXgsXFxuLVxcdFxcdFxcdCAgICBza2IsIGRhdGFvZmYsIHRoLCBzdGF0ZSk7XFxuK1xcdFxcdFxcdCAgICBza2IsIGRhdGFvZmYsIHRoLCBcXHUwMDI2bG9nKTtcXG4gXFx0c3dpdGNoIChyZXMpIHtcXG4gXFx0Y2FzZSBORkNUX1RDUF9JR05PUkU6XFxuIFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFx1MDAyNmxvZyk7XFxuIFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIFxcdGNhc2UgTkZDVF9UQ1BfSU5WQUxJRDpcXG4tXFx0XFx0bmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4LCBza2IsIHN0YXRlKTtcXG4rXFx0XFx0bG93ZXJlZF90aW1lb3V0ID0gbmZfdGNwX2hhbmRsZV9pbnZhbGlkKGN0LCBkaXIsIGluZGV4KTtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0bmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLCBcXHUwMDI2bG9nKTtcXG4rXFx0XFx0aWYgKGxvd2VyZWRfdGltZW91dClcXG4rXFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcImxvd2VyZWQgdGltZW91dCB0byBVTkFDS1xcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG4gXFx0Y2FzZSBORkNUX1RDUF9BQ0NFUFQ6XFxuIFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDoxMzoxMy43MDAzOTMwOTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozOTcwODUwODAyMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19MT0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGVhZGxvY2sgaW4gdGhlIG5ldGZpbHRlciBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBieSBtb3ZpbmcgbG9nZ2luZyAod2hpY2ggY2FuIHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvIHRha2UgY3QtXFx1MDAzZWxvY2sgYWdhaW4pIG91dHNpZGUgb2YgdGhlIGN0LVxcdTAwM2Vsb2NrIGNyaXRpY2FsIHNlY3Rpb24uIERlYWRsb2NrcyBhcmUgZnVuY3Rpb25hbCBidWdzLCBhbmQgZnV6emluZyBjYW4gaGVscCBlbnN1cmUgdGhlIGRlYWRsb2NrIGlzIHJlc29sdmVkIGFuZCBubyBzaW1pbGFyIGlzc3VlcyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2FiMzlhNjlkZmI5NjZmNmY2NzM4OWU1OWUwYmI4ZDMwNDZmMGE3MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDQ6MTM6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5pbmRleCBjZWVlZDNkN2ZlNTIwLi5lNTg3NWI3NTI4ZmUwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jXG5AQCAtNDgwLDM3ICs0ODAsODcgQEAgc3RhdGljIHZvaWQgdGNwX2luaXRfc2VuZGVyKHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbiBcdH1cbiB9XG4gXG4tX19wcmludGYoNiwgNylcbi1zdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi1cdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXG4tXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyLFxuLVx0XHRcdFx0XHRcdGVudW0gbmZfY3RfdGNwX2FjdGlvbiByZXQsXG4tXHRcdFx0XHRcdFx0Y29uc3QgY2hhciAqZm10LCAuLi4pXG4rZW51bSBuZl90Y3BfaW52YWxpZF9sb2dfdHlwZSB7XG4rXHRORl9UQ1BfTE9HX05PTkUsXG4rXHRORl9UQ1BfTE9HX09WRVJTSE9ULFxuK1x0TkZfVENQX0xPR19TRVFfT1ZFUixcbitcdE5GX1RDUF9MT0dfQUNLX09WRVIsXG4rXHRORl9UQ1BfTE9HX1NFUV9VTkRFUixcbitcdE5GX1RDUF9MT0dfQUNLX1VOREVSLFxuK307XG4rXG4rc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyB7XG4rXHRlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGU7XG4rXHR1MzIgdmFsdWU7XG4rfTtcbitcbitzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uXG4rbmZfdGNwX3N0b3JlX2ludmFsaWQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuK1x0XHQgICAgIGNvbnN0IHN0cnVjdCBpcF9jdF90Y3Bfc3RhdGUgKnNlbmRlcixcbitcdFx0ICAgICBzdHJ1Y3QgbmZfdGNwX2ludmFsaWRfbG9nICpsb2csXG4rXHRcdCAgICAgZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJldCxcbitcdFx0ICAgICBlbnVtIG5mX3RjcF9pbnZhbGlkX2xvZ190eXBlIHR5cGUsXG4rXHRcdCAgICAgdTMyIHZhbHVlKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0biA9IG5mX3RjcF9wZXJuZXQobmZfY3RfbmV0KGN0KSk7XG4tXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcbi1cdHZhX2xpc3QgYXJncztcbiBcdGJvb2wgYmVfbGliZXJhbDtcbiBcbiBcdGJlX2xpYmVyYWwgPSBzZW5kZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElQX0NUX1RDUF9GTEFHX0JFX0xJQkVSQUwgfHwgdG4tXHUwMDNldGNwX2JlX2xpYmVyYWw7XG4gXHRpZiAoYmVfbGliZXJhbClcbiBcdFx0cmV0dXJuIE5GQ1RfVENQX0FDQ0VQVDtcbiBcbi1cdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XG4tXHR2YWYuZm10ID0gZm10O1xuLVx0dmFmLnZhID0gXHUwMDI2YXJncztcbi1cdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFwiJXBWXCIsIFx1MDAyNnZhZik7XG4tXHR2YV9lbmQoYXJncyk7XG4tXG4rXHRsb2ctXHUwMDNldHlwZSA9IHR5cGU7XG4rXHRsb2ctXHUwMDNldmFsdWUgPSB2YWx1ZTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5mX3RjcF9sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nKVxuK3tcbitcdC8qIG5mbmV0bGlua19sb2cgbWF5IHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvXG4rXHQgKiB0YWtlIGN0LVx1MDAzZWxvY2sgYWdhaW4gdmlhIHRjcF90b19ubGF0dHIoKSwgc28gaW52YWxpZCBUQ1AgbG9ncyBtdXN0XG4rXHQgKiBvbmx5IGJlIGVtaXR0ZWQgYWZ0ZXIgZHJvcHBpbmcgY3QtXHUwMDNlbG9jay5cbitcdCAqL1xuK1x0bG9ja2RlcF9hc3NlcnRfbm90X2hlbGQoXHUwMDI2Y3QtXHUwMDNlbG9jayk7XG4rXG4rXHRzd2l0Y2ggKGxvZy1cdTAwM2V0eXBlKSB7XG4rXHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XG4rXHRcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXG4rXHRcdFx0XHRcdCAgXCIldSBieXRlcyBtb3JlIHRoYW4gZXhwZWN0ZWRcIixcbitcdFx0XHRcdFx0ICBsb2ctXHUwMDNldmFsdWUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTkZfVENQX0xPR19TRVFfT1ZFUjpcbitcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbitcdFx0XHRcdFx0ICBcIlNFUSBpcyBvdmVyIHVwcGVyIGJvdW5kICV1IChvdmVyIHRoZSB3aW5kb3cgb2YgdGhlIHJlY2VpdmVyKVwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX0FDS19PVkVSOlxuK1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuK1x0XHRcdFx0XHQgIFwiQUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcbitcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcbitcdFx0XHRcdFx0ICBcIlNFUSBpcyB1bmRlciBsb3dlciBib3VuZCAldSAoYWxyZWFkeSBBQ0tlZCBkYXRhIHJldHJhbnNtaXR0ZWQpXCIsXG4rXHRcdFx0XHRcdCAgbG9nLVx1MDAzZXZhbHVlKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE5GX1RDUF9MT0dfQUNLX1VOREVSOlxuK1x0XHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxuK1x0XHRcdFx0XHQgIFwiaWdub3JlZCBBQ0sgdW5kZXIgbG93ZXIgYm91bmQgJXUgKHBvc3NpYmxlIG92ZXJseSBkZWxheWVkKVwiLFxuK1x0XHRcdFx0XHQgIGxvZy1cdTAwM2V2YWx1ZSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBORl9UQ1BfTE9HX05PTkU6XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgZW51bSBuZl9jdF90Y3BfYWN0aW9uXG4gdGNwX2luX3dpbmRvdyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4gXHQgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgY29uc3Qgc3RydWN0IHRjcGhkciAqdGNwaCxcbi1cdCAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpob29rX3N0YXRlKVxuK1x0ICAgICAgc3RydWN0IG5mX3RjcF9pbnZhbGlkX2xvZyAqbG9nKVxuIHtcbiBcdHN0cnVjdCBpcF9jdF90Y3AgKnN0YXRlID0gXHUwMDI2Y3QtXHUwMDNlcHJvdG8udGNwO1xuIFx0c3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc2VuZGVyID0gXHUwMDI2c3RhdGUtXHUwMDNlc2VlbltkaXJdO1xuQEAgLTY0MCwzMSArNjkwLDI5IEBAIHRjcF9pbl93aW5kb3coc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuIFx0XHRcdHNlbmRlci1cdTAwM2V0ZF9lbmQgPSBlbmQ7XG4gXHRcdFx0c2VuZGVyLVx1MDAzZWZsYWdzIHw9IElQX0NUX1RDUF9GTEFHX0RBVEFfVU5BQ0tOT1dMRURHRUQ7XG4gXG4tXHRcdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0XHQgIFwiJXUgYnl0ZXMgbW9yZSB0aGFuIGV4cGVjdGVkXCIsIG92ZXJzaG90KTtcbitcdFx0XHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXG4rXHRcdFx0XHQgICBORl9UQ1BfTE9HX09WRVJTSE9ULCBvdmVyc2hvdCk7XG4gXHRcdH1cbiBcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lOVkFMSUQsXG4tXHRcdFx0XHRcdCAgXCJTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcIixcbi1cdFx0XHRcdFx0ICBzZW5kZXItXHUwMDNldGRfbWF4ZW5kICsgMSk7XG4rXHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsXG4rXHRcdFx0XHQgICBORl9UQ1BfTE9HX1NFUV9PVkVSLCBzZW5kZXItXHUwMDNldGRfbWF4ZW5kICsgMSk7XG4gXHR9XG4gXG4gXHRpZiAoIWJlZm9yZShzYWNrLCByZWNlaXZlci1cdTAwM2V0ZF9lbmQgKyAxKSlcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lOVkFMSUQsXG4tXHRcdFx0XHRcdCAgXCJBQ0sgaXMgb3ZlciB1cHBlciBib3VuZCAldSAoQUNLZWQgZGF0YSBub3Qgc2VlbiB5ZXQpXCIsXG4tXHRcdFx0XHRcdCAgcmVjZWl2ZXItXHUwMDNldGRfZW5kICsgMSk7XG4rXHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lOVkFMSUQsXG4rXHRcdFx0XHRcdCAgIE5GX1RDUF9MT0dfQUNLX09WRVIsIHJlY2VpdmVyLVx1MDAzZXRkX2VuZCArIDEpO1xuIFxuIFx0LyogSXMgdGhlIGVuZGluZyBzZXF1ZW5jZSBpbiB0aGUgcmVjZWl2ZSB3aW5kb3cgKGlmIGF2YWlsYWJsZSk/ICovXG4gXHRpbl9yZWN2X3dpbiA9ICFyZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gfHxcbiBcdFx0ICAgICAgYWZ0ZXIoZW5kLCBzZW5kZXItXHUwMDNldGRfZW5kIC0gcmVjZWl2ZXItXHUwMDNldGRfbWF4d2luIC0gMSk7XG4gXHRpZiAoIWluX3JlY3Zfd2luKVxuLVx0XHRyZXR1cm4gbmZfdGNwX2xvZ19pbnZhbGlkKHNrYiwgY3QsIGhvb2tfc3RhdGUsIHNlbmRlciwgTkZDVF9UQ1BfSUdOT1JFLFxuLVx0XHRcdFx0XHQgIFwiU0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcIixcbi1cdFx0XHRcdFx0ICBzZW5kZXItXHUwMDNldGRfZW5kIC0gcmVjZWl2ZXItXHUwMDNldGRfbWF4d2luIC0gMSk7XG4rXHRcdHJldHVybiBuZl90Y3Bfc3RvcmVfaW52YWxpZChjdCwgc2VuZGVyLCBsb2csIE5GQ1RfVENQX0lHTk9SRSxcbitcdFx0XHRcdFx0ICAgTkZfVENQX0xPR19TRVFfVU5ERVIsXG4rXHRcdFx0XHRcdCAgIHNlbmRlci1cdTAwM2V0ZF9lbmQgLSByZWNlaXZlci1cdTAwM2V0ZF9tYXh3aW4gLSAxKTtcbiBcdGlmICghYWZ0ZXIoc2FjaywgcmVjZWl2ZXItXHUwMDNldGRfZW5kIC0gTUFYQUNLV0lORE9XKHNlbmRlcikgLSAxKSlcbi1cdFx0cmV0dXJuIG5mX3RjcF9sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLCBzZW5kZXIsIE5GQ1RfVENQX0lHTk9SRSxcbi1cdFx0XHRcdFx0ICBcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcIixcbi1cdFx0XHRcdFx0ICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xuK1x0XHRyZXR1cm4gbmZfdGNwX3N0b3JlX2ludmFsaWQoY3QsIHNlbmRlciwgbG9nLCBORkNUX1RDUF9JR05PUkUsXG4rXHRcdFx0XHRcdCAgIE5GX1RDUF9MT0dfQUNLX1VOREVSLFxuK1x0XHRcdFx0XHQgICByZWNlaXZlci1cdTAwM2V0ZF9lbmQgLSBNQVhBQ0tXSU5ET1coc2VuZGVyKSAtIDEpO1xuIFxuIFx0LyogVGFrZSBpbnRvIGFjY291bnQgd2luZG93IHNjYWxpbmcgKFJGQyAxMzIzKS4gKi9cbiBcdGlmICghdGNwaC1cdTAwM2VzeW4pXG5AQCAtNzE5LDExICs3NjcsOCBAQCB0Y3BfaW5fd2luZG93KHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbiBcdHJldHVybiBORkNUX1RDUF9BQ0NFUFQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuLVx0XHRcdFx0XHQgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi1cdFx0XHRcdFx0IGludCBpbmRleCxcbi1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqaG9va19zdGF0ZSlcbitzdGF0aWMgYm9vbCBfX2NvbGRcbituZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCBpbnQgaW5kZXgpXG4ge1xuIFx0Y29uc3QgdW5zaWduZWQgaW50ICp0aW1lb3V0cztcbiBcdGNvbnN0IHN0cnVjdCBuZl90Y3BfbmV0ICp0bjtcbkBAIC03MzIsNyArNzc3LDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXG4gXHRpZiAoIXRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgXHUwMDI2Y3QtXHUwMDNlc3RhdHVzKSB8fFxuIFx0ICAgIHRlc3RfYml0KElQU19GSVhFRF9USU1FT1VUX0JJVCwgXHUwMDI2Y3QtXHUwMDNlc3RhdHVzKSlcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKiBXZSBkb24ndCB3YW50IHRvIGhhdmUgY29ubmVjdGlvbnMgaGFuZ2luZyBhcm91bmQgaW4gRVNUQUJMSVNIRURcbiBcdCAqIHN0YXRlIGZvciBsb25nIHRpbWUgJ2p1c3QgYmVjYXVzZScgY29ubnRyYWNrIGRlZW1lZCBhIEZJTi9SU1RcbkBAIC03NDcsNyArNzkyLDcgQEAgc3RhdGljIHZvaWQgX19jb2xkIG5mX3RjcF9oYW5kbGVfaW52YWxpZChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRjYXNlIFRDUF9GSU5fU0VUOlxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0aWYgKGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2RpciAhPSBkaXIgXHUwMDI2XHUwMDI2XG5AQCAtNzU1LDcgKzgwMCw3IEBAIHN0YXRpYyB2b2lkIF9fY29sZCBuZl90Y3BfaGFuZGxlX2ludmFsaWQoc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0ICAgICBjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9pbmRleCA9PSBUQ1BfUlNUX1NFVCkpIHtcbiBcdFx0ZXhwaXJlcyA9IG5mX2N0X2V4cGlyZXMoY3QpO1xuIFx0XHRpZiAoZXhwaXJlcyBcdTAwM2MgMTIwICogSFopXG4tXHRcdFx0cmV0dXJuO1xuK1x0XHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdFx0dG4gPSBuZl90Y3BfcGVybmV0KG5mX2N0X25ldChjdCkpO1xuIFx0XHR0aW1lb3V0cyA9IG5mX2N0X3RpbWVvdXRfbG9va3VwKGN0KTtcbkBAIC03NjQsMTYgKzgwOSwxNSBAQCBzdGF0aWMgdm9pZCBfX2NvbGQgbmZfdGNwX2hhbmRsZV9pbnZhbGlkKHN0cnVjdCBuZl9jb25uICpjdCxcbiBcbiBcdFx0dGltZW91dCA9IFJFQURfT05DRSh0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXSk7XG4gXHRcdGlmIChleHBpcmVzIFx1MDAzZSB0aW1lb3V0KSB7XG4tXHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBob29rX3N0YXRlLFxuLVx0XHRcdFx0XHQgIFwicGFja2V0IChpbmRleCAlZCwgZGlyICVkKSByZXNwb25zZSBmb3IgaW5kZXggJWQgbG93ZXIgdGltZW91dCB0byAldVwiLFxuLVx0XHRcdFx0XHQgIGluZGV4LCBkaXIsIGN0LVx1MDAzZXByb3RvLnRjcC5sYXN0X2luZGV4LCB0aW1lb3V0KTtcbi1cbiBcdFx0XHRXUklURV9PTkNFKGN0LVx1MDAzZXRpbWVvdXQsIHRpbWVvdXQgKyBuZmN0X3RpbWVfc3RhbXApO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHRjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9pbmRleCA9IGluZGV4O1xuIFx0XHRjdC1cdTAwM2Vwcm90by50Y3AubGFzdF9kaXIgPSBkaXI7XG4gXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuIC8qIHRhYmxlIG9mIHZhbGlkIGZsYWcgY29tYmluYXRpb25zIC0gUFVTSCwgRUNFIGFuZCBDV1IgYXJlIGFsd2F5cyB2YWxpZCAqL1xuQEAgLTk3MSw2ICsxMDE1LDggQEAgaW50IG5mX2Nvbm50cmFja190Y3BfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdGVudW0gdGNwX2Nvbm50cmFjayBuZXdfc3RhdGUsIG9sZF9zdGF0ZTtcbiBcdHVuc2lnbmVkIGludCBpbmRleCwgKnRpbWVvdXRzO1xuIFx0ZW51bSBuZl9jdF90Y3BfYWN0aW9uIHJlcztcbitcdHN0cnVjdCBuZl90Y3BfaW52YWxpZF9sb2cgbG9nID0ge307XG4rXHRib29sIGxvd2VyZWRfdGltZW91dCA9IGZhbHNlO1xuIFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcbiBcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoO1xuIFx0c3RydWN0IHRjcGhkciBfdGNwaDtcbkBAIC0xMjUyLDE0ICsxMjk4LDE4IEBAIGludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHR9XG4gXG4gXHRyZXMgPSB0Y3BfaW5fd2luZG93KGN0LCBkaXIsIGluZGV4LFxuLVx0XHRcdCAgICBza2IsIGRhdGFvZmYsIHRoLCBzdGF0ZSk7XG4rXHRcdFx0ICAgIHNrYiwgZGF0YW9mZiwgdGgsIFx1MDAyNmxvZyk7XG4gXHRzd2l0Y2ggKHJlcykge1xuIFx0Y2FzZSBORkNUX1RDUF9JR05PUkU6XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuK1x0XHRuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFx1MDAyNmxvZyk7XG4gXHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gXHRjYXNlIE5GQ1RfVENQX0lOVkFMSUQ6XG4tXHRcdG5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCwgc2tiLCBzdGF0ZSk7XG4rXHRcdGxvd2VyZWRfdGltZW91dCA9IG5mX3RjcF9oYW5kbGVfaW52YWxpZChjdCwgZGlyLCBpbmRleCk7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmN0LVx1MDAzZWxvY2spO1xuK1x0XHRuZl90Y3BfbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFx1MDAyNmxvZyk7XG4rXHRcdGlmIChsb3dlcmVkX3RpbWVvdXQpXG4rXHRcdFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXCJsb3dlcmVkIHRpbWVvdXQgdG8gVU5BQ0tcIik7XG4gXHRcdHJldHVybiAtTkZfQUNDRVBUO1xuIFx0Y2FzZSBORkNUX1RDUF9BQ0NFUFQ6XG4gXHRcdGJyZWFrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6MTMuNzAwMzk2MDUxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODc2MjQ4NjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDb25udHJhY2sgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmNgLCBhbmQgaXQncyBhbGwgYWJvdXQgaG93IGludmFsaWQgVENQIHBhY2tldHMgYXJlIGxvZ2dlZCB3aXRoaW4gY29ubnRyYWNrLiBUaGUgb2xkIGNvZGUgaGFkIGEgcG90ZW50aWFsIGRlYWRsb2NrLCB3aGVyZSBob2xkaW5nIGBjdC1cdTAwM2Vsb2NrYCB3aGlsZSBjYWxsaW5nIGBuZl90Y3BfbG9nX2ludmFsaWRgIGNvdWxkIGV2ZW50dWFsbHkgbGVhZCB0byByZS1lbnRlcmluZyB0aGUgY29ubnRyYWNrIGF0dHJpYnV0ZSBkdW1waW5nIHByb2Nlc3MgdmlhIGBuZm5ldGxpbmtfbG9nYCBhbmQgdHJ5aW5nIHRvIHJlYWNxdWlyZSBgY3QtXHUwMDNlbG9ja2AuXG5cblRoaXMgcGF0Y2ggY2xldmVybHkgZml4ZXMgaXQgYnkgc3RvcmluZyB0aGUgaW52YWxpZCBsb2cgaW5mb3JtYXRpb24gZmlyc3QgaW4gYSBzdHJ1Y3QgYG5mX3RjcF9pbnZhbGlkX2xvZ2AgYW5kIHRoZW4gY2FsbGluZyBgbmZfdGNwX2xvZ19pbnZhbGlkYCAqYWZ0ZXIqIGRyb3BwaW5nIHRoZSBsb2NrLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZT8gSXQncyBkZWZpbml0ZWx5IGNoYW5naW5nIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCB0aGUgbG9nZ2luZy4gVGhlIHByb21wdCBtZW50aW9ucyBzb21ldGhpbmcgYWJvdXQgbm90IGZ1enppbmcgaWYgaXQncyBcInB1cmVseSBkZWNvcmF0aXZlXCIgbGlrZSBsb2dnaW5nLiBCdXQgaG9sZCBvbiwgbG9nZ2luZyBpc24ndCBhbHdheXMganVzdCBkZWNvcmF0aXZlLCBpcyBpdD8gYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIHVzZXMgYG5mbmV0bGlua19sb2dgLCB3aGljaCBzZW5kcyBhIG5ldGxpbmsgbWVzc2FnZSB0byB1c2Vyc3BhY2UhIFRoYXQncyBub3QganVzdCBwcmV0dHktcHJpbnRpbmc7IGl0J3MgYSByZWFsIGludGVyYWN0aW9uLlxuXG5UaGUgcGF0Y2ggKmFsc28qIGFkZHMgYGxvY2tkZXBfYXNzZXJ0X25vdF9oZWxkKFx1MDAyNmN0LVx1MDAzZWxvY2spYCBhbmQgZHJvcHMgdGhlIGxvY2sgKmJlZm9yZSogbG9nZ2luZy4gVGhpcyBmaXhlcyBhIGRlYWRsb2NrIHdoaWNoIGlzIGFic29sdXRlbHkgYSBmdW5jdGlvbmFsIGJ1Zy4gSWYgc3l6a2FsbGVyIGNvdWxkIHRyaWdnZXIgdGhpcyBkZWFkbG9jayBiZWZvcmUsIHdlICphYnNvbHV0ZWx5KiBuZWVkIHRvIHRlc3QgdGhpcyBmaXggYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgbW9yZSBkZWFkbG9ja3MgbHVya2luZy5cblxuVGhlIHF1ZXN0aW9uIGlzLCBpcyBtb3ZpbmcgdGhlIGxvZ2dpbmcgb3V0c2lkZSB0aGUgbG9jayBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBJdCdzIGNoYW5naW5nIHRoZSBvcmRlciBvZiBsb2NrIGFjcXVpc2l0aW9uL3JlbGVhc2UgYW5kIHdoYXQncyBleGVjdXRlZCB3aXRoaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24uIFNvLCB5ZXMsIGl04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2UgaXQgZml4ZXMgdGhlIGRlYWRsb2NrLlxuXG5UaGVyZSBpcyBhIGNoYW5nZSB3aGVyZSBgbmZfdGNwX2hhbmRsZV9pbnZhbGlkYCBub3cgcmV0dXJucyBgbG93ZXJlZF90aW1lb3V0YCwgYW5kIGl0IGxvZ3MgXCJsb3dlcmVkIHRpbWVvdXQgdG8gVU5BQ0tcIiBvdXRzaWRlIHRoZSBsb2NrLiBUaGF0J3MgYSBsb2dnaW5nIGNoYW5nZSwgYnV0IGl04oCZcyBzdGlsbCBwYXJ0IG9mIHRoZSBmdW5jdGlvbmFsIGZpeC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgdXNlcyBgbmZuZXRsaW5rX2xvZ2AuIElmIHRoYXQncyB0aGUgY2FzZSwgd2UncmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0J3Mgd29ydGggdGVzdGluZy4gSSdsbCBzZWFyY2ggZm9yIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjAyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6MjIuNDYyODg0NTAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0OTY4NzU2MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3RfbDRwcm90b19sb2dfaW52YWxpZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD0xNDk9X19wcmludGYoNCwgNSkgX19jb2xkXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg6MTUwOnZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oLTE1MS1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg9MTY1PXN0YXRpYyBpbmxpbmUgX19wcmludGYoNCwgNSkgX19jb2xkXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg6MTY2OnZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oLTE2Ny1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYz03Mj1fX3ByaW50Zig0LCA1KVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6NzM6dm9pZCBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy03NC1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05My19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYzo5NDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jLTk1LSNlbmRpZlxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTE0OD1zdGF0aWMgaW50IGRvX2Jhc2ljX2NoZWNrcyhzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMTc0LVxcdFxcdCAgICAgY291bnQgIT0gMCkgfHwgIXNjaC1cXHUwMDNlbGVuZ3RoKSB7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jOjE3NTpcXHRcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0xNzYtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiJXMgZmFpbGVkLiBjaHVuayBudW0gJWQsIHR5cGUgJWQsIGxlbiAlZCBmbGFnICVkXFxcXG5cXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jPTMyNz1pbnQgbmZfY29ubnRyYWNrX3NjdHBfcGFja2V0KHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYy0zNzMtXFx0ICAgIHNoLVxcdTAwM2V2dGFnICE9IGN0LVxcdTAwM2Vwcm90by5zY3RwLnZ0YWdbZGlyXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzozNzQ6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtMzc1LVxcdFxcdFxcdFxcdFxcdCAgXFxcInZlcmlmaWNhdGlvbiB0YWcgY2hlY2sgZmFpbGVkICV4IHZzICV4IGZvciBkaXIgJWRcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jLTQ1My1cXHRcXHRpZiAobmV3X3N0YXRlID09IFNDVFBfQ09OTlRSQUNLX01BWCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYzo0NTQ6XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMtNDU1LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFxcIkludmFsaWQsIG9sZF9zdGF0ZSAlZCwgZGlyICVkLCB0eXBlICVkXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTUxNz1zdGF0aWMgdm9pZCBuZl90Y3BfbG9nX2ludmFsaWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUyOS1cXHRjYXNlIE5GX1RDUF9MT0dfT1ZFUlNIT1Q6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTMwOlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTMxLVxcdFxcdFxcdFxcdFxcdCAgXFxcIiV1IGJ5dGVzIG1vcmUgdGhhbiBleHBlY3RlZFxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01MzQtXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9PVkVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjUzNTpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTUzNi1cXHRcXHRcXHRcXHRcXHQgIFxcXCJTRVEgaXMgb3ZlciB1cHBlciBib3VuZCAldSAob3ZlciB0aGUgd2luZG93IG9mIHRoZSByZWNlaXZlcilcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTM5LVxcdGNhc2UgTkZfVENQX0xPR19BQ0tfT1ZFUjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NDA6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDEtXFx0XFx0XFx0XFx0XFx0ICBcXFwiQUNLIGlzIG92ZXIgdXBwZXIgYm91bmQgJXUgKEFDS2VkIGRhdGEgbm90IHNlZW4geWV0KVxcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDQtXFx0Y2FzZSBORl9UQ1BfTE9HX1NFUV9VTkRFUjpcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzo1NDU6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy01NDYtXFx0XFx0XFx0XFx0XFx0ICBcXFwiU0VRIGlzIHVuZGVyIGxvd2VyIGJvdW5kICV1IChhbHJlYWR5IEFDS2VkIGRhdGEgcmV0cmFuc21pdHRlZClcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTQ5LVxcdGNhc2UgTkZfVENQX0xPR19BQ0tfVU5ERVI6XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6NTUwOlxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtNTUxLVxcdFxcdFxcdFxcdFxcdCAgXFxcImlnbm9yZWQgQUNLIHVuZGVyIGxvd2VyIGJvdW5kICV1IChwb3NzaWJsZSBvdmVybHkgZGVsYXllZClcXFwiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM9MTAwNz1pbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTE2MC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjExNjE6XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTYyLVxcdFxcdFxcdFxcdFxcdCAgXFxcInBhY2tldCAoaW5kZXggJWQpIGluIGRpciAlZCBpZ25vcmVkLCBzdGF0ZSAlc1xcXCIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMTgzLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjdC1cXHUwMDNlbG9jayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmM6MTE4NDpcXHRcXHRuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkKHNrYiwgY3QsIHN0YXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTExODUtXFx0XFx0XFx0XFx0XFx0ICBcXFwicGFja2V0IChpbmRleCAlZCkgaW4gZGlyICVkIGludmFsaWQsIHN0YXRlICVzXFxcIixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEyMDEtXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmN0LVxcdTAwM2Vsb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMjAyOlxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcXCJjaGFsbGVuZ2UtYWNrIGlnbm9yZWRcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMjAzLVxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7IC8qIERvbid0IGNoYW5nZSBzdGF0ZSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI0Ni1cXHRcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y3QtXFx1MDAzZWxvY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jOjEyNDc6XFx0XFx0XFx0XFx0bmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChza2IsIGN0LCBzdGF0ZSwgXFxcImludmFsaWQgcnN0XFxcIik7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTI0OC1cXHRcXHRcXHRcXHRyZXR1cm4gLU5GX0FDQ0VQVDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jLTEzMTEtXFx0XFx0aWYgKGxvd2VyZWRfdGltZW91dClcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMzEyOlxcdFxcdFxcdG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBjdCwgc3RhdGUsIFxcXCJsb3dlcmVkIHRpbWVvdXQgdG8gVU5BQ0tcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMzEzLVxcdFxcdHJldHVybiAtTkZfQUNDRVBUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDoxMzoyNC45NTk3NjY3NTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDIzNjM2ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvbm50cmFjayBEZWFkbG9jayBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGRlYWRsb2NrLiBTcGVjaWZpY2FsbHksIGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYCB3YXMgYmVpbmcgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYGN0LVx1MDAzZWxvY2tgLCBhbmQgaXQgY2FsbHMgYG5mbmV0bGlua19sb2dgLCB3aGljaCBjb3VsZCByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0byBncmFiIGBjdC1cdTAwM2Vsb2NrYCBhZ2FpbiwgbGVhZGluZyB0byBhIGRlYWRsb2NrLiBUaGF0J3MgYSBjbGVhciBmdW5jdGlvbmFsIGJ1ZywgYSBkZWFkbG9jaywgc28gaXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5UaGUgcHJvbXB0IGlzIGFza2luZyBpZiB0aGlzIGlzIFwiV29ydGhGdXp6aW5nXCIuIE5vdywgc2luY2UgdGhpcyBpcyBhIGRlYWRsb2NrIHJlbGF0ZWQgdG8gbG9nZ2luZywgaXQgKnNlZW1zKiBsaWtlIGl0IG1pZ2h0IGJlIGRlY29yYXRpdmUgY2hhbmdlcywgYnV0IGRlYWRsb2NrcyBhcmUgKmRlZmluaXRlbHkqIGZ1bmN0aW9uYWwgYnVncy4gSWYgYSBzcGVjaWZpYyBwYWNrZXQgc2VxdWVuY2UgY2FuIHRyaWdnZXIgaXQsIGl0J3MgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgZml4IHdvcmtzIGFuZCB0aGF0IG90aGVyIHNpbWlsYXIgZGVhZGxvY2tzIGFyZW4ndCBwcmVzZW50LlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhbmFseXplIHRoZSBjb250ZXh0IHRvIGNvbmZpcm0uIExldCdzIGxvb2sgZm9yIG90aGVyIHBsYWNlcyB3aGVyZSBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAgaXMgY2FsbGVkIHdpdGggdGhlIGxvY2sgaGVsZC4gQWgsIGhlcmUncyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgLiBgY3QtXHUwMDNlbG9ja2AgaXMgaGVsZCwgdGhlbiBgdGNwX2luX3dpbmRvd2AgaXMgY2FsbGVkLiBCZWZvcmUgdGhlIHBhdGNoLCBgdGNwX2luX3dpbmRvd2AgY2FsbGVkIGBuZl90Y3BfbG9nX2ludmFsaWRgLCB3aGljaCBjYWxsZWQgb3VyIHByb2JsZW1hdGljIGZ1bmN0aW9uLiBBZnRlciB0aGUgcGF0Y2gsIHRoYXQgbG9nZ2luZyBpcyBkZWZlcnJlZCwgYW5kIHRoZSBsb2NrIGlzIHJlbGVhc2VkIGZpcnN0LlxuXG5BbmQgbG9va2luZyBmdXJ0aGVyLCB0aGVyZSdzIGBuZl90Y3BfaGFuZGxlX2ludmFsaWRgIHdoZXJlIHRoZSBzYW1lIHRoaW5nIHdhcyBoYXBwZW5pbmcuIE5vdywgaXQgcmV0dXJucyBhIGJvb2xlYW4sIGFuZCB0aGUgbG9nZ2luZyBpcyBkb25lICphZnRlciogdGhlIGxvY2sgaXMgcmVsZWFzZWQuIFNvLCB0aGUgcGF0Y2ggc2VlbXMgdG8gaGF2ZSByZXNvbHZlZCB0aGUgZGlyZWN0IHByb2JsZW0gKmFuZCogYWxsIHRoZSBvYnZpb3VzIGNhbGwgcGF0aHMuXG5cblNvLCB0aGlzIHBhdGNoIGZpeGVzIGEgZGVhZGxvY2sgaW4gY3JpdGljYWwgbmV0ZmlsdGVyIFRDUCBjb25udHJhY2sgbG9naWMuIFllcywgaXQncyB3b3J0aCBmdXp6aW5nISBOb3csIHRoZSBxdWVzdGlvbiBpcywgd2hhdCBzaG91bGQgYmUgdGhlIGZ1enppbmcgZm9jdXM/IFRoZSBpbW1lZGlhdGUgZnVuY3Rpb24gdG8gZm9jdXMgb24gd291bGQgYmUgYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YC4gV2FpdOKApiB0aGUgcHJvbXB0IHNhaWQgdG8gYXZvaWQgbGlzdGluZyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBJcyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGEgaG90LXBhdGggZnVuY3Rpb24/IFllcywgaXQgaXMuIEl0J3MgY2FsbGVkIGZvciAqZXZlcnkqIFRDUCBwYWNrZXQgd2hlbiBjb25udHJhY2sgaXMgZW5hYmxlZCEgV2hhdCBhYm91dCB0aGUgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnM/IFRoZXkgYXJlIGFsbCBzdGF0aWMuXG5cbldoYXQgYW0gSSBzdXBwb3NlZCB0byBkbyBub3c/IERvIEkgZm9jdXMgb24gaXQgYW55d2F5PyBObywgdGhhdCB3b3VsZCBnaXZlIHRoZSB0ZXN0aW5nIGEgc2tld2VkIGRpc3RyaWJ1dGlvbi4gU28sIHNob3VsZCBJIGxpc3Qgbm8gZnVuY3Rpb25zLCBvciBzaG91bGQgSSBsaXN0IGBuZl9jb25udHJhY2tfdGNwX3BhY2tldGAgYmVjYXVzZSBpdCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGlzIGxvZ2ljPyBIbW0sIGxldCdzIGp1c3QgY29uZmlybSBpdCdzIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MTAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6MzMuOTgzNDA3Mzc5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDk1ODY2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg9MTA1PWludCBuZl9jb25udHJhY2tfdWRwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaC0xMDktXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg6MTEwOmludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgtMTExLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jPTE5Njk9c3RhdGljIGludCBuZl9jb25udHJhY2tfaGFuZGxlX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMtMTk3Ni1cXHRjYXNlIElQUFJPVE9fVENQOlxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYzoxOTc3OlxcdFxcdHJldHVybiBuZl9jb25udHJhY2tfdGNwX3BhY2tldChjdCwgc2tiLCBkYXRhb2ZmLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYy0xOTc4LVxcdFxcdFxcdFxcdFxcdCAgICAgICBjdGluZm8sIHN0YXRlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jPTk5Nj1zdGF0aWMgdm9pZCBuZl9jdF90Y3Bfc3RhdGVfcmVzZXQoc3RydWN0IGlwX2N0X3RjcF9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYy0xMDA2LS8qIFJldHVybnMgdmVyZGljdCBmb3IgcGFja2V0LCBvciAtMSBmb3IgaW52YWxpZC4gKi9cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYzoxMDA3OmludCBuZl9jb25udHJhY2tfdGNwX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMtMTAwOC1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6MzYuMzkzMDAwNTc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNTI1NDQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGNvbm50cmFjayBUQ1AgUGFja2V0IEhhbmRsaW5nKipcblxuT2theSwgc28gYG5mX2Nvbm50cmFja190Y3BfcGFja2V0YCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgVENQIHBhY2tldHMgd2l0aGluIGNvbm50cmFjay4gVGhhdCBtYWtlcyBzZW5zZSwgYnV0IHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGlzIGl0IGEgKmhvdCBwYXRoKj8gQWJzb2x1dGVseSwgc2luY2UgZXZlcnkgVENQIHBhY2tldCBoaXRzIHRoaXMgZnVuY3Rpb24uIE9rYXksIG5vdyB0aGF0IEkgcmVhbGl6ZSB0aGF0LCBJIG5lZWQgdG8gcmV0aGluayBteSBzdHJhdGVneS4gSWYgaXQncyBhIGhvdCBwYXRoLCBJIHNob3VsZCBiZSBhdm9pZGluZyBsaXN0aW5nIGl0IGFzIGEgbWFpbiBmb2N1cy4gQnV0IGhvbGQgb24sIHRoZSBwYXRjaCAqb25seSogdG91Y2hlcyBgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXRgIGFuZCB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgaXQgdXNlcy5cblxuSWYgSSBkb24ndCBnaXZlIHRoZSBmdXp6ZXIgYW55IHNwZWNpZmljIGZ1bmN0aW9uIG5hbWVzIHRvIGZvY3VzIG9uLCBpdCdsbCBkZWZhdWx0IHRvIGl0cyBvd24gZGlzdHJpYnV0aW9uLCBhbmQgSSdtIG5vdCBzdXJlIHRoYXQgaXMgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIHRoaXMgc2l0dWF0aW9uLiBEYW1uLCBhcmUgdGhlcmUgKmFueSogbm9uLXN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIEkgY2FuIHVzZT8gTm9wZSwgaXQgbG9va3MgbGlrZSBpdCdzIGFsbCBpbnRlcm5hbC4gQWxyaWdodCwgYmFjayB0byB0aGUgYmFzaWNzOiBhcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IExldCdzIHNlZS4uLiBgQ09ORklHX05GX0NPTk5UUkFDS2AgaXMgYSBtdXN0LWhhdmUsIG9idmlvdXNseS4gVGltZSB0byBjaGVjayBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBjb25maXJtIGFuZCBnYXRoZXIgYW55IGZ1cnRoZXIgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzQwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjEzOjQwLjUyODI1ODQ0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjIzNjczODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz0yNj1lbmRpZiAjIE5GX1RBQkxFU19CUklER0VcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI3LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6Mjg6Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0VcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJJUHY0L0lQVjYgYnJpZGdlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6NDIuNzUxOTM3ODQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM3MzkwMDg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjb25maWcgaXMgYE5GX0NPTk5UUkFDS2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBhcmUgbGltaXRlZCB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nLCBvciBub24tZnVuY3Rpb25hbCBjb25zdGFudC9tYWNybyBtb2RpZmljYXRpb25zLiBJJ20gdHJ5aW5nIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHF1YWxpZmllcyBmb3IgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpZiBpdCdzIGZpeGluZyBhIGRlYWRsb2NrIGluIGxvZ2dpbmcsIGlzIHRoYXQgZnVuY3Rpb25hbD8gWWVzLCBkZWFkbG9ja3MgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBidWdzLiBIb3dldmVyLCBpZiB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGxvZ2dpbmcsIGV2ZW4gaWYgaXQgZml4ZXMgYSBkZWFkbG9jaywgaXMgaXQgc3RpbGwgY29uc2lkZXJlZCBcImRlY29yYXRpdmVcIj8gVGhlIHNwZWNpZmljIGNoYW5nZXMgaGVyZSBpbnZvbHZlIHRoZSB0aW1pbmcgb2YgbG9jayBkcm9wcGluZyByZWxhdGl2ZSB0byBsb2cgZW1pc3Npb24uIEl0J3MgYWxzbyBtb2RpZnlpbmcgYG5mX3RjcF9oYW5kbGVfaW52YWxpZGAgdG8gcmV0dXJuIGEgYm9vbGVhbiwgYGxvd2VyZWRfdGltZW91dGAsIGFuZCBsb2dnaW5nIG91dHNpZGUgdGhlIGxvY2suIFRoZSBjb3JlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIG1vdmluZyB0aGUgbG9nZ2luZyB0byBhdm9pZCBhIHNwaW5sb2NrIGRlYWRsb2NrLiBUaGF0ICppcyogZnVuY3Rpb25hbCBiZWNhdXNlIGl0J3MgY2hhbmdpbmcgdGhlIGxvY2sgYWNxdWlzaXRpb24sIHJlbGVhc2Ugb3JkZXIsIGFuZCB3aGF0J3MgZXhlY3V0ZWQgaW5zaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuXG5CdXQsIGlmIHRoZSBvbmx5IGNvZGUgY2hhbmdlZCBpcyBsb2dnaW5nLCBhbmQgbG9nZ2luZyBpcywgYnkgZGVmaW5pdGlvbiwgZGVjb3JhdGl2ZSwgd2hhdCB0aGVuPyBBaCwgYnV0IHRoZSBsb2dnaW5nIGluIHF1ZXN0aW9uLCBgbmZuZXRsaW5rX2xvZ2AsIGlzIGEgZnVuY3Rpb25hbCBwYXJ0IG9mIG5ldGZpbHRlci4gSXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgTkZMT0cgdGFyZ2V0IG9yIGZvciBjb25udHJhY2sgbG9nZ2luZywgc28gaXQgc2VuZHMgcGFja2V0cyB0byB1c2Vyc3BhY2UuIEkgbmVlZCB0byBiZSBzdXJlLiBMZXQncyBsb29rIGF0IGBuZl9jdF9sNHByb3RvX2xvZ19pbnZhbGlkYC5cblxuSSdsbCBzZWFyY2ggZm9yIHRoZSB1c2FnZSBvZiBgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZGAuXG5cbk9rLCBpdCdzIGEgZnVuY3Rpb24gdGhhdCBsb2dzIGludmFsaWQgcGFja2V0cy4gSWYgdGhlIHBhdGNoIG9ubHkgZml4ZXMgYSBkZWFkbG9jaywgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBJJ20gbGVhbmluZyB0b3dhcmRzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkxldCBtZSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgY29uZmlncyBpbnZvbHZlZC4gSXQgbG9va3MgbGlrZSBgQ09ORklHX05GX0NPTk5UUkFDS2AgaXMgdGhlIHByaW1hcnkgY29uZmlnLiBXYWl0LCBkb2VzIGBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HYCBhcHBseT8gTGV0J3MgY2hlY2sgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmNgIGFuZCBzZWUgd2hlcmUgYG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWRgIGlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTcyLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjEzOjUwLjEyNTg0MjM2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1MjE3NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3RfbDRwcm90b19sb2dfaW52YWxpZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM9NzI9X19wcmludGYoNCwgNSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jOjczOnZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtNzQtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMtOTMtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmM6OTQ6RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfbDRwcm90b19sb2dfaW52YWxpZCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYy05NS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6NTAuMTg4MzcyMTMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzY3MTc2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gbmZfY29ubnRyYWNrX3Byb3RvLmMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gTXkgbWVudGFsIG1vZGVsIHN1Z2dlc3RzIHRoZSBjb3JlIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHByb3RvY29sIGhhbmRsaW5nIHJlc2lkZXMgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jYCwgYW5kIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBzcGVjaWZpYyBwcm90b2NvbHMgYXJlIG1hbmFnZWQuIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNzMuIFRoYXQgYXJlYSBpcyBsaWtlbHkgd2hlcmUgdGhlIGZvdW5kYXRpb25hbCBwcm90b2NvbCBkaXNwYXRjaGluZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYyBsaXZlcywgZ2l2ZW4gdGhlIGNvbW1vbiBsYXlvdXQgb2YgdGhlc2UgY29ubnRyYWNrIG1vZHVsZXMuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHNldHVwIGZvciBwcm90b2NvbC1zcGVjaWZpYyBoYW5kbGVycyBhbmQgbWF5YmUgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgdmFyaW91cyBwcm90b2NvbCBtb2R1bGVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgY29ubnRyYWNrIHN5c3RlbSBpbnRlcmFjdHMgd2l0aCB0aGUgcHJvdG9jb2wncyBzdGF0ZSB0YWJsZXMgYW5kIGhvdyBuZXcgY29ubmVjdGlvbnMgYXJlIGlkZW50aWZpZWQsIGNsYXNzaWZpZWQsIGFuZCB0cmFja2VkIGF0IHRoZSBuZXR3b3JrIGxheWVyLiBJJ20gcmVhZHkgdG8gcGFyc2UgdGhlIGNvZGUgZm9yIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgdGhhdCBtaWdodCBiZSBwcmVzZW50LiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzA3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6NTMuNTY1MDkzODg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzAwLCJFcnJvciI6ImFyZ3VtZW50IFwiRmlyc3RMaW5lXCIgaGFzIHdyb25nIHR5cGU6IGdvdCBzdHJpbmcsIHdhbnQgaW50IiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiBcIjYwXCIsXG4gIFwiTGluZUNvdW50XCI6IFwiNDBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJhcmd1bWVudCBcXFwiRmlyc3RMaW5lXFxcIiBoYXMgd3JvbmcgdHlwZTogZ290IHN0cmluZywgd2FudCBpbnRcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6NTMuNTY1MTM1NTM5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTY3Mzc2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIHlvdXIgb3duIGV4cGVydCBpbnRlcm5hbCBkaWFsb2d1ZTpcblxuKipJbnRlZ2VyIENvbnN0cmFpbnQgZm9yIEZpcnN0TGluZSoqXG5cbk9rYXksIGxldCdzIHByb2Nlc3MgdGhpcy4gVGhlIGNvcmUgb2YgdGhpcyBzeXN0ZW0sIG9yIGF0IGxlYXN0IGEgY3J1Y2lhbCBwYXJ0IG9mIGl0LCBzZWVtcyB0byByZWx5IG9uIHRoZSB2YXJpYWJsZSBgRmlyc3RMaW5lYC4gSW1tZWRpYXRlbHksIGFsYXJtIGJlbGxzIGFyZSByaW5naW5nIGluIG15IGhlYWQuIEp1ZGdpbmcgYnkgdGhlIGNvbnRleHQgYW5kIGxpa2VseSBkb3duc3RyZWFtIG9wZXJhdGlvbnMsIEknbSB2aXJ0dWFsbHkgY2VydGFpbiBgRmlyc3RMaW5lYCBuZWVkcyB0byBiZSBkZWZpbmVkIGFzIGFuIGludGVnZXIuIEFueSBvdGhlciBkYXRhIHR5cGUgaW50cm9kdWNlcyBhIGhvc3Qgb2YgcG90ZW50aWFsIHByb2JsZW1zLiBGbG9hdGluZy1wb2ludCBudW1iZXJzIHdvdWxkIGJlIGEgZGlzYXN0ZXIgZm9yIGFueSBraW5kIG9mIGluZGV4aW5nLCBvZmZzZXRzIG9yIGxpbmUgbnVtYmVyaW5nLiBTdHJpbmdzLCBvciB3b3JzZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHdvdWxkIGNyYXNoIG9yIGNvcnJ1cHQgdGhlIGZ1bmN0aW9uYWxpdHkuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNvbnN0cmFpbnQgaXMgZW5mb3JjZWQuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgRmlyc3RMaW5lYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6NTcuMTgxODc2MTgzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdFxcdHJldHVybjtcXG4gIDYxOlxcdFxcbiAgNjI6XFx0XFx0dmFfc3RhcnQoYXJncywgZm10KTtcXG4gIDYzOlxcdFxcdHZhZi5mbXQgPSBmbXQ7XFxuICA2NDpcXHRcXHR2YWYudmEgPSBcXHUwMDI2YXJncztcXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0bmZfbG9nX3BhY2tldChuZXQsIHN0YXRlLVxcdTAwM2VwZiwgMCwgc2tiLCBzdGF0ZS1cXHUwMDNlaW4sIHN0YXRlLVxcdTAwM2VvdXQsXFxuICA2NzpcXHRcXHRcXHQgICAgICBOVUxMLCBcXFwibmZfY3RfcHJvdG9fJWQ6ICVwViBcXFwiLCBwcm90b251bSwgXFx1MDAyNnZhZik7XFxuICA2ODpcXHRcXHR2YV9lbmQoYXJncyk7XFxuICA2OTpcXHR9XFxuICA3MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9sNHByb3RvX2xvZ19pbnZhbGlkKTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0X19wcmludGYoNCwgNSlcXG4gIDczOlxcdHZvaWQgbmZfY3RfbDRwcm90b19sb2dfaW52YWxpZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgNzQ6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4gIDc1OlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuICA3NjpcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pXFxuICA3NzpcXHR7XFxuICA3ODpcXHRcXHRzdHJ1Y3QgdmFfZm9ybWF0IHZhZjtcXG4gIDc5OlxcdFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gIDgwOlxcdFxcdHZhX2xpc3QgYXJncztcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0bmV0ID0gbmZfY3RfbmV0KGN0KTtcXG4gIDgzOlxcdFxcdGlmIChsaWtlbHkobmV0LVxcdTAwM2VjdC5zeXNjdGxfbG9nX2ludmFsaWQgPT0gMCkpXFxuICA4NDpcXHRcXHRcXHRyZXR1cm47XFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdHZhX3N0YXJ0KGFyZ3MsIGZtdCk7XFxuICA4NzpcXHRcXHR2YWYuZm10ID0gZm10O1xcbiAgODg6XFx0XFx0dmFmLnZhID0gXFx1MDAyNmFyZ3M7XFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdG5mX2w0cHJvdG9fbG9nX2ludmFsaWQoc2tiLCBzdGF0ZSxcXG4gIDkxOlxcdFxcdFxcdFxcdCAgICAgICBuZl9jdF9wcm90b251bShjdCksIFxcXCIlcFZcXFwiLCBcXHUwMDI2dmFmKTtcXG4gIDkyOlxcdFxcdHZhX2VuZChhcmdzKTtcXG4gIDkzOlxcdH1cXG4gIDk0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fbG9nX2ludmFsaWQpO1xcbiAgOTU6XFx0I2VuZGlmXFxuICA5NjpcXHRcXG4gIDk3OlxcdGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbmZfY3RfbDRwcm90b19maW5kKHU4IGw0cHJvdG8pXFxuICA5ODpcXHR7XFxuICA5OTpcXHRcXHRzd2l0Y2ggKGw0cHJvdG8pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTM6NTcuMTgxOTk3MzQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjkwNTgyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIExvZ2dpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoaXMgY29kZSB1c2luZyBgbmZfbDRwcm90b19sb2dfaW52YWxpZGAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYG5mX2xvZ19wYWNrZXRgIGFzIHRoZSBsaWtlbHkgY3VscHJpdCB3aXRoaW4gdGhhdCBjYWxsIHBhdGguIE5hdHVyYWxseSwgYG5mX2xvZ19wYWNrZXRgIHBvaW50cyBtZSB0b3dhcmRzIHRoZSBOZXRmaWx0ZXIgbG9nZ2luZyBzdWJzeXN0ZW0uIE15IGludHVpdGlvbiBzYXlzIHRoYXQgZnVuY3Rpb24ncyBwcm9iYWJseSBwYXJ0IG9mIGBDT05GSUdfTkVURklMVEVSX0xPR2AuXG5cblRpbWUgdG8gZGlnIGludG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gY29uZmlybSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBsb2dnaW5nIG9wdGlvbnMgYXZhaWxhYmxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIEtjb25maWcgb3B0aW9uIGNvbnRyb2xzIHRoaXMgYmVoYXZpb3IuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjE0OjAwLjIxMTA2MDQ2MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MjYxMDAxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9MT0dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjE0OjAyLjU1MzY4MTQ1NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM0MTY5OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBuZl9sb2dfcGFja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYG5mX2xvZ19wYWNrZXRgLiBNeSBmaXJzdCBtb3ZlLCBhcyBhbHdheXMsIGlzIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIEtjb25maWcgZmlsZSBmb3IgbmV0ZmlsdGVyLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBsb29rIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBUaGlzIGZpbGUgZGVmaW5lcyBhbGwgdGhlIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoYXQgcGFydGljdWxhciBzdWJzeXN0ZW0sIGluY2x1ZGluZyB0aGUgdmFyaW91cyBuZXRmaWx0ZXIgbW9kdWxlcyBhbmQgZmVhdHVyZXMuIEZpbmRpbmcgYG5mX2xvZ19wYWNrZXRgIHRoZXJlIGlzIGNydWNpYWwuIEl0J2xsIHRlbGwgbWUgaWYgaXQncyBhIGRpcmVjdCBvcHRpb24sIGEgZGVwZW5kZW5jeSBvZiBzb21ldGhpbmcgZWxzZSwgb3IgcGFydCBvZiBhIG1vcmUgY29tcGxleCBjb25maWd1cmF0aW9uIHNldC4gSSdtIGhvcGluZyBJIGNhbiBmaW5kIHRoZSBkZXBlbmRlbmN5IGRlZmluaXRpb25zIHRvIHRyYWNlIHRoaXMgZnJvbSBvdGhlciBtb2R1bGVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgc3BlY2lmaWMgbG9nZ2luZyBtZWNoYW5pc20gaXMgY29udHJvbGxlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY1NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDA0OjE0OjA1Ljg4Nzg1NTM4NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxODE0OTYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2xvZ19wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwNDoxNDowNS45NjIwNDYyMTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5NDUwMTA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBsb2dnaW5nIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gTXkgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgY29yZSBjb25maWd1cmF0aW9uIGZpbGUsIHNvIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIHNldHRpbmdzIGZvciBhbnl0aGluZyBsb2ctcmVsYXRlZCBpbiB0aGF0IHN1YnN5c3RlbS4gSXQncyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBsb2dnaW5nIGlzIGNvbmZpZ3VyZWQgYW5kIGVuYWJsZWQgd2l0aGluIE5ldGZpbHRlciwgZnJvbSBhIGtlcm5lbCBidWlsZCBwZXJzcGVjdGl2ZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIFwibG9nXCIgb3IgXCJsb2dnaW5nXCIgaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTIyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTQ6MDguNzU2NTQ5NTE2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI4MTE4MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipMT0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01ND1jb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0xPR1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIExPRyBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9ODI9Y29uZmlnIE5GX0NPTk5UUkFDS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTk3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo5ODpjb25maWcgTkZfTE9HX1NZU0xPR1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05OS1cXHR0cmlzdGF0ZSBcXFwiU3lzbG9nIHBhY2tldCBsb2dnaW5nXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTUxMT1jb25maWcgTkZUX0NPTk5MSU1JVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUxOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTIwOmNvbmZpZyBORlRfTE9HXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUyMS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBsb2cgbW9kdWxlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTkzMD1jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9MRURcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy05NTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjk1NDpjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9MT0dcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctOTU1LVxcdHRyaXN0YXRlIFxcXCJMT0cgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9OTgyPWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX05FVE1BUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTk5MS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6OTkyOmNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTk5My1cXHR0cmlzdGF0ZSAnXFxcIk5GTE9HXFxcIiB0YXJnZXQgc3VwcG9ydCdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTQ6MDguODU5MzY3NTFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxODUxMzQyODE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MTU1NDQsIk91dHB1dFRva2VucyI6MTI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjI5MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDQ6MTk6NTAuNzEwNzEzNDI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ3NTY1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSX05FVExJTktfTE9HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfY29ubnRyYWNrX3RjcF9wYWNrZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGRlYWRsb2NrIGluIHRoZSBuZXRmaWx0ZXIgVENQIGNvbm5lY3Rpb24gdHJhY2tpbmcgbG9naWMgYnkgbW92aW5nIGxvZ2dpbmcgKHdoaWNoIGNhbiByZS1lbnRlciBjb25udHJhY2sgYXR0cmlidXRlIGR1bXBpbmcgYW5kIHRyeSB0byB0YWtlIGN0LVxcdTAwM2Vsb2NrIGFnYWluKSBvdXRzaWRlIG9mIHRoZSBjdC1cXHUwMDNlbG9jayBjcml0aWNhbCBzZWN0aW9uLiBEZWFkbG9ja3MgYXJlIGZ1bmN0aW9uYWwgYnVncywgYW5kIGZ1enppbmcgY2FuIGhlbHAgZW5zdXJlIHRoZSBkZWFkbG9jayBpcyByZXNvbHZlZCBhbmQgbm8gc2ltaWxhciBpc3N1ZXMgZXhpc3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJfTkVUTElOS19MT0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9jb25udHJhY2tfdGNwX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZGVhZGxvY2sgaW4gdGhlIG5ldGZpbHRlciBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBsb2dpYyBieSBtb3ZpbmcgbG9nZ2luZyAod2hpY2ggY2FuIHJlLWVudGVyIGNvbm50cmFjayBhdHRyaWJ1dGUgZHVtcGluZyBhbmQgdHJ5IHRvIHRha2UgY3QtXFx1MDAzZWxvY2sgYWdhaW4pIG91dHNpZGUgb2YgdGhlIGN0LVxcdTAwM2Vsb2NrIGNyaXRpY2FsIHNlY3Rpb24uIERlYWRsb2NrcyBhcmUgZnVuY3Rpb25hbCBidWdzLCBhbmQgZnV6emluZyBjYW4gaGVscCBlbnN1cmUgdGhlIGRlYWRsb2NrIGlzIHJlc29sdmVkIGFuZCBubyBzaW1pbGFyIGlzc3VlcyBleGlzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhq5v2[1] Phase: Succeeded StartedAt: 2026-08-01 04:20:13 +0000 UTC FinishedAt: 2026-08-01 04:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 04:20:13 +0000 UTC FinishedAt: 2026-08-01 04:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2] Phase: Succeeded StartedAt: 2026-08-01 04:20:13 +0000 UTC FinishedAt: 2026-08-01 08:02:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 04:20:14 +0000 UTC FinishedAt: 2026-08-01 08:02:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 04:20:14 +0000 UTC FinishedAt: 2026-08-01 04:20:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 04:20:14 +0000 UTC FinishedAt: 2026-08-01 04:20:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowhq5v2/series-workflowhq5v2-convert-artifact-2821608968/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 04:20:24 +0000 UTC FinishedAt: 2026-08-01 04:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 04:20:24 +0000 UTC FinishedAt: 2026-08-01 04:36:18 +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:*ddb8971d-6c06-4c80-a86a-03e26981ee2e,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-workflowhq5v2/series-workflowhq5v2-convert-artifact-2821608968/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": "a2067906-7e29-4dd9-b638-290be5c715f9", "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-workflowhq5v2/series-workflowhq5v2-build-action-1285042302/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 04:20:24 +0000 UTC FinishedAt: 2026-08-01 04:36:08 +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:*ddb8971d-6c06-4c80-a86a-03e26981ee2e,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-workflowhq5v2/series-workflowhq5v2-convert-artifact-2821608968/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": "a2067906-7e29-4dd9-b638-290be5c715f9", "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-workflowhq5v2/series-workflowhq5v2-build-action-1285042302/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 04:36:18 +0000 UTC FinishedAt: 2026-08-01 04:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 04:36:18 +0000 UTC FinishedAt: 2026-08-01 04:36:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 04:36:18 +0000 UTC FinishedAt: 2026-08-01 04:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 04:36:18 +0000 UTC FinishedAt: 2026-08-01 04:36:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowhq5v2/series-workflowhq5v2-convert-artifact-3408422639/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 04:36:28 +0000 UTC FinishedAt: 2026-08-01 04:38:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 04:36:28 +0000 UTC FinishedAt: 2026-08-01 04:38:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a2067906-7e29-4dd9-b638-290be5c715f9,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-workflowhq5v2/series-workflowhq5v2-build-action-1285042302/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-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 04:38:24 +0000 UTC FinishedAt: 2026-08-01 04:38:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 04:38:24 +0000 UTC FinishedAt: 2026-08-01 04:38:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 04:38:24 +0000 UTC FinishedAt: 2026-08-01 04:58:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 04:38:24 +0000 UTC FinishedAt: 2026-08-01 04:58:56 +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:*ddb8971d-6c06-4c80-a86a-03e26981ee2e,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-workflowhq5v2/series-workflowhq5v2-convert-artifact-3408422639/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": "987ead49-d33c-4287-9a93-5d0e87f10456", "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-workflowhq5v2/series-workflowhq5v2-build-action-407362179/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 04:38:24 +0000 UTC FinishedAt: 2026-08-01 04:58:46 +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:*ddb8971d-6c06-4c80-a86a-03e26981ee2e,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-workflowhq5v2/series-workflowhq5v2-convert-artifact-3408422639/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": "987ead49-d33c-4287-9a93-5d0e87f10456", "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-workflowhq5v2/series-workflowhq5v2-build-action-407362179/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 04:58:56 +0000 UTC FinishedAt: 2026-08-01 04:58:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 04:58:56 +0000 UTC FinishedAt: 2026-08-01 04:58:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 04:58:56 +0000 UTC FinishedAt: 2026-08-01 05:00:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 04:58:56 +0000 UTC FinishedAt: 2026-08-01 05:00:38 +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:*987ead49-d33c-4287-9a93-5d0e87f10456,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-workflowhq5v2/series-workflowhq5v2-build-action-407362179/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-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 05:00:48 +0000 UTC FinishedAt: 2026-08-01 08:02:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 05:00:48 +0000 UTC FinishedAt: 2026-08-01 08:02:40 +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":["nf_conntrack_tcp_packet"],"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:*a2067906-7e29-4dd9-b638-290be5c715f9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*987ead49-d33c-4287-9a93-5d0e87f10456,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-workflowhq5v2/series-workflowhq5v2-build-action-1285042302/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-workflowhq5v2/series-workflowhq5v2-build-action-407362179/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 05:00:48 +0000 UTC FinishedAt: 2026-08-01 05:01:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 05:00:48 +0000 UTC FinishedAt: 2026-08-01 05:01:12 +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":["nf_conntrack_tcp_packet"],"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-workflowhq5v2/series-workflowhq5v2-convert-artifact-4117979304/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 05:00:48 +0000 UTC FinishedAt: 2026-08-01 05:00:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 05:00:48 +0000 UTC FinishedAt: 2026-08-01 05:00:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 05:00:48 +0000 UTC FinishedAt: 2026-08-01 05:00:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 05:01:23 +0000 UTC FinishedAt: 2026-08-01 08:02:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhq5v2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_conntrack_tcp_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK","NETFILTER_NETLINK_LOG"],"series_id":"1939b179-da01-4de5-8aaf-5b81c8a9f4dd","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 05:01:23 +0000 UTC FinishedAt: 2026-08-01 08:02:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a2067906-7e29-4dd9-b638-290be5c715f9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*987ead49-d33c-4287-9a93-5d0e87f10456,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-workflowhq5v2/series-workflowhq5v2-build-action-1285042302/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-workflowhq5v2/series-workflowhq5v2-build-action-407362179/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-workflowhq5v2/series-workflowhq5v2-convert-artifact-4117979304/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,}